dpdk.git
6 years agonet/dpaa: support Tx and Rx queue setup
Shreyansh Jain [Thu, 28 Sep 2017 12:29:44 +0000 (17:59 +0530)]
net/dpaa: support Tx and Rx queue setup

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agoconfig: enable NXP DPAA PMD compilation
Shreyansh Jain [Thu, 28 Sep 2017 12:29:43 +0000 (17:59 +0530)]
config: enable NXP DPAA PMD compilation

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agonet/dpaa: add NXP DPAA PMD driver skeleton
Shreyansh Jain [Thu, 28 Sep 2017 12:29:42 +0000 (17:59 +0530)]
net/dpaa: add NXP DPAA PMD driver skeleton

A skeleton which would be called after bus device scan. It currently
fails to identify the device.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add DPAA PMD logging macros
Shreyansh Jain [Thu, 28 Sep 2017 12:29:41 +0000 (17:59 +0530)]
bus/dpaa: add DPAA PMD logging macros

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agoconfig: enable compilation of DPAA mempool driver
Shreyansh Jain [Thu, 28 Sep 2017 12:29:40 +0000 (17:59 +0530)]
config: enable compilation of DPAA mempool driver

This patch also adds configuration necessary for compilation of DPAA
Mempool driver into the DPAA specific config file.
CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS=dpaa is also configured to allow
applications to use DPAA mempool as default.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agomempool/dpaa: support NXP DPAA mempool
Shreyansh Jain [Thu, 28 Sep 2017 12:29:39 +0000 (17:59 +0530)]
mempool/dpaa: support NXP DPAA mempool

This Mempool driver works with DPAA BMan hardware block. This block
manages data buffers in memory, and provides efficient interface with
other hardware and software components for buffer requests.

This patch adds support for BMan. Compilation would be enabled in
subsequent patches.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add DPAA mempool logging macros
Shreyansh Jain [Thu, 28 Sep 2017 12:29:38 +0000 (17:59 +0530)]
bus/dpaa: add DPAA mempool logging macros

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agodoc: add NXP DPAA PMD documentation
Shreyansh Jain [Thu, 28 Sep 2017 12:29:37 +0000 (17:59 +0530)]
doc: add NXP DPAA PMD documentation

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: integrate DPAA bus with hardware blocks
Shreyansh Jain [Thu, 28 Sep 2017 12:29:36 +0000 (17:59 +0530)]
bus/dpaa: integrate DPAA bus with hardware blocks

Now that QBMAN (QMAN, BMAN) and FMAN drivers are available, this patch
integrates the DPAA Bus driver for using the drivers for scanning
devices and calling the PMD registered probe callbacks.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add fman flow control threshold setting
Shreyansh Jain [Thu, 28 Sep 2017 12:29:35 +0000 (17:59 +0530)]
bus/dpaa: add fman flow control threshold setting

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add BMAN hardware interfaces
Shreyansh Jain [Thu, 28 Sep 2017 12:29:34 +0000 (17:59 +0530)]
bus/dpaa: add BMAN hardware interfaces

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: support FMAN frame queue lookup
Shreyansh Jain [Thu, 28 Sep 2017 12:29:33 +0000 (17:59 +0530)]
bus/dpaa: support FMAN frame queue lookup

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add BMAN driver core
Shreyansh Jain [Thu, 28 Sep 2017 12:29:32 +0000 (17:59 +0530)]
bus/dpaa: add BMAN driver core

The Buffer Manager (BMan) is a hardware buffer pool management block that
allows software and accelerators on the datapath to acquire and release
buffers in order to build frames.

This patch adds the core routines.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add QMAN driver core routines
Shreyansh Jain [Thu, 28 Sep 2017 12:29:31 +0000 (17:59 +0530)]
bus/dpaa: add QMAN driver core routines

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add QMAN interface driver
Shreyansh Jain [Thu, 28 Sep 2017 12:29:30 +0000 (17:59 +0530)]
bus/dpaa: add QMAN interface driver

The Queue Manager (QMan) is a hardware queue management block that
allows software and accelerators on the datapath to enqueue and dequeue
frames in order to communicate.

This part of QBMAN DPAA Block.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add routines for managing a RB tree
Shreyansh Jain [Thu, 28 Sep 2017 12:29:29 +0000 (17:59 +0530)]
bus/dpaa: add routines for managing a RB tree

QMAN frames are managed over a RB tree data structure.
This patch introduces necessary routines for implementing a RB tree.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add layer for interrupt emulation using pthread
Shreyansh Jain [Thu, 28 Sep 2017 12:29:28 +0000 (17:59 +0530)]
bus/dpaa: add layer for interrupt emulation using pthread

An interrupt manager is implemented by emulating over pthreads.
Handlers are registered by QBMAN layer for being notified about
any interrupt request from DPAA blocks in userspace.

Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: enable DPAA IOCTL portal driver
Shreyansh Jain [Thu, 28 Sep 2017 12:29:27 +0000 (17:59 +0530)]
bus/dpaa: enable DPAA IOCTL portal driver

