[dpdk-dev] [PATCH v4 00/26] Single virtio implementation

Ouyang Changchun changchun.ouyang at intel.com
Mon Feb 9 02:13:49 CET 2015


This is the patch set for single virtio implementation.
 
Why we need single virtio?
============================
As we know currently there are at least 3 virtio PMD driver implementations:
A) lib/librte_pmd_virtio(refer as virtio A);
B) virtio_net_pmd by 6wind(refer as virtio B);
C) virtio by Brocade/vyatta(refer as virtio C);
 
Integrating 3 implementations into one could reduce the maintaining cost and time,
in other hand, user don't need practice their application on 3 variant one by one to see
which one is the best for them;
 
What's the status?
====================
Currently virtio A has covered most features of virtio B except for using port io to get pci resource,
so there is a patch(17/22) to resolve it. But on the other hand there are a few differences between
virtio A and virtio C, it needs integrate features/codes of virtio C into virtio A.
This patch set bases on two original RFC patch sets from Stephen Hemminger[stephen at networkplumber.org]
Refer to [http://dpdk.org/ml/archives/dev/2014-August/004845.html ] for the original one.
This patch set also resolves some conflict with latest codes, removed duplicated codes, fix some
issues in original codes.
 
What this patch set contains:
===============================
  1) virtio: Rearrange resource initialization, it extracts a function to setup PCI resources;
  2) virtio: Use weaker barriers, as DPDK driver only has to deal with the case of running on PCI
     and with SMP, In this case, the code can use the weaker barriers instead of using hard (fence)
     barriers. This may help performance a bit;
  3) virtio: Allow starting with link down, other driver has similar behavior;
  4) virtio: Add support for Link State interrupt;
  5) ether: Add soft vlan encap/decap functions, it helps if HW don't support vlan strip;
  6) virtio: Use software vlan stripping;
  7) virtio: Remove unnecessary adapter structure;
  8) virtio: Remove redundant vq_alignment, as vq alignment is always 4K, so use constant when needed;
  9) virtio: Fix how states are handled during initialization, this is to match Linux kernel;
  10) virtio: Make vtpci_get_status a local function as it is used in one file;
  11) virtio: Check for packet headroom at compile time;
  12) virtio: Move allocation before initialization to avoid being stuck in middle of virtio init;
  13) virtio: Add support for vlan filtering;
  14) virtio: Add support for multiple mac addresses;
  15) virtio: Add ability to set MAC address;
  16) virtio: Free mbuf's with threshold, this makes its behavior more like ixgbe;
  17) virtio: Use port IO to get PCI resource for security reasons and match virtio-net-pmd;
  18) virtio: Fix descriptor index issue;
  19) ether: Fix vlan strip/insert issue;
  20) example/vhost: Avoid inserting vlan twice and guest and host;
  21) example/vhost: Add vlan-strip cmd line option to turn on/off vlan strip on host;
  22) virtio: Use soft vlan strip in mergeable Rx path, this makes it has consistent logic
      with the normal Rx path.
 
Changes in v2:
  23) virtio: Fix zero copy break issue, the vring should be ready before virtio PMD set
      the status of DRIVER_OK;
  24) virtio: Remove unnecessary hotspots in data path.
 
Changes in v3:
  25) virtio: Fix wmb issue;
  26) Fix one minor issue in patch 20, also fix its idention.

Changes in v4:
  27) Fix updating vring descriptor index issue and memory barrier issue;
  28) Reslove comments for patch 17.

Changchun Ouyang (10):
  virtio: Use port IO to get PCI resource.
  virtio: Fix descriptor index issue
  ether: Fix vlan strip/insert issue
  example/vhost: Avoid inserting vlan twice
  example/vhost: Add vlan-strip cmd line option
  virtio: Use soft vlan strip in mergeable Rx path
  virtio: Fix zero copy break issue
  virtio: Remove hotspots
  virtio: Fix wmb issue
  virtio: Fix updating vring descriptor index issue

Stephen Hemminger (16):
  virtio: Rearrange resource initialization
  virtio: Use weaker barriers
  virtio: Allow starting with link down
  virtio: Add support for Link State interrupt
  ether: Add soft vlan encap/decap functions
  virtio: Use software vlan stripping
  virtio: Remove unnecessary adapter structure
  virtio: Remove redundant vq_alignment
  virtio: Fix how states are handled during initialization
  virtio: Make vtpci_get_status local
  virtio: Check for packet headroom at compile time
  virtio: Move allocation before initialization
  virtio: Add support for vlan filtering
  virtio: Add suport for multiple mac addresses
  virtio: Add ability to set MAC address
  virtio: Free mbuf's with threshold

 examples/vhost/main.c                 |  70 +++--
 lib/librte_ether/rte_ethdev.h         |   8 +
 lib/librte_ether/rte_ether.h          |  76 +++++
 lib/librte_pmd_virtio/Makefile        |   2 +
 lib/librte_pmd_virtio/virtio_ethdev.c | 519 ++++++++++++++++++++++++++--------
 lib/librte_pmd_virtio/virtio_ethdev.h |  12 +-
 lib/librte_pmd_virtio/virtio_pci.c    |  20 +-
 lib/librte_pmd_virtio/virtio_pci.h    |   8 +-
 lib/librte_pmd_virtio/virtio_rxtx.c   | 154 +++++++---
 lib/librte_pmd_virtio/virtqueue.h     |  59 +++-
 10 files changed, 729 insertions(+), 199 deletions(-)

-- 
1.8.4.2



More information about the dev mailing list