Rafal Kozik [Fri, 29 Jun 2018 13:54:05 +0000 (15:54 +0200)]
igb_uio: add write combining option
Write combining (WC) increases NIC performance by making better
utilization of PCI bus, but cannot be use by all PMD.
To get internal_addr memory need to be mapped. But as memory could not be
mapped twice: with and without WC it should be skipped for WC. [1]
To do not spoil other drivers that potentially could use internal_addr,
parameter wc_activate adds possibility to skip it for those PMDs,
that do not use it.
[1] https://www.kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf
section 5.3 and 5.4
Anatoly Burakov [Wed, 27 Jun 2018 09:44:25 +0000 (10:44 +0100)]
ipc: fix locking while sending messages
Previously, we were putting an exclusive lock to prevent secondary
processes spinning up while we are sending our messages. However,
using exclusive locks had an effect of disallowing multiple
simultaenous unrelated messages/requests being sent, which was
not the intention behind locking.
Fix it to put a shared lock on the directory. That way, we still
prevent secondary process initializations while sending data over
IPC, but allow multiple unrelated transmissions to proceed.
Fixes: 89f1fe7e6d95 ("eal: lock IPC directory on init and send") Cc: stable@dpdk.org Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Tested-by: Qi Zhang <qi.z.zhang@intel.com>
Pablo de Lara [Wed, 13 Jun 2018 09:36:48 +0000 (10:36 +0100)]
cryptodev: fix ABI breakage
In 17.08, the crypto operation was restructured,
and some reserved bytes (5) were added to have the mempool
pointer aligned to 64 bits, since the structure is expected
to be aligned to 64 bits, allowing future additions with no
ABI breakage needed.
In 18.05, a new 2-byte field was added, so the reserved bytes
were reduced to 3. However, this field was added after the first 3 bytes
of the structure, causing it to be placed in an offset of 4 bytes,
and therefore, forcing the mempool pointer to be placed after 16 bytes,
instead of a 8 bytes, causing unintentionally the ABI breakage.
This commit fixes the breakage, by swapping the reserved bytes
and the private_data_offset field, so the latter is aligned to 2 bytes
and the offset of the mempool pointer returns to its original offset,
8 bytes.
Fixes: 54c836846603 ("cryptodev: set private data for session-less mode") Cc: stable@dpdk.org Reported-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Acked-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com>
Tomasz Jozwiak [Thu, 14 Jun 2018 11:03:05 +0000 (13:03 +0200)]
crypto/qat: move to dynamic logging for data-path trace
For all trace on the data-path move to dynamic logging.
Add new QAT_DP_LOG macro to separate from non-dp trace.
Use the overall RTE_LOG_DP_LEVEL to override and compile out
debug data-path trace.
Add "unlikely" in two appropriate error checks.
Signed-off-by: Tomasz Jozwiak <tomaszx.jozwiak@intel.com> Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
Tomasz Jozwiak [Wed, 13 Jun 2018 12:14:22 +0000 (14:14 +0200)]
crypto/qat: remove configurable max number of sessions
This patch removes CONFIG_RTE_QAT_PMD_MAX_NB_SESSIONS
from common_base, config/rte_config.h files and
defines QAT_SYM_PMD_MAX_NB_SESSIONS inside qat_sym_pmd.h
file instead.
Signed-off-by: Tomasz Jozwiak <tomaszx.jozwiak@intel.com> Acked-by: Fiona Trahe <fiona.trahe@intel.com>
Fiona Trahe [Wed, 13 Jun 2018 12:14:20 +0000 (14:14 +0200)]
crypto/qat: check for service type
Other services, apart from symmetric crypto,
such as compression, will be added in future patches.
Therefore, the assumption that only symmetric crypto
operations are processed will not be valid anymore,
and service type needs to be checked.
Signed-off-by: Tomasz Jozwiak <tomaszx.jozwiak@intel.com> Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
Fiona Trahe [Wed, 13 Jun 2018 12:14:18 +0000 (14:14 +0200)]
crypto/qat: remove unused arguments
Process response function is only implemented
for crypto symmetric operations, which do not require
some of the arguments.
Therefore, these arguments can be removed from the
function prototype.
Signed-off-by: Tomasz Jozwiak <tomaszx.jozwiak@intel.com> Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
Fiona Trahe [Wed, 13 Jun 2018 12:14:15 +0000 (14:14 +0200)]
crypto/qat: register appropriately named device
For every QAT PCI device probed, populate a local rte_device
containing an rte_driver. The rte_driver was created in a previous
patch to provide a crypto-specific driver name: "crypto_qat".
This was previously only used for driver registration, now it's also
used in device creation.
This allows applications to find devices driven by "crypto_qat".
Fiona Trahe [Wed, 13 Jun 2018 12:14:09 +0000 (14:14 +0200)]
crypto/qat: remove incorrect usage of bundle number
As bundle_num is included in qat_gen1_qps static array
there shouldn't be a multiplier used in qat_qps_per_service()
Then removed ADF_NUM_BUNDLES_PER_DEV as no longer used.
Also renamed ADF_MAX_QPS_PER_BUNDLE to ADF_MAX_QPS_ON_ANY_SERVICE
and reduced from 4 to 2 which is enough for all current devices.
Fiona Trahe [Wed, 13 Jun 2018 12:14:07 +0000 (14:14 +0200)]
crypto/qat: move code into appropriate files
Move all code into appropriate files, no actual code changes. Specifically:
- Rename rte_qat_cryptodev.c to qat_sym_pmd.c
- Create qat_sym_pmd.h and populate with fn prototypes for qat_sym_pmd.c
- Create qat_comp_pmd.c/.h and populate with placeholder functions
- Create qat_asym_pmd.c/.h and populate with placeholder functions
- Rename qat_crypto_capabilities.h to qat_sym_capabilities.h
- Move CRYPTODEV_NAME_QAT_SYM_PMD from qat_common.h to qat_sym_pmd.h
- Move qat_sym_dev_private from qat_device.h to qat_sym_pmd.h
- Move prototype for qat_sym_dev_info_get frm qat_device.h 2 qat_sym_pmd.h
- Move all qat_device.c sym dev_ops fns to qat_sym_pmd.c file
- Move all qat_sym.c dev_ops fns to qat_sym_pmd.c file
- Remove unused header file #includes from all files.
- Move pci_id_qat_map, probe/release/register from
rte_qat_cryptodev.c to qat_device.c
- Moved stray comment for bpi_cipher_ctx_init() from qat_sym.c
to qat_sym_session.c
- Changed all files to use SPDX license header
Fiona Trahe [Wed, 13 Jun 2018 12:14:05 +0000 (14:14 +0200)]
crypto/qat: use common stats structures
Split qat_sym_stats_get/reset into 2 functions, a wrapper function calling
a new qat_stats_get/reset function which can be called per service.
Remove cryptodev stats struct from qat_qp, replace with qat_common_stats.
Add links for qat_qp into qat_pci_device using an array per service to
avoid need for a lock and so qp_id for the service can be used as index.
Fiona Trahe [Wed, 13 Jun 2018 12:14:04 +0000 (14:14 +0200)]
crypto/qat: move to using new device structure
Struct qat_pmd_private held the data needed by cryptodev, common code
now gets most data from struct qat_pci_device instead. qat_pmd_private
is trimmed to hold only sym crypto data and renamed qat_sym_private
to reflect its usage.
Specifically
- remove max_nb_queue_pairs from qat_pmd_private, get from qp_hw_data
- remove max_nb_sesssions from qat_pmd_private as not needed.
- remove qat_gen from qat_pmd_private, get from qat_pci_device instead.
- use qat_pci_device throughout common code instead of qat_pmd_private
- rename qat_pmd_private to qat_sym_dev_private - this now holds only
sym-specific data for the cryptodev API
- extend pci device name to <bdf>_qat for clarity, was just <bdf>
- update qp mem and cookiepool names to reflect the appropriate device,
service and qp.
- rename qat_dev_info_get() to qat_sym_dev_info_get() as mostly sym,
not enough common info to warrant a generic fn.
Fiona Trahe [Wed, 13 Jun 2018 12:14:03 +0000 (14:14 +0200)]
crypto/qat: use generic driver name for PCI registration
The QAT PMD used to register with PCI using the name "crypto_qat".
Keep this name for the driver registered with cryptodev
and use a more generic name "qat" for the PCI registration.
This paves the way for the PCI device to host other services.
Fiona Trahe [Wed, 13 Jun 2018 12:14:02 +0000 (14:14 +0200)]
crypto/qat: add PCI device struct
- Added struct qat_pci_device to use internally in QAT PMD
to avoid dependencies on rte_cryptodev or rte_compressdev
- Added a global array of these
- Restructured probe/release to separate QAT common init/clear
from crypto pmd create/destroy.
- In QAT common part allocated a qat_pci_device and populated it
- Removed meaningless check in probe for RTE_PROC_PRIMARY
Fiona Trahe [Wed, 13 Jun 2018 12:13:59 +0000 (14:13 +0200)]
crypto/qat: create structures to support various generations
Create data structures to support different generations
of qat hardware supplying services through different queue pairs.
- Add two new structs qat_gen_hw_data and qat_qp_hw_dat
- Add a qat_service_type enum
An array of qat_qp_hw_data elements is
initialised with constants, these are arranged so that the qp_id used
on the API can be used as an index to pick up the qp data to use.
The constants are common to current generations,
new arrays will be added for future generations.
Fiona Trahe [Wed, 13 Jun 2018 12:13:57 +0000 (14:13 +0200)]
crypto/qat: remove dependencies on cryptodev from common
Remove dependence on rte_cryptodev from common qp code
to facilitate being used by other device types in future.
Transferred required data into qat-specific structures.
Fiona Trahe [Wed, 13 Jun 2018 12:13:55 +0000 (14:13 +0200)]
crypto/qat: separate sym-specific from generic qp setup
Extracted all sym-specific code from qp setup fns, leaving
generic qat_qp_setup fn and helper fns. Created a new
meta-data struct qat_qp_config to hold all the data needed
to create a qp, filled this out in the sym-specific code
and passed to the generic qp_setup fn.
No need now for rx and tx queue_create fns, one generic
queue_create fn replaces these.
Included the service name (e.g. "sym") in the qp memzone
and cookie pool names.
Fiona Trahe [Wed, 13 Jun 2018 12:13:53 +0000 (14:13 +0200)]
crypto/qat: make dequeue function generic
Queue-handling code in dequeue is made generic, so it can
be used by other services in future. This is done by
- Removing all sym-specific refs in input params - replace with void ptrs.
- Wrapping this generic dequeue with the sym-specific dequeue
called through the API.
- extracting the sym-specific response processing into a new fn.
- Setting a fn ptr for process_response in qp on qp creation
- Passing void * params to this, in the service-specific implementation
qat_sym_process_response cast back to sym structs.
Fiona Trahe [Wed, 13 Jun 2018 12:13:52 +0000 (14:13 +0200)]
crypto/qat: make enqueue function generic
Queue-handling code in enqueue is made generic, so it can
be used by other services in future. This is done by
- Removing all sym-specific refs in input params - replace with void ptrs.
- Wrapping this generic enqueue with the sym-specific enqueue
called through the API.
- Setting a fn ptr for build_request in qp on qp creation
- Passing void * params to this, in the service-specific implementation
qat_sym_build_request cast back to sym structs.
Fiona Trahe [Wed, 13 Jun 2018 12:13:48 +0000 (14:13 +0200)]
crypto/qat: add symmetric session file
This commit adds qat_sym_session.c/h files and moves objects
from qat_algs_build_desc and qat_algs.h
Following objects were moved:
qat_adf/qat_algs_build_desc.c => qat_sym_session.c
- all objects -
qat_adf/qat_algs.h => qat_sym_session.h
- enum qat_crypto_proto_flag
- struct qat_alg_cd
- struct qat_session
- int qat_get_inter_state_size()
- int qat_alg_aead_session_create_content_desc_cipher()
- int qat_alg_aead_session_create_content_desc_auth()
- void qat_alg_init_common_hdr()
- int qat_alg_validate_aes_key()
- int qat_alg_validate_aes_docsisbpi_key()
- int qat_alg_validate_snow3g_key()
- int qat_alg_validate_kasumi_key()
- int qat_alg_validate_3des_key()
- int qat_alg_validate_des_key()
- int qat_cipher_get_block_size()
- int qat_alg_validate_zuc_key()
-- all macros
qat_crypto.h => qat_sym_session.h
int qat_crypto_sym_configure_session()
int qat_crypto_set_session_parameters()
int qat_crypto_sym_configure_session_aead()
int qat_crypto_sym_configure_session_cipher()
int qat_crypto_sym_configure_session_auth()
int qat_alg_aead_session_create_content_desc_cipher()
int qat_alg_aead_session_create_content_desc_auth()
static struct rte_crypto_auth_xform qat_get_auth_xform()
static struct rte_crypto_cipher_xform qat_get_cipher_xform()
Gage Eads [Mon, 4 Jun 2018 19:40:00 +0000 (14:40 -0500)]
net: rename u16 to fix shadowed declaration
This patch renames u16 to u16_buf. u16 as a variable name causes a shadowed
declaration warning if, for example, the application also typedefs u16
(e.g. by including a header containing "typedef unsigned short u16") and
the application is built with -Wshadow.
Ferruh Yigit [Wed, 16 May 2018 14:42:20 +0000 (15:42 +0100)]
igb_uio: fail and log if kernel lock down is enabled
When EFI secure boot is enabled, it is possible to lock down kernel and
prevent accessing device BARs and this makes igb_uio unusable.
Lock down patches are not part of the vanilla kernel but they are
applied and used by some distros already [1].
It is not possible to fix this issue, but intention of this patch is to
detect and log if kernel lock down enabled and don't insert the module
for that case.
The challenge is since this feature enabled by distros, they have
different config options and APIs for it. This patch is done based on
Fedora and Ubuntu kernel source, may needs to add more distro specific
support.
[1]
kernel.ubuntu.com/git/ubuntu/ubuntu-artful.git/commit/?id=99f9ef18d5b6
And a few more patches too.
Ferruh Yigit [Tue, 26 Jun 2018 11:38:07 +0000 (12:38 +0100)]
kni: fix build with gcc 8.1
Error observed when CONFIG_RTE_KNI_KMOD_ETHTOOL config option is
enabled.
build error:
In function ‘strncpy’,
inlined from ‘igb_get_drvinfo’ at
kernel/linux/kni/igb_ethtool.c:814:2:
include/linux/string.h:246:9: error: ‘__builtin_strncpy’ output
may be truncated copying 31 bytes from a string of length 42
[-Werror=stringop-truncation]
return __builtin_strncpy(p, q, size);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fixed by using strlcpy instead of strncpy.
adapter->fw_version size kept same because of c3698192940c ("kni: fix build with gcc 7.1")
Also next line strncpy usage replaced with strlcpy while arround.
Fixes: c3698192940c ("kni: fix build with gcc 7.1") Cc: stable@dpdk.org Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Helin Zhang [Wed, 20 Jun 2018 10:37:02 +0000 (11:37 +0100)]
maintainers: update Intel sub-tree committers
For subtree of dpdk-next-net-intel, Qi Zhang has agreed to take
the committer role, to replace Helin Zhang. Also Beilei Xing has
agreed to be the backup committer of the subtree.
Thomas Monjalon [Wed, 20 Jun 2018 10:38:06 +0000 (12:38 +0200)]
bus/dpaa: fix build
The DPAA bus driver is defining some macros without prefix.
So it can conflict with other libraries like libbsd:
drivers/bus/dpaa/include/compat.h:53:
error: "__packed" redefined
/usr/include/bsd/sys/cdefs.h:120:
note: this is the location of the previous definition
Fixes: 39f373cf015a ("bus/dpaa: add compatibility and helper macros") Cc: stable@dpdk.org Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Michal Krawczyk [Tue, 19 Jun 2018 07:58:20 +0000 (09:58 +0200)]
net/ena: fix FreeBSD build
The FreeBSD define was removed from platform file when HAL was upgraded
to newer version.
In file included from drivers/net/ena/ena_ethdev.c:45:
from drivers/net/ena/ena_ethdev.h:42:
from drivers/net/ena/base/ena_com.h:37:
drivers/net/ena/base/ena_plat.h:48:2: error: "Invalid platform"
Fixes: 3adcba9a8987 ("net/ena: update HAL to the newer version") Signed-off-by: Michal Krawczyk <mk@semihalf.com>
Nikhil Rao [Sun, 3 Jun 2018 14:10:46 +0000 (19:40 +0530)]
eventdev: fix internal port logic in Rx adapter
Set the internal_event_port flag when the ethdev-eventdev
packet transfer is implemented in hardware and add a check
for the flag to ignore the connection when setting up the
WRR polling sequence.
Fixes: 9c38b704d280 ("eventdev: add eth Rx adapter implementation") Cc: stable@dpdk.org Signed-off-by: Nikhil Rao <nikhil.rao@intel.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Nikhil Rao [Sun, 3 Jun 2018 11:41:08 +0000 (17:11 +0530)]
eventdev: fix missing update to Rx adaper WRR position
After dequeuing Rx packets and enqueueing them to the
temporary buffer towards eventdev, the packet Rx loop exits
if the temporary buffer is full but the current WRR position
is not saved.
Save away the current value of the WRR position, so packets
are dequeued from the correct Rx queue in the next invocation.
Vipin Varghese [Mon, 21 May 2018 13:53:55 +0000 (19:23 +0530)]
test/eventdev: add multi-ports test
Add a new test to enhance the test suite, to allow multiple eth ports
rx queue to be added to rx bridge adapter. Update the test function to
reflect change of port index from 8 to 16 bit
Add small amount of additional code, use consistent variable names
across code blocks, change the image to represent queues and
CPU cores intuitively. These help improve the eventdev library
documentation.
Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com> Reviewed-by: Gavin Hu <gavin.hu@arm.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
Nikhil Rao [Tue, 22 May 2018 21:06:42 +0000 (02:36 +0530)]
eventdev: fix port in Rx adapter internal function
The dev_id parameter to fill_event_buffer() should be 16 bit,
also rename to to eth_dev_id to avoid confusion with event device
id elsewhere in the file.
Fixes: c2189c907dd1 ("eventdev: make ethdev port identifiers 16-bit") Cc: stable@dpdk.org Signed-off-by: Nikhil Rao <nikhil.rao@intel.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
The mlx5 driver had two init functions, but this could
cause log initialization to be done after the
other initialization. Also, the name of the function does
not match convention (cut/paste error?).
Fix by initializing log type first at start of the pmd_init.
This also gets rid of having two constructor functions.
Fixes: a170a30d22a8 ("net/mlx5: use dynamic logging") Cc: stable@dpdk.org Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Adrien Mazarguil [Tue, 22 May 2018 15:36:59 +0000 (17:36 +0200)]
net/mlx4: fix minor resource leak during init
Temporary IB device context and list are not freed in case of a successful
initialization of the device.
This issue is caused by the two following commits, the first of which
causes initialization to return early, while the second one goes a bit
overboard while switching to negative errno values; an internal variable
(err) is needed to tell success from failure at the end of the function
since rte_errno is not reliable enough.
Fixes: f2318196c71a ("net/mlx4: remove limitation on number of instances") Fixes: 9d14b27308a0 ("net/mlx4: standardize on negative errno values") Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Kiran Kumar [Wed, 23 May 2018 09:11:21 +0000 (14:41 +0530)]
net/bonding: fix MAC address reset
Currently when resetting bond mac address, we are getting the
persisted mac address from slave info considering primary port
as index. But we need to compare the port id from slave info
with the primary port to get the primary slave index and get
the persisted mac address. Without this fix, persisted mac addr
will be zero and rte_eth_dev_default_mac_addr_set will fail.
Fixes: a45b288ef21a ("bond: support link status polling") Cc: stable@dpdk.org Signed-off-by: Kiran Kumar <kiran.kokkilagadda@caviumnetworks.com>
Tiwei Bie [Fri, 8 Jun 2018 03:22:24 +0000 (11:22 +0800)]
net/ifc: enable the host notifier support
The necessary vDPA ops have already been implemented
in ifcvf driver. So just need to announce the necessary
protocol features to enable the host notifier support.
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Acked-by: Xiao Wang <xiao.w.wang@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Tiwei Bie [Fri, 8 Jun 2018 03:22:23 +0000 (11:22 +0800)]
vhost: support host notifier
When a vDPA device is attached, vhost user will try to
register host notifiers to QEMU to allow notifications
to be delivered between the driver in the guest and the
vDPA device in the host directly.
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Tonghao Zhang [Fri, 8 Jun 2018 09:18:04 +0000 (02:18 -0700)]
vhost: refine new device function
Make sure find avalid device id before allocating
virtio_net, if not, return directly. It may avoid
allocating and freeing virtio_net when there is
not valid device id.
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Chas Williams [Thu, 17 May 2018 23:22:52 +0000 (19:22 -0400)]
net/bonding: always update bonding link status
When the first ETH_LINK_UP slave is added to a bonding device, it is
immediately activated. If these are polling slaves, there will be a
later link state event, when last_link_status doesn't match link_status.
But because this slave is already activated, the bonding device's link
status isn't updated.
To fix this, we always attempt to update the bonding device's link status
in the link state change callback.
Adrien Mazarguil [Wed, 13 Jun 2018 16:27:43 +0000 (18:27 +0200)]
app/testpmd: fix crash when attaching a device
Below commit checks global device information to determine if a port uses
the softnic driver once initialized. Problem is that this information is
not available at this point when a port is initialized interactively
through a "port attach XXX" command, crashing testpmd.
This patch systematically initializes global device information to address
this issue.
Since the kni library is an optional library, we need to add a check
here to ensure that the kni wrapper PMD is only built when the main kni
lib is being built.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Xiao Wang [Wed, 13 Jun 2018 11:32:45 +0000 (19:32 +0800)]
net/ifc: make driver name consistent
Make the compiler switch name and document name consistent as ``ifc`` to
avoid confusion. Also rename the map file to standard name for meson
build in the process.
Signed-off-by: Xiao Wang <xiao.w.wang@intel.com> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>