Userspace applications interact with DPAA blocks using this IOCTL driver.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add FMAN hardware operations
Shreyansh Jain [Thu, 28 Sep 2017 12:29:26 +0000 (17:59 +0530)]
bus/dpaa: add FMAN hardware operations

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: introducing FMan configurations
Shreyansh Jain [Thu, 28 Sep 2017 12:29:25 +0000 (17:59 +0530)]
bus/dpaa: introducing FMan configurations

FMan or Frame Manager, inspects traffic, splits it into queueson ingress.
It is also responsible for directing traffic on queues on egress.

This patch introduces FMan configurational interfaces. This layer is
used by Bus driver for configuring the hardware block.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add OF parser for device scanning
Shreyansh Jain [Thu, 28 Sep 2017 12:29:24 +0000 (17:59 +0530)]
bus/dpaa: add OF parser for device scanning

This layer is used by Bus driver's scan function. Devices are parsed
using OF parser and added to DPAA device list.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agobus/dpaa: add compatibility and helper macros
Hemant Agrawal [Thu, 28 Sep 2017 12:29:23 +0000 (17:59 +0530)]
bus/dpaa: add compatibility and helper macros

Linked list, bit operations and compatibility macros.

Signed-off-by: Geoff Thorpe <geoff.thorpe@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
6 years agobus/dpaa: introduce NXP DPAA bus driver skeleton
Shreyansh Jain [Thu, 28 Sep 2017 12:29:22 +0000 (17:59 +0530)]
bus/dpaa: introduce NXP DPAA bus driver skeleton

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
6 years agoconfig: add NXP DPAA SoC build configuration
Shreyansh Jain [Thu, 28 Sep 2017 12:29:21 +0000 (17:59 +0530)]
config: add NXP DPAA SoC build configuration

This patch adds skeleton build configuration for DPAA platform.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
6 years agonet/vmxnet3: fix dereference before null check
Michal Jastrzebski [Fri, 29 Sep 2017 13:04:02 +0000 (15:04 +0200)]
net/vmxnet3: fix dereference before null check

Coverity reports check_after_deref:
Null-checking rq suggests that it may be null, but it
has already been dereferenced on all paths leading to
the check.
This patch removes NULL checking of "rq" from function
vmxnet3_dev_rx_queue_reset as it is already checked against NULL
one level up the callstack (function vmxnet3_dev_clear_queues).

Coverity issue: 143468
Fixes: 5aecdc17a97d ("vmxnet3: fix stop/restart")
Cc: stable@dpdk.org
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
Signed-off-by: Michal Jastrzebski <michalx.k.jastrzebski@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agomk: add silvermont to replace atom as a target
Xiaoyun Li [Fri, 8 Sep 2017 03:28:52 +0000 (11:28 +0800)]
mk: add silvermont to replace atom as a target

The -march=atom flag is for older atom CPUs and don't support SSE4 which
is the minimum requirement for DPDK. And in fact, the current atom CPUs
support SSE4. So this patch removes atom as a target for DPDK builds and
adds a silvermont replacement instead.

Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
6 years agonet/bnxt: support enable/disable interrupt
Somnath Kotur [Thu, 28 Sep 2017 21:43:45 +0000 (16:43 -0500)]
net/bnxt: support enable/disable interrupt

Implement Rx Queue interrupt enable/disable functions

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support get/set EEPROM
Somnath Kotur [Thu, 28 Sep 2017 21:43:44 +0000 (16:43 -0500)]
net/bnxt: support get/set EEPROM

Add support for get/set_eeprom, get_eeprom_length dev_ops.
Defined the structures required to get/set the eeprom length/data
in hsi_struct_defs hdr file along with implementation.

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support getting ptypes
Ajit Khaparde [Thu, 28 Sep 2017 21:43:43 +0000 (16:43 -0500)]
net/bnxt: support getting ptypes

This patch adds support for dev_supported_ptypes_get

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix interrupt handler
Ajit Khaparde [Thu, 28 Sep 2017 21:43:42 +0000 (16:43 -0500)]
net/bnxt: fix interrupt handler

In some cases the interrupt handler is accessing cpr, which has
already been freed causing segfaults. This patch avoids such accesses.

Fixes: 7bc8e9a227cc ("net/bnxt: support async link notification")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix per queue stats display in xstats
Ajit Khaparde [Thu, 28 Sep 2017 21:43:41 +0000 (16:43 -0500)]
net/bnxt: fix per queue stats display in xstats

While gathering per queue stats, we are overwriting some of the
stats. This causes some of the counters in xstats to be incorrect.

Fixes: 577d3dced0dc ("net/bnxt: refactor the query stats")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agodoc: update release notes for bnxt
Ajit Khaparde [Thu, 28 Sep 2017 21:43:40 +0000 (16:43 -0500)]
doc: update release notes for bnxt

