#
9c7ce8bd |
| 09-Mar-2018 |
Tiwei Bie <tiwei.bie@intel.com> |
net/virtio: move to new offloads API
Ethdev offloads API has changed since:
commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") commit cba7f53b717d ("ethdev: introduce Tx queue offloads
net/virtio: move to new offloads API
Ethdev offloads API has changed since:
commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
47857470 |
| 12-Feb-2018 |
Maxime Coquelin <maxime.coquelin@redhat.com> |
net/virtio: fix resuming port with Rx vector path
Since commit efc83a1e7fc3 ("net/virtio: fix queue setup consistency"), when resuming a virtio port, the rx rings are refilled with new mbufs until t
net/virtio: fix resuming port with Rx vector path
Since commit efc83a1e7fc3 ("net/virtio: fix queue setup consistency"), when resuming a virtio port, the rx rings are refilled with new mbufs until they are full (vq->vq_free_cnt == 0). This is done without ensuring that the descriptor index remains a multiple of RTE_VIRTIO_VPMD_RX_REARM_THRESH, which is a prerequisite when using the vector mode. This can cause an out of bound access in the rx ring.
This commit changes the vector refill method from virtqueue_enqueue_recv_refill_simple() to virtio_rxq_rearm_vec(), which properly checks that the refill is done by batch of RTE_VIRTIO_VPMD_RX_REARM_THRESH.
As virtqueue_enqueue_recv_refill_simple() is no more used, this patch also removes the function.
Fixes: efc83a1e7fc3 ("net/virtio: fix queue setup consistency") Cc: stable@dpdk.org
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
show more ...
|
#
ffc905f3 |
| 22-Jan-2018 |
Ferruh Yigit <ferruh.yigit@intel.com> |
ethdev: separate driver APIs
Create a rte_ethdev_driver.h file and move PMD specific APIs here. Drivers updated to include this new header file.
There is no update in header content and since ethde
ethdev: separate driver APIs
Create a rte_ethdev_driver.h file and move PMD specific APIs here. Drivers updated to include this new header file.
There is no update in header content and since ethdev.h included by ethdev_driver.h, nothing changed from driver point of view, only logically grouping of APIs. From applications point of view they can't access to driver specific APIs anymore and they shouldn't.
More PMD specific data structures still remain in ethdev.h because of inline functions in header use them. Those will be handled separately.
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com> Acked-by: Andrew Rybchenko <arybchenko@solarflare.com> Acked-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
1978a9dc |
| 10-Jan-2018 |
Xiao Wang <xiao.w.wang@intel.com> |
net/virtio: add packet injection method
This patch adds dev_pause, dev_resume and inject_pkts APIs to allow driver to pause the worker threads and inject special packets into Tx queue. The next patc
net/virtio: add packet injection method
This patch adds dev_pause, dev_resume and inject_pkts APIs to allow driver to pause the worker threads and inject special packets into Tx queue. The next patch will be based on this.
Signed-off-by: Xiao Wang <xiao.w.wang@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
a2ffb87b |
| 10-Jan-2018 |
Xiao Wang <xiao.w.wang@intel.com> |
net/virtio: make control queue thread-safe
The virtio_send_command function may be called from app's configuration routine, but also from an interrupt handler called when live migration is done on t
net/virtio: make control queue thread-safe
The virtio_send_command function may be called from app's configuration routine, but also from an interrupt handler called when live migration is done on the backup side. So this patch makes control queue thread-safe first.
Signed-off-by: Xiao Wang <xiao.w.wang@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
5566a3e3 |
| 19-Dec-2017 |
Bruce Richardson <bruce.richardson@intel.com> |
drivers: use SPDX tag for Intel copyright files
Replace the BSD license header with the SPDX tag for files with only an Intel copyright on them.
Signed-off-by: Bruce Richardson <bruce.richardson@in
drivers: use SPDX tag for Intel copyright files
Replace the BSD license header with the SPDX tag for files with only an Intel copyright on them.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
show more ...
|
#
4c00cfdc |
| 04-Nov-2017 |
Thomas Monjalon <thomas@monjalon.net> |
remove useless memzone includes
The memzone header is often included without good reason.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
|
#
f1216c1e |
| 24-Oct-2017 |
Zhiyong Yang <zhiyong.yang@intel.com> |
net/virtio: fix Tx packet length stats
In the function virtqueue_enqueue_xmit(), when can_push is true, vtnet_hdr_size is added to pkt_len by calling rte_pktmbuf_prepend. which is wrong for pkt stat
net/virtio: fix Tx packet length stats
In the function virtqueue_enqueue_xmit(), when can_push is true, vtnet_hdr_size is added to pkt_len by calling rte_pktmbuf_prepend. which is wrong for pkt stats, virtio header length should be subtracted before calling stats function.
Fixes: 58169a9c8153 ("net/virtio: support Tx checksum offload") Cc: stable@dpdk.org
Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
show more ...
|
#
d8227497 |
| 20-Oct-2017 |
Tiwei Bie <tiwei.bie@intel.com> |
net/virtio: flush Rx queues on start
After starting a device, the driver shouldn't deliver the packets that already existed before the device is started to applications. Otherwise it will lead to in
net/virtio: flush Rx queues on start
After starting a device, the driver shouldn't deliver the packets that already existed before the device is started to applications. Otherwise it will lead to incorrect packet collection for port state. This patch fixes this issue by flushing the Rx queues when starting the device.
Fixes: a85786dc816f ("virtio: fix states handling during initialization") Cc: stable@dpdk.org
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Reviewed-by: Jens Freimann <jfreimann@redhat.com> Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
show more ...
|
#
3976f19e |
| 11-Sep-2017 |
Olivier Matz <olivier.matz@6wind.com> |
net/virtio: fix compilation with -Og
The compilation with gcc-6.3.0 and EXTRA_CFLAGS=-Og gives the following error:
CC virtio_rxtx.o virtio_rxtx.c: In function ‘virtio_rx_offload’: virtio_rxt
net/virtio: fix compilation with -Og
The compilation with gcc-6.3.0 and EXTRA_CFLAGS=-Og gives the following error:
CC virtio_rxtx.o virtio_rxtx.c: In function ‘virtio_rx_offload’: virtio_rxtx.c:680:10: error: ‘csum’ may be used uninitialized in this function [-Werror=maybe-uninitialized] csum = ~csum; ~~~~~^~~~~~~
The function rte_raw_cksum_mbuf() may indeed return an error, and in this case, csum won't be initialized. Fix it by initializing csum to 0.
Fixes: 96cb6711939e ("net/virtio: support Rx checksum offload") Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
09649363 |
| 07-Sep-2017 |
Olivier Matz <olivier.matz@6wind.com> |
net/virtio: keep Rx handler whatever the Tx queue config
Split use_simple_rxtx into use_simple_rx and use_simple_tx, and ensure that only use_simple_tx is updated when txq flags forces to use the st
net/virtio: keep Rx handler whatever the Tx queue config
Split use_simple_rxtx into use_simple_rx and use_simple_tx, and ensure that only use_simple_tx is updated when txq flags forces to use the standard Tx handler.
This change is also useful for next commit (disable simple Rx path when Rx checksum is requested).
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
show more ...
|
#
4819eae8 |
| 07-Sep-2017 |
Olivier Matz <olivier.matz@6wind.com> |
net/virtio: rationalize setting of Rx/Tx handlers
The selection of Rx/Tx handlers is done at several places, group them in one function set_rxtx_funcs().
The update of hw->use_simple_rxtx is also r
net/virtio: rationalize setting of Rx/Tx handlers
The selection of Rx/Tx handlers is done at several places, group them in one function set_rxtx_funcs().
The update of hw->use_simple_rxtx is also rationalized: - initialized to 1 (prefer simple path) - in dev configure or rx/tx queue setup, if something prevents from using the simple path, change it to 0. - in dev start, set the handlers according to hw->use_simple_rxtx.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
show more ...
|
#
efc83a1e |
| 07-Sep-2017 |
Olivier Matz <olivier.matz@6wind.com> |
net/virtio: fix queue setup consistency
In rx/tx queue setup functions, some code is executed only if use_simple_rxtx == 1. The value of this variable can change depending on the offload flags or ss
net/virtio: fix queue setup consistency
In rx/tx queue setup functions, some code is executed only if use_simple_rxtx == 1. The value of this variable can change depending on the offload flags or sse support. If Rx queue setup is called before Tx queue setup, it can result in an invalid configuration:
- dev_configure is called: use_simple_rxtx is initialized to 0 - rx queue setup is called: queues are initialized without simple path support - tx queue setup is called: use_simple_rxtx switch to 1, and simple Rx/Tx handlers are selected
Fix this by postponing a part of Rx/Tx queue initialization in dev_start(), as it was the case in the initial implementation.
Fixes: 48cec290a3d2 ("net/virtio: move queue configure code to proper place") Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
show more ...
|
#
6a8cbb31 |
| 17-Jul-2017 |
Tiwei Bie <tiwei.bie@intel.com> |
net/virtio: refactor coding style in Rx
Make the code more readable. No functional change.
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
#
b7be4f46 |
| 19-Apr-2017 |
Zhiyong Yang <zhiyong.yang@intel.com> |
net/virtio: support to turn on/off traffic flow
Current virtio_dev_stop only disables interrupt and marks link down, When it is invoked, tx/rx traffic flows still work. This is a strange behavior. T
net/virtio: support to turn on/off traffic flow
Current virtio_dev_stop only disables interrupt and marks link down, When it is invoked, tx/rx traffic flows still work. This is a strange behavior. The patch supports the switch of flow.
Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com>
show more ...
|
#
ebb7bcab |
| 04-Apr-2017 |
Olivier Matz <olivier.matz@6wind.com> |
drivers/net: do not touch mbuf next or nb segs on Rx
Now that the m->next pointer and m->nb_segs is expected to be set (to NULL and 1 respectively) after a mempool_get(), we can avoid to write them
drivers/net: do not touch mbuf next or nb segs on Rx
Now that the m->next pointer and m->nb_segs is expected to be set (to NULL and 1 respectively) after a mempool_get(), we can avoid to write them in the Rx functions of drivers.
Only some drivers are patched, it's not an exhaustive patch. It gives the idea to do the same in other drivers.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
show more ...
|
#
f53fe364 |
| 23-Feb-2017 |
Zhiyong Yang <zhiyong.yang@intel.com> |
net/virtio: remove the redundant computing
The minor change aims to remove the redundant computing and make it easier to understand the code.
Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com>
|
#
f2462150 |
| 27-Jan-2017 |
Ferruh Yigit <ferruh.yigit@intel.com> |
drivers/net: remove redundant new line from logs
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
|
#
16994abe |
| 11-Jan-2017 |
Yuanhan Liu <yuanhan.liu@linux.intel.com> |
net/virtio: optimize header reset on any layout
When any layout is used, the header is stored in the head room of mbuf. mbuf is allocated and filled by user, means there is no gurateen the header is
net/virtio: optimize header reset on any layout
When any layout is used, the header is stored in the head room of mbuf. mbuf is allocated and filled by user, means there is no gurateen the header is all zero for non TSO case. Therefore, we have to do the reset by ourself:
memest(hdr, 0, head_size);
The memset has two impacts on performance:
- memset could not be inlined, which is a bit costly. - more importantly, it touches the mbuf, which could introduce severe cache issues as described by former patch.
Similiary, we could do the same trick: reset just when necessary, when the corresponding field is already 0, which is likely true for a simple l2 forward case. It could boost the performance up to 20+% in micro benchmarking.
Cc: stable@dpdk.org Cc: Maxime Coquelin <maxime.coquelin@redhat.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
c9ea670c |
| 11-Jan-2017 |
Yuanhan Liu <yuanhan.liu@linux.intel.com> |
net/virtio: fix performance regression due to TSO
TSO is now enabled, but it's not actually being used by default in a simple L2 forward mode. In such case, we have to zero the virtio net headers, t
net/virtio: fix performance regression due to TSO
TSO is now enabled, but it's not actually being used by default in a simple L2 forward mode. In such case, we have to zero the virtio net headers, to inform the vhost backend that no offload is being used:
hdr->csum_start = 0; hdr->csum_offset = 0; hdr->flags = 0;
hdr->gso_type = 0; hdr->gso_size = 0; hdr->hdr_len = 0;
Such writes could be very costly; it introduces severe cache issues: The above operations introduce cache write for each packet, which stalls the read operation from the vhost backend.
The fact that virtio net header is initiated to zero in PMD driver init stage means that these costly writes are unnecessary and could be avoided:
if (hdr->csum_start != 0) hdr->csum_start = 0;
And that's what the macro ASSIGN_UNLESS_EQUAL does. With this, the performance drop introduced by TSO enabling is recovered: it could be up to 20% in micro benchmarking.
Fixes: 58169a9c8153 ("net/virtio: support Tx checksum offload") Fixes: 696573046e9e ("net/virtio: support TSO") Cc: stable@dpdk.org
Cc: Olivier Matz <olivier.matz@6wind.com> Cc: Maxime Coquelin <maxime.coquelin@redhat.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
show more ...
|
#
b0caba1a |
| 17-Jan-2017 |
Jianfeng Tan <jianfeng.tan@intel.com> |
net/virtio: add Rx descriptor check
Under interrupt mode, rx_descriptor_done is used as an indicator for applications to check if some number of packets are ready to be received.
This patch enables
net/virtio: add Rx descriptor check
Under interrupt mode, rx_descriptor_done is used as an indicator for applications to check if some number of packets are ready to be received.
This patch enables this by checking used ring's local consumed idx with shared (with backend) idx.
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com> Tested-by: Lei Yao <lei.a.yao@intel.com> Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
show more ...
|
#
9edfedf5 |
| 30-Nov-2016 |
Pierre Pfister <ppfister@cisco.com> |
net/virtio: use any layout for version 1.0
Current virtio driver advertises VERSION_1 support, but does not handle device's VERSION_1 support when sending packets (it looks for ANY_LAYOUT feature, w
net/virtio: use any layout for version 1.0
Current virtio driver advertises VERSION_1 support, but does not handle device's VERSION_1 support when sending packets (it looks for ANY_LAYOUT feature, which is absent).
This patch enables 'can_push' in tx path when VERSION_1 is advertised by the device.
This significantly improves small packets forwarding rate towards devices advertising VERSION_1 feature.
Signed-off-by: Pierre Pfister <ppfister@cisco.com> Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
show more ...
|
#
48cec290 |
| 05-Nov-2016 |
Yuanhan Liu <yuanhan.liu@linux.intel.com> |
net/virtio: move queue configure code to proper place
The only piece of code of virtio_dev_rxtx_start() is actually doing queue configure/setup work. So, move it to corresponding queue_setup callbac
net/virtio: move queue configure code to proper place
The only piece of code of virtio_dev_rxtx_start() is actually doing queue configure/setup work. So, move it to corresponding queue_setup callback.
Once that is done, virtio_dev_rxtx_start() becomes an empty function, thus it's being removed.
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
f4d1ad15 |
| 05-Nov-2016 |
Yuanhan Liu <yuanhan.liu@linux.intel.com> |
net/virtio: initiate vring at init stage
virtio_dev_vring_start() is actually doing the vring initiation job. And the vring initiation job should be done at the dev init stage, as stated with great
net/virtio: initiate vring at init stage
virtio_dev_vring_start() is actually doing the vring initiation job. And the vring initiation job should be done at the dev init stage, as stated with great details in former commit.
So move it there, and rename it to virtio_init_vring().
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
show more ...
|
#
69c80d4e |
| 05-Nov-2016 |
Yuanhan Liu <yuanhan.liu@linux.intel.com> |
net/virtio: allocate queue at init stage
Queue allocation should be done once, since the queue related info (such as vring addreess) will only be informed to the vhost-user backend once without virt
net/virtio: allocate queue at init stage
Queue allocation should be done once, since the queue related info (such as vring addreess) will only be informed to the vhost-user backend once without virtio device reset.
That means, if you allocate queues again after the vhost-user negotiation, the vhost-user backend will not be informed any more. Leading to a state that the vring info mismatches between virtio PMD driver and vhost-backend: the driver switches to the new address has just been allocated, while the vhost-backend still sticks to the old address has been assigned in the init stage.
Unfortunately, that is exactly how the virtio driver is coded so far: queue allocation is done at queue_setup stage (when rte_eth_tx/rx_queue_setup is invoked). This is wrong, because queue_setup can be invoked several times. For example,
$ start_testpmd.sh ... --txq=1 --rxq=1 ... > port stop 0 > port config all txq 1 # just trigger the queue_setup callback again > port config all rxq 1 > port start 0
The right way to do is allocate the queues in the init stage, so that the vring info could be persistent with the vhost-user backend.
Besides that, we should allocate max_queue pairs the device supports, but not nr queue pairs firstly configured, to make following case work.
$ start_testpmd.sh ... --txq=1 --rxq=1 ... > port stop 0 > port config all txq 2 > port config all rxq 2 > port start 0
Since the allocation is switched to init stage, the free should also moved from the rx/tx_queue_release to dev close stage. That leading we could do nothing an empty rx/tx_queue_release() implementation.
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
show more ...
|