Huawei Xie [Thu, 12 Mar 2015 15:30:23 +0000 (23:30 +0800)]
vhost: add build option for vhost-user
Turn on CONFIG_RTE_LIBRTE_VHOST to enable vhost.
vhost-user is turned on by default. Turn off CONFIG_RTE_LIBRTE_VHOST_USER to
enable vhost-cuse implementation.
John McNamara [Mon, 16 Mar 2015 17:05:06 +0000 (17:05 +0000)]
eal: fix type casting of value to align
Fix a warning when the rte_common.h header is included in a compilation
using -Wbad-function-cast, such as in Open vSwitch where the
following warning is emitted repeatedly:
../rte_common.h: In function 'rte_is_aligned':
../rte_common.h:184:9: warning: cast from function call of
type 'uintptr_t' to non-matching type 'void *' [-Wbad-function-cast]
This change fixes the issue in rte_common.h by using the RTE_ALIGN_FLOOR
macro to get the aligned floor value with generic type casting.
Also removed the rte_align_floor_int() function and replaced it with
the RTE_PTR_ALIGN_FLOOR() macro.
Signed-off-by: John McNamara <john.mcnamara@intel.com> Acked-by: Neil Horman <nhorman@tuxdriver.com>
Yong Liu [Wed, 11 Mar 2015 07:23:10 +0000 (15:23 +0800)]
app/testpmd: fix incorrect port number check
testpmd parameter "nb-port" mean the number of forwarding port.
It's incorrect to use function port_id_is_invalid to check number of ports.
Fixes: edab33b1c01d ("app/testpmd: support port hotplug") Signed-off-by: Yong Liu <yong.liu@intel.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Jingjing Wu [Fri, 6 Mar 2015 09:36:13 +0000 (17:36 +0800)]
ixgbe: fix supported flow types
Ixgbe doesn't support the ipv4-frag and ipv6-frag flow types, remove them.
Ixgbe doesn't support configure flex mask on each kind of flow type, this
patch uses RTE_ETH_FLOW_UNKNOWN to specify global flex mask setting.
This patch also changes the string "raw" to "none" to indicate flex mask
setting unrelated with flow type in testpmd for ixgbe.
Pablo de Lara [Fri, 27 Feb 2015 11:18:39 +0000 (11:18 +0000)]
app/testpmd: stop forwarding when quitting
When user quits testpmd, and there is traffic being forwarded,
that may produce a segmentation fault, due to ports being closed,
while they are still transmitting packets.
This patch prevents the issue from happening,
by stopping packet forwarding before closing the ports.
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
The contigmem module was using an "int" type for specifying the
size of blocks of memory to be reserved. A 2GB block was therefore
overflowing the signed 32-bit value, making 1GB the largest block
size that could be reserved as a single unit.
The fix is to change the type used for the buffer/block size to
an "int64_t" value.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Adrien Mazarguil [Fri, 27 Feb 2015 18:27:00 +0000 (19:27 +0100)]
mlx4: avoid init errors when kernel modules are not loaded
Mimic UIO/VFIO drivers behavior by not causing errors when a device cannot
be initialized due to missing or mismatching kernel modules. Display helpful
messages instead, such as:
[...]
EAL: PCI device 0000:83:00.0 on NUMA socket 1
EAL: probe driver: 15b3:1007 librte_pmd_mlx4
PMD: librte_pmd_mlx4: PCI information matches, using device "mlx4_0" (VF: false)
PMD: librte_pmd_mlx4: cannot use device, are drivers up to date?
EAL: PCI device 0000:84:00.0 on NUMA socket 1
EAL: probe driver: 15b3:1007 librte_pmd_mlx4
PMD: librte_pmd_mlx4: PCI information matches, using device "mlx4_1" (VF: false)
PMD: librte_pmd_mlx4: cannot use device, are drivers up to date?
EAL: No probed ethernet devices
[...]
To avoid any possible confusion or breakage, rename all the structures
of ixgbe driver to use ixgbe_ rather than igb_ because igb is a
different driver.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
All global functions in a driver should use the same prefix
to avoid any future name collisions.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
[Bruce: one instance was missing] Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
David Marchand [Wed, 4 Mar 2015 21:50:07 +0000 (22:50 +0100)]
tailq: introduce dynamic register system
This register system makes it possible to reserve a tailq for the dpdk
libraries.
The "dynamic" tailqs are right after the "static" tailqs in shared mem.
Primary process is responsible for writing the tailq names, so that secondary
processes can find them.
This is a temp commit, "static" tailqs are removed after conversion of all
users in next commits.
Signed-off-by: David Marchand <david.marchand@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com>
David Marchand [Wed, 4 Mar 2015 21:50:05 +0000 (22:50 +0100)]
tailq: get rid of broken reserve api
The "reserve" macros and functions do not check if the requested entry is free.
They do nothing more than the lookup function (which itself "creates" entries
...).
The rte_tailq api is marked as "internal use" in documentation and these macros
are only used in test application, so just get rid of them.
Signed-off-by: David Marchand <david.marchand@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com>
Michael Qiu [Fri, 6 Mar 2015 03:53:32 +0000 (11:53 +0800)]
app/test: fix printf format
test_hash.c: In function ‘test_crc32_hash_alg_equiv’:
error: format ‘%lu’ expects argument of type ‘long unsigned int’,
but argument 2 has type ‘size_t’ [-Werror=format]
According to C99, for size_t type should use format "%zu"
Signed-off-by: Michael Qiu <michael.qiu@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
When compiling C++11-code or above (--std=c++11), the build fails with
lots of
rte_eth_ctrl.h:517:3: note: in expansion of macro RTE_ALIGN
(RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT32_BIT)/UINT32_BIT)
^
When reading the GCC info pages, I get the feeling that __typeof__ is
a better choice, and that indeed works when including the headers in
C++ files (--std=c++11).
Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This patch modifies testpmd behavior when setting:
rx_vlan add all vf_port (enabling all vlanids
to be passed thru rx filter on VF).
Rx_vlan_all_filter_set() function,
checks if the next vlanid can be enabled by the driver.
Number of vlanids is limited by the NIC and thus the NIC
do not allow to enable more vlanids than it can allocate
in VFTA table.
Signed-off-by: Michal Jastrzebski <michalx.k.jastrzebski@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This patch adds information to testpmd_funcs.rst file,
about limited number of vlan_ids possible to be enabled
in a filter. This is limited to the maximum number of entries
possible in the VFTA table.
Signed-off-by: Michal Jastrzebski <michalx.k.jastrzebski@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
When invoking creation of bonded device using:
create bonded device mode socket in testpmd the bonded port was not
enabled at the end of cmd_create_bonded_device_parsed function.
This caused commands 'show port info' and 'show port stats' not working
properly with bonding device. This patch fixed it.
Signed-off-by: Michal Jastrzebski <michalx.k.jastrzebski@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Huawei Xie [Fri, 6 Mar 2015 10:39:18 +0000 (18:39 +0800)]
vhost: fix file descriptors naming
Previous vhost implementation wrongly name kickfd as callfd and callfd as kickfd.
It is functional correct, but causes confusion.
Exchange kickfd and callfd to avoid confusion.
Huawei Xie [Tue, 3 Mar 2015 02:26:04 +0000 (10:26 +0800)]
vhost: fix crash by removing device when requested
This patch fixes the segfault issue in the case vhost receives
new VHOST_SET_MEM_TABLE message without VHOST_VRING_GET_VRING_BASE
(which we uses as the stop message).
Signed-off-by: Huawei Xie <huawei.xie@intel.com> Acked-by: Tommy Long <thomas.long@intel.com>
The dpdk_nic_bind script will not allow ports to be bound or unbound if none of the
kernel modules supported by DPDK is loaded. This patch relaxes this restriction by
checking if a DPDK module is actually requested. The example below illustrates this
problem:
In virtio test, on the guest
1. Bind virtio port to igb_uio driver;
2. Remove igb_uio module;
3. Bind virtio port to virtio-pci driver, it fails and reports:
"Error - no supported modules are loaded"
The script should check the to-be-bound driver flag, if it is dpdk driver(igb_uio, vfio etc),
and the corresponding module is not loaded, then exit, otherwise, just report a warning,
and continue to bind the non-dpdk driver(like virtio-pci) to dev.
Keith Wiles [Thu, 26 Feb 2015 14:00:32 +0000 (08:00 -0600)]
ethdev: fix hotplug check for Rx and Tx callbacks
Some checks with rte_eth_dev_is_valid_port() were missed when merging
hotplug and callbacks features.
Fixes: c282abd2a6cd ("ethdev: remove assumption that port will not be detached") Signed-off-by: Keith Wiles <keith.wiles@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com>
Cunming Liang [Mon, 2 Mar 2015 13:28:24 +0000 (21:28 +0800)]
ixgbe: check rxd number to avoid mbuf leak
The mbuf leak happens when the assigned number of rx descriptor is not
power of 2 in vector mode.
As it's presumed on vpmd rx (for rx_tail wrap), adding condition check
to prevent it.
The root cause reference code in *_recv_raw_pkts_vec* as below.
"rxq->rx_tail = (uint16_t)(rxq->rx_tail & (rxq->nb_rx_desc - 1));".
Reported-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: Cunming Liang <cunming.liang@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
*alloc() routines return void * and therefore cast is not needed.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
[Thomas: reverse num and size parameters in vhost calloc]
Thomas Monjalon [Tue, 3 Mar 2015 14:48:28 +0000 (15:48 +0100)]
bond: remove debug function to fix link with shared lib
The function print_client_stats was used in the example without being
clearly exported in the map file. So it breaks linking with shared library
when debug is enabled.
It's better to remove this function as it probably could be implemented
with statistics API.
Fixes: cc7e8ae84faa ("add example application for link bonding mode 6") Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Acked-by: Declan Doherty <declan.doherty@intel.com>
Thomas Monjalon [Tue, 3 Mar 2015 15:04:59 +0000 (16:04 +0100)]
virtio: fix build with debug enabled
With CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=y:
error: ‘devname’ undeclared (first use in this function)
Fixes: da978dfdc43b ("virtio: use port IO to get PCI resource") Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
Thomas Monjalon [Tue, 3 Mar 2015 14:58:37 +0000 (15:58 +0100)]
virtio: fix build with mempool debug enabled
The mempool header forces error on -Wcast-qual:
error: cast discards ‘const’ qualifier from pointer target type
Let's fix it by removing const qualifier of pci driver from commit 5e9f6d1340ff ("pci: reference driver structure for each device")
It's needed because the driver flags are changed depending on using uio or not.
Actually these driver flags should be directly attached to each device.
Fixes: da978dfdc43b ("virtio: use port IO to get PCI resource") Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
Thomas Monjalon [Tue, 3 Mar 2015 08:37:54 +0000 (09:37 +0100)]
eal/linux: fix build
Compilation fails in some distributions because of missing unistd.h
needed for pread/pwrite (seen with Suse):
lib/librte_eal/linuxapp/eal/eal_pci_uio.c:62:2:
error: implicit declaration of function ‘pread’
Fixes: 4a499c649590 ("eal/linux: enable uio_pci_generic support") Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Acked-by: David Marchand <david.marchand@6wind.com>
Neil Horman [Fri, 27 Feb 2015 12:33:13 +0000 (07:33 -0500)]
eal: clean up export of socket id variable
Theres no need to export this variable. Its set and queried from an API call
that doesn't exist in the hot path. Instead just export the rte_socket_id
symbol and make the variable private to protect it from type changes. We should
do this with the other exported variables too, but I think its too late in the
release cycle to do that.
tested using distributor_autotest (which uses rte_socket_id), successfully.
Only tested on linux, as I don't currently have a bsd system spun up, but the
changes are symmetric, and should be fine
Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Acked-by: Cunming Liang <cunming.liang@intel.com> Acked-by: David Marchand <david.marchand@6wind.com>
Jijiang Liu [Thu, 26 Feb 2015 03:37:24 +0000 (11:37 +0800)]
i40e: advertise TSO capability
Advertise the DEV_TX_OFFLOAD_TCP_TSO flag in the PMD features. It means
that the i40e PMD supports the offload of TSO.
Test report: http://www.dpdk.org/ml/archives/dev/2015-March/014467.html
Signed-off-by: Jijiang Liu <jijiang.liu@intel.com> Signed-off-by: Miroslaw Walukiewicz <miroslaw.walukiewicz@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> Tested-by: Min Cao <min.cao@intel.com>
Jijiang Liu [Thu, 26 Feb 2015 03:37:23 +0000 (11:37 +0800)]
i40e: enable TSO support
This patch enables i40e TSO feature for both non-tunneling packet and
tunneling packet.
Test report: http://www.dpdk.org/ml/archives/dev/2015-March/014467.html
Signed-off-by: Jijiang Liu <jijiang.liu@intel.com> Signed-off-by: Miroslaw Walukiewicz <miroslaw.walukiewicz@intel.com> Signed-off-by: Grzegorz Galkowski <grzegorz.galkowski@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> Tested-by: Min Cao <min.cao@intel.com>
Jijiang Liu [Thu, 26 Feb 2015 03:37:22 +0000 (11:37 +0800)]
i40e: move Tx offloads parameters to separate structure
The structure size is u64 so it could be used with single cpu operation.
Test report: http://www.dpdk.org/ml/archives/dev/2015-March/014467.html
Signed-off-by: Jijiang Liu <jijiang.liu@intel.com> Signed-off-by: Miroslaw Walukiewicz <miroslaw.walukiewicz@intel.com> Signed-off-by: Grzegorz Galkowski <grzegorz.galkowski@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> Tested-by: Min Cao <min.cao@intel.com>
Tetsuya Mukawa [Fri, 27 Feb 2015 07:16:15 +0000 (16:16 +0900)]
app/testpmd: fix crash when portmask is specified
If testpmd is invoked with portmask option like below, segmentation
fault will occur. This patch fixes the issue.
Reported-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Changchun Ouyang [Fri, 27 Feb 2015 02:30:10 +0000 (10:30 +0800)]
virtio: fix build on freebsd
This patch fixes the compilation issue on freebsd:
lib/librte_pmd_virtio/virtio_ethdev.c: In function 'virtio_resource_init':
lib/librte_pmd_virtio/virtio_ethdev.c:1071:56: error: unused parameter 'pci_dev' [-Werror=unused-parameter]
Fixes: da978dfdc43b ("virtio: use port IO to get PCI resource") Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com> Acked-by: Cunming Liang <cunming.liang@intel.com>
Thomas Monjalon [Thu, 26 Feb 2015 10:46:52 +0000 (11:46 +0100)]
ethdev: fix build without hotplug
After setting CONFIG_RTE_LIBRTE_EAL_HOTPLUG=n, GCC stop compiling:
rte_ethdev.c:430:1: error: ‘rte_eth_dev_get_device_type’ defined but not used
rte_ethdev.c:438:1: error: ‘rte_eth_dev_save’ defined but not used
rte_ethdev.c:450:1: error: ‘rte_eth_dev_get_changed_port’ defined but not used
rte_ethdev.c:464:1: error: ‘rte_eth_dev_get_addr_by_port’ defined but not used
rte_ethdev.c:481:1: error: ‘rte_eth_dev_get_name_by_port’ defined but not used
rte_ethdev.c:503:1: error: ‘rte_eth_dev_is_detachable’ defined but not used
The hotplug option allows to build in environment (BSD) not yet
supported by this new feature.
It should be removed when BSD will be supported.
Waiting this day, let's fix build with hotplug disabled.
Reported-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Tetsuya Mukawa [Mon, 23 Feb 2015 05:12:34 +0000 (14:12 +0900)]
null: new poll mode driver
Null PMD is a driver of the virtual device particularly designed to measure
performance of DPDK PMDs. When an application call rx, Null PMD just allocates
mbufs and returns those. Also tx, the PMD just frees mbufs.
The PMD has following options.
- size: specify packe size allocated by RX. Default packet size is 64.
- copy: specify 1 or 0 to enable or disable copy while RX and TX.
Default value is 0(disabled).
This option is used for emulating more realistic data transfer.
Copy size is equal to packet size.
To use the PMD, enable CONFIG_RTE_BUILD_SHARED_LIB in config file. Then
compile the PMD as shared library. The library can be linked using '-d'
option when an application invokes.
Here is an example.
$ sudo ./testpmd -c f -n 4 -d librte_pmd_null.so \
--vdev 'eth_null0' --vdev 'eth_null1' -- -i --no-flush-rx
If testpmd is compiled with CONFIG_RTE_BUILD_SHARED_LIB, it may need to
specify more libraries using '-d' option.
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp> Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:29 +0000 (04:32 +0900)]
app/testpmd: support port hotplug
The patch introduces following commands.
- port attach [ident]
- port detach [port_id]
- attach: attaching a port
- detach: detaching a port
- ident: pci address of physical device.
Or device name and parameters of virtual device.
(ex. 0000:02:00.0, eth_pcap0,iface=eth0)
- port_id: port identifier
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp> Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:26 +0000 (04:32 +0900)]
ethdev: attach or detach port
These functions are used for attaching or detaching a port.
When rte_eth_dev_attach() is called, the function tries to realize the
device name as pci address. If this is done successfully,
rte_eth_dev_attach() will attach physical device port. If not, attaches
virtual devive port.
When rte_eth_dev_detach() is called, the function gets the device type
of this port to know whether the port is come from physical or virtual.
And then specific detaching function will be called.
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:24 +0000 (04:32 +0900)]
ethdev: add device type
This new parameter is needed to keep device type like PCI or virtual.
Port detaching processes are different between PCI device and virtual
device.
RTE_ETH_DEV_PCI indicates device type is PCI. RTE_ETH_DEV_VIRTUAL
indicates device is virtual.
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:21 +0000 (04:32 +0900)]
ethdev: close device
The patch adds function pointer to rte_pci_driver and eth_driver
structure. These function pointers are used when ports are detached.
Also, the patch adds rte_eth_dev_uninit(). So far, it's not called
by anywhere, but it will be called when port hotplug function is
implemented.
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:18 +0000 (04:32 +0900)]
ethdev: remove assumption that port will not be detached
To remove assumption, do like followings.
This patch adds "RTE_PCI_DRV_DETACHABLE" to drv_flags of rte_pci_driver
structure. The flags indicate the driver can detach devices at runtime.
Also, remove assumption that port will not be detached.
To remove the assumption.
- Add 'attached' member to rte_eth_dev structure.
This member is used for indicating the port is attached, or not.
DEV_ATTACHED indicates a port is attached.
DEV_DETACHED indicates a port is detached.
- Add rte_eth_dev_allocate_new_port().
This function is used for allocating new port.
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:25 +0000 (04:32 +0900)]
eal: add vdev init and uninit
The patch adds following functions.
- rte_eal_vdev_init();
- rte_eal_vdev_uninit();
- rte_eal_parse_devargs_str().
These functions are used for driver initialization and finalization.
Tetsuya Mukawa [Wed, 25 Feb 2015 19:32:23 +0000 (04:32 +0900)]
pci: probe or close device
- Add pci_close_all_drivers()
The function tries to find a driver for the specified device, and
then close the driver.
- Add rte_eal_pci_probe_one() and rte_eal_pci_close_one()
The functions are used for probe and close a device.
First the function tries to find a device that has the specified
PCI address. Then, probe or close the device.