Update release doc briefly describing updates to bnxt PMD.

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support flow filter ops
Ajit Khaparde [Thu, 28 Sep 2017 21:43:39 +0000 (16:43 -0500)]
net/bnxt: support flow filter ops

This patch adds support for flow validate/create/destroy/flush,
ethertype add/del ops

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: add new HWRM structs to support flow filtering
Ajit Khaparde [Thu, 28 Sep 2017 21:43:38 +0000 (16:43 -0500)]
net/bnxt: add new HWRM structs to support flow filtering

HWRM structs added:
hwrm_cfa_ntuple_filter_alloc, hwrm_cfa_ntuple_filter_free,
hwrm_cfa_ntuple_filter_cfg, hwrm_cfa_em_flow_alloc,
hwrm_cfa_em_flow_free, hwrm_cfa_em_flow_cfg

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support Tx descriptor status
Ajit Khaparde [Thu, 28 Sep 2017 21:43:37 +0000 (16:43 -0500)]
net/bnxt: support Tx descriptor status

Add support for tx_descriptor_status dev_op

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support Rx descriptor status
Ajit Khaparde [Thu, 28 Sep 2017 21:43:36 +0000 (16:43 -0500)]
net/bnxt: support Rx descriptor status

Add support for rx_descriptor_status dev_op

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support Rx queue count
Ajit Khaparde [Thu, 28 Sep 2017 21:43:35 +0000 (16:43 -0500)]
net/bnxt: support Rx queue count

add support for rx_queue_count dev_op

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: set the hash key size
Ajit Khaparde [Thu, 28 Sep 2017 21:43:34 +0000 (16:43 -0500)]
net/bnxt: set the hash key size

We were not setting the dev_info.hash_key_size. Setting it now.

Fixes: 0a6d2a720078 ("net/bnxt: get device infos")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix config RSS update
Ajit Khaparde [Thu, 28 Sep 2017 21:43:33 +0000 (16:43 -0500)]
net/bnxt: fix config RSS update

We are not configuring the RSS settings updated by rss_hash_update().
Fixing it.

Fixes: fcc0aa1edc10 ("net/bnxt: add RSS hash configuration")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: support xstats get by id
Ajit Khaparde [Thu, 28 Sep 2017 21:43:32 +0000 (16:43 -0500)]
net/bnxt: support xstats get by id

This patch adds support for xstats_get_by_id/xstats_get_names_by_id.

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: update status of Rx IP/L4 CKSUM
Ajit Khaparde [Thu, 28 Sep 2017 21:43:31 +0000 (16:43 -0500)]
net/bnxt: update status of Rx IP/L4 CKSUM

update ol_flags with the appropriate status of IP/L4 cksum in Rx path.

Fixes: 2eb53b134aae ("net/bnxt: add initial Rx code")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: set checksum offload flags correctly
Ajit Khaparde [Thu, 28 Sep 2017 21:43:30 +0000 (16:43 -0500)]
net/bnxt: set checksum offload flags correctly

We are not correctly setting hw checksum offload for all the
offload flags. This patch fixes that.

Fixes: 6eb3cc2294fd ("net/bnxt: add initial Tx code")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix usage of VMDq flags
Ajit Khaparde [Thu, 28 Sep 2017 21:43:29 +0000 (16:43 -0500)]
net/bnxt: fix usage of VMDq flags

Map ETH_VMDQ_ACCEPT_HASH_UC to the promiscuous bit.
Also, set ALLMULTI and MCAST when MCAST is set to ensure multicast traffic
is received regardless of the VF driver list.

Fixes: 4cfe399f6550 ("net/bnxt: support to set VF rxmode")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hurd <stephen.hurd@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix an issue with broadcast traffic
Ajit Khaparde [Thu, 28 Sep 2017 21:43:28 +0000 (16:43 -0500)]
net/bnxt: fix an issue with broadcast traffic

In bnxt_hwrm_cfa_l2_set_rx_mask, we are ignoring the previous
setting of HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST and
setting it again, thereby wrongly enabling Broadcast.

Fixes: 244bc98b0da7 ("net/bnxt: set L2 Rx mask")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix Rx handling and buffer allocation logic
Ajit Khaparde [Thu, 28 Sep 2017 21:43:27 +0000 (16:43 -0500)]
net/bnxt: fix Rx handling and buffer allocation logic

Even when rx buffer allocation fails, we are wrongly updating
the producer index. This patch fixes that.
Also in case of a buffer allocation failure, reattempt buffer
allocation before the rx handler exits.

Fixes: 2eb53b134aae ("net/bnxt: add initial Rx code")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: handle multi queue mode properly
Ajit Khaparde [Thu, 28 Sep 2017 21:43:26 +0000 (16:43 -0500)]
net/bnxt: handle multi queue mode properly

We are currently not handling multi queue RX/RSS modes correctly.
If RSS is not requested, create one VNIC per RXQ.

