summaryrefslogtreecommitdiffstats
path: root/dpdk/dpdk-2.1.0_patches
diff options
context:
space:
mode:
Diffstat (limited to 'dpdk/dpdk-2.1.0_patches')
-rw-r--r--dpdk/dpdk-2.1.0_patches/0001-kni-fix-igb-build-with-kernel-4.2.patch78
-rw-r--r--dpdk/dpdk-2.1.0_patches/0002-mbuf-rearrange-rte_mbuf-metadata-to-suit-vpp.patch107
-rw-r--r--dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch75
-rw-r--r--dpdk/dpdk-2.1.0_patches/0004-ixgbe-Wait-a-bit-longer-for-autonegotiation-to-leave.patch26
-rw-r--r--dpdk/dpdk-2.1.0_patches/0005-eal-Temporarily-turn-off-unthrottled-RTE_LOG.patch29
-rw-r--r--dpdk/dpdk-2.1.0_patches/0006-virtio-Cleanup-virtio-pmd-debug-log-output-reset-off.patch77
-rw-r--r--dpdk/dpdk-2.1.0_patches/0007-igb_uio-Reinstate-PCI-device-id-table-build-system-c.patch49
7 files changed, 441 insertions, 0 deletions
diff --git a/dpdk/dpdk-2.1.0_patches/0001-kni-fix-igb-build-with-kernel-4.2.patch b/dpdk/dpdk-2.1.0_patches/0001-kni-fix-igb-build-with-kernel-4.2.patch
new file mode 100644
index 00000000000..09bca06ed69
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0001-kni-fix-igb-build-with-kernel-4.2.patch
@@ -0,0 +1,78 @@
+From 2de9d1629312a32f82c43167467640bc793805a6 Mon Sep 17 00:00:00 2001
+From: Damjan Marion <damarion@cisco.com>
+Date: Mon, 12 Oct 2015 14:23:30 +0200
+Subject: [PATCH 1/9] kni: fix igb build with kernel 4.2
+
+Kernel 4.2 has introduced two new parameters in ndo_bridge_getlink,
+which breaks DPDK compilation.
+
+Linux: 7d4f8d87 ("switchdev: ad VLAN support for ports bridge-getlink")
+
+This patch adds the necessary checks to fix it.
+
+Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
+---
+ lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c | 13 +++++++++----
+ lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h | 7 ++++++-
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
+index eed8df6..b330b20 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
++++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
+@@ -2250,14 +2250,14 @@ static int igb_ndo_bridge_setlink(struct net_device *dev,
+ }
+
+ #ifdef HAVE_BRIDGE_FILTER
+-#ifdef HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK
++#ifdef HAVE_NDO_BRIDGE_GETLINK_NLFLAGS
+ static int igb_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+ struct net_device *dev, u32 filter_mask,
+ int nlflags)
+ #else
+ static int igb_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+ struct net_device *dev, u32 filter_mask)
+-#endif /* HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK */
++#endif /* HAVE_NDO_BRIDGE_GETLINK_NLFLAGS */
+ #else
+ static int igb_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+ struct net_device *dev)
+@@ -2275,11 +2275,16 @@ static int igb_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+ mode = BRIDGE_MODE_VEPA;
+
+ #ifdef HAVE_NDO_FDB_ADD_VID
+-#ifdef HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK
++#ifdef HAVE_NDO_BRIDGE_GETLINK_NLFLAGS
++#ifdef HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK_VLAN_FILL
++ return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode, 0, 0,
++ nlflags, filter_mask, NULL);
++#else
+ return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode, 0, 0, nlflags);
++#endif /* HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK_VLAN_FILL */
+ #else
+ return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode, 0, 0);
+-#endif /* HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK */
++#endif /* HAVE_NDO_BRIDGE_GETLINK_NLFLAGS */
+ #else
+ return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode);
+ #endif /* HAVE_NDO_FDB_ADD_VID */
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
+index 852f80f..5f45b8b 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
++++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
+@@ -3899,6 +3899,11 @@ skb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
+
+ #if ( LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) )
+ /* ndo_bridge_getlink adds new nlflags parameter */
+-#define HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK
++#define HAVE_NDO_BRIDGE_GETLINK_NLFLAGS
+ #endif /* >= 4.1.0 */
++
++#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) )
++/* ndo_bridge_getlink adds new filter_mask and vlan_fill parameters */
++#define HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK_VLAN_FILL
++#endif /* >= 4.2.0 */
+ #endif /* _KCOMPAT_H_ */
+--
+2.5.0
+
diff --git a/dpdk/dpdk-2.1.0_patches/0002-mbuf-rearrange-rte_mbuf-metadata-to-suit-vpp.patch b/dpdk/dpdk-2.1.0_patches/0002-mbuf-rearrange-rte_mbuf-metadata-to-suit-vpp.patch
new file mode 100644
index 00000000000..2ce5004a421
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0002-mbuf-rearrange-rte_mbuf-metadata-to-suit-vpp.patch
@@ -0,0 +1,107 @@
+From 3609c4fb4d07d4285e96187598f54cb21e9e9b08 Mon Sep 17 00:00:00 2001
+From: Shesha Sreenivasamurthy <shesha@cisco.com>
+Date: Wed, 2 Sep 2015 08:57:24 -0700
+Subject: [PATCH 2/9] mbuf: rearrange rte_mbuf metadata to suit vpp
+
+Offload structure in the second cache line, next pointer in the
+first cache line. Issue reported to Intel.
+---
+ .../linuxapp/eal/include/exec-env/rte_kni_common.h | 10 +++++++--
+ lib/librte_mbuf/rte_mbuf.h | 25 ++++++++++++++--------
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+index e9f38bd..d327f71 100644
+--- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
++++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+@@ -111,6 +111,10 @@ struct rte_kni_fifo {
+ * The kernel image of the rte_mbuf struct, with only the relevant fields.
+ * Padding is necessary to assure the offsets of these fields
+ */
++/*
++ * offload in the second cache line, next in the first. Better for vpp
++ * at least as of right now.
++ */
+ struct rte_kni_mbuf {
+ void *buf_addr __attribute__((__aligned__(RTE_CACHE_LINE_SIZE)));
+ char pad0[10];
+@@ -121,16 +125,18 @@ struct rte_kni_mbuf {
+ char pad2[4];
+ uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len. */
+ uint16_t data_len; /**< Amount of data in segment buffer. */
++ char pad3[2];
+ #else
+ char pad2[2];
+ uint16_t data_len; /**< Amount of data in segment buffer. */
+ uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len. */
++ char pad3[4];
+ #endif
++ void *next;
+
+ /* fields on second cache line */
+- char pad3[8] __attribute__((__aligned__(RTE_CACHE_LINE_SIZE)));
++ char pad4[12] __attribute__((__aligned__(RTE_CACHE_LINE_SIZE)));
+ void *pool;
+- void *next;
+ };
+
+ /*
+diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
+index 8c2db1b..61cbbd7 100644
+--- a/lib/librte_mbuf/rte_mbuf.h
++++ b/lib/librte_mbuf/rte_mbuf.h
+@@ -743,6 +743,12 @@ typedef uint64_t MARKER64[0]; /**< marker that allows us to overwrite 8 bytes
+ /**
+ * The generic rte_mbuf, containing a packet mbuf.
+ */
++/*
++ * offload in the second cache line, next in the first. Better for vpp
++ * at least as of right now.
++ * If you change this structure, you must change the user-mode
++ * version in rte_mbuf.h
++ */
+ struct rte_mbuf {
+ MARKER cacheline0;
+
+@@ -809,6 +815,16 @@ struct rte_mbuf {
+ uint16_t vlan_tci; /**< VLAN Tag Control Identifier (CPU order) */
+ uint16_t vlan_tci_outer; /**< Outer VLAN Tag Control Identifier (CPU order) */
+ #endif /* RTE_NEXT_ABI */
++ struct rte_mbuf *next; /**< Next segment of scattered packet. */
++
++ uint32_t seqn; /**< Sequence number. See also rte_reorder_insert() */
++#ifdef RTE_NEXT_ABI
++ uint16_t vlan_tci_outer; /**< Outer VLAN Tag Control Identifier (CPU order) */
++#endif /* RTE_NEXT_ABI */
++
++ /* second cache line - fields only used in slow path or on TX */
++ MARKER cacheline1 __rte_cache_aligned;
++
+ union {
+ uint32_t rss; /**< RSS hash result if RSS enabled */
+ struct {
+@@ -828,21 +844,12 @@ struct rte_mbuf {
+ uint32_t usr; /**< User defined tags. See rte_distributor_process() */
+ } hash; /**< hash information */
+
+- uint32_t seqn; /**< Sequence number. See also rte_reorder_insert() */
+-#ifdef RTE_NEXT_ABI
+- uint16_t vlan_tci_outer; /**< Outer VLAN Tag Control Identifier (CPU order) */
+-#endif /* RTE_NEXT_ABI */
+-
+- /* second cache line - fields only used in slow path or on TX */
+- MARKER cacheline1 __rte_cache_aligned;
+-
+ union {
+ void *userdata; /**< Can be used for external metadata */
+ uint64_t udata64; /**< Allow 8-byte userdata on 32-bit */
+ };
+
+ struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */
+- struct rte_mbuf *next; /**< Next segment of scattered packet. */
+
+ /* fields to support TX offloads */
+ union {
+--
+2.5.0
+
diff --git a/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch b/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch
new file mode 100644
index 00000000000..d1ea27ad778
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch
@@ -0,0 +1,75 @@
+From 699252f0b685db4cd298e90f0e1d64e4792356f2 Mon Sep 17 00:00:00 2001
+From: Damjan Marion <damarion@cisco.com>
+Date: Wed, 21 Oct 2015 14:46:12 +0200
+Subject: [PATCH 3/9] e1000: Set VLAN Rx Offload tag correctly
+
+---
+ drivers/net/e1000/igb_rxtx.c | 30 ++++++++++++++++++++++++++++++
+ lib/librte_ether/rte_ether.h | 3 +++
+ 2 files changed, 33 insertions(+)
+
+diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
+index b13930e..7fe76c8 100644
+--- a/drivers/net/e1000/igb_rxtx.c
++++ b/drivers/net/e1000/igb_rxtx.c
+@@ -885,6 +885,21 @@ eth_igb_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
+ pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
+ pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
+ pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
++ {
++ /*
++ * Check packet for VLAN ethernet types and set
++ * RX Offload flag PKT_RX_VLAN_PKT accordingly.
++ */
++ struct ether_hdr *eth_hdr =
++ rte_pktmbuf_mtod(rxm, struct ether_hdr *);
++ u16 eth_type = rte_be_to_cpu_16(eth_hdr->ether_type);
++
++ if ((eth_type == ETHER_TYPE_VLAN) ||
++ (eth_type == ETHER_TYPE_VLAN_AD) ||
++ (eth_type == ETHER_TYPE_VLAN_9100) ||
++ (eth_type == ETHER_TYPE_VLAN_9200))
++ pkt_flags |= PKT_RX_VLAN_PKT;
++ }
+ rxm->ol_flags = pkt_flags;
+ #ifdef RTE_NEXT_ABI
+ rxm->packet_type = igb_rxd_pkt_info_to_pkt_type(rxd.wb.lower.
+@@ -1123,6 +1138,21 @@ eth_igb_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
+ pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
+ pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
+ pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
++ {
++ /*
++ * Check packet for VLAN ethernet types and set
++ * RX Offload flag PKT_RX_VLAN_PKT accordingly.
++ */
++ struct ether_hdr *eth_hdr =
++ rte_pktmbuf_mtod(rxm, struct ether_hdr *);
++ u16 eth_type = rte_be_to_cpu_16(eth_hdr->ether_type);
++
++ if ((eth_type == ETHER_TYPE_VLAN) ||
++ (eth_type == ETHER_TYPE_VLAN_AD) ||
++ (eth_type == ETHER_TYPE_VLAN_9100) ||
++ (eth_type == ETHER_TYPE_VLAN_9200))
++ pkt_flags |= PKT_RX_VLAN_PKT;
++ }
+ first_seg->ol_flags = pkt_flags;
+ #ifdef RTE_NEXT_ABI
+ first_seg->packet_type = igb_rxd_pkt_info_to_pkt_type(rxd.wb.
+diff --git a/lib/librte_ether/rte_ether.h b/lib/librte_ether/rte_ether.h
+index 07c17d7..fd646ec 100644
+--- a/lib/librte_ether/rte_ether.h
++++ b/lib/librte_ether/rte_ether.h
+@@ -332,6 +332,9 @@ struct vxlan_hdr {
+ #define ETHER_TYPE_1588 0x88F7 /**< IEEE 802.1AS 1588 Precise Time Protocol. */
+ #define ETHER_TYPE_SLOW 0x8809 /**< Slow protocols (LACP and Marker). */
+ #define ETHER_TYPE_TEB 0x6558 /**< Transparent Ethernet Bridging. */
++#define ETHER_TYPE_VLAN_AD 0x88a8 /**< IEEE 802.1AD VLAN tagging. */
++#define ETHER_TYPE_VLAN_9100 0x9100 /**< VLAN 0x9100 tagging. */
++#define ETHER_TYPE_VLAN_9200 0x9200 /**< VLAN 0x9200 tagging. */
+
+ #define ETHER_VXLAN_HLEN (sizeof(struct udp_hdr) + sizeof(struct vxlan_hdr))
+ /**< VXLAN tunnel header length. */
+--
+2.5.0
+
diff --git a/dpdk/dpdk-2.1.0_patches/0004-ixgbe-Wait-a-bit-longer-for-autonegotiation-to-leave.patch b/dpdk/dpdk-2.1.0_patches/0004-ixgbe-Wait-a-bit-longer-for-autonegotiation-to-leave.patch
new file mode 100644
index 00000000000..75241173afd
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0004-ixgbe-Wait-a-bit-longer-for-autonegotiation-to-leave.patch
@@ -0,0 +1,26 @@
+From 67d1c25af7fa16df40a8305405066ba6a40ac659 Mon Sep 17 00:00:00 2001
+From: Shesha Sreenivasamurthy <shesha@cisco.com>
+Date: Wed, 2 Sep 2015 08:46:39 -0700
+Subject: [PATCH 4/9] ixgbe: Wait a bit longer for autonegotiation to leave
+ state 0
+
+---
+ drivers/net/ixgbe/base/ixgbe_82599.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ixgbe/base/ixgbe_82599.c b/drivers/net/ixgbe/base/ixgbe_82599.c
+index f0deb59..ae66380 100644
+--- a/drivers/net/ixgbe/base/ixgbe_82599.c
++++ b/drivers/net/ixgbe/base/ixgbe_82599.c
+@@ -2442,7 +2442,7 @@ s32 ixgbe_reset_pipeline_82599(struct ixgbe_hw *hw)
+ IXGBE_WRITE_REG(hw, IXGBE_AUTOC,
+ autoc_reg ^ (0x4 << IXGBE_AUTOC_LMS_SHIFT));
+ /* Wait for AN to leave state 0 */
+- for (i = 0; i < 10; i++) {
++ for (i = 0; i < 50; i++) {
+ msec_delay(4);
+ anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
+ if (anlp1_reg & IXGBE_ANLP1_AN_STATE_MASK)
+--
+2.5.0
+
diff --git a/dpdk/dpdk-2.1.0_patches/0005-eal-Temporarily-turn-off-unthrottled-RTE_LOG.patch b/dpdk/dpdk-2.1.0_patches/0005-eal-Temporarily-turn-off-unthrottled-RTE_LOG.patch
new file mode 100644
index 00000000000..245b43c196e
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0005-eal-Temporarily-turn-off-unthrottled-RTE_LOG.patch
@@ -0,0 +1,29 @@
+From 9e28214eb784b9f68af6e0503f8cefe861f13440 Mon Sep 17 00:00:00 2001
+From: Shesha Sreenivasamurthy <shesha@cisco.com>
+Date: Wed, 2 Sep 2015 08:55:43 -0700
+Subject: [PATCH 5/9] eal: Temporarily turn off unthrottled RTE_LOG(...)
+
+Otherwise, /var/log/syslog eventually fills the disk. The error
+condition seems only to affect ESXi VM's. It'd be worth suggesting log
+throttling to the DPDK community. Much better to avoid making syslog
+(...) calls in the first place.
+---
+ lib/librte_eal/linuxapp/eal/eal_interrupts.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+index 3f87875..29a3539 100644
+--- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c
++++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+@@ -709,7 +709,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
+ * for epoll_wait.
+ */
+ bytes_read = read(events[n].data.fd, &buf, bytes_read);
+- if (bytes_read < 0) {
++ if (0 && bytes_read < 0) {
+ if (errno == EINTR || errno == EWOULDBLOCK)
+ continue;
+
+--
+2.5.0
+
diff --git a/dpdk/dpdk-2.1.0_patches/0006-virtio-Cleanup-virtio-pmd-debug-log-output-reset-off.patch b/dpdk/dpdk-2.1.0_patches/0006-virtio-Cleanup-virtio-pmd-debug-log-output-reset-off.patch
new file mode 100644
index 00000000000..9306f112a2c
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0006-virtio-Cleanup-virtio-pmd-debug-log-output-reset-off.patch
@@ -0,0 +1,77 @@
+From 21a9bf50270f71ebda5acb5fc233b8279cec56a7 Mon Sep 17 00:00:00 2001
+From: Shesha Sreenivasamurthy <shesha@cisco.com>
+Date: Wed, 2 Sep 2015 08:48:09 -0700
+Subject: [PATCH 6/9] virtio: Cleanup virtio pmd debug log output, reset
+ offload field
+
+---
+ drivers/net/virtio/virtio_ethdev.c | 10 +++++-----
+ drivers/net/virtio/virtio_rxtx.c | 4 +++-
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
+index 465d3cd..6a686fe 100644
+--- a/drivers/net/virtio/virtio_ethdev.c
++++ b/drivers/net/virtio/virtio_ethdev.c
+@@ -1521,24 +1521,24 @@ virtio_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complet
+ link.link_speed = SPEED_10G;
+
+ if (vtpci_with_feature(hw, VIRTIO_NET_F_STATUS)) {
+- PMD_INIT_LOG(DEBUG, "Get link status from hw");
+ vtpci_read_dev_config(hw,
+ offsetof(struct virtio_net_config, status),
+ &status, sizeof(status));
+ if ((status & VIRTIO_NET_S_LINK_UP) == 0) {
+ link.link_status = 0;
+- PMD_INIT_LOG(DEBUG, "Port %d is down",
+- dev->data->port_id);
+ } else {
+ link.link_status = 1;
+- PMD_INIT_LOG(DEBUG, "Port %d is up",
+- dev->data->port_id);
+ }
+ } else {
+ link.link_status = 1; /* Link up */
+ }
+ virtio_dev_atomic_write_link_status(dev, &link);
+
++ /* This message is far too noisy for normal use */
++ if (0)
++ PMD_INIT_LOG(DEBUG, "Port %d is %s\n", dev->data->port_id,
++ link.link_status ? "up" : "down");
++
+ return (old.link_status == link.link_status) ? -1 : 0;
+ }
+
+diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
+index c5b53bb..9f0b759 100644
+--- a/drivers/net/virtio/virtio_rxtx.c
++++ b/drivers/net/virtio/virtio_rxtx.c
+@@ -536,6 +536,7 @@ virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
+ rxm->next = NULL;
+ rxm->pkt_len = (uint32_t)(len[i] - hdr_size);
+ rxm->data_len = (uint16_t)(len[i] - hdr_size);
++ rxm->ol_flags = 0;
+
+ if (hw->vlan_strip)
+ rte_vlan_strip(rxm);
+@@ -651,6 +652,7 @@ virtio_recv_mergeable_pkts(void *rx_queue,
+ rxm->next = NULL;
+ rxm->pkt_len = (uint32_t)(len[0] - hdr_size);
+ rxm->data_len = (uint16_t)(len[0] - hdr_size);
++ rxm->ol_flags = 0;
+
+ rxm->port = rxvq->port_id;
+ rx_pkts[nb_rx] = rxm;
+@@ -752,7 +754,7 @@ virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
+ if (unlikely(nb_pkts < 1))
+ return nb_pkts;
+
+- PMD_TX_LOG(DEBUG, "%d packets to xmit", nb_pkts);
++ PMD_TX_LOG(DEBUG, "%d packets to xmit\n", nb_pkts);
+ nb_used = VIRTQUEUE_NUSED(txvq);
+
+ virtio_rmb();
+--
+2.5.0
+
diff --git a/dpdk/dpdk-2.1.0_patches/0007-igb_uio-Reinstate-PCI-device-id-table-build-system-c.patch b/dpdk/dpdk-2.1.0_patches/0007-igb_uio-Reinstate-PCI-device-id-table-build-system-c.patch
new file mode 100644
index 00000000000..b92fca4cb5d
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0007-igb_uio-Reinstate-PCI-device-id-table-build-system-c.patch
@@ -0,0 +1,49 @@
+From 3ac6cb020c0f2ddb42dcd790cf64118453e966a2 Mon Sep 17 00:00:00 2001
+From: Shesha Sreenivasamurthy <shesha@cisco.com>
+Date: Wed, 2 Sep 2015 08:48:41 -0700
+Subject: [PATCH 7/9] igb_uio: Reinstate PCI device id table, build system
+ changes
+
+---
+ lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 18 +++++++++++++++++-
+ 3 files changed, 34 insertions(+), 1 deletion(-)
+
+diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+index 865a276..16d2a55 100644
+--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
++++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+@@ -61,6 +61,22 @@ struct rte_uio_pci_dev {
+ static char *intr_mode = NULL;
+ static enum rte_intr_mode igbuio_intr_mode_preferred = RTE_INTR_MODE_MSIX;
+
++/* PCI device id table */
++static struct pci_device_id igbuio_pci_ids[] = {
++#define RTE_PCI_DEV_ID_DECL_EM(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_IGB(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_IGBVF(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_IXGBE(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_IXGBEVF(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_VIRTIO(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_VMXNET3(vend, dev) {PCI_DEVICE(vend, dev)},
++#define RTE_PCI_DEV_ID_DECL_VICE(vend, dev) {PCI_DEVICE(vend, dev)},
++#include <rte_pci_dev_ids.h>
++{ 0, },
++};
++
++MODULE_DEVICE_TABLE(pci, igbuio_pci_ids);
++
+ static inline struct rte_uio_pci_dev *
+ igbuio_get_uio_pci_dev(struct uio_info *info)
+ {
+@@ -606,7 +622,7 @@ igbuio_config_intr_mode(char *intr_str)
+
+ static struct pci_driver igbuio_pci_driver = {
+ .name = "igb_uio",
+- .id_table = NULL,
++ .id_table = igbuio_pci_ids,
+ .probe = igbuio_pci_probe,
+ .remove = igbuio_pci_remove,
+ };
+--
+2.5.0
+