]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Nov 2014 18:29:46 +0000 (10:29 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Nov 2014 18:29:46 +0000 (10:29 -0800)
added patches:
revert-drivers-net-disable-ufo-through-virtio.patch

queue-3.14/revert-drivers-net-disable-ufo-through-virtio.patch [new file with mode: 0644]
queue-3.14/series [new file with mode: 0644]
queue-3.17/series [new file with mode: 0644]

diff --git a/queue-3.14/revert-drivers-net-disable-ufo-through-virtio.patch b/queue-3.14/revert-drivers-net-disable-ufo-through-virtio.patch
new file mode 100644 (file)
index 0000000..92a3ded
--- /dev/null
@@ -0,0 +1,211 @@
+From foo@baz Fri Nov 14 10:25:11 PST 2014
+Date: Fri, 14 Nov 2014 10:25:11 -0800
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: Revert "drivers/net: Disable UFO through virtio"
+
+This reverts commit 2b52d6c6beda6308ba95024a1eba1dfc9515ba32 which was
+commit 3d0ad09412ffe00c9afa201d01effdb6023d09b4 upstream.
+
+Ben writes:
+
+       Please drop this patch for 3.14 and 3.17.  It causes problems
+       for migration of VMs and we're probably going to revert part of
+       this.  The following patch ("drivers/net, ipv6: Select IPv6
+       fragment idents for virtio UFO packets") might no longer apply,
+       in which case you can drop that as well until we have this
+       sorted out upstream.
+
+Cc: Ben Hutchings <ben@decadent.org.uk>
+Cc: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/macvtap.c    |   13 ++++++++-----
+ drivers/net/tun.c        |   19 ++++++++-----------
+ drivers/net/virtio_net.c |   24 ++++++++++--------------
+ 3 files changed, 26 insertions(+), 30 deletions(-)
+
+--- a/drivers/net/macvtap.c
++++ b/drivers/net/macvtap.c
+@@ -66,7 +66,7 @@ static struct cdev macvtap_cdev;
+ static const struct proto_ops macvtap_socket_ops;
+ #define TUN_OFFLOADS (NETIF_F_HW_CSUM | NETIF_F_TSO_ECN | NETIF_F_TSO | \
+-                    NETIF_F_TSO6)
++                    NETIF_F_TSO6 | NETIF_F_UFO)
+ #define RX_OFFLOADS (NETIF_F_GRO | NETIF_F_LRO)
+ #define TAP_FEATURES (NETIF_F_GSO | NETIF_F_SG)
+@@ -570,8 +570,6 @@ static int macvtap_skb_from_vnet_hdr(str
+                       gso_type = SKB_GSO_TCPV6;
+                       break;
+               case VIRTIO_NET_HDR_GSO_UDP:
+-                      pr_warn_once("macvtap: %s: using disabled UFO feature; please fix this program\n",
+-                                   current->comm);
+                       gso_type = SKB_GSO_UDP;
+                       if (skb->protocol == htons(ETH_P_IPV6))
+                               ipv6_proxy_select_ident(skb);
+@@ -619,6 +617,8 @@ static void macvtap_skb_to_vnet_hdr(cons
+                       vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
+               else if (sinfo->gso_type & SKB_GSO_TCPV6)
+                       vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
++              else if (sinfo->gso_type & SKB_GSO_UDP)
++                      vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_UDP;
+               else
+                       BUG();
+               if (sinfo->gso_type & SKB_GSO_TCP_ECN)
+@@ -953,6 +953,9 @@ static int set_offload(struct macvtap_qu
+                       if (arg & TUN_F_TSO6)
+                               feature_mask |= NETIF_F_TSO6;
+               }
++
++              if (arg & TUN_F_UFO)
++                      feature_mask |= NETIF_F_UFO;
+       }
+       /* tun/tap driver inverts the usage for TSO offloads, where
+@@ -963,7 +966,7 @@ static int set_offload(struct macvtap_qu
+        * When user space turns off TSO, we turn off GSO/LRO so that
+        * user-space will not receive TSO frames.
+        */
+-      if (feature_mask & (NETIF_F_TSO | NETIF_F_TSO6))
++      if (feature_mask & (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_UFO))
+               features |= RX_OFFLOADS;
+       else
+               features &= ~RX_OFFLOADS;
+@@ -1064,7 +1067,7 @@ static long macvtap_ioctl(struct file *f
+       case TUNSETOFFLOAD:
+               /* let the user check for future flags */
+               if (arg & ~(TUN_F_CSUM | TUN_F_TSO4 | TUN_F_TSO6 |
+-                          TUN_F_TSO_ECN))
++                          TUN_F_TSO_ECN | TUN_F_UFO))
+                       return -EINVAL;
+               rtnl_lock();
+--- a/drivers/net/tun.c
++++ b/drivers/net/tun.c
+@@ -175,7 +175,7 @@ struct tun_struct {
+       struct net_device       *dev;
+       netdev_features_t       set_features;
+ #define TUN_USER_FEATURES (NETIF_F_HW_CSUM|NETIF_F_TSO_ECN|NETIF_F_TSO| \
+-                        NETIF_F_TSO6)
++                        NETIF_F_TSO6|NETIF_F_UFO)
+       int                     vnet_hdr_sz;
+       int                     sndbuf;
+@@ -1153,20 +1153,10 @@ static ssize_t tun_get_user(struct tun_s
+                       skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
+                       break;
+               case VIRTIO_NET_HDR_GSO_UDP:
+-              {
+-                      static bool warned;
+-
+-                      if (!warned) {
+-                              warned = true;
+-                              netdev_warn(tun->dev,
+-                                          "%s: using disabled UFO feature; please fix this program\n",
+-                                          current->comm);
+-                      }
+                       skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
+                       if (skb->protocol == htons(ETH_P_IPV6))
+                               ipv6_proxy_select_ident(skb);
+                       break;
+-              }
+               default:
+                       tun->dev->stats.rx_frame_errors++;
+                       kfree_skb(skb);
+@@ -1266,6 +1256,8 @@ static ssize_t tun_put_user(struct tun_s
+                               gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
+                       else if (sinfo->gso_type & SKB_GSO_TCPV6)
+                               gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
++                      else if (sinfo->gso_type & SKB_GSO_UDP)
++                              gso.gso_type = VIRTIO_NET_HDR_GSO_UDP;
+                       else {
+                               pr_err("unexpected GSO type: "
+                                      "0x%x, gso_size %d, hdr_len %d\n",
+@@ -1795,6 +1787,11 @@ static int set_offload(struct tun_struct
+                               features |= NETIF_F_TSO6;
+                       arg &= ~(TUN_F_TSO4|TUN_F_TSO6);
+               }
++
++              if (arg & TUN_F_UFO) {
++                      features |= NETIF_F_UFO;
++                      arg &= ~TUN_F_UFO;
++              }
+       }
+       /* This gives the user a way to test for new features in future by
+--- a/drivers/net/virtio_net.c
++++ b/drivers/net/virtio_net.c
+@@ -496,17 +496,8 @@ static void receive_buf(struct receive_q
+                       skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
+                       break;
+               case VIRTIO_NET_HDR_GSO_UDP:
+-              {
+-                      static bool warned;
+-
+-                      if (!warned) {
+-                              warned = true;
+-                              netdev_warn(dev,
+-                                          "host using disabled UFO feature; please fix it\n");
+-                      }
+                       skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
+                       break;
+-              }
+               case VIRTIO_NET_HDR_GSO_TCPV6:
+                       skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
+                       break;
+@@ -845,6 +836,8 @@ static int xmit_skb(struct send_queue *s
+                       hdr->hdr.gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
+               else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
+                       hdr->hdr.gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
++              else if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP)
++                      hdr->hdr.gso_type = VIRTIO_NET_HDR_GSO_UDP;
+               else
+                       BUG();
+               if (skb_shinfo(skb)->gso_type & SKB_GSO_TCP_ECN)
+@@ -1664,7 +1657,7 @@ static int virtnet_probe(struct virtio_d
+                       dev->features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST;
+               if (virtio_has_feature(vdev, VIRTIO_NET_F_GSO)) {
+-                      dev->hw_features |= NETIF_F_TSO
++                      dev->hw_features |= NETIF_F_TSO | NETIF_F_UFO
+                               | NETIF_F_TSO_ECN | NETIF_F_TSO6;
+               }
+               /* Individual feature bits: what can host handle? */
+@@ -1674,9 +1667,11 @@ static int virtnet_probe(struct virtio_d
+                       dev->hw_features |= NETIF_F_TSO6;
+               if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_ECN))
+                       dev->hw_features |= NETIF_F_TSO_ECN;
++              if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_UFO))
++                      dev->hw_features |= NETIF_F_UFO;
+               if (gso)
+-                      dev->features |= dev->hw_features & NETIF_F_ALL_TSO;
++                      dev->features |= dev->hw_features & (NETIF_F_ALL_TSO|NETIF_F_UFO);
+               /* (!csum && gso) case will be fixed by register_netdev() */
+       }
+       if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_CSUM))
+@@ -1716,7 +1711,8 @@ static int virtnet_probe(struct virtio_d
+       /* If we can receive ANY GSO packets, we must allocate large ones. */
+       if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO4) ||
+           virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO6) ||
+-          virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_ECN))
++          virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_ECN) ||
++          virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_UFO))
+               vi->big_packets = true;
+       if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF))
+@@ -1907,9 +1903,9 @@ static struct virtio_device_id id_table[
+ static unsigned int features[] = {
+       VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM,
+       VIRTIO_NET_F_GSO, VIRTIO_NET_F_MAC,
+-      VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_TSO6,
++      VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO, VIRTIO_NET_F_HOST_TSO6,
+       VIRTIO_NET_F_HOST_ECN, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6,
+-      VIRTIO_NET_F_GUEST_ECN,
++      VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_UFO,
+       VIRTIO_NET_F_MRG_RXBUF, VIRTIO_NET_F_STATUS, VIRTIO_NET_F_CTRL_VQ,
+       VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN,
+       VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
diff --git a/queue-3.14/series b/queue-3.14/series
new file mode 100644 (file)
index 0000000..ae4be3a
--- /dev/null
@@ -0,0 +1 @@
+revert-drivers-net-disable-ufo-through-virtio.patch
diff --git a/queue-3.17/series b/queue-3.17/series
new file mode 100644 (file)
index 0000000..a12bfb6
--- /dev/null
@@ -0,0 +1 @@
+x86-build-add-arch-x86-purgatory-make-generated-files-to-gitignore.patch