Fixes: 6133f207970c ("net/bnxt: add Rx queue create/destroy")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix calculation of number of pools
Ajit Khaparde [Thu, 28 Sep 2017 21:43:25 +0000 (16:43 -0500)]
net/bnxt: fix calculation of number of pools

The calculation for number of pools is wrong.
We are wrongly overwriting the calculated value with ETH_64_POOLS.
Accordingly fix the size of ff_pools array.
Fix the log message as well.

Fixes: 4cfe399f6550 ("net/bnxt: support to set VF rxmode")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix an issue with group id calculation
Ajit Khaparde [Thu, 28 Sep 2017 21:43:24 +0000 (16:43 -0500)]
net/bnxt: fix an issue with group id calculation

start_grp_id is incremented wrongly. Fixing it.

Fixes: daef48efe5e5 ("net/bnxt: support set MTU")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: use 64-bits of address for VLAN table
Ajit Khaparde [Thu, 28 Sep 2017 21:43:23 +0000 (16:43 -0500)]
net/bnxt: use 64-bits of address for VLAN table

We are wrongly using just 16 bits of address from rte_mem_virt2phy
while filling the vlan table address instead of 64-bytes.
Most likely a copy-paste error.

Fixes: 36735a932ca7 ("net/bnxt: support set VF QOS and MAC anti spoof")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/bnxt: fix HWRM macros and locking
Ajit Khaparde [Thu, 28 Sep 2017 21:43:22 +0000 (16:43 -0500)]
net/bnxt: fix HWRM macros and locking

Obtain the spinlock in HWRM_PREP()
Eliminate two unnecessary arguments in HWRM_PREP().
Unlock the spinlock before returning in HWRM_ERROR_CHECK()
Add new HWRM_UNLOCK() macro
Update usage of the thre macros.

Fixes: 804e746c7b73 ("net/bnxt: add hardware resource manager init code")
Cc: stable@dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
6 years agonet/i40e: fix mirror rule reset when port is closed
Wei Dai [Mon, 25 Sep 2017 06:36:53 +0000 (14:36 +0800)]
net/i40e: fix mirror rule reset when port is closed

When an i40e PF port is stopped, all mirror rules should be reserved.
But when an i40e PF port is closed, all mirror rules should be removed.
When a mirror rule is removed, its associated hardware and software
resource should also be removed.

Fixes: a4def5edf0fc ("i40e: enable port mirroring")
Cc: stable@dpdk.org
Signed-off-by: Wei Dai <wei.dai@intel.com>
Tested-by: Lijuan Tu <lijuanx.a.tu@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
6 years agonet/mlx5: support upstream rdma-core
Shachar Beiser [Tue, 26 Sep 2017 15:38:24 +0000 (17:38 +0200)]
net/mlx5: support upstream rdma-core

This removes the dependency on specific Mellanox OFED libraries by
using the upstream rdma-core and linux upstream community code.
Both rdma-core upstream and Mellanox OFED are Linux user-space packages:
  1. Rdma-core is Linux upstream user-space package.(Generic)
  2. Mellanox OFED is Mellanox's Linux user-space package.(Proprietary)
The difference between the two are the APIs towards the kernel.

Support for x86-32 is removed due to issues in rdma-core library.
ICC compilation will be supported as soon as the following patch is
integrated in rdma-core:
https://marc.info/?l=linux-rdma&m=150643474705690&w=2

Signed-off-by: Shachar Beiser <shacharbe@mellanox.com>
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
6 years agonet/ark: add null pointer check
Yong Wang [Thu, 14 Sep 2017 12:03:56 +0000 (08:03 -0400)]
net/ark: add null pointer check

In function ark_config_device(), there are several malloc without null
point check. Fix it by adding null point check.

Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
Acked-by: Ed Czeck <ed.czeck@atomicrules.com>
6 years agonet/i40e: fix assignment of enum values
Tomasz Kulasek [Fri, 22 Sep 2017 12:36:25 +0000 (14:36 +0200)]
net/i40e: fix assignment of enum values

mixed_enums: Mixing enum types enum i40e_vsi_type and enum
             virtchnl_vsi_type for type

Coverity issue 158651
Fixes: a58860f68929 ("net/i40e/base: use new virtchnl header file")
Cc: stable@dpdk.org
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
6 years agodoc: add Linux flower support check in TAP guide
Thomas Monjalon [Wed, 20 Sep 2017 13:03:13 +0000 (15:03 +0200)]
doc: add Linux flower support check in TAP guide

The flow API is supported in TAP PMD if flower is supported in Linux.
Some commands are combined to suggest a convenient check of its support
by the running kernel.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
6 years agonet/af_packet: make qdisc bypass configurable
Chas Williams [Thu, 21 Sep 2017 09:57:58 +0000 (05:57 -0400)]
net/af_packet: make qdisc bypass configurable

In certain situations, low speed interfaces, it may be desirable to
have the flow control provided by the kernel queuing disciplines.

Signed-off-by: Chas Williams <chas3@att.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agonet/i40e: refactor some stats related functions
Wei Zhao [Thu, 21 Sep 2017 06:32:25 +0000 (14:32 +0800)]
net/i40e: refactor some stats related functions

Merge i40evf_dev_stats_get and i40evf_get_statistics to be one function.

Rename i40evf_update_stats to i40evf_query_stats,
and chang i40evf_update_vsi_stats to i40evf_update_stats.

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agonet/i40e: support reset stats in VF
Wei Zhao [Thu, 21 Sep 2017 06:32:24 +0000 (14:32 +0800)]
net/i40e: support reset stats in VF

Add stats reset support to VF.

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agoapp/testpmd: fix packet throughput after stats reset
Wei Zhao [Thu, 21 Sep 2017 06:32:23 +0000 (14:32 +0800)]
app/testpmd: fix packet throughput after stats reset

Testpmd calculates packet throughput by getting a diff of previous stats
value and current one.

If a stats clear called after previous sample taken, the diff will be
negative and throughput calculation will be wrong.

If current stats value is smaller than previous one, set throughput to
zero.

Fixes: 0e106980301d ("app/testpmd: show throughput in port stats")
Cc: stable@dpdk.org
Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agonet/i40e: fix clear xstats bug in VF
Wei Zhao [Thu, 21 Sep 2017 06:32:22 +0000 (14:32 +0800)]
net/i40e: fix clear xstats bug in VF

Clearing VSI stats done by setting an offset value to latest stats
and further stats values are subtracted from that offset.

This setting offset and baselining logic exists in PF driver, but for VF
there is no way to update its VSI offset in the PF.

So same baselining logic added into VF, also setting VSI offset in VF
fixed to support VF stats clear.

Fixes: da61cd0849766 ("i40evf: add extended stats")
Cc: stable@dpdk.org
Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agonet/enic: fix multi-process operation
John Daley [Mon, 11 Sep 2017 18:58:33 +0000 (11:58 -0700)]
net/enic: fix multi-process operation

- Use rte_malloc() instead of malloc() for the per device 'vdev' structure
  so that it can be shared across processes.
- Only initialize the device if the process type is RTE_PROC_PRIMARY
- Only allow the primary process to do queue setup, start/stop, promisc
  allmulticast, mac add/del, mtu.

Fixes: fefed3d1e62c ("enic: new driver")
Cc: stable@dpdk.org
Signed-off-by: John Daley <johndale@cisco.com>
Reviewed-by: Aaron Conole <aconole@redhat.com>
6 years agonet/vmxnet3: fix unintentional integer overflow
Sebastian Basierski [Tue, 19 Sep 2017 11:47:58 +0000 (13:47 +0200)]
net/vmxnet3: fix unintentional integer overflow

Fixed overflow by casting txq->cmd_ring.next2fill to uint64_t type.

Coverity issue: 143457

Fixes: 01fef6e3c181 ("net/vmxnet3: allow variable length Tx data ring")
Cc: stable@dpdk.org
Signed-off-by: Sebastian Basierski <sebastianx.basierski@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
6 years agonet/tap: fix unregistering callback with invalid fd
Vipin Varghese [Mon, 18 Sep 2017 18:47:35 +0000 (19:47 +0100)]
net/tap: fix unregistering callback with invalid fd

tap_intr_handle_set() called by tap_dev_start(), and if LSC is disabled
(dev_conf.intr_conf.lsc == 0), it tries to unregister interrupt
callback without checking the interrupt file descriptor.

Fixes: c0bddd3a057f ("net/tap: add link status notification")
Cc: stable@dpdk.org
Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
6 years agonet/bonding: rename map file to standard name
Bruce Richardson [Thu, 14 Sep 2017 15:57:56 +0000 (16:57 +0100)]
net/bonding: rename map file to standard name

Naming convention for net drivers is "rte_pmd_<name>_version.map"

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
6 years agonet/qede/base: update PMD version to 2.6.0.1
Rasesh Mody [Tue, 19 Sep 2017 01:51:43 +0000 (18:51 -0700)]
net/qede/base: update PMD version to 2.6.0.1

Update QEDE PMD version to 2.6.0.1

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: remove unused input parameter
Rasesh Mody [Tue, 19 Sep 2017 01:51:42 +0000 (18:51 -0700)]
net/qede/base: remove unused input parameter

Remove unused input parameter from ecore_dcbx_info_free().

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: support WoL writes
Rasesh Mody [Tue, 19 Sep 2017 01:51:41 +0000 (18:51 -0700)]
net/qede/base: support WoL writes

Add support programing of WoL Bitmap paterns via management FW mailbox.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: disable aRFS for NPAR and 100G
Rasesh Mody [Tue, 19 Sep 2017 01:51:40 +0000 (18:51 -0700)]
net/qede/base: disable aRFS for NPAR and 100G

Disable accelerated RFS for NPAR and 100G using ECORE_MF_DISABLE_ARFS
multi function mode bit.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: retain dcbx config till actually applied
Rasesh Mody [Tue, 19 Sep 2017 01:51:39 +0000 (18:51 -0700)]
net/qede/base: retain dcbx config till actually applied

Retain user dcbx configurations till the config is applied to the adapter
i.e. till the negotiation completes. If base driver receives a config
update before negotiation completes, then base driver merges the new config
with the cached config and sends it to management FW.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: catch an init command write failure
Rasesh Mody [Tue, 19 Sep 2017 01:51:38 +0000 (18:51 -0700)]
net/qede/base: catch an init command write failure

In case ecore_init_rt() fails for some reason, catch the failure and
fail the initialization.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: add feature support for per-PF virtual link
Rasesh Mody [Tue, 19 Sep 2017 01:51:37 +0000 (18:51 -0700)]
net/qede/base: add feature support for per-PF virtual link

Add per-PF virtual link support.
This feature adds a logical layer over the physical link to reflect the
control of OEM management protocols either thru' sideband or a switch.
For example, a switch could send a link-down tlv for a PF and this will
put down logical link and virtual link in shared mem (SHMEM) for that PF
inspite of physical link being up for that port.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: dcbx dscp related extensions
Rasesh Mody [Tue, 19 Sep 2017 01:51:36 +0000 (18:51 -0700)]
net/qede/base: dcbx dscp related extensions

- Add an internal API ecore_dcbx_get_dscp_value() for getting the
dscp value for a given priority.

- Initialize dscp parameters in the dcbx-config cache to be used by
the clients for configuring dcbx parameters.

- Reset NIG_REG_DSCP_TO_TC_MAP_ENABLE register when user disables the dscp.

- Fix to always send "dscp + dcbx" update to FW.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: move define to header file
Rasesh Mody [Tue, 19 Sep 2017 01:51:35 +0000 (18:51 -0700)]
net/qede/base: move define to header file

Move FW_MB_PARAM_LOAD_DONE_DID_EFUSE_ERROR to header file

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: support driver attribute repository
Rasesh Mody [Tue, 19 Sep 2017 01:51:34 +0000 (18:51 -0700)]
net/qede/base: support driver attribute repository

Add support for driver attributes repository in MFW and base driver.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: support mapped doorbell BARs for VF
Rasesh Mody [Tue, 19 Sep 2017 01:51:33 +0000 (18:51 -0700)]
net/qede/base: support mapped doorbell BARs for VF

Determines whether VF utilizes doorbells via limited register bar or via
the doorbell bar and return the size of the HW doorbell bar via acquire
response. By doing that limit the VF CIDs to an amount that would make sure
doorbells for all CIDs fall within the bar.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: add UFP support
Rasesh Mody [Tue, 19 Sep 2017 01:51:32 +0000 (18:51 -0700)]
net/qede/base: add UFP support

Add support for UFP (Unified Fabric Port) multi-function mode.
It includes new APIs for reading UFP configuration, handling
UFP events, retriving UFP status and UFP ramrod update etc.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: update firmware to 8.30.12.0
Rasesh Mody [Tue, 19 Sep 2017 01:51:31 +0000 (18:51 -0700)]
net/qede/base: update firmware to 8.30.12.0

Upgrade QEDE PMD FW to version 8.30.12.0.

The firmware upgrade change details are as:
 - Add support for steering by IP and UDP destination port.
 - Add source QP field for GSI offload.
 - Add UFP support.
 - Add support for outer IPv4 TX CSO with unknown tunnel type (in addition
   to inner header CSO).
 - Support flow ID in accelerated RFS flow.
 - Allow Doorbell on empty SPQ and LL2 TX queue (for doorbell recovery).
 - Enable PCI Relaxed Ordering for L2 RX data placement.
 - Additional enhancements and bug fixes

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: fix number of app table entries
Rasesh Mody [Tue, 19 Sep 2017 01:51:30 +0000 (18:51 -0700)]
net/qede/base: fix number of app table entries

Configure only the available/requested number of app entries rather
than max entries (DCBX_MAX_APP_PROTOCOL) in ecore_dcbx_get_app_data().
Also, fixed a minor issue where incorrect size value is being passed for
memcpy().

Fixes: 26ae839d06e9 ("qede: add DCBX support")
Cc: stable@dpdk.org
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: change verbosity
Rasesh Mody [Tue, 19 Sep 2017 01:51:29 +0000 (18:51 -0700)]
net/qede/base: change verbosity

Change verbosity of events related to malicious VFs to DP_NOTICE
from DP_INFO. They are not just informational events.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: add new macro for CMT mode
Rasesh Mody [Tue, 19 Sep 2017 01:51:28 +0000 (18:51 -0700)]
net/qede/base: add new macro for CMT mode

- Add ECORE_IS_CMT macro (CMT: couple mode teaming) and use that in all the
places where there are checks for number of HW functions per device > 1.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: handle the error condition properly
Rasesh Mody [Tue, 19 Sep 2017 01:51:27 +0000 (18:51 -0700)]
net/qede/base: handle the error condition properly

If for some reason the send message from VF to PF times out, don't bail out
right away without taking proper cleanup action. The goto statement calls
ecore_vf_pf_req_end() which will unlock the mutex previously held.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: semantic changes
Rasesh Mody [Tue, 19 Sep 2017 01:51:26 +0000 (18:51 -0700)]
net/qede/base: semantic changes

- Make ecore_dcbx_set_local_params(), ecore_cm_init_pf()  as static
- Remove src_proto()
- remove reference to PROTOCOLID_TOE when determining whether a a protocol
  requires SRC ILT memory
- Add auxiliary variables in various places
- All other changes are simple semantic corrections

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: fix API return types
Rasesh Mody [Tue, 19 Sep 2017 01:51:25 +0000 (18:51 -0700)]
net/qede/base: fix API return types

- Turn ecore_ptt_get_hw_addr() into static
- Convert ecore_dcbx_get_operational_params() to void since we don't
  care about the return value

Fixes: 26ae839d06e9 ("qede: add DCBX support")
Cc: stable@dpdk.org
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: use function pointers for spq async callback
Rasesh Mody [Tue, 19 Sep 2017 01:51:24 +0000 (18:51 -0700)]
net/qede/base: use function pointers for spq async callback

Change spq async callback to use function pointers instead of switch case
on protocolid.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: use available macro
Rasesh Mody [Tue, 19 Sep 2017 01:51:23 +0000 (18:51 -0700)]
net/qede/base: use available macro

- Use OSAL_PAGE_SIZE instead of assuming it to be 4096.
 - While at it make sure the minimum number of doorbells that can be issued
   is 4.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: use proper units for rate limiting
Rasesh Mody [Tue, 19 Sep 2017 01:51:22 +0000 (18:51 -0700)]
net/qede/base: use proper units for rate limiting

Change module parameter semantics to standard units (Rate limiting is used
for DCQCN feature).

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: refactor device's number of ports logic
Rasesh Mody [Tue, 19 Sep 2017 01:51:21 +0000 (18:51 -0700)]
net/qede/base: refactor device's number of ports logic

- Avoid having num_of_ports as 0 [to prevent a division by 0 via
   MFW_PORT()]. Also fix the MFW_PORT() macro for CMT.
 - Read the device's number of ports from shmem.
 - Rename num_ports_in_engines to num_ports_in_engine.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: read per queue coalescing from HW
Rasesh Mody [Tue, 19 Sep 2017 01:51:20 +0000 (18:51 -0700)]
net/qede/base: read per queue coalescing from HW

Add base driver API to read per queue coalescing from hardware.
Move ecore_set_rxq|txq_coalesce() declarations to ecore_l2.h.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: fix macros to check chip revision/metal
Rasesh Mody [Tue, 19 Sep 2017 01:30:09 +0000 (18:30 -0700)]
net/qede/base: fix macros to check chip revision/metal

Fix the ECORE_IS_[AB]0() macros to check both the chip revision and the
chip metal. Realign defines in the struct ecore_dev.

Fixes: ec94dbc57362 ("qede: add base driver")
Cc: stable@dpdk.org
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: remove unused parameters
Rasesh Mody [Tue, 19 Sep 2017 01:30:08 +0000 (18:30 -0700)]
net/qede/base: remove unused parameters

This is an attempt to clean up many unused API parameters across the base
code. Most of the changes are related to removing unused p_hwfn or p_ptt
handlers. The warnings are generated using 'unused-parameter' cflags.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: prevent stop vport assert by malicious VF
Rasesh Mody [Tue, 19 Sep 2017 01:30:07 +0000 (18:30 -0700)]
net/qede/base: prevent stop vport assert by malicious VF

PF checks upon stop-vport from VF whether it's legal, but if it's not it
would STILL send the request to FW, which might cause it to assert.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: block mbox command to unresponsive MFW
Rasesh Mody [Tue, 19 Sep 2017 01:30:06 +0000 (18:30 -0700)]
net/qede/base: block mbox command to unresponsive MFW

Block sending of mailbox command to the management FW if it is not
responsive. Use MCP_REG_CPU_STATE_SOFT_HALTED register to verify the MCP
is actually halted after sending the halt command and before proceeding
further.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: support doorbell overflow recovery
Rasesh Mody [Tue, 19 Sep 2017 01:30:05 +0000 (18:30 -0700)]
net/qede/base: support doorbell overflow recovery

Add support for doorbell overflow recovery mechanism:
The doorbell recovery mechanism consists of a list of entries which
represent doorbelling entities (l2 queues, roce sq/rq/cqs, the slowpath
spq, etc). Each entity needs to register with the mechanism and provide
the parameters describing it's doorbell, including a location where last
used doorbell data can be found. The doorbell execute function will
traverse the list and doorbell all of the registered entries.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: add API to send STAG config update to FW
Rasesh Mody [Tue, 19 Sep 2017 01:30:04 +0000 (18:30 -0700)]
net/qede/base: add API to send STAG config update to FW

Send updated STAG configuration to the Firmware.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: allow clients to override VF MSI-X table size
Rasesh Mody [Tue, 19 Sep 2017 01:30:03 +0000 (18:30 -0700)]
net/qede/base: allow clients to override VF MSI-X table size

For chip variant CHIP_NUM_AH_xxx, MSI-x configuration for VFs is controlled
per-PF [for all of its child VFs] instead of on a per-VF basis. A flag
called "dont_override_vf_msix" is added that allows the caller/client to
specify the mode they want to operate. If dont_override_vf_msix is false as
in the case of VF of CHIP_NUM_AH_xxx, first a check is made as to what is
currently configured number. Management FW will be asked to configure the
requested number only if its bigger than the currently configured value.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: rename MFW get/set field defines
Rasesh Mody [Tue, 19 Sep 2017 01:30:02 +0000 (18:30 -0700)]
net/qede/base: rename MFW get/set field defines

Changes for management FW, change of _SHIFT defines to _OFFSET.
Accordingly, rename and fix the ECORE_MFW_GET_FIELD() and
ECORE_MFW_SET_FIELD() macros and update wherever used.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: initialize resc lock/unlock params
Rasesh Mody [Tue, 19 Sep 2017 01:30:01 +0000 (18:30 -0700)]
net/qede/base: initialize resc lock/unlock params

Add a function that provides default initialization to resc lock/unlock
parameters. Change acquire flow that use resources into using this
function.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: remove helper functions/structures
Rasesh Mody [Tue, 19 Sep 2017 01:30:00 +0000 (18:30 -0700)]
net/qede/base: remove helper functions/structures

- Remove an additional wrapper function ecore_mcp_nvm_command and
   instead
   use ecore_mcp_nvm_wr_cmd, ecore_mcp_nvm_rd_cmd or ecore_mcp_cmd APIs
   directly as appropriate.
 - Remove struct ecore_mcp_nvm_params
 - Add new NVM command ECORE_EXT_PHY_FW_UPGRADE and fix the expected
   management FW responses in ecore_mcp_nvm_write()
 - Fail the NVM write process on any failing partial write

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: revise management FW mbox access scheme
Rasesh Mody [Tue, 19 Sep 2017 01:29:59 +0000 (18:29 -0700)]
net/qede/base: revise management FW mbox access scheme

Revise the manamgement FW mbox access locking scheme for the access to the
MFW mailbox:
 - add a new linked list called cmd_list to ecore_mcp_info that tracks all
   the mailbox commands sent to management FW and ones waiting for
   response.
 - add a mutex lock called cmd_lock to ecore_mcp_info, a spinlock used to
   serialize the access to this cmd_list and makes sure that the mbox is
   not a pending one before sending a new mbox request. It protects the
   access to the mailbox commands list and sending of the commands.
 - add ecore_mcp_cmd_add|del|get_elem() APIs for new access scheme
 - remove ecore_mcp_mb_lock() and ecore_mcp_mb_unlock()
 - add a mutex lock called link_lock to ecore_mcp_info, a spinlock used for
   syncing SW link-changes and link-changes originating from attention
   context. This locking scheme prevents possible race conditions that may
   occur, such as during link status reporting.
 - Surround OSAL_{MUTEX,SPIN_LOCK}_{ALLOC,DEALLOC} with
   '#ifdef CONFIG_ECORE_LOCK_ALLOC'. In case memory has to be allocated for
   lock primitives, then compile driver with CONFIG_ECORE_LOCK_ALLOC flag.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
6 years agonet/qede/base: avoid possible race condition
Rasesh Mody [Tue, 19 Sep 2017 01:29:58 +0000 (18:29 -0700)]
net/qede/base: avoid possible race condition

There's a possible race in multiple VF scenarios for base driver users
that use the optional APIs ecore_iov_pf_get_and_clear_pending_events,
ecore_iov_pf_add_pending_events. If the client doesn't synchronize the two
calls, it's possible for the PF to clear a VF pending message indication
without ever getting it [as 'get & clear' isn't atomic], leading to VF
timeout on the command.

The solution is to switch into a per-VF indication rather than having a
bitfield for the various VFs with pending events. As part of the solution,
the setting/clearing of the indications is done internally by base driver.
As a result, ecore_iov_pf_add_pending_events is no longer needed and
ecore_iov_pf_get_and_clear_pending_events loses the 'and_clear' from its
name as its now a proper getter.

A VF would be considered 'pending' [I.e., get_pending_events() should
have '1' for it in its bitfield] beginning with the PF's base driver
recognizing a message sent by that VF [in SP_DPC] and ending only when
that VF message is processed.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>