RE: [PATCH] bus/ifpga: fix driver header dependency

2023-10-23 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Monday, October 23, 2023 10:46 PM
> To: dev@dpdk.org
> Cc: sta...@dpdk.org; Xu, Rosen 
> Subject: [PATCH] bus/ifpga: fix driver header dependency
> 
> The driver header bus_ifpga_driver.h was not self sufficient.
> Fix this by including dev_driver.h.
> 
> Fixes: 925c074e377b ("bus/ifpga: make driver-only headers private")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: David Marchand 
> ---
>  drivers/bus/ifpga/bus_ifpga_driver.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/bus/ifpga/bus_ifpga_driver.h
> b/drivers/bus/ifpga/bus_ifpga_driver.h
> index 7b75c2ddbc..5bbe36d6e0 100644
> --- a/drivers/bus/ifpga/bus_ifpga_driver.h
> +++ b/drivers/bus/ifpga/bus_ifpga_driver.h
> @@ -16,6 +16,7 @@ extern "C" {
>  #endif /* __cplusplus */
> 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> --
> 2.41.0

Acked-by: Rosen Xu 


RE: [PATCH 2/2] raw/ifpga/base: fix mmap retcode check fail

2023-02-06 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Chengwen Feng 
> Sent: Monday, February 6, 2023 6:53 PM
> To: tho...@monjalon.net; ferruh.yi...@amd.com; Xu, Rosen
> ; Zhang, Tianfei ; Huang,
> Wei 
> Cc: dev@dpdk.org
> Subject: [PATCH 2/2] raw/ifpga/base: fix mmap retcode check fail
> 
> The MAP_FAILED should be used to determine whether the mapping is
> successful.
> 
> Fixes: e41856b515ce ("raw/ifpga/base: enhance driver reliability in multi-
> process")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Chengwen Feng 
> ---
>  drivers/raw/ifpga/base/opae_hw_api.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/opae_hw_api.c
> b/drivers/raw/ifpga/base/opae_hw_api.c
> index 1117c3e160..6d48d227d6 100644
> --- a/drivers/raw/ifpga/base/opae_hw_api.c
> +++ b/drivers/raw/ifpga/base/opae_hw_api.c
> @@ -380,7 +380,7 @@ static pthread_mutex_t
> *opae_adapter_mutex_open(struct opae_adapter *adapter)
>   PROT_READ | PROT_WRITE, MAP_SHARED,
>   shm_id, 0);
>   adapter->lock = (pthread_mutex_t *)ptr;
> - if (ptr) {
> + if (ptr != MAP_FAILED) {
>   dev_info(NULL,
>   "shared memory %s address is %p\n",
>   shm_name, ptr);
> @@ -499,7 +499,7 @@ static void *opae_adapter_shm_alloc(struct
> opae_adapter *adapter)
>   adapter->shm.size = size;
>   adapter->shm.ptr = mmap(NULL, size, PROT_READ |
> PROT_WRITE,
>   MAP_SHARED,
> shm_id, 0);
> - if (adapter->shm.ptr) {
> + if (adapter->shm.ptr != MAP_FAILED) {
>   dev_info(NULL,
>   "shared memory %s address is %p\n",
>   shm_name, adapter->shm.ptr);
> --
> 2.17.1

It looks good for me.
Reviewed-by: Rosen Xu 


RE: [PATCH 11/11] lib: remove pthread.h from includes

2023-09-09 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Thomas Monjalon 
> Sent: Thursday, September 7, 2023 12:12 AM
> To: dev@dpdk.org
> Cc: Tyler Retzlaff ; David Marchand
> ; Ferruh Yigit ; Chas
> Williams ; Min Hu (Connor) ;
> Matan Azrad ; Viacheslav Ovsiienko
> ; Ori Kam ; Suanming Mou
> ; Ajit Khaparde ;
> Somnath Kotur ; Devendra Singh Rawat
> ; Alok Prasad ; Xu, Rosen
> ; Zhang, Tianfei ; Vijay
> Kumar Srivastava ; Jerin Jacob ;
> Sunil Kumar Kori ; Burakov, Anatoly
> ; Richardson, Bruce
> ; Andrew Rybchenko
> ; Naga Harish K, S V
> ; Maxime Coquelin
> ; Xia, Chenbo 
> Subject: [PATCH 11/11] lib: remove pthread.h from includes
> 
> The header files should have the minimum embedded includes.
> The file pthread.h can logically be removed from rte_per_lcore.h and
> rte_ethdev_core.h files.
> 
> Signed-off-by: Thomas Monjalon 
> ---
>  drivers/raw/ifpga/base/opae_osdep.h| 1 +

Acked-by: Rosen Xu 


RE: [PATCH 16/36] net/ipn3ke: fix Rx and Tx queue state

2023-09-09 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Jie Hai 
> Sent: Friday, September 8, 2023 7:29 PM
> To: dev@dpdk.org; Xu, Rosen ; Ferruh Yigit
> ; Lijun Ou ; Chengwen Feng
> ; Konstantin Ananyev
> <"konstantin.v.ananyev@yandex.rukonstantin.ananyev"@huawei.com>;
> Thomas Monjalon 
> Cc: haij...@huawei.com; lihuis...@huawei.com
> Subject: [PATCH 16/36] net/ipn3ke: fix Rx and Tx queue state
> 
> The DPDK framework reports the queue state, which is stored in
> dev->data->tx_queue_state and dev->data->rx_queue_state. The
> state is maintained by the driver. Users may determine whether a queue
> participates in packet forwarding based on the state.
> Therefore, the driver needs to modify the queue state in time according to
> the actual situation.
> 
> Fixes: 9ad9ff476cac ("ethdev: add queue state in queried queue
> information")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Jie Hai 
> ---
>  drivers/net/ipn3ke/ipn3ke_representor.c | 12 
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c
> b/drivers/net/ipn3ke/ipn3ke_representor.c
> index c82f8b533370..d904d3f251e3 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -120,6 +120,7 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev)
>   uint64_t base_mac;
>   uint32_t val;
>   char attr_name[IPN3KE_RAWDEV_ATTR_LEN_MAX];
> + uint16_t i;
> 
>   rawdev = hw->rawdev;
> 
> @@ -190,6 +191,11 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev)
> 
>   ipn3ke_rpst_link_update(dev, 0);
> 
> + for (i = 0; i < dev->data->nb_rx_queues; i++)
> + dev->data->rx_queue_state[i] =
> RTE_ETH_QUEUE_STATE_STARTED;
> + for (i = 0; i < dev->data->nb_tx_queues; i++)
> + dev->data->tx_queue_state[i] =
> RTE_ETH_QUEUE_STATE_STARTED;
> +
>   return 0;
>  }
> 
> @@ -198,6 +204,7 @@ ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev)  {
>   struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev);
>   struct ipn3ke_rpst *rpst = IPN3KE_DEV_PRIVATE_TO_RPST(dev);
> + uint16_t i;
> 
>   if (hw->retimer.mac_type ==
> IFPGA_RAWDEV_RETIMER_MAC_TYPE_10GE_XFI) {
>   /* Disable the TX path */
> @@ -207,6 +214,11 @@ ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev)
>   ipn3ke_xmac_rx_disable(hw, rpst->port_id, 0);
>   }
> 
> + for (i = 0; i < dev->data->nb_rx_queues; i++)
> + dev->data->rx_queue_state[i] =
> RTE_ETH_QUEUE_STATE_STOPPED;
> + for (i = 0; i < dev->data->nb_tx_queues; i++)
> + dev->data->tx_queue_state[i] =
> RTE_ETH_QUEUE_STATE_STOPPED;
> +
>   return 0;
>  }
> 
> --
> 2.30.0

Reviewed-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v2 1/1] raw/ifpga/base: check size before assigning

2021-04-19 Thread Xu, Rosen
Thanks all.

-Original Message-
From: Yigit, Ferruh  
Sent: Tuesday, April 20, 2021 9:01 AM
To: Zhang, Tianfei ; Zhang, Qi Z 
; Huang, Wei ; dev@dpdk.org; Xu, 
Rosen 
Cc: sta...@dpdk.org
Subject: Re: [PATCH v2 1/1] raw/ifpga/base: check size before assigning

On 4/20/2021 1:13 AM, Zhang, Tianfei wrote:
> 
> 
>> -Original Message-
>> From: Yigit, Ferruh 
>> Sent: 2021年4月20日 6:36
>> To: Zhang, Qi Z ; Huang, Wei 
>> ; dev@dpdk.org; Xu, Rosen 
>> Cc: sta...@dpdk.org; Zhang, Tianfei 
>> Subject: Re: [PATCH v2 1/1] raw/ifpga/base: check size before 
>> assigning
>>
>> On 4/19/2021 9:12 AM, Zhang, Qi Z wrote:
>>>
>>>
>>>> -Original Message-----
>>>> From: Huang, Wei 
>>>> Sent: Thursday, April 8, 2021 4:52 PM
>>>> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 
>>>> 
>>>> Cc: sta...@dpdk.org; Zhang, Tianfei ; 
>>>> Yigit, Ferruh ; Huang, Wei 
>>>> 
>>>> Subject: [PATCH v2 1/1] raw/ifpga/base: check size before assigning
>>>>
>>>> In max10_staging_area_init(), variable "size" from fdt_get_reg() 
>>>> may be invalid, it should be checked before assigning to member 
>>>> variable
>> "staging_area_size"
>>>> of structure "intel_max10_device".
>>>>
>>>> Coverity issue: 367480, 367482
>>>> Fixes: 96ebfcf8125c ("raw/ifpga/base: add SPI and MAX10 device
>>>> driver")
>>>>
>>>> Signed-off-by: Wei Huang 
>>>> ---
>>>
>>> Applied to dpdk-next-net-intel.
>>>
>>
>> This patch is missing the maintainer ack.
>>
>> Rosen, Tianfei, can you please review the patch?
> 
> It looks good for me.
> 
> Acked-by: Tianfei zhang 
> 

Thanks, added in next-net.


Re: [dpdk-dev] [PATCH v2 09/16] drivers: change meson file tabs to spaces

2021-04-20 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Richardson, Bruce 
> Sent: Tuesday, April 20, 2021 18:22
> To: dev@dpdk.org
> Cc: Richardson, Bruce ; Chautru, Nicolas
> ; Hemant Agrawal ;
> Sachin Saxena ; Xu, Rosen
> ; Stephen Hemminger ;
>  drivers/bus/ifpga/meson.build   |   6 +-
>  drivers/net/ipn3ke/meson.build  |  18 +-
>  drivers/raw/ifpga/base/meson.build  |  54 ++--
>  drivers/raw/ifpga/meson.build   |   8 +-

> diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
> index 4d0507f553..cc5047e3ce 100644
> --- a/drivers/bus/ifpga/meson.build
> +++ b/drivers/bus/ifpga/meson.build
> @@ -2,9 +2,9 @@
>  # Copyright(c) 2010-2018 Intel Corporation
> 
>  if is_windows
> - build = false
> - reason = 'not supported on Windows'
> - subdir_done()
> +build = false
> +reason = 'not supported on Windows'
> +subdir_done()
>  endif
> 
> diff --git a/drivers/net/ipn3ke/meson.build
> b/drivers/net/ipn3ke/meson.build
> index 65de9d5172..6863cd9041 100644
> --- a/drivers/net/ipn3ke/meson.build
> +++ b/drivers/net/ipn3ke/meson.build
> @@ -2,9 +2,9 @@
>  # Copyright(c) 2019 Intel Corporation
> 
>  if is_windows
> - build = false
> - reason = 'not supported on Windows'
> - subdir_done()
> +build = false
> +reason = 'not supported on Windows'
> +subdir_done()
>  endif
> 
>  #
> @@ -16,15 +16,15 @@ endif
>  #
> 
>  if has_libfdt == 0
> - build = false
> - reason = 'missing dependency, "libfdt"'
> - subdir_done()
> +build = false
> +reason = 'missing dependency, "libfdt"'
> +subdir_done()
>  endif
> 
>  includes += include_directories('../../raw/ifpga')
> 
>  sources += files('ipn3ke_ethdev.c',
> - 'ipn3ke_representor.c',
> - 'ipn3ke_tm.c',
> - 'ipn3ke_flow.c')
> +'ipn3ke_representor.c',
> +'ipn3ke_tm.c',
> +'ipn3ke_flow.c')
>  deps += ['bus_ifpga', 'ethdev', 'sched']
> diff --git a/drivers/raw/ifpga/base/meson.build
> b/drivers/raw/ifpga/base/meson.build
> index 3549afafa1..8d27c60213 100644
> --- a/drivers/raw/ifpga/base/meson.build
> +++ b/drivers/raw/ifpga/base/meson.build
> @@ -2,42 +2,42 @@
>  # Copyright(c) 2018 Intel Corporation
> 
>  sources = [
> - 'ifpga_api.c',
> - 'ifpga_enumerate.c',
> - 'ifpga_feature_dev.c',
> - 'ifpga_fme.c',
> - 'ifpga_fme_iperf.c',
> - 'ifpga_fme_dperf.c',
> - 'ifpga_fme_error.c',
> - 'ifpga_port.c',
> - 'ifpga_port_error.c',
> - 'ifpga_fme_pr.c',
> - 'ifpga_fme_rsu.c',
> - 'ifpga_sec_mgr.c',
> - 'opae_hw_api.c',
> - 'opae_ifpga_hw_api.c',
> - 'opae_debug.c',
> - 'opae_spi.c',
> - 'opae_spi_transaction.c',
> - 'opae_intel_max10.c',
> - 'opae_i2c.c',
> - 'opae_at24_eeprom.c',
> - 'opae_eth_group.c',
> +'ifpga_api.c',
> +'ifpga_enumerate.c',
> +'ifpga_feature_dev.c',
> +'ifpga_fme.c',
> +'ifpga_fme_iperf.c',
> +'ifpga_fme_dperf.c',
> +'ifpga_fme_error.c',
> +'ifpga_port.c',
> +'ifpga_port_error.c',
> +'ifpga_fme_pr.c',
> +'ifpga_fme_rsu.c',
> +'ifpga_sec_mgr.c',
> +'opae_hw_api.c',
> +'opae_ifpga_hw_api.c',
> +'opae_debug.c',
> +'opae_spi.c',
> +'opae_spi_transaction.c',
> +'opae_intel_max10.c',
> +'opae_i2c.c',
> +'opae_at24_eeprom.c',
> +'opae_eth_group.c',
>  ]
> 
>  rtdep = dependency('librt', required: false)
>  if not rtdep.found()
> - rtdep = cc.find_library('librt', required: false)
> +rtdep = cc.find_library('librt', required: false)
>  endif
>  if not rtdep.found()
> - build = false
> - reason = 'missing dependency, "librt"'
> - subdir_done()
> +build = false
> +reason = 'missing dependency, "librt"'
> +subdir_done()
>  endif
> 
>  ext_deps += rtdep
> 
>  base_lib = static_library('ifpga_rawdev_base', sources,
> - dependencies: static_rte_eal,
> - c_args: cflags)
> +dependencies: static_rte_eal,
> +c_args: cflags)
>  base_objs = base_lib.extract_all_objects()
> diff --git a/drivers/raw/ifpga/meson.build b/drivers/raw/ifpga/meson.build
> index 60ea59ae28..aeccc1796d 100644
> --- a/drivers/raw/ifpga/meson.build
> +++ b/drivers/raw/ifpga/meson.build
> @@ -2,16 +2,16 @@
>  # Copyright(c) 2018 Intel Corporation
> 
>  if has_libfdt == 0
> - build = false
> - reason = 'missing dependency, "libfdt"'
> - subdir_done()
> +build = false
> +reason = 'missing dependency, "libfdt"'
> +subdir_done()
>  endif
> 
>  subdir('base')
>  objs = [base_objs]
> 
>  deps += ['ethdev', 'rawdev', 'pci', 'bus_pci', 'kvargs',
> - 'bus_vdev', 'bus_ifpga', 'net', 'net_i40e', 'net_ipn3ke']
> +'bus_vdev', 'bus_ifpga', 'net', 'net_i40e', 'net_ipn3ke']
> 
>  sources = files('ifpga_rawdev.c', 'rte_pmd_ifpga.c')
> 
> 2.27.0

Reviewed-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v1] raw/ifpga: fix ifpga device name format

2021-04-22 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, April 22, 2021 16:27
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> ; Huang, Wei 
> Subject: [PATCH v1] raw/ifpga: fix ifpga device name format
> 
> The device name format used in ifpga_rawdev_create() was changed to
> "IFPGA:%02x:%02x.%x", but the format used in ifpga_rawdev_destroy() was
> left as "IFPGA:%x:%02x.%x", it should be changed synchronously.
> 
> Fixes: 9c006c45d0c5 ("raw/ifpga: scan PCIe BDF device tree")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index d9a46ef915..f591a87b49 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -1551,7 +1551,7 @@ ifpga_rawdev_destroy(struct rte_pci_device
> *pci_dev)
>   }
> 
>   memset(name, 0, sizeof(name));
> - snprintf(name, RTE_RAWDEV_NAME_MAX_LEN,
> "IFPGA:%x:%02x.%x",
> + snprintf(name, RTE_RAWDEV_NAME_MAX_LEN,
> "IFPGA:%02x:%02x.%x",
>   pci_dev->addr.bus, pci_dev->addr.devid, pci_dev-
> >addr.function);
> 
>   IFPGA_RAWDEV_PMD_INFO("Closing %s on NUMA node %d",
> --
> 2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [dpdk-stable] [PATCH] ethdev: add missing buses in dev iterator

2021-05-05 Thread Xu, Rosen
Hi Thomas and Ferruh,

I just back from my Labor Day Holiday. I have checked there is no usage in 
ifpga bus.

Thanks,
Rosen

> -Original Message-
> From: Thomas Monjalon 
> Sent: Tuesday, May 04, 2021 23:50
> To: hemant.agra...@nxp.com; Yigit, Ferruh 
> Cc: dev@dpdk.org; sta...@dpdk.org; step...@networkplumber.org;
> lon...@microsoft.com; Xu, Rosen 
> Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] ethdev: add missing buses in
> dev iterator
> 
> 04/05/2021 14:49, Ferruh Yigit:
> > On 4/29/2021 9:01 AM, Hemant Agrawal wrote:
> > >
> > > On 4/29/2021 1:26 PM, Thomas Monjalon wrote:
> > >> 29/04/2021 07:55, Hemant Agrawal:
> > >>> This patch fixes issue with OVS 2.15 not working on DPAA/FSLMC
> > >>> based platform due to missing support for these busses in
> > >>> dev_iterate.
> > >>> This patch adds dpaa_bus and fslmc to dev iterator for bus
> > >>> arguments.
> > >> I think we should add VMBus as well.
> > > They are 2 buses remaining vmbus and ifpga. However I don't know, if
> > > they use args as vdev or as pci?
> >
> > cc Rosen for the 'ifpga' bus, 'vmbus' maintainer seems already cc'ed.
> >
> > This variable ('bus_param_key') is used to construct 'bus_str', and 
> > 'bus_str'
> > seems used only for the '.dev_iterate' bus operation.
> >
> > Since 'ifpga' & 'vmbus' are not implementing the '.dev_iterate', so is
> > it really required to add them?
> 
> Good point Ferruh.
> 
> The only bus implementing dev_iterate are dpaa, fslmc, pci and vdev.
> So this patch makes sense.
> 
> Acked-by: Thomas Monjalon 
> 



Re: [dpdk-dev] [PATCH v2] ifpga/base/meson: fix looking for librt

2021-06-30 Thread Xu, Rosen
CC Tianfei, who is maintainer.

> -Original Message-
> From: Hussin, Mohamad Noor Alim 
> Sent: Wednesday, June 30, 2021 17:26
> To: Xu, Rosen 
> Cc: dev@dpdk.org; Hussin, Mohamad Noor Alim
> ; Huang, Wei
> ; sta...@dpdk.org
> Subject: [PATCH v2] ifpga/base/meson: fix looking for librt
> 
> Finding with "librt" keyword would give the output with full path of librt 
> such
> as /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/librt.so
> instead of -lrt in libdpdk.pc pkg-config file.
> 
> Assume find_library() will prepend "lib", thus remove "lib" from "librt"
> keyword. The output will shows as -lrt.
> 
> This will cause an issue when compile DPDK app with static library as the
> path of librt has been hard-coded in the libdpdk.pc file.
> 
> Fixes: e41856b515ce ("raw/ifpga/base: enhance driver reliability in multi-
> process")
> Cc: wei.hu...@intel.com
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Mohamad Noor Alim Hussin
> 
> ---
>  drivers/raw/ifpga/base/meson.build | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/base/meson.build
> b/drivers/raw/ifpga/base/meson.build
> index 8d27c6021..ce592a13a 100644
> --- a/drivers/raw/ifpga/base/meson.build
> +++ b/drivers/raw/ifpga/base/meson.build
> @@ -27,7 +27,7 @@ sources = [
> 
>  rtdep = dependency('librt', required: false)  if not rtdep.found()
> -rtdep = cc.find_library('librt', required: false)
> +rtdep = cc.find_library('rt', required: false)
>  endif
>  if not rtdep.found()
>  build = false
> --
> 2.17.1



RE: [PATCH 1/4] ethdev: make parameters to TM node add fn constant

2024-08-07 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Richardson, Bruce 
> Sent: Tuesday, August 6, 2024 11:24 PM
> To: dev@dpdk.org
> Cc: Richardson, Bruce ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; Harman Kalra ; Hemant
> Agrawal ; Sachin Saxena
> ; Jie Hai ; Yisen Zhuang
> ; Wu, Jingjing ; Xu,
> Rosen ; Jiawen Wu ; Jian
> Wang ; Dumitrescu, Cristian
> ; Thomas Monjalon
> ; Ferruh Yigit ; Andrew
> Rybchenko 
> Subject: [PATCH 1/4] ethdev: make parameters to TM node add fn constant
> 
> The function to add a new scheduling node in rte_tm should not (and does
> not) modify the actual node parameters passed in via struct pointer. We
> should guarantee this by marking the parameter pointer as const. This allows
> SW to create multiple scheduling nodes using the same parameter struct
> without having to reset it each time.
> 
> Signed-off-by: Bruce Richardson 
> ---
>  drivers/net/ipn3ke/ipn3ke_tm.c  |  4 ++--
> diff --git a/drivers/net/ipn3ke/ipn3ke_tm.c
> b/drivers/net/ipn3ke/ipn3ke_tm.c index 0260227900..cffe1fdaa4 100644
> --- a/drivers/net/ipn3ke/ipn3ke_tm.c
> +++ b/drivers/net/ipn3ke/ipn3ke_tm.c
> @@ -1010,7 +1010,7 @@ ipn3ke_tm_tdrop_profile_delete(struct
> rte_eth_dev *dev,  static int
> ipn3ke_tm_node_add_check_parameter(uint32_t tm_id,
>   uint32_t node_id, uint32_t parent_node_id, uint32_t priority,
> - uint32_t weight, uint32_t level_id, struct rte_tm_node_params
> *params,
> + uint32_t weight, uint32_t level_id, const struct rte_tm_node_params
> +*params,
>   struct rte_tm_error *error)
>  {
>   uint32_t level_of_node_id;
> @@ -1168,7 +1168,7 @@ ipn3ke_tm_node_add_check_mount(uint32_t
> tm_id,  static int  ipn3ke_tm_node_add(struct rte_eth_dev *dev,
>   uint32_t node_id, uint32_t parent_node_id, uint32_t priority,
> - uint32_t weight, uint32_t level_id, struct rte_tm_node_params
> *params,
> + uint32_t weight, uint32_t level_id, const struct rte_tm_node_params
> +*params,
>   struct rte_tm_error *error)
>  {
>   struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev); diff --
>  /** @internal Traffic manager node delete */
> --
> 2.43.0

Reviewed-by: Rosen Xu 


RE: [PATCH 2/4] ethdev: make parameters to TM profile add fn constant

2024-08-07 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Richardson, Bruce 
> Sent: Tuesday, August 6, 2024 11:24 PM
> To: dev@dpdk.org
> Cc: Richardson, Bruce ; Xu, Rosen
> ; Dumitrescu, Cristian
> ; Thomas Monjalon
> ; Ferruh Yigit ; Andrew
> Rybchenko 
> Subject: [PATCH 2/4] ethdev: make parameters to TM profile add fn constant
> 
> The function to add a new profile in rte_tm should not (and does not) modify
> the profile parameters passed in via struct pointer. We should guarantee this
> by marking the parameter pointer as const.  This allows SW to create multiple
> profiles using the same parameter struct without having to reset it each time.
> 
> Signed-off-by: Bruce Richardson 
> ---
>  drivers/net/ipn3ke/ipn3ke_tm.c | 4 ++--
>  lib/ethdev/rte_tm.c| 2 +-
>  lib/ethdev/rte_tm.h| 2 +-
>  lib/ethdev/rte_tm_driver.h | 2 +-
>  4 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/ipn3ke/ipn3ke_tm.c
> b/drivers/net/ipn3ke/ipn3ke_tm.c index cffe1fdaa4..20a0ed0467 100644
> --- a/drivers/net/ipn3ke/ipn3ke_tm.c
> +++ b/drivers/net/ipn3ke/ipn3ke_tm.c
> @@ -848,7 +848,7 @@ ipn3ke_tm_shaper_profile_delete(struct
> rte_eth_dev *dev,
> 
>  static int
>  ipn3ke_tm_tdrop_profile_check(__rte_unused struct rte_eth_dev *dev,
> - uint32_t tdrop_profile_id, struct rte_tm_wred_params *profile,
> + uint32_t tdrop_profile_id, const struct rte_tm_wred_params
> *profile,
>   struct rte_tm_error *error)
>  {
>   enum rte_color color;
> @@ -931,7 +931,7 @@ ipn3ke_hw_tm_tdrop_wr(struct ipn3ke_hw *hw,
>  /* Traffic manager TDROP profile add */  static int
> ipn3ke_tm_tdrop_profile_add(struct rte_eth_dev *dev,
> - uint32_t tdrop_profile_id, struct rte_tm_wred_params *profile,
> + uint32_t tdrop_profile_id, const struct rte_tm_wred_params
> *profile,
>   struct rte_tm_error *error)
>  {
>   struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev); diff --
> git a/lib/ethdev/rte_tm.c b/lib/ethdev/rte_tm.c index
> 74e6f4d610..d221b1e553 100644
> --- a/lib/ethdev/rte_tm.c
> +++ b/lib/ethdev/rte_tm.c
> @@ -153,7 +153,7 @@ int rte_tm_node_capabilities_get(uint16_t port_id,
>  /* Add WRED profile */
>  int rte_tm_wred_profile_add(uint16_t port_id,
>   uint32_t wred_profile_id,
> - struct rte_tm_wred_params *profile,
> + const struct rte_tm_wred_params *profile,
>   struct rte_tm_error *error)
>  {
>   struct rte_eth_dev *dev = &rte_eth_devices[port_id]; diff --git
> a/lib/ethdev/rte_tm.h b/lib/ethdev/rte_tm.h index c52acd1b4f..f6f3f6a8d4
> 100644
> --- a/lib/ethdev/rte_tm.h
> +++ b/lib/ethdev/rte_tm.h
> @@ -1347,7 +1347,7 @@ rte_tm_node_capabilities_get(uint16_t port_id,
> int  rte_tm_wred_profile_add(uint16_t port_id,
>   uint32_t wred_profile_id,
> - struct rte_tm_wred_params *profile,
> + const struct rte_tm_wred_params *profile,
>   struct rte_tm_error *error);
> 
>  /**
> diff --git a/lib/ethdev/rte_tm_driver.h b/lib/ethdev/rte_tm_driver.h index
> 25d688516b..b6ecf1bd4d 100644
> --- a/lib/ethdev/rte_tm_driver.h
> +++ b/lib/ethdev/rte_tm_driver.h
> @@ -51,7 +51,7 @@ typedef int (*rte_tm_node_capabilities_get_t)(struct
> rte_eth_dev *dev,
>  /** @internal Traffic manager WRED profile add */  typedef int
> (*rte_tm_wred_profile_add_t)(struct rte_eth_dev *dev,
>   uint32_t wred_profile_id,
> - struct rte_tm_wred_params *profile,
> + const struct rte_tm_wred_params *profile,
>   struct rte_tm_error *error);
> 
>  /** @internal Traffic manager WRED profile delete */
> --
> 2.43.0

Reviewed-by: Rosen Xu 


RE: [PATCH 3/4] ethdev: make TM shaper parameters constant

2024-08-07 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Richardson, Bruce 
> Sent: Tuesday, August 6, 2024 11:24 PM
> To: dev@dpdk.org
> Cc: Richardson, Bruce ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; Harman Kalra ; Hemant
> Agrawal ; Sachin Saxena
> ; Jie Hai ; Yisen Zhuang
> ; Wu, Jingjing ; Xu,
> Rosen ; Liron Himi ; Jiawen Wu
> ; Jian Wang ;
> Dumitrescu, Cristian ; Thomas Monjalon
> ; Ferruh Yigit ; Andrew
> Rybchenko 
> Subject: [PATCH 3/4] ethdev: make TM shaper parameters constant
> 
> The function to add a new shaper profile in rte_tm should not (and does
> not) modify the profile parameters passed in via struct pointer. We should
> guarantee this by marking the parameter pointer as const. This allows SW to
> create multiple profiles using the same parameter struct without having to
> reset it each time.
> 
> Signed-off-by: Bruce Richardson 
> ---
>  drivers/net/ipn3ke/ipn3ke_tm.c  | 4 ++--
> diff --git a/drivers/net/ipn3ke/ipn3ke_tm.c
> b/drivers/net/ipn3ke/ipn3ke_tm.c index 20a0ed0467..eec01bb037 100644
> --- a/drivers/net/ipn3ke/ipn3ke_tm.c
> +++ b/drivers/net/ipn3ke/ipn3ke_tm.c
> @@ -722,7 +722,7 @@ ipn3ke_tm_node_capabilities_get(struct
> rte_eth_dev *dev,  }
> 
>  static int
> -ipn3ke_tm_shaper_parame_trans(struct rte_tm_shaper_params *profile,
> +ipn3ke_tm_shaper_parame_trans(const struct rte_tm_shaper_params
> +*profile,
>   struct ipn3ke_tm_shaper_profile *local_profile,
>   const struct ipn3ke_tm_shaper_params_range_type *ref_data)
> { @@ -747,7 +747,7 @@ ipn3ke_tm_shaper_parame_trans(struct
> rte_tm_shaper_params *profile,
> 
>  static int
>  ipn3ke_tm_shaper_profile_add(struct rte_eth_dev *dev,
> - uint32_t shaper_profile_id, struct rte_tm_shaper_params *profile,
> + uint32_t shaper_profile_id, const struct rte_tm_shaper_params
> +*profile,
>   struct rte_tm_error *error)
>  {
>   struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev); diff --
>  /** @internal Traffic manager shaper profile delete */
> --
> 2.43.0

Reviewed-by: Rosen Xu 



RE: [PATCH v4 2/5] raw/ifpga: remove vdev when ifpga is closed

2022-06-06 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, May 27, 2022 16:34
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v4 2/5] raw/ifpga: remove vdev when ifpga is closed
> 
> Virtual devices created on ifpga raw device will not be removed when ifpga
> device has closed. To avoid resource leak problem, this patch introduces an
> ifpga virtual device remove function, virtual devices will be destroyed after
> the ifpga raw device closed.
> 
> Fixes: ef1e8ede3da5 ("raw/ifpga: add Intel FPGA bus rawdev driver")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
> v2: update commit log with Tianfei's comment
> ---
> v3: replace constant with PCI_PRI_STR_SIZE per Rosen's comment
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 166
> ++-
>  drivers/raw/ifpga/ifpga_rawdev.h |   8 ++
>  2 files changed, 138 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 6d4117c..fe3fc43 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -134,6 +134,8 @@ struct ifpga_rawdev *
>   for (i = 0; i < IFPGA_MAX_IRQ; i++)
>   dev->intr_handle[i] = NULL;
>   dev->poll_enabled = 0;
> + for (i = 0; i < IFPGA_MAX_VDEV; i++)
> + dev->vdev_name[i] = NULL;
> 
>   return dev;
>  }
> @@ -736,10 +738,22 @@ static int set_surprise_link_check_aer(  static int
> ifpga_rawdev_close(struct rte_rawdev *dev)  {
> + struct ifpga_rawdev *ifpga_rdev = NULL;
>   struct opae_adapter *adapter;
> + char *vdev_name = NULL;
> + int i = 0;
> 
>   if (dev) {
> - ifpga_monitor_stop_func(ifpga_rawdev_get(dev));
> + ifpga_rdev = ifpga_rawdev_get(dev);
> + if (ifpga_rdev) {
> + for (i = 0; i < IFPGA_MAX_VDEV; i++) {
> + vdev_name = ifpga_rdev->vdev_name[i];
> + if (vdev_name)
> + rte_vdev_uninit(vdev_name);
> + }
> + ifpga_monitor_stop_func(ifpga_rdev);
> + ifpga_rdev->rawdev = NULL;
> + }
>   adapter = ifpga_rawdev_get_priv(dev);
>   if (adapter) {
>   opae_adapter_destroy(adapter);
> @@ -1638,8 +1652,6 @@ static int fme_clean_fme_error(struct
> opae_manager *mgr)
>   return -EINVAL;
>   }
>   dev = ifpga_rawdev_get(rawdev);
> - if (dev)
> - dev->rawdev = NULL;
> 
>   adapter = ifpga_rawdev_get_priv(rawdev);
>   if (!adapter)
> @@ -1714,73 +1726,118 @@ static int ifpga_rawdev_get_string_arg(const
> char *key __rte_unused,
> 
>   return 0;
>  }
> +
>  static int
> -ifpga_cfg_probe(struct rte_vdev_device *dev)
> +ifpga_vdev_parse_devargs(struct rte_devargs *devargs,
> + struct ifpga_vdev_args *args)
>  {
> - struct rte_devargs *devargs;
> - struct rte_kvargs *kvlist = NULL;
> - struct rte_rawdev *rawdev = NULL;
> - struct ifpga_rawdev *ifpga_dev;
> - int port;
> + struct rte_kvargs *kvlist;
>   char *name = NULL;
> - char dev_name[RTE_RAWDEV_NAME_MAX_LEN];
> - int ret = -1;
> + int port = 0;
> + int ret = -EINVAL;
> 
> - devargs = dev->device.devargs;
> + if (!devargs || !args)
> + return ret;
> 
>   kvlist = rte_kvargs_parse(devargs->args, valid_args);
>   if (!kvlist) {
> - IFPGA_RAWDEV_PMD_LOG(ERR, "error when parsing
> param");
> - goto end;
> + IFPGA_RAWDEV_PMD_ERR("error when parsing devargs");
> + return ret;
>   }
> 
>   if (rte_kvargs_count(kvlist, IFPGA_ARG_NAME) == 1) {
>   if (rte_kvargs_process(kvlist, IFPGA_ARG_NAME,
> -&ifpga_rawdev_get_string_arg,
> -&name) < 0) {
> + &ifpga_rawdev_get_string_arg, &name) < 0) {
>   IFPGA_RAWDEV_PMD_ERR("error to parse %s",
> -  IFPGA_ARG_NAME);
> + IFPGA_ARG_NAME);
>   goto end;
> + } else {
> + strlcpy(args->bdf, name, sizeof(args->bdf));
> + rte_free(name);
>   }
>   

RE: [PATCH v4 3/5] raw/ifpga: unregister interrupt in ifpga close function

2022-06-06 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, May 27, 2022 16:34
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v4 3/5] raw/ifpga: unregister interrupt in ifpga close 
> function
> 
> There is an API rte_pmd_ifpga_cleanup provided by ifpga driver to free the
> software resource used by ifpga card. The function call of
> rte_pmd_ifpga_cleanup is list below.
> rte_pmd_ifpga_cleanup()
>   ifpga_rawdev_cleanup()
>  rte_rawdev_pmd_release()
>rte_rawdev_close()
>  ifpga_rawdev_close()
> 
> The interrupts are unregistered in ifpga_rawdev_destroy instead of
> ifpga_rawdev_close function, so rte_pmd_ifpga_cleanup cannot free
> interrupt resource as expected.
> 
> To fix such issue, interrupt unregistration is moved from
> ifpga_rawdev_destroy to ifpga_rawdev_close function. The change of
> function call of ifpga_rawdev_destroy is as below.
> ifpga_rawdev_destroy()
>   ifpga_unregister_msix_irq()  // removed
>   rte_rawdev_pmd_release()
> rte_rawdev_close()
>   ifpga_rawdev_close()
> 
> Fixes: e0a1aafe2af9 ("raw/ifpga: introduce IRQ functions")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> Acked-by: Tianfei Zhang 
> ---
> v2: update commit log with Tianfei's comment
> ---
> v3: update commit log with more explanations about the function call
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 29 +++--
>  1 file changed, 11 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index fe3fc43..94df56c 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -78,6 +78,7 @@ static int set_surprise_link_check_aer(  static int
> ifpga_pci_find_next_ext_capability(unsigned int fd,
> int start, uint32_t cap);
>  static int ifpga_pci_find_ext_capability(unsigned int fd, uint32_t cap);
> +static void fme_interrupt_handler(void *param);
> 
>  struct ifpga_rawdev *
>  ifpga_rawdev_get(const struct rte_rawdev *rawdev) @@ -740,8 +741,9 @@
> static int set_surprise_link_check_aer(  {
>   struct ifpga_rawdev *ifpga_rdev = NULL;
>   struct opae_adapter *adapter;
> + struct opae_manager *mgr;
>   char *vdev_name = NULL;
> - int i = 0;
> + int i, ret = 0;
> 
>   if (dev) {
>   ifpga_rdev = ifpga_rawdev_get(dev);
> @@ -756,12 +758,19 @@ static int set_surprise_link_check_aer(
>   }
>   adapter = ifpga_rawdev_get_priv(dev);
>   if (adapter) {
> + mgr = opae_adapter_get_mgr(adapter);
> + if (ifpga_rdev && mgr) {
> + if (ifpga_unregister_msix_irq(ifpga_rdev,
> + IFPGA_FME_IRQ, 0,
> + fme_interrupt_handler, mgr) < 0)
> + ret = -EINVAL;
> + }
>   opae_adapter_destroy(adapter);
>   opae_adapter_data_free(adapter->data);
>   }
>   }
> 
> - return dev ? 0:1;
> + return ret;
>  }
> 
>  static int
> @@ -1629,9 +1638,6 @@ static int fme_clean_fme_error(struct
> opae_manager *mgr)
>   int ret;
>   struct rte_rawdev *rawdev;
>   char name[RTE_RAWDEV_NAME_MAX_LEN];
> - struct opae_adapter *adapter;
> - struct opae_manager *mgr;
> - struct ifpga_rawdev *dev;
> 
>   if (!pci_dev) {
>   IFPGA_RAWDEV_PMD_ERR("Invalid pci_dev of the device!");
> @@ -1651,19 +1657,6 @@ static int fme_clean_fme_error(struct
> opae_manager *mgr)
>   IFPGA_RAWDEV_PMD_ERR("Invalid device name (%s)",
> name);
>   return -EINVAL;
>   }
> - dev = ifpga_rawdev_get(rawdev);
> -
> - adapter = ifpga_rawdev_get_priv(rawdev);
> - if (!adapter)
> - return -ENODEV;
> -
> - mgr = opae_adapter_get_mgr(adapter);
> - if (!mgr)
> - return -ENODEV;
> -
> - if (ifpga_unregister_msix_irq(dev, IFPGA_FME_IRQ, 0,
> - fme_interrupt_handler, mgr) < 0)
> - return -EINVAL;
> 
>   /* rte_rawdev_close is called by pmd_release */
>   ret = rte_rawdev_pmd_release(rawdev);
> --
> 1.8.3.1

Reviewed-by: Rosen Xu 


RE: [PATCH v4 4/5] raw/ifpga: support ofs card probe

2022-06-06 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, May 27, 2022 16:34
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v4 4/5] raw/ifpga: support ofs card probe
> 
> PAC N6000 is the first OFS platform, its device id is added to ifpga device
> support list.
> 
> Previous FPGA platform like Intel PAC N3000 and N5000, FME DFL (Device
> Feature List) starts from BAR0 by default, port DFL location is indicated in
> PORTn_OFFSET register in FME. In OFS implementation, FME DFL and port
> DFL location can be defined individually in PCIe VSEC (Vendor Specific
> Extended Capabilities). In this patch, DFL definition is searched in VSEC, the
> legacy DFL is used only when DFL VSEC is not present.
> 
> In original DFL enumeration process, AFU is expected to locate in port DFL,
> but this is not the case in OFS implementation. In this patch, enumeration can
> search AFU in any PF/VF which has no FME and port.
> 
> Signed-off-by: Wei Huang 
> Acked-by: Tianfei Zhang 
> ---
> v2: fix build error in UB2004-32
> ---
> v3: update commit log with Tianfei's comment, treat 7 as special BAR index
> ---
> v4: fix typo and coding style issue
> ---
>  drivers/raw/ifpga/base/ifpga_api.c |  28 +-
>  drivers/raw/ifpga/base/ifpga_defines.h |   1 +
>  drivers/raw/ifpga/base/ifpga_enumerate.c   | 680
> ++---
>  drivers/raw/ifpga/base/ifpga_enumerate.h   |   2 +
>  drivers/raw/ifpga/base/ifpga_feature_dev.c |  18 +-
>  drivers/raw/ifpga/base/ifpga_hw.h  |   2 +
>  drivers/raw/ifpga/base/opae_hw_api.c   |   2 +-
>  drivers/raw/ifpga/base/opae_hw_api.h   |   2 +
>  drivers/raw/ifpga/ifpga_rawdev.c   |  48 +-
>  9 files changed, 591 insertions(+), 192 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_api.c
> b/drivers/raw/ifpga/base/ifpga_api.c
> index 4610ef1..f19cc26 100644
> --- a/drivers/raw/ifpga/base/ifpga_api.c
> +++ b/drivers/raw/ifpga/base/ifpga_api.c
> @@ -13,15 +13,22 @@
>  static int ifpga_acc_get_uuid(struct opae_accelerator *acc,
> struct uuid *uuid)
>  {
> - struct opae_bridge *br = acc->br;
> - struct ifpga_port_hw *port;
> + struct ifpga_afu_info *afu_info = acc->data;
> + struct opae_reg_region *region;
> + u64 val = 0;
> 
> - if (!br || !br->data)
> - return -EINVAL;
> + if (!afu_info)
> + return -ENODEV;
> 
> - port = br->data;
> + region = &afu_info->region[0];
> + if (uuid) {
> + val = readq(region->addr + sizeof(struct feature_header));
> + opae_memcpy(uuid->b, &val, sizeof(u64));
> + val = readq(region->addr + sizeof(struct feature_header) + 8);
> + opae_memcpy(uuid->b + 8, &val, sizeof(u64));
> + }
> 
> - return fpga_get_afu_uuid(port, uuid);
> + return 0;
>  }
> 
>  static int ifpga_acc_set_irq(struct opae_accelerator *acc, @@ -32,6 +39,9
> @@ static int ifpga_acc_set_irq(struct opae_accelerator *acc,
>   struct ifpga_port_hw *port;
>   struct fpga_uafu_irq_set irq_set;
> 
> + if (!afu_info)
> + return -ENODEV;
> +
>   if (!br || !br->data)
>   return -EINVAL;
> 
> @@ -68,7 +78,7 @@ static int ifpga_acc_get_region_info(struct
> opae_accelerator *acc,
>   struct ifpga_afu_info *afu_info = acc->data;
> 
>   if (!afu_info)
> - return -EINVAL;
> + return -ENODEV;
> 
>   if (info->index >= afu_info->num_regions)
>   return -EINVAL;
> @@ -89,7 +99,7 @@ static int ifpga_acc_read(struct opae_accelerator *acc,
> unsigned int region_idx,
>   struct opae_reg_region *region;
> 
>   if (!afu_info)
> - return -EINVAL;
> + return -ENODEV;
> 
>   if (offset + byte <= offset)
>   return -EINVAL;
> @@ -129,7 +139,7 @@ static int ifpga_acc_write(struct opae_accelerator
> *acc,
>   struct opae_reg_region *region;
> 
>   if (!afu_info)
> - return -EINVAL;
> + return -ENODEV;
> 
>   if (offset + byte <= offset)
>   return -EINVAL;
> diff --git a/drivers/raw/ifpga/base/ifpga_defines.h
> b/drivers/raw/ifpga/base/ifpga_defines.h
> index 8f62033..9a280eb 100644
> --- a/drivers/raw/ifpga/base/ifpga_defines.h
> +++ b/drivers/raw/ifpga/base/ifpga_defines.h
> @@ -73,6 +73,7 @@
>  enum fpga_id_type {
>   FME_ID,
>   PORT_ID,
> + AF

RE: [PATCH v7 1/5] raw/ifpga: introduce AFU driver framework

2022-06-14 Thread Xu, Rosen
Hi Wei,

Some comments.

Thanks,
Rosen

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 09, 2022 15:37
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v7 1/5] raw/ifpga: introduce AFU driver framework
> 
> AFU (Acceleration Function Unit) is part of FPGA and enumerated by ifpga
> driver.
> This driver implements common AFU device interfaces and exposes them to
> application as standard raw device APIs.
> Normally application can operate specified AFU as below, 1. call
> rte_rawdev_pmd_get_named_dev() to find AFU device.
> 2. call rte_rawdev_configure() to initialize AFU device.
> 3. call rte_rawdev_selftest() to test AFU device.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: fix typo
> ---
> v3: fix build error in FreeBSD13-64, UB2004-32 and UB2204-32
> ---
> v4: fix coding style issue and build error in FreeBSD13-64
> ---
> v5: split patch into several patches
> ---
> v6: move source files to ifpga and rename, use spinlock
> ---
>  drivers/raw/ifpga/afu_pmd_core.c | 453
> +++
>  drivers/raw/ifpga/afu_pmd_core.h |  76 +++
>  drivers/raw/ifpga/meson.build|   2 +-
>  3 files changed, 530 insertions(+), 1 deletion(-)  create mode 100644
> drivers/raw/ifpga/afu_pmd_core.c  create mode 100644
> drivers/raw/ifpga/afu_pmd_core.h
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_core.c
> b/drivers/raw/ifpga/afu_pmd_core.c
> new file mode 100644
> index 000..a24b517
> --- /dev/null
> +++ b/drivers/raw/ifpga/afu_pmd_core.c
> @@ -0,0 +1,453 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2022 Intel Corporation
> + *
> + * AFU is Acceleration Function Unit in FPGA, it is enumerated by ifpga pmd.
> + * Suppose AFU is found in FPGA at PCI address 31:00.0, then you can
> +create
> + * and test a AFU device by following steps in application.
> + * 1. rte_vdev_init("ifpga_rawdev_cfg0", "ifpga=31:00.0,port=0")
> + * 2. rawdev = rte_rawdev_pmd_get_named_dev("afu_0|31:00.0")
> + * 3. rte_rawdev_configure(rawdev->dev_id, &cfg, sizeof(cfg))
> + * 4. rte_rawdev_selftest(rawdev->dev_id)
> + * 5. rte_vdev_uninit("ifpga_rawdev_cfg0")
> + *
> + * AFU device name format used in rte_rawdev_pmd_get_named_dev is
> + * "afu_[port]|[BDF]". Please refer to OPAE documentation for the
> +meaning of
> + * port. Each AFU device has specific configuration data, they are
> +defined
> + * in rte_pmd_afu.h.
> + *
> + */
> +
Could you split these notes? General speaking we just announce license in head 
of source file.

> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "afu_pmd_core.h"
> +
> +static struct rte_afu_uuid
> afu_pmd_uuid_map[AFU_RAWDEV_MAX_DRVS+1];
> +TAILQ_HEAD(afu_drv_list, afu_rawdev_drv); static struct afu_drv_list
> +afu_pmd_list = TAILQ_HEAD_INITIALIZER(afu_pmd_list);
> +
> +static inline int afu_rawdev_trylock(struct afu_rawdev *dev) {
> + if (!dev || !dev->sd)
> + return 0;
> +
> + return rte_spinlock_trylock(&dev->sd->lock);
> +}
> +
> +static inline void afu_rawdev_unlock(struct afu_rawdev *dev) {
> + if (!dev || !dev->sd)
> + return;
> +
> + rte_spinlock_unlock(&dev->sd->lock);
> +}
> +
> +static int afu_rawdev_configure(const struct rte_rawdev *rawdev,
> + rte_rawdev_obj_t config, size_t config_size) {
> + struct afu_rawdev *dev = NULL;
> + int ret = 0;
> +
> + IFPGA_RAWDEV_PMD_FUNC_TRACE();
> +
> + dev = afu_rawdev_get_priv(rawdev);
> + if (!dev)
> + return -ENODEV;
> +
> + if (dev->ops && dev->ops->config)
> + ret = (*dev->ops->config)(dev, config, config_size);
> +
> + return ret;
> +}
> +
> +static int afu_rawdev_start(struct rte_rawdev *rawdev) {
> + struct afu_rawdev *dev = NULL;
> + int ret = 0;
> +
> + IFPGA_RAWDEV_PMD_FUNC_TRACE();
> +
> + dev = afu_rawdev_get_priv(rawdev);
> + if (!dev)
> + return -ENODEV;
> +
> + ret = afu_rawdev_trylock(dev);
> + if (!ret) {
> + IFPGA_RAWDEV_PMD_WARN("AFU is busy, please start it
> later");
> + return ret;
> + }
> +
> + if (dev->ops && dev->ops->start)
> + ret = (*dev->ops->start)(dev);

RE: [PATCH v7 2/5] raw/ifpga: add N3000 AFU driver

2022-06-15 Thread Xu, Rosen
Hi Wei,

Some comments.

Thanks,
Rosen

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 09, 2022 15:37
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v7 2/5] raw/ifpga: add N3000 AFU driver
> 
> N3000 AFU includes NLB0 and DMA modules, NLB0 is used to test PCI bus
> and DMA is used to test local memory.
> This driver initialize the modules and report test result.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: move source files to ifpga and rename, refine code
> ---
> v3: fix Ubuntu 20.04 ARM build
> ---
>  drivers/raw/ifpga/afu_pmd_core.h  |   19 +
>  drivers/raw/ifpga/afu_pmd_n3000.c | 2019
> +
>  drivers/raw/ifpga/afu_pmd_n3000.h |  339 +++
>  drivers/raw/ifpga/meson.build |3 +-
>  drivers/raw/ifpga/rte_pmd_afu.h   |   97 ++
>  5 files changed, 2476 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/raw/ifpga/afu_pmd_n3000.c
>  create mode 100644 drivers/raw/ifpga/afu_pmd_n3000.h
>  create mode 100644 drivers/raw/ifpga/rte_pmd_afu.h
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_core.h
> b/drivers/raw/ifpga/afu_pmd_core.h
> index 4fad2c7..a938172 100644
> --- a/drivers/raw/ifpga/afu_pmd_core.h
> +++ b/drivers/raw/ifpga/afu_pmd_core.h
> @@ -14,6 +14,7 @@
>  #include 
> 
>  #include 
> +#include 
>  #include 
>  #include 
> 
> @@ -60,6 +61,24 @@ struct afu_rawdev {
>   return rawdev ? (struct afu_rawdev *)rawdev->dev_private : NULL;
>  }
> 
> +#define CLS_TO_SIZE(n)  ((n) << 6)  /* get size of n cache lines */
> +#define SIZE_TO_CLS(s)  ((s) >> 6)  /* convert size to number of cache lines
> */
> +#define MHZ(f)  ((f) * 100)
> +
> +#define dsm_poll_timeout(addr, val, cond, invl, timeout) \
> +({   \
> + uint64_t __wait = 0; \
> + uint64_t __invl = (invl);\
> + uint64_t __timeout = (timeout);  \
> + for (; __wait <= __timeout; __wait += __invl) {  \
> + (val) = *(addr); \
> + if (cond)\
> + break;   \
> + rte_delay_ms(__invl);\
> + }\
> + (cond) ? 0 : 1;  \
> +})
> +
>  void afu_pmd_register(struct afu_rawdev_drv *driver);
>  void afu_pmd_unregister(struct afu_rawdev_drv *driver);
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_n3000.c
> b/drivers/raw/ifpga/afu_pmd_n3000.c
> new file mode 100644
> index 000..14f7fe0
> --- /dev/null
> +++ b/drivers/raw/ifpga/afu_pmd_n3000.c
> @@ -0,0 +1,2019 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(c) 2022 Intel Corporation
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "afu_pmd_core.h"
> +#include "afu_pmd_n3000.h"
> +
> +static int nlb_afu_config(struct afu_rawdev *dev)
> +{
> + struct n3000_afu_priv *priv = NULL;
> + struct rte_pmd_afu_nlb_cfg *cfg = NULL;
> + struct nlb_csr_cfg v;
> +
> + if (!dev)
> + return -EINVAL;
> +
> + if (!dev->priv)
> + return -ENOENT;
> +
> + priv = (struct n3000_afu_priv *)dev->priv;
> + cfg = &priv->nlb_cfg;
> +
> + v.csr = 0;
> +
> + if (cfg->cont)
> + v.cont = 1;
> +
> + if (cfg->cache_policy == NLB_WRPUSH_I)
> + v.wrpush_i = 1;
> + else
> + v.wrthru_en = cfg->cache_policy;
> +
> + if (cfg->cache_hint == NLB_RDLINE_MIXED)
> + v.rdsel = 3;
> + else
> + v.rdsel = cfg->cache_hint;
> +
> + v.mode = cfg->mode;
> + v.chsel = cfg->read_vc;
> + v.wr_chsel = cfg->write_vc;
> + v.wrfence_chsel = cfg->wrfence_vc;
> + v.wrthru_en = cfg->cache_policy;
> + v.multicl_len = cfg->multi_cl - 1;
> +
> + IFPGA_RAWDEV_PMD_DEBUG("cfg: 0x%08x", v.csr);
> + rte_write32(v.csr, priv->nlb_ctx.addr + CSR_CFG);
> +
> + return 0;
> +}
> +
> +static void nlb_afu_report(struct afu_rawd

RE: [PATCH v7 3/5] raw/ifpga: add HE-LPBK AFU driver

2022-06-15 Thread Xu, Rosen
Hi Wei,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 09, 2022 15:37
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v7 3/5] raw/ifpga: add HE-LPBK AFU driver
> 
> HE-LPBK and HE-MEM-LPBK are host exerciser modules in OFS FPGA, HE-
> LPBK is used to test PCI bus and HE-MEM-LPBK is used to test local memory.
> This driver initialize the modules and report test result.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: move source files to ifpga and rename, refine code
> ---
>  drivers/raw/ifpga/afu_pmd_he_lpbk.c | 436
> 
>  drivers/raw/ifpga/afu_pmd_he_lpbk.h | 126 +++
>  drivers/raw/ifpga/meson.build   |   2 +-
>  drivers/raw/ifpga/rte_pmd_afu.h |  14 ++
>  4 files changed, 577 insertions(+), 1 deletion(-)  create mode 100644
> drivers/raw/ifpga/afu_pmd_he_lpbk.c
>  create mode 100644 drivers/raw/ifpga/afu_pmd_he_lpbk.h
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> b/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> new file mode 100644
> index 000..8b2c85b
> --- /dev/null
> +++ b/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> @@ -0,0 +1,436 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(c) 2022 Intel Corporation
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "afu_pmd_core.h"
> +#include "afu_pmd_he_lpbk.h"
> +
> +static int he_lpbk_afu_config(struct afu_rawdev *dev) {
> + struct he_lpbk_priv *priv = NULL;
> + struct rte_pmd_afu_he_lpbk_cfg *cfg = NULL;
> + struct he_lpbk_csr_cfg v;
> +
> + if (!dev)
> + return -EINVAL;
> +
> + priv = (struct he_lpbk_priv *)dev->priv;
> + if (!priv)
> + return -ENOENT;
> +
> + cfg = &priv->he_lpbk_cfg;
> +
> + v.csr = 0;
> +
> + if (cfg->cont)
> + v.cont = 1;
> +
> + v.mode = cfg->mode;
> + v.trput_interleave = cfg->trput_interleave;
> + if (cfg->multi_cl == 4)
> + v.multicl_len = 2;
> + else
> + v.multicl_len = cfg->multi_cl - 1;
> +
> + IFPGA_RAWDEV_PMD_DEBUG("cfg: 0x%08x", v.csr);
> + rte_write32(v.csr, priv->he_lpbk_ctx.addr + CSR_CFG);
> +
> + return 0;
> +}
> +
> +static void he_lpbk_report(struct afu_rawdev *dev, uint32_t cl) {
> + struct he_lpbk_priv *priv = NULL;
> + struct rte_pmd_afu_he_lpbk_cfg *cfg = NULL;
> + struct he_lpbk_ctx *ctx = NULL;
> + struct he_lpbk_dsm_status *stat = NULL;
> + struct he_lpbk_status0 stat0;
> + struct he_lpbk_status1 stat1;
> + uint64_t swtest_msg = 0;
> + uint64_t ticks = 0;
> + uint64_t info = 0;
> + double num, rd_bw, wr_bw;
> +
> + if (!dev || !dev->priv)
> + return;
> +
> + priv = (struct he_lpbk_priv *)dev->priv;
> + cfg = &priv->he_lpbk_cfg;
> + ctx = &priv->he_lpbk_ctx;
> +
> + stat = ctx->status_ptr;
> +
> + swtest_msg = rte_read64(ctx->addr + CSR_SWTEST_MSG);
> + stat0.csr = rte_read64(ctx->addr + CSR_STATUS0);
> + stat1.csr = rte_read64(ctx->addr + CSR_STATUS1);
> +
> + if (cfg->cont)
> + ticks = stat->num_clocks - stat->start_overhead;
> + else
> + ticks = stat->num_clocks -
> + (stat->start_overhead + stat->end_overhead);
> +
> + if (cfg->freq_mhz == 0) {
> + info = rte_read64(ctx->addr + CSR_HE_INFO0);
> + IFPGA_RAWDEV_PMD_INFO("API version: %"PRIx64, info >>
> 16);
> + cfg->freq_mhz = info & 0x;
> + if (cfg->freq_mhz == 0) {
> + IFPGA_RAWDEV_PMD_INFO("Frequency of AFU
> clock is unknown."
> + " Assuming 350 MHz.");
> + cfg->freq_mhz = 350;
> + }
> + }
> +
> + num = (double)stat0.num_reads;
> + rd_bw = (num * CLS_TO_SIZE(1) * MHZ(cfg->freq_mhz)) / ticks;
> + num = (double)stat0.num_writes;
> + wr_bw = (num * CLS_TO_SIZE(1) * MHZ(cfg->freq_mhz)) / ticks;
> +
> + printf("Cachelines  Read_Count Write_Count Pend_Read
> Pend_Write "
> + "Clocks@%uMHz  

RE: [PATCH v7 4/5] raw/ifpga: add HE-MEM AFU driver

2022-06-15 Thread Xu, Rosen
Hi Wei,


> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 09, 2022 15:37
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v7 4/5] raw/ifpga: add HE-MEM AFU driver
> 
> HE-MEM is one of the host exerciser modules in OFS FPGA, which is used to
> test local memory with built-in traffic generator.
> This driver initialize the module and report test result.
> 
> Signed-off-by: Wei Huang 
> Acked-by: Tianfei Zhang 
> ---
> v2: move source files to ifpga and rename
> ---
>  drivers/raw/ifpga/afu_pmd_he_mem.c | 183
> +
>  drivers/raw/ifpga/afu_pmd_he_mem.h |  46 ++
>  drivers/raw/ifpga/meson.build  |   2 +-
>  drivers/raw/ifpga/rte_pmd_afu.h|   7 ++
>  4 files changed, 237 insertions(+), 1 deletion(-)  create mode 100644
> drivers/raw/ifpga/afu_pmd_he_mem.c
>  create mode 100644 drivers/raw/ifpga/afu_pmd_he_mem.h
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_he_mem.c
> b/drivers/raw/ifpga/afu_pmd_he_mem.c
> new file mode 100644
> index 000..0f57a03
> --- /dev/null
> +++ b/drivers/raw/ifpga/afu_pmd_he_mem.c
> @@ -0,0 +1,183 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(c) 2022 Intel Corporation
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "afu_pmd_core.h"
> +#include "afu_pmd_he_mem.h"
> +
> +static int he_mem_tg_test(struct afu_rawdev *dev) {
> + struct he_mem_tg_priv *priv = NULL;
> + struct rte_pmd_afu_he_mem_tg_cfg *cfg = NULL;
> + struct he_mem_tg_ctx *ctx = NULL;
> + uint64_t value = 0x12345678;
> + uint64_t cap = 0;
> + uint64_t channel_mask = 0;
> + int i, t = 0;
> +
> + if (!dev)
> + return -EINVAL;
> +
> + priv = (struct he_mem_tg_priv *)dev->priv;
> + if (!priv)
> + return -ENOENT;
> +
> + cfg = &priv->he_mem_tg_cfg;
> + ctx = &priv->he_mem_tg_ctx;
> +
> + IFPGA_RAWDEV_PMD_DEBUG("Channel mask: 0x%x", cfg-
> >channel_mask);
> +
> + rte_write64(value, ctx->addr + MEM_TG_SCRATCHPAD);
> + cap = rte_read64(ctx->addr + MEM_TG_SCRATCHPAD);
> + IFPGA_RAWDEV_PMD_DEBUG("Scratchpad value: 0x%"PRIx64, cap);
> + if (cap != value) {
> + IFPGA_RAWDEV_PMD_ERR("Test scratchpad register failed");
> + return -EIO;
> + }
> +
> + cap = rte_read64(ctx->addr + MEM_TG_CTRL);
> + IFPGA_RAWDEV_PMD_DEBUG("Capability: 0x%"PRIx64, cap);
> +
> + channel_mask = cfg->channel_mask & cap;
> + /* start traffic generators */
> + rte_write64(channel_mask, ctx->addr + MEM_TG_CTRL);
> +
> + /* check test status */
> + while (t < MEM_TG_TIMEOUT_MS) {
> + value = rte_read64(ctx->addr + MEM_TG_STAT);
> + for (i = 0; i < NUM_MEM_TG_CHANNELS; i++) {
> + if (channel_mask & (1 << i)) {
> + if (TGACTIVE(value, i))
> + continue;
> + printf("TG channel %d test %s\n", i,
> + TGPASS(value, i) ? "pass" :
> + TGTIMEOUT(value, i) ? "timeout" :
> + TGFAIL(value, i) ? "fail" : "error");
> + channel_mask &= ~(1 << i);
> + }
> + }
> + if (!channel_mask)
> + break;
> + rte_delay_ms(MEM_TG_POLL_INTERVAL_MS);
> + t += MEM_TG_POLL_INTERVAL_MS;
> + }
> +
> + if (channel_mask) {
> + IFPGA_RAWDEV_PMD_ERR("Timeout 0x%04lx", (unsigned
> long)value);
> + return channel_mask;
> + }
> +
> + return 0;
> +}
> +
> +static int he_mem_tg_init(struct afu_rawdev *dev) {
> + struct he_mem_tg_priv *priv = NULL;
> + struct he_mem_tg_ctx *ctx = NULL;
> +
> + if (!dev)
> + return -EINVAL;
> +
> + priv = (struct he_mem_tg_priv *)dev->priv;
> + if (!priv) {
> + priv = rte_zmalloc(NULL, sizeof(struct he_mem_tg_priv), 0);
> + if (!priv)
> + r

RE: [PATCH v7 5/5] raw/ifpga: add HE-HSSI AFU driver

2022-06-15 Thread Xu, Rosen
Hi Wei,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 09, 2022 15:37
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v7 5/5] raw/ifpga: add HE-HSSI AFU driver
> 
> HE-HSSI is one of the host exerciser modules in OFS FPGA, which is used to
> test HSSI (High Speed Serial Interface).
> This driver initialize the module and report test result.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: move source files to ifpga and rename, refine code
> ---
>  drivers/raw/ifpga/afu_pmd_he_hssi.c | 371
> 
>  drivers/raw/ifpga/afu_pmd_he_hssi.h | 109 +++
>  drivers/raw/ifpga/meson.build   |   3 +-
>  drivers/raw/ifpga/rte_pmd_afu.h |  18 ++
>  4 files changed, 500 insertions(+), 1 deletion(-)  create mode 100644
> drivers/raw/ifpga/afu_pmd_he_hssi.c
>  create mode 100644 drivers/raw/ifpga/afu_pmd_he_hssi.h
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_he_hssi.c
> b/drivers/raw/ifpga/afu_pmd_he_hssi.c
> new file mode 100644
> index 000..102de50
> --- /dev/null
> +++ b/drivers/raw/ifpga/afu_pmd_he_hssi.c
> @@ -0,0 +1,371 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(c) 2022 Intel Corporation
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "afu_pmd_core.h"
> +#include "afu_pmd_he_hssi.h"
> +
> +static int he_hssi_indirect_write(struct he_hssi_ctx *ctx, uint32_t addr,
> + uint32_t value)
> +{
> + struct traffic_ctrl_cmd cmd;
> + struct traffic_ctrl_data data;
> + uint32_t i = 0;
> +
> + IFPGA_RAWDEV_PMD_DEBUG("Indirect write 0x%x, value 0x%08x",
> addr,
> +value);
> +
> + if (!ctx)
> + return -EINVAL;
> +
> + data.write_data = value;
> + rte_write64(data.csr, ctx->addr + TRAFFIC_CTRL_DATA);
> +
> + cmd.csr = 0;
> + cmd.write_cmd = 1;
> + cmd.afu_cmd_addr = addr;
> + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD);
> +
> + while (i < MAILBOX_TIMEOUT_MS) {
> + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS);
> + cmd.csr = rte_read64(ctx->addr + TRAFFIC_CTRL_CMD);
> + if (cmd.ack_trans)
> + break;
> + i += MAILBOX_POLL_INTERVAL_MS;
> + }
> + if (i >= MAILBOX_TIMEOUT_MS)
> + return -ETIMEDOUT;
> +
> + i = 0;
> + cmd.csr = 0;
> + while (i < MAILBOX_TIMEOUT_MS) {
> + cmd.ack_trans = 1;
> + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD);
> + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS);
> + cmd.csr = rte_read64(ctx->addr + TRAFFIC_CTRL_CMD);
> + if (!cmd.ack_trans)
> + break;
> + i += MAILBOX_POLL_INTERVAL_MS;
> + }
> + if (i >= MAILBOX_TIMEOUT_MS)
> + return -ETIMEDOUT;
> +
> + return 0;
> +}
> +
> +static int he_hssi_indirect_read(struct he_hssi_ctx *ctx, uint32_t addr,
> + uint32_t *value)
> +{
> + struct traffic_ctrl_cmd cmd;
> + struct traffic_ctrl_data data;
> + uint32_t i = 0;
> +
> + if (!ctx)
> + return -EINVAL;
> +
> + cmd.csr = 0;
> + cmd.read_cmd = 1;
> + cmd.afu_cmd_addr = addr;
> + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD);
> +
> + while (i < MAILBOX_TIMEOUT_MS) {
> + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS);
> + cmd.csr = rte_read64(ctx->addr + TRAFFIC_CTRL_CMD);
> + if (cmd.ack_trans) {
> + data.csr = rte_read64(ctx->addr +
> TRAFFIC_CTRL_DATA);
> + *value = data.read_data;
> + break;
> + }
> + i += MAILBOX_POLL_INTERVAL_MS;
> + }
> + if (i >= MAILBOX_TIMEOUT_MS)
> + return -ETIMEDOUT;
> +
> + i = 0;
> + cmd.csr = 0;
> + while (i < MAILBOX_TIMEOUT_MS) {
> + cmd.ack_trans = 1;
> + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD);
> + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS);
> + cmd.csr = rte_read64(ctx->addr + TRAFFIC_CTRL_CMD);
> + if (!cmd.ack_trans)
> + break;
> + i += MAILBOX_

RE: [PATCH v1] raw/ifpga: free file handle before function return

2022-06-15 Thread Xu, Rosen
Hi Wei,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 09, 2022 16:50
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] raw/ifpga: free file handle before function return
> 
> Coverity issue: 379064
> Fixes: 673c897f4d73 ("raw/ifpga: support OFS card probing")
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/base/ifpga_enumerate.c | 28 +++
> -
>  1 file changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_enumerate.c
> b/drivers/raw/ifpga/base/ifpga_enumerate.c
> index 7a5d264..61eb660 100644
> --- a/drivers/raw/ifpga/base/ifpga_enumerate.c
> +++ b/drivers/raw/ifpga/base/ifpga_enumerate.c
> @@ -837,8 +837,10 @@ static int find_dfls_by_vsec(struct
> dfl_fpga_enum_info *info)
>   vndr_hdr = 0;
>   ret = pread(fd, &vndr_hdr, sizeof(vndr_hdr),
>   voff + PCI_VNDR_HEADER);
> - if (ret < 0)
> - return -EIO;
> + if (ret < 0) {
> + ret = -EIO;
> + goto free_handle;
> + }
>   if (PCI_VNDR_HEADER_ID(vndr_hdr) ==
> PCI_VSEC_ID_INTEL_DFLS &&
>   pci_data->vendor_id == PCI_VENDOR_ID_INTEL)
>   break;
> @@ -846,19 +848,23 @@ static int find_dfls_by_vsec(struct
> dfl_fpga_enum_info *info)
> 
>   if (!voff) {
>   dev_debug(hw, "%s no DFL VSEC found\n", __func__);
> - return -ENODEV;
> + ret = -ENODEV;
> + goto free_handle;
>   }
> 
>   dfl_cnt = 0;
>   ret = pread(fd, &dfl_cnt, sizeof(dfl_cnt), voff +
> PCI_VNDR_DFLS_CNT);
> - if (ret < 0)
> - return -EIO;
> + if (ret < 0) {
> + ret = -EIO;
> + goto free_handle;
> + }
> 
>   dfl_res_off = voff + PCI_VNDR_DFLS_RES;
>   if (dfl_res_off + (dfl_cnt * sizeof(u32)) > PCI_CFG_SPACE_EXP_SIZE)
> {
>   dev_err(hw, "%s DFL VSEC too big for PCIe config space\n",
>   __func__);
> - return -EINVAL;
> + ret = -EINVAL;
> + goto free_handle;
>   }
> 
>   for (i = 0; i < dfl_cnt; i++, dfl_res_off += sizeof(u32)) { @@ -868,7
> +874,8 @@ static int find_dfls_by_vsec(struct dfl_fpga_enum_info *info)
>   if (bir >= PCI_MAX_RESOURCE) {
>   dev_err(hw, "%s bad bir number %d\n",
>   __func__, bir);
> - return -EINVAL;
> + ret = -EINVAL;
> + goto free_handle;
>   }
> 
>   len = pci_data->region[bir].len;
> @@ -876,7 +883,8 @@ static int find_dfls_by_vsec(struct
> dfl_fpga_enum_info *info)
>   if (offset >= len) {
>   dev_err(hw, "%s bad offset %u >= %"PRIu64"\n",
>   __func__, offset, len);
> - return -EINVAL;
> + ret = -EINVAL;
> + goto free_handle;
>   }
> 
>   dev_debug(hw, "%s BAR %d offset 0x%x\n", __func__, bir,
> offset); @@ -886,7 +894,9 @@ static int find_dfls_by_vsec(struct
> dfl_fpga_enum_info *info)
>   dfl_fpga_enum_info_add_dfl(info, start, len, addr);
>   }
> 
> - return 0;
> +free_handle:
> + close(fd);
> + return ret;
>  }
> 
>  /* default method of finding dfls starting at offset 0 of bar 0 */
> --
> 1.8.3.1

It looks good for me.
Reviewed-by: Rosen Xu 


RE: [PATCH v3 2/4] raw/ifpga/base: update board information

2022-06-17 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, June 17, 2022 15:20
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 2/4] raw/ifpga/base: update board information
> 
> N6000 ADP platform has different definition of board information, they can
> be recognized after this patch.
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/base/ifpga_defines.h| 101 +++--
>  drivers/raw/ifpga/base/ifpga_fme.c| 121 -
> -
>  drivers/raw/ifpga/base/ifpga_fme_error.c  |   2 +
>  drivers/raw/ifpga/base/ifpga_port_error.c |   2 +-
>  drivers/raw/ifpga/base/opae_intel_max10.c |  45 +++
>  drivers/raw/ifpga/base/opae_intel_max10.h |   3 +
>  6 files changed, 194 insertions(+), 80 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_defines.h
> b/drivers/raw/ifpga/base/ifpga_defines.h
> index f84ed1d..7c8fa89 100644
> --- a/drivers/raw/ifpga/base/ifpga_defines.h
> +++ b/drivers/raw/ifpga/base/ifpga_defines.h
> @@ -268,6 +268,24 @@ struct feature_fme_bitstream_id {
>   union {
>   u64 csr;
>   struct {
> + u8 build_patch:8;
> + u8 build_minor:8;
> + u8 build_major:8;
> + u8 fvl_bypass:1;
> + u8 mac_lightweight:1;
> + u8 disagregate:1;
> + u8 lightweiht:1;
> + u8 seu:1;
> + u8 ptp:1;
> + u8 reserve:2;
> + u8 interface:4;
> + u32 afu_revision:12;
> + u8 patch:4;
> + u8 minor:4;
> + u8 major:4;
> + u8 reserved:4;
> + } v1;
> + struct {
>   u32 gitrepo_hash:32;/* GIT repository hash */
>   /*
>* HSSI configuration identifier:
> @@ -276,7 +294,8 @@ struct feature_fme_bitstream_id {
>* 2 - Ethernet
>*/
>   u8  hssi_id:4;
> - u16 rsvd1:12;   /* Reserved */
> + u8  rsvd1:4;
> + u8  fim_type:8;
>   /* Bitstream version patch number */
>   u8  bs_verpatch:4;
>   /* Bitstream version minor number */ @@ -285,7
> +304,7 @@ struct feature_fme_bitstream_id {
>   u8  bs_vermajor:4;
>   /* Bitstream version debug number */
>   u8  bs_verdebug:4;
> - };
> + } v2;
>   };
>  };
> 
> @@ -1672,31 +1691,6 @@ struct bts_header {
> 
>  #define check_support(n) (n == 1 ? "support" : "no")
> 
> -/* bitstream id definition */
> -struct fme_bitstream_id {
> - union {
> - u64 id;
> - struct {
> - u8 build_patch:8;
> - u8 build_minor:8;
> - u8 build_major:8;
> - u8 fvl_bypass:1;
> - u8 mac_lightweight:1;
> - u8 disagregate:1;
> - u8 lightweiht:1;
> - u8 seu:1;
> - u8 ptp:1;
> - u8 reserve:2;
> - u8 interface:4;
> - u32 afu_revision:12;
> - u8 patch:4;
> - u8 minor:4;
> - u8 major:4;
> - u8 reserved:4;
> - };
> - };
> -};
> -
>  enum board_interface {
>   VC_8_10G = 0,
>   VC_4_25G = 1,
> @@ -1705,10 +1699,30 @@ enum board_interface {
>   VC_2_2_25G = 4,
>  };
> 
> +enum fim_type {
> + BASE_ADP = 0,
> + BASE_FDK,
> + BASE_X16_ADP,
> + BASE_X16_FDK,
> + FIMA_10G_ADP,
> + FIMA_25G_ADP,
> + FIMA_100G_ADP,
> + FIMB_ADP,
> + FIMC_ADP
> +};
> +
> +enum hssi_id {
> + NO_HSSI = 0,
> + PCIE_RP,
> + ETHER_NET
> +};
> +
>  enum pac_major {
>   VISTA_CREEK = 0,
>   RUSH_CREEK = 1,
>   DARBY_CREEK = 2,
> + LIGHTNING_CREEK = 3,
> + ARROW_CREEK = 5,
>  };
> 
>  enum pac_minor {
> @@ -1720,23 +1734,30 @@ enum pac_minor {  struct opae_board_info {
>   enum pac_major major;
>   enum pac_minor minor;
> - enum board_interface type;
> -
> 

RE: [PATCH v3 1/4] raw/ifpga/base: add PMCI base driver

2022-06-17 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, June 17, 2022 15:20
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 1/4] raw/ifpga/base: add PMCI base driver
> 
> PMCI (Platform Management Control Interface) is a new module in FPGA,
> which is designed to cooperate with BMC chip to fulfill board management
> functions.
> This base driver implements interfaces to access registers of BMC chip.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: fix typo. 'spi_master' is not misspelled and is not introduced
> in this patch
> ---
> v3: split PMCI driver into several patches
> ---
>  drivers/raw/ifpga/base/ifpga_defines.h |   2 +
>  drivers/raw/ifpga/base/ifpga_feature_dev.c |   2 +
>  drivers/raw/ifpga/base/ifpga_feature_dev.h |   1 +
>  drivers/raw/ifpga/base/ifpga_fme.c | 142 --
>  drivers/raw/ifpga/base/opae_intel_max10.c  | 297
> -
> drivers/raw/ifpga/base/opae_intel_max10.h  | 229
> +-
>  drivers/raw/ifpga/base/opae_osdep.h|  43 -
>  7 files changed, 597 insertions(+), 119 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_defines.h
> b/drivers/raw/ifpga/base/ifpga_defines.h
> index 9a280eb..f84ed1d 100644
> --- a/drivers/raw/ifpga/base/ifpga_defines.h
> +++ b/drivers/raw/ifpga/base/ifpga_defines.h
> @@ -23,6 +23,7 @@
>  #define FME_FEATURE_NIOS_SPI"fme_nios_spi"
>  #define FME_FEATURE_I2C_MASTER  "fme_i2c_master"
>  #define FME_FEATURE_ETH_GROUP   "fme_eth_group"
> +#define FME_FEATURE_PMCI"fme_pmci"
> 
>  #define PORT_FEATURE_HEADER "port_hdr"
>  #define PORT_FEATURE_UAFU   "port_uafu"
> @@ -91,6 +92,7 @@ enum fpga_id_type {
>  #define FME_FEATURE_ID_NIOS_SPI 0xd
>  #define FME_FEATURE_ID_I2C_MASTER  0xf
>  #define FME_FEATURE_ID_ETH_GROUP 0x10
> +#define FME_FEATURE_ID_PMCI  0x12
> 
>  #define PORT_FEATURE_ID_HEADER FEATURE_ID_FIU_HEADER  #define
> PORT_FEATURE_ID_ERROR 0x10 diff --git
> a/drivers/raw/ifpga/base/ifpga_feature_dev.c
> b/drivers/raw/ifpga/base/ifpga_feature_dev.c
> index dbecc7b..0a00af1 100644
> --- a/drivers/raw/ifpga/base/ifpga_feature_dev.c
> +++ b/drivers/raw/ifpga/base/ifpga_feature_dev.c
> @@ -227,6 +227,8 @@ int port_clear_error(struct ifpga_port_hw *port)
>   &fme_i2c_master_ops),},
>   {FEATURE_DRV(FME_FEATURE_ID_ETH_GROUP,
> FME_FEATURE_ETH_GROUP,
>   &fme_eth_group_ops),},
> + {FEATURE_DRV(FME_FEATURE_ID_PMCI, FME_FEATURE_PMCI,
> + &fme_pmci_ops),},
>   {0, NULL, NULL}, /* end of arrary */
>  };
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_feature_dev.h
> b/drivers/raw/ifpga/base/ifpga_feature_dev.h
> index b355d22..a637eb5 100644
> --- a/drivers/raw/ifpga/base/ifpga_feature_dev.h
> +++ b/drivers/raw/ifpga/base/ifpga_feature_dev.h
> @@ -178,6 +178,7 @@ int do_pr(struct ifpga_hw *hw, u32 port_id, const
> char *buffer, u32 size,  extern struct ifpga_feature_ops fme_i2c_master_ops;
> extern struct ifpga_feature_ops fme_eth_group_ops;  extern struct
> ifpga_feature_ops fme_nios_spi_master_ops;
> +extern struct ifpga_feature_ops fme_pmci_ops;
> 
>  int port_get_prop(struct ifpga_port_hw *port, struct feature_prop *prop);
> int port_set_prop(struct ifpga_port_hw *port, struct feature_prop *prop);
> diff --git a/drivers/raw/ifpga/base/ifpga_fme.c
> b/drivers/raw/ifpga/base/ifpga_fme.c
> index 43c7b9c..4d089d2 100644
> --- a/drivers/raw/ifpga/base/ifpga_fme.c
> +++ b/drivers/raw/ifpga/base/ifpga_fme.c
> @@ -983,11 +983,25 @@ static int fme_spi_init(struct ifpga_feature *feature)
> 
>   altera_spi_init(spi_master);
> 
> - max10 = intel_max10_device_probe(spi_master, 0);
> - if (!max10) {
> + max10 = opae_zmalloc(sizeof(*max10));
> + if (!max10)
> + goto release_dev;
> +
> + max10->spi_master = spi_master;
> + max10->type = M10_N3000;
> +
> + max10->spi_tran_dev = spi_transaction_init(spi_master, 0);
> + if (!max10->spi_tran_dev) {
> + dev_err(fme, "%s spi tran init fail\n", __func__);
> + goto free_max10;
> + }
> +
> + /* init the max10 device */
> + ret = intel_max10_device_init(max10);
> + if (ret) {
>   ret = -ENODEV;
>   dev_err(fme, "max10 init fail\n");
> - goto spi_fail;
> + goto release_spi_tran_dev;
>   }
> 
>   fme->max10_dev = max10;
> @@ -1002,7 +1016,

RE: [PATCH v3 3/4] raw/ifpga/base: update flash operation interface

2022-06-17 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, June 17, 2022 15:20
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 3/4] raw/ifpga/base: update flash operation interface
> 
> In N6000 ADP platform, SPI protocol, master and QSPI flash are transparent
> to host software. The SPI master implemented in PMCI automatically
> converts the mailbox commands to the SPI protocol required by SPI slave.
> That means flash operation is different from old platform, new interfaces are
> introduced to adapt these changes.
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/base/ifpga_api.c   |   9 +
>  drivers/raw/ifpga/base/ifpga_feature_dev.h   |   2 +
>  drivers/raw/ifpga/base/ifpga_fme.c   |   8 +
>  drivers/raw/ifpga/base/opae_hw_api.c |  20 ++
>  drivers/raw/ifpga/base/opae_hw_api.h |   2 +
>  drivers/raw/ifpga/base/opae_intel_max10.c| 282
> +++
>  drivers/raw/ifpga/base/opae_intel_max10.h|  46 
>  drivers/raw/ifpga/base/osdep_rte/osdep_generic.h |  10 +
>  8 files changed, 379 insertions(+)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_api.c
> b/drivers/raw/ifpga/base/ifpga_api.c
> index f19cc26..098de0c 100644
> --- a/drivers/raw/ifpga/base/ifpga_api.c
> +++ b/drivers/raw/ifpga/base/ifpga_api.c
> @@ -268,6 +268,14 @@ static int ifpga_mgr_reload(struct opae_manager
> *mgr, int type, int page)
>   return fpga_reload(fme, type, page);
>  }
> 
> +static int ifpga_mgr_read_flash(struct opae_manager *mgr, u32 address,
> + u32 size, void *buf)
> +{
> + struct ifpga_fme_hw *fme = mgr->data;
> +
> + return fme_mgr_read_flash(fme, address, size, buf); }
> +
>  struct opae_manager_ops ifpga_mgr_ops = {
>   .flash = ifpga_mgr_flash,
>   .get_eth_group_region_info =
> ifpga_mgr_get_eth_group_region_info,
> @@ -277,6 +285,7 @@ struct opae_manager_ops ifpga_mgr_ops = {
>   .update_flash = ifpga_mgr_update_flash,
>   .stop_flash_update = ifpga_mgr_stop_flash_update,
>   .reload = ifpga_mgr_reload,
> + .read_flash = ifpga_mgr_read_flash
>  };
> 
>  static int ifpga_mgr_read_mac_rom(struct opae_manager *mgr, int offset,
> diff --git a/drivers/raw/ifpga/base/ifpga_feature_dev.h
> b/drivers/raw/ifpga/base/ifpga_feature_dev.h
> index a637eb5..7a2f2e5 100644
> --- a/drivers/raw/ifpga/base/ifpga_feature_dev.h
> +++ b/drivers/raw/ifpga/base/ifpga_feature_dev.h
> @@ -223,4 +223,6 @@ int fme_mgr_get_retimer_status(struct
> ifpga_fme_hw *fme,  int fme_mgr_get_sensor_value(struct ifpga_fme_hw
> *fme,
>   struct opae_sensor_info *sensor,
>   unsigned int *value);
> +int fme_mgr_read_flash(struct ifpga_fme_hw *fme, u32 address,
> + u32 size, void *buf);
>  #endif /* _IFPGA_FEATURE_DEV_H_ */
> diff --git a/drivers/raw/ifpga/base/ifpga_fme.c
> b/drivers/raw/ifpga/base/ifpga_fme.c
> index 608a352..25ff819 100644
> --- a/drivers/raw/ifpga/base/ifpga_fme.c
> +++ b/drivers/raw/ifpga/base/ifpga_fme.c
> @@ -1658,3 +1658,11 @@ struct ifpga_feature_ops fme_pmci_ops = {
>   .init = fme_pmci_init,
>   .uinit = fme_pmci_uinit,
>  };
> +
> +int fme_mgr_read_flash(struct ifpga_fme_hw *fme, u32 address,
> + u32 size, void *buf)
> +{
> + struct intel_max10_device *max10 = fme->max10_dev;
> +
> + return opae_read_flash(max10, address, size, buf); }
> diff --git a/drivers/raw/ifpga/base/opae_hw_api.c
> b/drivers/raw/ifpga/base/opae_hw_api.c
> index 87256fc..fd08326 100644
> --- a/drivers/raw/ifpga/base/opae_hw_api.c
> +++ b/drivers/raw/ifpga/base/opae_hw_api.c
> @@ -1041,3 +1041,23 @@ int opae_mgr_reload(struct opae_manager *mgr,
> int type, int page)
> 
>   return -ENOENT;
>  }
> +/**
> + * opae_mgr_read_flash -  read flash content
> + * @mgr: targeted manager
> + * @address: the start address of flash
> + * @size: the size of flash
> + * @buf: the read buffer
> + *
> + * Return: 0 on success, otherwise error code.
> + */
> +int opae_mgr_read_flash(struct opae_manager *mgr, u32 address,
> + u32 size, void *buf)
> +{
> + if (!mgr)
> + return -EINVAL;
> +
> + if (mgr->ops && mgr->ops->read_flash)
> + return mgr->ops->read_flash(mgr, address, size, buf);
> +
> + return -ENOENT;
> +}
> diff --git a/drivers/raw/ifpga/base/opae_hw_api.h
> b/drivers/raw/ifpga/base/opae_hw_api.h
> index fd40e09..de1e984 100644
> --- a/drivers/raw/ifpga/base/opae_hw_api.h
> +++ b

RE: [PATCH v3 4/4] raw/ifpga/base: add PMCI sensor driver

2022-06-17 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, June 17, 2022 15:20
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 4/4] raw/ifpga/base: add PMCI sensor driver
> 
> N6000 ADP platform support more sensors than N3000, they are accessed
> with the help of PMCI sensor driver.
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/base/opae_hw_api.c  |  29 +++
>  drivers/raw/ifpga/base/opae_hw_api.h  |   1 +
>  drivers/raw/ifpga/base/opae_intel_max10.c | 326
> ++
> drivers/raw/ifpga/base/opae_intel_max10.h |  35 
>  4 files changed, 391 insertions(+)
> 
> diff --git a/drivers/raw/ifpga/base/opae_hw_api.c
> b/drivers/raw/ifpga/base/opae_hw_api.c
> index fd08326..1117c3e 100644
> --- a/drivers/raw/ifpga/base/opae_hw_api.c
> +++ b/drivers/raw/ifpga/base/opae_hw_api.c
> @@ -831,6 +831,35 @@ int opae_manager_get_retimer_status(struct
> opae_manager *mgr,  }
> 
>  /**
> + * opae_manager_get_sensor_list - get sensor name list
> + * @mgr: opae_manager of sensors
> + * @buf: buffer to accommodate name list separated by semicolon
> + * @size: size of buffer
> + *
> + * Return: the pointer of the opae_sensor_info  */ int
> +opae_mgr_get_sensor_list(struct opae_manager *mgr, char *buf, size_t
> +size) {
> + struct opae_sensor_info *sensor;
> + uint32_t offset = 0;
> +
> + opae_mgr_for_each_sensor(mgr, sensor) {
> + if (sensor->name) {
> + if (buf && (offset < size))
> + snprintf(buf + offset, size - offset, "%s;",
> + sensor->name);
> + offset += strlen(sensor->name) + 1;
> + }
> + }
> +
> + if (buf && (offset > 0) && (offset <= size))
> + buf[offset-1] = 0;
> +
> + return offset;
> +}
> +
> +/**
>   * opae_manager_get_sensor_by_id - get sensor device
>   * @id: the id of the sensor
>   *
> diff --git a/drivers/raw/ifpga/base/opae_hw_api.h
> b/drivers/raw/ifpga/base/opae_hw_api.h
> index de1e984..613563a 100644
> --- a/drivers/raw/ifpga/base/opae_hw_api.h
> +++ b/drivers/raw/ifpga/base/opae_hw_api.h
> @@ -94,6 +94,7 @@ int opae_manager_flash(struct opae_manager *mgr, int
> acc_id, const char *buf,
>  u32 size, u64 *status);
>  int opae_manager_get_eth_group_region_info(struct opae_manager *mgr,
>   u8 group_id, struct opae_eth_group_region_info *info);
> +int opae_mgr_get_sensor_list(struct opae_manager *mgr, char *buf,
> +size_t size);
>  struct opae_sensor_info *opae_mgr_get_sensor_by_name(struct
> opae_manager *mgr,
>   const char *name);
>  struct opae_sensor_info *opae_mgr_get_sensor_by_id(struct
> opae_manager *mgr, diff --git
> a/drivers/raw/ifpga/base/opae_intel_max10.c
> b/drivers/raw/ifpga/base/opae_intel_max10.c
> index 9c01729..dd97a5f 100644
> --- a/drivers/raw/ifpga/base/opae_intel_max10.c
> +++ b/drivers/raw/ifpga/base/opae_intel_max10.c
> @@ -1102,6 +1102,328 @@ int max10_get_bmcfw_version(struct
> intel_max10_device *dev, unsigned int *val)
>   .auth_result = M10BMC_PMCI_AUTH_RESULT,  };
> 
> +static const struct max10_sensor_raw_data n6000bmc_temp_tbl[] = {
> + { 0x444, 0x448, 0x44c, 0x0, 0x0, 500,
> + "FPGA E-TILE Temperature #1" },
> + { 0x450, 0x454, 0x458, 0x0, 0x0, 500,
> + "FPGA E-TILE Temperature #2" },
> + { 0x45c, 0x460, 0x464, 0x0, 0x0, 500,
> + "FPGA E-TILE Temperature #3" },
> + { 0x468, 0x46c, 0x470, 0x0, 0x0, 500,
> + "FPGA E-TILE Temperature #4" },
> + { 0x474, 0x478, 0x47c, 0x0, 0x0, 500,
> + "FPGA P-TILE Temperature" },
> + { 0x484, 0x488, 0x48c, 0x0, 0x0, 500,
> + "FPGA FABRIC Digital Temperature#1" },
> + { 0x490, 0x494, 0x498, 0x0, 0x0, 500,
> + "FPGA FABRIC Digital Temperature#2" },
> + { 0x49c, 0x4a0, 0x4a4, 0x0, 0x0, 500,
> + "FPGA FABRIC Digital Temperature#3" },
> + { 0x4a8, 0x4ac, 0x4b0, 0x0, 0x0, 500,
> + "FPGA FABRIC Digital Temperature#4" },
> + { 0x4b4, 0x4b8, 0x4bc, 0x0, 0x0, 500,
> + "FPGA FABRIC Digital Temperature#5" },
> + { 0x4c0, 0x4c4, 0x4c8, 0x0, 0x0, 500,
> + "FPGA FABRIC Remote Digital Temperature#1" },
> + { 0x4cc, 0x4d0, 0x4d4, 0x0, 0x0, 500,
> + "FPGA F

RE: [PATCH] raw/ifpga/base: check pointer before dereference

2022-06-22 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 23, 2022 11:12
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH] raw/ifpga/base: check pointer before dereference
> 
> Do null-checking on hw->adapter in fme_pmci_init() before dereference it.
> 
> Coverity issue: 379202
> Fixes: ca6eb0f7c836 ("raw/ifpga/base: add PMCI base driver")
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/base/ifpga_fme.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_fme.c
> b/drivers/raw/ifpga/base/ifpga_fme.c
> index 25ff819..b6dd4ce 100644
> --- a/drivers/raw/ifpga/base/ifpga_fme.c
> +++ b/drivers/raw/ifpga/base/ifpga_fme.c
> @@ -1591,7 +1591,7 @@ static int fme_pmci_init(struct ifpga_feature
> *feature)
>   int ret = 0;
> 
>   hw = fme->parent;
> - if (!hw)
> + if (!hw || !hw->adapter)
>   return -ENODEV;
> 
>   mgr = hw->adapter->mgr;
> @@ -1608,7 +1608,7 @@ static int fme_pmci_init(struct ifpga_feature
> *feature)
> 
>   max10->type = M10_N6000;
>   max10->mmio = feature->addr;
> - if (hw->adapter && hw->adapter->shm.ptr) {
> + if (hw->adapter->shm.ptr) {
>   sd = (opae_share_data *)hw->adapter->shm.ptr;
>   max10->bmc_ops.mutex = &sd->spi_mutex;
>   } else {
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH] raw/ifpga: avoid potential integer overflow

2022-06-22 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, June 23, 2022 11:12
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH] raw/ifpga: avoid potential integer overflow
> 
> Expression "tx_chunks * ctx->dma_buf_size" in dma_fpga_to_fpga() is
> evaluated using 32-bit arithmetic, which would overflow  potentially. Change
> tx_chunks to type "uint64_t" to avoid such issue.
> 
> Coverity issue: 379203
> Fixes: 7d63899a5c19 ("raw/ifpga: add N3000 AFU driver")
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/afu_pmd_n3000.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_n3000.c
> b/drivers/raw/ifpga/afu_pmd_n3000.c
> index 8708164..5120df5 100644
> --- a/drivers/raw/ifpga/afu_pmd_n3000.c
> +++ b/drivers/raw/ifpga/afu_pmd_n3000.c
> @@ -1158,7 +1158,7 @@ static int dma_fpga_to_fpga(struct dma_afu_ctx
> *ctx, uint64_t dst, uint64_t src,
>   uint64_t count_left = count;
>   uint64_t dma_chunks = 0;
>   uint64_t offset = 0;
> - uint32_t tx_chunks = 0;
> + uint64_t tx_chunks = 0;
>   uint64_t *tmp_buf = NULL;
>   int ret = 0;
> 
> @@ -1213,7 +1213,7 @@ static int dma_fpga_to_fpga(struct dma_afu_ctx
> *ctx, uint64_t dst, uint64_t src,
>   offset = tx_chunks * ctx->dma_buf_size;
>   count_left -= offset;
>   IFPGA_RAWDEV_PMD_DEBUG("0x%"PRIx64" -->
> 0x%"PRIx64
> - " (%u...0x%"PRIx64")",
> + " (%"PRIu64"...0x%"PRIx64")",
>   src, dst, tx_chunks, count_left);
>   tmp_buf = (uint64_t *)rte_malloc(NULL, ctx->dma_buf_size,
>   DMA_ALIGN_BYTES);
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH] doc: announce some raw/ifpga API removal

2022-06-30 Thread Xu, Rosen
Hi  David,

Got, thank you so much.


> -Original Message-
> From: David Marchand 
> Sent: Thursday, June 30, 2022 17:41
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> 
> Cc: Ray Kinsella 
> Subject: [PATCH] doc: announce some raw/ifpga API removal
> 
> rte_pmd_ifpga_get_pci_bus() documentation is vague and it is unclear what
> could be done with it.
> On the other hand, EAL provides a standard API to retrieve a bus object by
> name.
> 
> Announce removal of this driver specific API for v22.11.
> 
> Signed-off-by: David Marchand 
> ---
> A RFC series of the intended changes is available at:
> https://patches.dpdk.org/project/dpdk/list/?series=23811&state=%2A&arch
> ive=both
> 
> ---
>  doc/guides/rel_notes/deprecation.rst | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/doc/guides/rel_notes/deprecation.rst
> b/doc/guides/rel_notes/deprecation.rst
> index 4e5b23c53d..64d649777a 100644
> --- a/doc/guides/rel_notes/deprecation.rst
> +++ b/doc/guides/rel_notes/deprecation.rst
> @@ -119,6 +119,8 @@ Deprecation Notices
>  * metrics: The function ``rte_metrics_init`` will have a non-void return
>in order to notify errors instead of calling ``rte_exit``.
> 
> +* raw/ifgpa: The ``rte_pmd_ifpga_get_pci_bus`` will be removed in 22.11.
> +
>  * raw/ioat: The ``ioat`` rawdev driver has been deprecated, since it's
>functionality is provided through the new ``dmadev`` infrastructure.
>To continue to use hardware previously supported by the ``ioat`` rawdev
> driver,
> --
> 2.36.1



Re: [dpdk-dev] [PATCH v1 1/4] raw/ifpga/base: use trusted buffer to free

2021-04-01 Thread Xu, Rosen
Hi,

-Original Message-
From: Huang, Wei  
Sent: Wednesday, March 17, 2021 4:22 PM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Huang, Wei 

Subject: [PATCH v1 1/4] raw/ifpga/base: use trusted buffer to free

In write_flash_image(), calling function "read" may taints variable "buf" which 
turn to an untrusted value as argument of "rte_free".

Coverity issue: 367477
Fixes: 7a4f3993f269 ("raw/ifpga: add FPGA RSU APIs")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_fme_rsu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/raw/ifpga/base/ifpga_fme_rsu.c 
b/drivers/raw/ifpga/base/ifpga_fme_rsu.c
index 28198abd78..d32f1eccb1 100644
--- a/drivers/raw/ifpga/base/ifpga_fme_rsu.c
+++ b/drivers/raw/ifpga/base/ifpga_fme_rsu.c
@@ -92,6 +92,7 @@ static int write_flash_image(struct ifpga_sec_mgr *smgr, 
const char *image,
uint32_t offset)
 {
void *buf = NULL;
+   void *buf_to_free = NULL;
int retry = 0;
uint32_t length = 0;
uint32_t to_transfer = 0;
@@ -122,6 +123,7 @@ static int write_flash_image(struct ifpga_sec_mgr *smgr, 
const char *image,
close(fd);
return -ENOMEM;
}
+   buf_to_free = buf;
 
length = smgr->rsu_length;
one_percent = length / 100;
@@ -177,7 +179,7 @@ static int write_flash_image(struct ifpga_sec_mgr *smgr, 
const char *image,
printf("\n");
 
 end:
-   free(buf);
+   free(buf_to_free);
close(fd);
return ret;
 }
--
2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v1 2/4] raw/ifpga/base: check return value of lseek

2021-04-01 Thread Xu, Rosen
Hi,

-Original Message-
From: Huang, Wei  
Sent: Wednesday, March 17, 2021 4:22 PM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Huang, Wei 

Subject: [PATCH v1 2/4] raw/ifpga/base: check return value of lseek

In write_flash_image(), calling function "lseek" without checking return value 
has risk. Negative return value should be handled as an error condition.

Coverity issue: 367478
Fixes: 7a4f3993f269 ("raw/ifpga: add FPGA RSU APIs")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_fme_rsu.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/raw/ifpga/base/ifpga_fme_rsu.c 
b/drivers/raw/ifpga/base/ifpga_fme_rsu.c
index d32f1eccb1..a4cb2f54ba 100644
--- a/drivers/raw/ifpga/base/ifpga_fme_rsu.c
+++ b/drivers/raw/ifpga/base/ifpga_fme_rsu.c
@@ -130,7 +130,12 @@ static int write_flash_image(struct ifpga_sec_mgr *smgr, 
const char *image,
do {
to_transfer = (length > IFPGA_RSU_DATA_BLK_SIZE) ?
IFPGA_RSU_DATA_BLK_SIZE : length;
-   lseek(fd, offset, SEEK_SET);
+   if (lseek(fd, offset, SEEK_SET) < 0) {
+   dev_err(smgr, "Failed to seek in \'%s\' [e:%s]\n",
+   image, strerror(errno));
+   ret = -EIO;
+   goto end;
+   }
read_size = read(fd, buf, to_transfer);
if (read_size < 0) {
dev_err(smgr, "Failed to read from \'%s\' [e:%s]\n",
--
2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v1 3/4] raw/ifpga/base: assign unsigned value to length

2021-04-01 Thread Xu, Rosen
Hi,

-Original Message-
From: Huang, Wei  
Sent: Wednesday, March 17, 2021 4:22 PM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Huang, Wei 

Subject: [PATCH v1 3/4] raw/ifpga/base: assign unsigned value to length

In fpga_update_flash(), "smgr->rsu_length" is passed to a parameter that cannot 
be negative. So return value of function "lseek" should be checked before being 
assigned to "smgr->rsu_length".

Coverity issue: 367481
Fixes: 7a4f3993f269 ("raw/ifpga: add FPGA RSU APIs")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_fme_rsu.c | 15 ++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/raw/ifpga/base/ifpga_fme_rsu.c 
b/drivers/raw/ifpga/base/ifpga_fme_rsu.c
index a4cb2f54ba..79ee37c282 100644
--- a/drivers/raw/ifpga/base/ifpga_fme_rsu.c
+++ b/drivers/raw/ifpga/base/ifpga_fme_rsu.c
@@ -277,6 +277,7 @@ int fpga_update_flash(struct ifpga_fme_hw *fme, const char 
*image,
struct ifpga_sec_mgr *smgr = NULL;
uint32_t rsu_stat = 0;
int fd = -1;
+   off_t len = 0;
struct sigaction old_sigint_action;
struct sigaction sa;
time_t start;
@@ -320,9 +321,21 @@ int fpga_update_flash(struct ifpga_fme_hw *fme, const char 
*image,
image, strerror(errno));
return -EIO;
}
-   smgr->rsu_length = lseek(fd, 0, SEEK_END);
+   len = lseek(fd, 0, SEEK_END);
close(fd);
 
+   if (len < 0) {
+   dev_err(smgr,
+   "Failed to get file length of \'%s\' [e:%s]\n",
+   image, strerror(errno));
+   return -EIO;
+   }
+   if (len == 0) {
+   dev_err(smgr, "Length of file \'%s\' is invalid\n", image);
+   return -EINVAL;
+   }
+   smgr->rsu_length = len;
+
if (smgr->max10_dev->staging_area_size < smgr->rsu_length) {
dev_err(dev, "Size of staging area is small than image length "
"[%u<%u]\n", smgr->max10_dev->staging_area_size,
--
2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v1 4/4] raw/ifpga/base: check pointer before dereferencing

2021-04-01 Thread Xu, Rosen
Hi,

-Original Message-
From: Huang, Wei  
Sent: Wednesday, March 17, 2021 4:22 PM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Huang, Wei 

Subject: [PATCH v1 4/4] raw/ifpga/base: check pointer before dereferencing

In init_sec_mgr(), pointer "hw" may be NULL, so "hw" should be checked before 
dereferencing.

Coverity issue: 367483
Fixes: 7a4f3993f269 ("raw/ifpga: add FPGA RSU APIs")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_sec_mgr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/raw/ifpga/base/ifpga_sec_mgr.c 
b/drivers/raw/ifpga/base/ifpga_sec_mgr.c
index 4cf1db3049..15fb5b6d4d 100644
--- a/drivers/raw/ifpga/base/ifpga_sec_mgr.c
+++ b/drivers/raw/ifpga/base/ifpga_sec_mgr.c
@@ -610,7 +610,7 @@ int init_sec_mgr(struct ifpga_fme_hw *fme)
smgr->rsu_status = NULL;
}
 
-   if ((hw->pci_data->device_id == IFPGA_N3000_DID) &&
+   if (hw && (hw->pci_data->device_id == IFPGA_N3000_DID) &&
(hw->pci_data->vendor_id == IFPGA_N3000_VID)) {
smgr->ops = &n3000_sec_ops;
smgr->copy_speed = IFPGA_N3000_COPY_SPEED;
--
2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v1 1/2] raw/ifpga/base: use untained variable as argument

2021-04-01 Thread Xu, Rosen
Hi,

-Original Message-
From: Huang, Wei  
Sent: Wednesday, March 17, 2021 4:24 PM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Huang, Wei 

Subject: [PATCH v1 1/2] raw/ifpga/base: use untained variable as argument

In fme_spi_init(), passing tainted expression "fme->max10_dev"
to function "intel_max10_device_remove" has risk. Untainted variable "max10" 
should be used.

Coverity issue: 367480
Fixes: 96ebfcf8125c ("raw/ifpga/base: add SPI and MAX10 device driver")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_fme.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/raw/ifpga/base/ifpga_fme.c 
b/drivers/raw/ifpga/base/ifpga_fme.c
index 43c7b9c3dc..a63f90331f 100644
--- a/drivers/raw/ifpga/base/ifpga_fme.c
+++ b/drivers/raw/ifpga/base/ifpga_fme.c
@@ -1001,7 +1001,7 @@ static int fme_spi_init(struct ifpga_feature *feature)
return ret;
 
 max10_fail:
-   intel_max10_device_remove(fme->max10_dev);
+   intel_max10_device_remove(max10);
 spi_fail:
altera_spi_release(spi_master);
return ret;
--
2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v1 2/2] raw/ifpga/base: add argument to use untained variable

2021-04-01 Thread Xu, Rosen
Hi,

-Original Message-
From: Huang, Wei  
Sent: Wednesday, March 17, 2021 4:24 PM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Huang, Wei 

Subject: [PATCH v1 2/2] raw/ifpga/base: add argument to use untained variable

In fme_nios_spi_init(), passing tainted expression "fme->max10_dev"
to function "fme_get_board_interface" has risk. Add new arguemnt in function 
"fme_get_board_interface" to accept untainted variable.

Coverity issue: 367482
Fixes: 96ebfcf8125c ("raw/ifpga/base: add SPI and MAX10 device driver")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_fme.c | 13 +++--
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/raw/ifpga/base/ifpga_fme.c 
b/drivers/raw/ifpga/base/ifpga_fme.c
index a63f90331f..4edb9e09e1 100644
--- a/drivers/raw/ifpga/base/ifpga_fme.c
+++ b/drivers/raw/ifpga/base/ifpga_fme.c
@@ -857,7 +857,8 @@ static int board_type_to_info(u32 type,
return 0;
 }
 
-static int fme_get_board_interface(struct ifpga_fme_hw *fme)
+static int fme_get_board_interface(struct ifpga_fme_hw *fme,
+   struct intel_max10_device *max10_dev)
 {
struct fme_bitstream_id id;
struct ifpga_hw *hw;
@@ -911,15 +912,15 @@ static int fme_get_board_interface(struct ifpga_fme_hw 
*fme)
fme->board_info.nums_of_fvl,
fme->board_info.ports_per_fvl);
 
-   if (max10_sys_read(fme->max10_dev, FPGA_PAGE_INFO, &val))
+   if (max10_sys_read(max10_dev, FPGA_PAGE_INFO, &val))
return -EINVAL;
fme->board_info.boot_page = val & 0x7;
 
-   if (max10_sys_read(fme->max10_dev, MAX10_BUILD_VER, &val))
+   if (max10_sys_read(max10_dev, MAX10_BUILD_VER, &val))
return -EINVAL;
fme->board_info.max10_version = val;
 
-   if (max10_sys_read(fme->max10_dev, NIOS2_FW_VERSION, &val))
+   if (max10_sys_read(max10_dev, NIOS2_FW_VERSION, &val))
return -EINVAL;
fme->board_info.nios_fw_version = val;
 
@@ -1169,7 +1170,7 @@ static int fme_nios_spi_init(struct ifpga_feature 
*feature)
 
max10->bus = hw->pci_data->bus;
 
-   fme_get_board_interface(fme);
+   fme_get_board_interface(fme, max10);
 
mgr->sensor_list = &max10->opae_sensor_list;
 
@@ -1186,7 +1187,7 @@ static int fme_nios_spi_init(struct ifpga_feature 
*feature)
return ret;
 
 spi_fail:
-   intel_max10_device_remove(fme->max10_dev);
+   intel_max10_device_remove(max10);
 release_dev:
altera_spi_release(spi_master);
return -ENODEV;
--
2.29.2

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v2 3/3] drivers: align log names

2021-04-05 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Thomas Monjalon 
> Sent: Monday, April 05, 2021 18:03
> To: dev@dpdk.org
> Cc: Richardson, Bruce ; Xu, Rosen
> ; Wang, Xiao W ; Hemant
> Agrawal ; Ajit Khaparde
> ; Griffin, John ;
> Trahe, Fiona ; Jain, Deepak K
> ; Raveendra Padasalagi
> ; Vikas Gupta
> ; John W. Linville ;
> Chas Williams ; Min Hu (Connor) ;
> Zhang, Tianfei ; Nipun Gupta
> 
> Subject: [PATCH v2 3/3] drivers: align log names
> 
> The log levels are configured by using the name of the logs.
> Some drivers are aligned to follow a common log name standard:
>   pmd.class.driver[.sub]
> Some "common" drivers skip the "class" part:
>   pmd.driver.sub
> 
> Two drivers have exceptions to be clarified:
>   pmd.vdpa.ifcvf instead of pmd.vdpa.ifc
>   pmd.afu.ipn3ke instead of pmd.net.ipn3ke
> 
> Signed-off-by: Thomas Monjalon 
> Acked-by: Bruce Richardson 
> Acked-by: Rosen Xu 
> Acked-by: Xiao Wang 
> Acked-by: Hemant Agrawal 
> Acked-by: Ajit Khaparde 
> ---
>  doc/guides/cryptodevs/qat.rst | 10 +-
>  drivers/common/qat/qat_logs.c |  4 ++--
>  drivers/crypto/bcmfs/bcmfs_logs.c |  4 ++--
>  drivers/net/af_packet/rte_eth_af_packet.c |  2 +-
>  drivers/net/bonding/rte_eth_bond_pmd.c|  2 +-
>  drivers/raw/ifpga/ifpga_rawdev.c  |  2 +-
>  drivers/raw/ioat/ioat_rawdev.c|  2 +-
>  drivers/raw/skeleton/skeleton_rawdev.c|  2 +-
>  drivers/vdpa/ifc/ifcvf_vdpa.c |  2 +-
>  9 files changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
> index cf16f03503..224b22b3f7 100644
> --- a/doc/guides/cryptodevs/qat.rst
> +++ b/doc/guides/cryptodevs/qat.rst
> @@ -659,15 +659,15 @@ Debugging
> 
>  There are 2 sets of trace available via the dynamic logging feature:
> 
> -* pmd.qat_dp exposes trace on the data-path.
> -* pmd.qat_general exposes all other trace.
> +* pmd.qat.dp exposes trace on the data-path.
> +* pmd.qat.general exposes all other trace.
> 
>  pmd.qat exposes both sets of traces.
>  They can be enabled using the log-level option (where 8=maximum log level)
> on  the process cmdline, e.g. using any of the following::
> 
> ---log-level="pmd.qat_general,8"
> ---log-level="pmd.qat_dp,8"
> +--log-level="pmd.qat.general,8"
> +--log-level="pmd.qat.dp,8"
>  --log-level="pmd.qat,8"
> 
>  .. Note::
> @@ -678,4 +678,4 @@ the process cmdline, e.g. using any of the following::
>  Also the dynamic global log level overrides both sets of trace, so e.g. 
> no
>  QAT trace would display in this case::
> 
> - --log-level="7" --log-level="pmd.qat_general,8"
> + --log-level="7" --log-level="pmd.qat.general,8"
> diff --git a/drivers/common/qat/qat_logs.c
> b/drivers/common/qat/qat_logs.c index fa48be53c3..adbe163cd9 100644
> --- a/drivers/common/qat/qat_logs.c
> +++ b/drivers/common/qat/qat_logs.c
> @@ -17,5 +17,5 @@ qat_hexdump_log(uint32_t level, uint32_t logtype,
> const char *title,
>   return 0;
>  }
> 
> -RTE_LOG_REGISTER(qat_gen_logtype, pmd.qat_general, NOTICE); -
> RTE_LOG_REGISTER(qat_dp_logtype, pmd.qat_dp, NOTICE);
> +RTE_LOG_REGISTER(qat_gen_logtype, pmd.qat.general, NOTICE);
> +RTE_LOG_REGISTER(qat_dp_logtype, pmd.qat.dp, NOTICE);
> diff --git a/drivers/crypto/bcmfs/bcmfs_logs.c
> b/drivers/crypto/bcmfs/bcmfs_logs.c
> index 701da9ecf3..9faf12f238 100644
> --- a/drivers/crypto/bcmfs/bcmfs_logs.c
> +++ b/drivers/crypto/bcmfs/bcmfs_logs.c
> @@ -21,5 +21,5 @@ bcmfs_hexdump_log(uint32_t level, uint32_t logtype,
> const char *title,
>   return 0;
>  }
> 
> -RTE_LOG_REGISTER(bcmfs_conf_logtype, pmd.bcmfs_config, NOTICE) -
> RTE_LOG_REGISTER(bcmfs_dp_logtype, pmd.bcmfs_fp, NOTICE)
> +RTE_LOG_REGISTER(bcmfs_conf_logtype, pmd.crypto.bcmfs.config, NOTICE)
> +RTE_LOG_REGISTER(bcmfs_dp_logtype, pmd.crypto.bcmfs.fp, NOTICE)
> diff --git a/drivers/net/af_packet/rte_eth_af_packet.c
> b/drivers/net/af_packet/rte_eth_af_packet.c
> index bfe5a0a451..a04f7c773a 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -97,7 +97,7 @@ static struct rte_eth_link pmd_link = {
>   .link_autoneg = ETH_LINK_FIXED,
>  };
> 
> -RTE_LOG_REGISTER(af_packet_logtype, pmd.net.packet, NOTICE);
> +RTE_LOG_REGISTER(af_packet_logtype, pmd.net.af_packet, NOTICE);
> 
>  #define PMD_LOG(level, fmt, args...) \
>   rte_log(RTE_LOG_ ## level, af_packet_logtype, \ diff --git
> a/drivers/net/bonding/rte_eth_bond_pmd.c
> b/drivers

Re: [dpdk-dev] [PATCH v2 3/3] drivers: align log names

2021-04-06 Thread Xu, Rosen
HI Thomas,

I'm ok, if you replace pmd.afu.ipn3ke with pmd.net.ipn3ke. Thanks your reminder.

> -Original Message-
> From: Thomas Monjalon 
> Sent: Tuesday, April 06, 2021 17:31
> To: Xu, Rosen ; Wang, Xiao W
> 
> Cc: dev@dpdk.org; Richardson, Bruce ;
> Hemant Agrawal ; Ajit Khaparde
> ; Griffin, John ;
> Trahe, Fiona ; Jain, Deepak K
> ; Raveendra Padasalagi
> ; Vikas Gupta
> ; John W. Linville ;
> Chas Williams ; Min Hu (Connor) ;
> Zhang, Tianfei ; Nipun Gupta
> ; david.march...@redhat.com
> Subject: Re: [PATCH v2 3/3] drivers: align log names
> 
> Hi Rosen,
> 
> You already gave your ack in previous version, no need to re-ack.
> Instead, please give your opinion and explanation as requested below.
> We want to replace pmd.afu.ipn3ke with pmd.net.ipn3ke.
> The use of AFU in the driver is not clear.
> 
> Xiao, we need your opinion as well about ifcvf vs ifc name.
> 
> 
> > > The log levels are configured by using the name of the logs.
> > > Some drivers are aligned to follow a common log name standard:
> > >   pmd.class.driver[.sub]
> > > Some "common" drivers skip the "class" part:
> > >   pmd.driver.sub
> > >
> > > Two drivers have exceptions to be clarified:
> > >   pmd.vdpa.ifcvf instead of pmd.vdpa.ifc
> > >   pmd.afu.ipn3ke instead of pmd.net.ipn3ke
> > >
> > > Signed-off-by: Thomas Monjalon 
> > > Acked-by: Bruce Richardson 
> > > Acked-by: Rosen Xu 
> > > Acked-by: Xiao Wang 
> > > Acked-by: Hemant Agrawal 
> > > Acked-by: Ajit Khaparde 
> [...]
> > Acked-by: Rosen Xu 
> 
> 



RE: [PATCH] bus/ifpga: remove useless check while browsing devices

2022-01-13 Thread Xu, Rosen
Hi,

Thanks.

> -Original Message-
> From: Maxime Gouin 
> Sent: Wednesday, January 05, 2022 18:27
> To: dev@dpdk.org
> Cc: Maxime Gouin ; Xu, Rosen
> ; Zhang, Qi Z ; Zhang, Tianfei
> ; Olivier Matz 
> Subject: [PATCH] bus/ifpga: remove useless check while browsing devices
> 
> reported by code analysis tool C++test (version 10.4):
> 
> > /build/dpdk-20.11/drivers/bus/ifpga/ifpga_bus.c
> > 67Condition "afu_dev" is always evaluated to true
> > 81Condition "afu_dev" is always evaluated to true
> 
> The "for" loop already checks that afu_dev is not NULL.
> 
> Fixes: 05fa3d4a6539 ("bus/ifpga: add Intel FPGA bus library")
> 
> Signed-off-by: Maxime Gouin 
> Reviewed-by: Olivier Matz 
> ---
>  drivers/bus/ifpga/ifpga_bus.c | 6 ++
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
> index cbc680928486..c5c8bbd57219 100644
> --- a/drivers/bus/ifpga/ifpga_bus.c
> +++ b/drivers/bus/ifpga/ifpga_bus.c
> @@ -64,8 +64,7 @@ ifpga_find_afu_dev(const struct rte_rawdev *rdev,
>   struct rte_afu_device *afu_dev = NULL;
> 
>   TAILQ_FOREACH(afu_dev, &ifpga_afu_dev_list, next) {
> - if (afu_dev &&
> - afu_dev->rawdev == rdev &&
> + if (afu_dev->rawdev == rdev &&
>   !ifpga_afu_id_cmp(&afu_dev->id, afu_id))
>   return afu_dev;
>   }
> @@ -78,8 +77,7 @@ rte_ifpga_find_afu_by_name(const char *name)
>   struct rte_afu_device *afu_dev = NULL;
> 
>   TAILQ_FOREACH(afu_dev, &ifpga_afu_dev_list, next) {
> - if (afu_dev &&
> - !strcmp(afu_dev->device.name, name))
> + if (!strcmp(afu_dev->device.name, name))
>   return afu_dev;
>   }
>   return NULL;
> --
> 2.30.2

Acked-by: Rosen Xu 


RE: [PATCH v1 4/4] raw/ifpga/base: fix port feature ID

2022-01-17 Thread Xu, Rosen
Hi Wei,

Some issues of ci/iol-x86_64-unit-testing, pls check it. Thanks a lot.

Thanks,
Rosen

-Original Message-
From: Huang, Wei  
Sent: Tuesday, January 18, 2022 11:18 AM
To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z 

Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh 
; Huang, Wei 
Subject: [PATCH v1 4/4] raw/ifpga/base: fix port feature ID

Fix ID value of port features to match the definition from hardware.

Fixes: 473c88f9 ("drivers/raw: remove rawdev from directory names")

Signed-off-by: Wei Huang 
---
 drivers/raw/ifpga/base/ifpga_defines.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/raw/ifpga/base/ifpga_defines.h 
b/drivers/raw/ifpga/base/ifpga_defines.h
index dca1518..8f62033 100644
--- a/drivers/raw/ifpga/base/ifpga_defines.h
+++ b/drivers/raw/ifpga/base/ifpga_defines.h
@@ -93,9 +93,9 @@ enum fpga_id_type {
 
 #define PORT_FEATURE_ID_HEADER FEATURE_ID_FIU_HEADER  #define 
PORT_FEATURE_ID_ERROR 0x10 -#define PORT_FEATURE_ID_UMSG 0x12 -#define 
PORT_FEATURE_ID_UINT 0x13 -#define PORT_FEATURE_ID_STP 0x14
+#define PORT_FEATURE_ID_UMSG 0x11
+#define PORT_FEATURE_ID_UINT 0x12
+#define PORT_FEATURE_ID_STP 0x13
 #define PORT_FEATURE_ID_UAFU FEATURE_ID_AFU
 
 /*
--
1.8.3.1



RE: [PATCH v1] raw/ifpga: fix pthread cannot join

2022-01-19 Thread Xu, Rosen
Hi Wei,

Some ci/iol-intel-Functional issues, pls check. Thanks a lot.

> -Original Message-
> From: Huang, Wei 
> Sent: Wednesday, January 19, 2022 13:54
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> 
> Subject: [PATCH v1] raw/ifpga: fix pthread cannot join
> 
> From: Tianfei Zhang 
> 
> When we want to close a thread, we should set a flag to thread handler
> function.
> 
> Fixes: 9c006c45 ("raw/ifpga: scan PCIe BDF device tree")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Tianfei Zhang 
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 8 
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 8d9db58..9663b67 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -497,7 +497,7 @@ static int set_surprise_link_check_aer(
>   int gsd_enable, ret;
>  #define MS 1000
> 
> - while (1) {
> + while (ifpga_monitor_start) {
>   gsd_enable = 0;
>   for (i = 0; i < IFPGA_RAWDEV_NUM; i++) {
>   ifpga_rdev = &ifpga_rawdevices[i];
> @@ -544,7 +544,9 @@ static int set_surprise_link_check_aer(  {
>   int ret;
> 
> - if (ifpga_monitor_start == 1) {
> + if (ifpga_monitor_start == 1 && ifpga_monitor_start_thread) {
> + ifpga_monitor_start = 0;
> +
>   ret = pthread_cancel(ifpga_monitor_start_thread);
>   if (ret)
>   IFPGA_RAWDEV_PMD_ERR("Can't cancel the
> thread"); @@ -553,8 +555,6 @@ static int set_surprise_link_check_aer(
>   if (ret)
>   IFPGA_RAWDEV_PMD_ERR("Can't join the thread");
> 
> - ifpga_monitor_start = 0;
> -
>   return ret;
>   }
> 
> --
> 1.8.3.1



RE: [PATCH v1] raw/ifpga/base: fix SPI transaction

2022-01-19 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Wednesday, January 19, 2022 9:45
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> 
> Subject: [PATCH v1] raw/ifpga/base: fix SPI transaction
> 
> From: Tianfei Zhang 
> 
> When EOP is detected, 2 more bytes should be received (may be a
> SPI_PACKET_ESC before last valid byte) then rx should be finished.
> 
> Fixes: 96ebfcf8 ("raw/ifpga/base: add SPI and MAX10 device driver")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Tianfei Zhang 
> ---
>  drivers/raw/ifpga/base/opae_spi.c |  12 ++
>  drivers/raw/ifpga/base/opae_spi.h |   4 +
>  drivers/raw/ifpga/base/opae_spi_transaction.c | 215 +++--
> -
>  3 files changed, 140 insertions(+), 91 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/opae_spi.c
> b/drivers/raw/ifpga/base/opae_spi.c
> index 9efeecb..ca3d41f 100644
> --- a/drivers/raw/ifpga/base/opae_spi.c
> +++ b/drivers/raw/ifpga/base/opae_spi.c
> @@ -239,6 +239,18 @@ int spi_command(struct altera_spi_device *dev,
> unsigned int chip_select,
>   return 0;
>  }
> 
> +int spi_write(struct altera_spi_device *dev, unsigned int chip_select,
> + unsigned int wlen, void *wdata)
> +{
> + return spi_command(dev, chip_select, wlen, wdata, 0, NULL); }
> +
> +int spi_read(struct altera_spi_device *dev, unsigned int chip_select,
> + unsigned int rlen, void *rdata)
> +{
> + return spi_command(dev, chip_select, 0, NULL, rlen, rdata); }
> +
>  struct altera_spi_device *altera_spi_alloc(void *base, int type)  {
>   struct altera_spi_device *spi_dev =
> diff --git a/drivers/raw/ifpga/base/opae_spi.h
> b/drivers/raw/ifpga/base/opae_spi.h
> index af11656..bcff67d 100644
> --- a/drivers/raw/ifpga/base/opae_spi.h
> +++ b/drivers/raw/ifpga/base/opae_spi.h
> @@ -117,6 +117,10 @@ struct spi_tran_header {
>   u32 addr;
>  };
> 
> +int spi_read(struct altera_spi_device *dev, unsigned int chip_select,
> + unsigned int rlen, void *rdata);
> +int spi_write(struct altera_spi_device *dev, unsigned int chip_select,
> + unsigned int wlen, void *wdata);
>  int spi_command(struct altera_spi_device *dev, unsigned int chip_select,
>   unsigned int wlen, void *wdata, unsigned int rlen, void
> *rdata);  void spi_cs_deactivate(struct altera_spi_device *dev); diff --git
> a/drivers/raw/ifpga/base/opae_spi_transaction.c
> b/drivers/raw/ifpga/base/opae_spi_transaction.c
> index 006cdb4..cd50d40 100644
> --- a/drivers/raw/ifpga/base/opae_spi_transaction.c
> +++ b/drivers/raw/ifpga/base/opae_spi_transaction.c
> @@ -40,7 +40,7 @@ static void print_buffer(const char *string, void *buffer,
> int len)
>   printf("%s print buffer, len=%d\n", string, len);
> 
>   for (i = 0; i < len; i++)
> - printf("%x ", *(p+i));
> + printf("%02x ", *(p+i));
>   printf("\n");
>  }
>  #else
> @@ -72,43 +72,6 @@ static void reorder_phy_data(u8 bits_per_word,
>   }
>  }
> 
> -enum {
> - SPI_FOUND_SOP,
> - SPI_FOUND_EOP,
> - SPI_NOT_FOUND,
> -};
> -
> -static int resp_find_sop_eop(unsigned char *resp, unsigned int len,
> - int flags)
> -{
> - int ret = SPI_NOT_FOUND;
> -
> - unsigned char *b = resp;
> -
> - /* find SOP */
> - if (flags != SPI_FOUND_SOP) {
> - while (b < resp + len && *b != SPI_PACKET_SOP)
> - b++;
> -
> - if (*b != SPI_PACKET_SOP)
> - goto done;
> -
> - ret = SPI_FOUND_SOP;
> - }
> -
> - /* find EOP */
> - while (b < resp + len && *b != SPI_PACKET_EOP)
> - b++;
> -
> - if (*b != SPI_PACKET_EOP)
> - goto done;
> -
> - ret = SPI_FOUND_EOP;
> -
> -done:
> - return ret;
> -}
> -
>  static void phy_tx_pad(unsigned char *phy_buf, unsigned int phy_buf_len,
>   unsigned int *aligned_len)
>  {
> @@ -137,6 +100,104 @@ static void phy_tx_pad(unsigned char *phy_buf,
> unsigned int phy_buf_len,
>   *p++ = SPI_BYTE_IDLE;
>  }
> 
> +#define RX_ALL_IDLE_DATA (SPI_BYTE_IDLE << 24 | SPI_BYTE_IDLE << 16 |
>   \
> +  SPI_BYTE_IDLE << 8 | SPI_BYTE_IDLE)
> +
> +static bool all_idle_data(u8 *rxbuf)
> +{
> + return *(u32 *)rxbuf == RX_ALL_IDLE_DATA; }
> +
> +static unsigned char *find_eop(u8 *rxbuf, u32 BPW) {
> + return memchr(rxbuf, SPI_PACKET_EOP, BPW); }
> +
> +static int do_spi_txrx(s

RE: [PATCH v8] raw/ifpga: fix pthread cannot join

2022-01-24 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Monday, January 24, 2022 11:50
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> ; step...@networkplumber.org;
> david.march...@redhat.com
> Subject: [PATCH v8] raw/ifpga: fix pthread cannot join
> 
> From: Tianfei Zhang 
> 
> When we want to close a thread, we should set a flag to notify thread
> handler function.
> 
> Fixes: 9c006c45 ("raw/ifpga: scan PCIe BDF device tree")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Tianfei Zhang 
> ---
> v2: update commit log
> ---
> v3: set thread id to 0 after pthread_join
> ---
> v4: do not evaluate and set pthread_t variable
> ---
> v5: use builtin atomic function to access ifpga_monitor_start flag
> ---
> v6: use __atomic_xxx_n to replace rte_atomicNN_xxx
> ---
> v7: fix typo
> ---
> v8: solve patch applying issue
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 12 ++--
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 8d9db58..19c2357 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -497,7 +497,7 @@ static int set_surprise_link_check_aer(
>   int gsd_enable, ret;
>  #define MS 1000
> 
> - while (1) {
> + while (__atomic_load_n(&ifpga_monitor_start,
> __ATOMIC_RELAXED)) {
>   gsd_enable = 0;
>   for (i = 0; i < IFPGA_RAWDEV_NUM; i++) {
>   ifpga_rdev = &ifpga_rawdevices[i];
> @@ -525,7 +525,7 @@ static int set_surprise_link_check_aer(  {
>   int ret;
> 
> - if (ifpga_monitor_start == 0) {
> + if (!__atomic_load_n(&ifpga_monitor_start, __ATOMIC_RELAXED)) {
>   ret = rte_ctrl_thread_create(&ifpga_monitor_start_thread,
>"ifpga-monitor", NULL,
>ifpga_rawdev_gsd_handle, NULL);
> @@ -534,7 +534,7 @@ static int set_surprise_link_check_aer(
>   "Fail to create ifpga monitor thread");
>   return -1;
>   }
> - ifpga_monitor_start = 1;
> + __atomic_store_n(&ifpga_monitor_start, 1,
> __ATOMIC_RELAXED);
>   }
> 
>   return 0;
> @@ -544,7 +544,9 @@ static int set_surprise_link_check_aer(  {
>   int ret;
> 
> - if (ifpga_monitor_start == 1) {
> + if (__atomic_load_n(&ifpga_monitor_start, __ATOMIC_RELAXED)) {
> + __atomic_store_n(&ifpga_monitor_start, 0,
> __ATOMIC_RELAXED);
> +
>   ret = pthread_cancel(ifpga_monitor_start_thread);
>   if (ret)
>   IFPGA_RAWDEV_PMD_ERR("Can't cancel the
> thread"); @@ -553,8 +555,6 @@ static int set_surprise_link_check_aer(
>   if (ret)
>   IFPGA_RAWDEV_PMD_ERR("Can't join the thread");
> 
> - ifpga_monitor_start = 0;
> -
>   return ret;
>   }
> 
> --
> 1.8.3.1

Acked-by: Rosen Xu 



RE: [PATCH v1] raw/ifpga/base: fix port feature ID

2022-01-25 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Tuesday, January 25, 2022 10:31
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> ; Huang, Wei 
> Subject: [PATCH v1] raw/ifpga/base: fix port feature ID
> 
> Fix ID value of port features to match the definition from hardware.
> 
> Fixes: 473c88f9 ("drivers/raw: remove rawdev from directory names")
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/base/ifpga_defines.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_defines.h
> b/drivers/raw/ifpga/base/ifpga_defines.h
> index dca1518..8f62033 100644
> --- a/drivers/raw/ifpga/base/ifpga_defines.h
> +++ b/drivers/raw/ifpga/base/ifpga_defines.h
> @@ -93,9 +93,9 @@ enum fpga_id_type {
> 
>  #define PORT_FEATURE_ID_HEADER FEATURE_ID_FIU_HEADER  #define
> PORT_FEATURE_ID_ERROR 0x10 -#define PORT_FEATURE_ID_UMSG 0x12 -
> #define PORT_FEATURE_ID_UINT 0x13 -#define PORT_FEATURE_ID_STP
> 0x14
> +#define PORT_FEATURE_ID_UMSG 0x11
> +#define PORT_FEATURE_ID_UINT 0x12
> +#define PORT_FEATURE_ID_STP 0x13
>  #define PORT_FEATURE_ID_UAFU FEATURE_ID_AFU
> 
>  /*
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH v1] raw/ifpga: fix ifpga devices cleanup function

2022-01-25 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Wednesday, January 26, 2022 11:30
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> ; Huang, Wei 
> Subject: [PATCH v1] raw/ifpga: fix ifpga devices cleanup function
> 
> Use rte_dev_remove() to replace rte_rawdev_pmd_release() in
> ifpga_rawdev_cleanup(), resources occupied by ifpga raw devices such as
> threads can be released correctly.
> 
> Fixes: f724a802 ("raw/ifpga: add miscellaneous APIs")
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index fdf3c23..88c38aa 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -1787,12 +1787,14 @@ int ifpga_rawdev_partial_reconfigure(struct
> rte_rawdev *dev, int port,  void ifpga_rawdev_cleanup(void)  {
>   struct ifpga_rawdev *dev;
> + struct rte_rawdev *rdev;
>   unsigned int i;
> 
>   for (i = 0; i < IFPGA_RAWDEV_NUM; i++) {
>   dev = &ifpga_rawdevices[i];
>   if (dev->rawdev) {
> - rte_rawdev_pmd_release(dev->rawdev);
> + rdev = dev->rawdev;
> + rte_dev_remove(rdev->device);
>   dev->rawdev = NULL;
>   }
>   }
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH v3 09/36] bus/*: remove unnecessary NULL checks

2022-02-09 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Stephen Hemminger 
> Sent: Thursday, February 10, 2022 3:17
> To: dev@dpdk.org
> Cc: Stephen Hemminger ; Hemant Agrawal
> ; Sachin Saxena ;
> Xu, Rosen 
> Subject: [PATCH v3 09/36] bus/*: remove unnecessary NULL checks
> 
> Remove redundant NULL pointer checks before free functions found by
> nullfree.cocci
> 
> Signed-off-by: Stephen Hemminger 
> Acked-by: Hemant Agrawal 
> ---
>  drivers/bus/fslmc/fslmc_bus.c|  6 ++
>  drivers/bus/fslmc/portal/dpaa2_hw_dpio.c |  6 ++
>  drivers/bus/ifpga/ifpga_bus.c| 12 
>  drivers/bus/pci/pci_params.c |  3 +--
>  drivers/bus/pci/windows/pci.c|  3 +--
>  drivers/bus/pci/windows/pci_netuio.c |  3 +--
>  6 files changed, 11 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
> index c5c8bbd57219..e005f2cb70b3 100644
> --- a/drivers/bus/ifpga/ifpga_bus.c
> +++ b/drivers/bus/ifpga/ifpga_bus.c
> @@ -191,10 +191,8 @@ ifpga_scan_one(struct rte_rawdev *rawdev,
>   return afu_dev;
> 
>  end:
> - if (kvlist)
> - rte_kvargs_free(kvlist);
> - if (path)
> - free(path);
> + rte_kvargs_free(kvlist);
> + free(path);
>   if (afu_dev) {
>   rte_intr_instance_free(afu_dev->intr_handle);
>   free(afu_dev);
> @@ -254,10 +252,8 @@ ifpga_scan(void)
>   }
> 
>  end:
> - if (kvlist)
> - rte_kvargs_free(kvlist);
> - if (name)
> - free(name);
> + rte_kvargs_free(kvlist);
> + free(name);
> 
>   return 0;
>  }
Reviewed-by Rosen Xu 



RE: [PATCH v3 32/36] raw/*: remove unnecessary NULL checks

2022-02-09 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Stephen Hemminger 
> Sent: Thursday, February 10, 2022 3:18
> To: dev@dpdk.org
> Cc: Stephen Hemminger ; Hemant Agrawal
> ; Jakub Palider ;
> Tomasz Duszynski ; Nipun Gupta
> ; Xu, Rosen ; Zhang, Tianfei
> 
> Subject: [PATCH v3 32/36] raw/*: remove unnecessary NULL checks
> 
> Remove redundant NULL pointer checks before free functions found by
> nullfree.cocci
> 
> Signed-off-by: Stephen Hemminger 
> Acked-by: Hemant Agrawal 
> ---
>  drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c   |  3 +--
>  drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 15 +--
>  drivers/raw/ifpga/ifpga_rawdev.c|  9 +++--
>  drivers/raw/skeleton/skeleton_rawdev_test.c |  6 ++
>  4 files changed, 11 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index fdf3c23d2c5f..b73512d3ada5 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -836,8 +836,7 @@ rte_fpga_do_pr(struct rte_rawdev *rawdev, int
> port_id,
>   }
> 
>  free_buffer:
> - if (buf_to_free)
> - rte_free(buf_to_free);
> + rte_free(buf_to_free);
>  close_fd:
>   close(file_fd);
>   file_fd = 0;
> @@ -1739,10 +1738,8 @@ ifpga_cfg_probe(struct rte_vdev_device *dev)
>   ret = rte_eal_hotplug_add(RTE_STR(IFPGA_BUS_NAME),
>   dev_name, devargs->args);
>  end:
> - if (kvlist)
> - rte_kvargs_free(kvlist);
> - if (name)
> - free(name);
> + rte_kvargs_free(kvlist);
> + free(name);
> 
>   return ret;
>  }
Reviewed-by Rosen Xu 




Re: [dpdk-dev] [PATCH v6 1/6] ethdev: fix max Rx packet length

2021-10-13 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Tuesday, October 12, 2021 7:54
> To: Jerin Jacob ; Li, Xiaoyun ;
> Chas Williams ; Min Hu (Connor) ;
> Hemant Agrawal ; Sachin Saxena
> ; Zhang, Qi Z ; Wang,
> Xiao W ; Matan Azrad ;
> Viacheslav Ovsiienko ; Harman Kalra
> ; Maciej Czekaj ; Ray Kinsella
> ; Iremonger, Bernard ;
> Ananyev, Konstantin ; Kiran Kumar K
> ; Nithin Dabilpuram
> ; Hunt, David ;
> Mcnamara, John ; Richardson, Bruce
> ; Igor Russkikh ;
> Steven Webster ; Peters, Matt
> ; Somalapuram Amaranath
> ; Rasesh Mody ; Shahed
> Shaikh ; Ajit Khaparde
> ; Somnath Kotur
> ; Sunil Kumar Kori ;
> Satha Rao ; Rahul Lakkireddy
> ; Wang, Haiyue ;
> Marcin Wojtas ; Michal Krawczyk ;
> Shai Brandes ; Evgeny Schemeilin
> ; Igor Chauskin ; Gagandeep
> Singh ; Daley, John ; Hyong Youb
> Kim ; Ziyang Xuan ;
> Xiaoyun Wang ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ;
> Andrew Boyer ; Xu, Rosen ;
> Shijith Thotton ; Srisivasubramanian Srinivasan
> ; Zyta Szpak ; Liron Himi
> ; Heinrich Kuhn ;
> Devendra Singh Rawat ; Andrew Rybchenko
> ; Wiles, Keith ;
> Jiawen Wu ; Jian Wang
> ; Maxime Coquelin
> ; Xia, Chenbo ;
> Chautru, Nicolas ; Van Haaren, Harry
> ; Dumitrescu, Cristian
> ; Nicolau, Radu ;
> Akhil Goyal ; Kantecki, Tomasz
> ; Doherty, Declan ;
> Pavan Nikhilesh ; Rybalchenko, Kirill
> ; Singh, Jasvinder
> ; Thomas Monjalon 
> Cc: Yigit, Ferruh ; dev@dpdk.org; Huisong Li
> 
> Subject: [PATCH v6 1/6] ethdev: fix max Rx packet length
> 
> There is a confusion on setting max Rx packet length, this patch aims to
> clarify it.
> 
> 'rte_eth_dev_configure()' API accepts max Rx packet size via
> 'uint32_t max_rx_pkt_len' field of the config struct 'struct
> rte_eth_conf'.
> 
> Also 'rte_eth_dev_set_mtu()' API can be used to set the MTU, and result
> stored into '(struct rte_eth_dev)->data->mtu'.
> 
> These two APIs are related but they work in a disconnected way, they
> store the set values in different variables which makes hard to figure
> out which one to use, also having two different method for a related
> functionality is confusing for the users.
> 
> Other issues causing confusion is:
> * maximum transmission unit (MTU) is payload of the Ethernet frame. And
>   'max_rx_pkt_len' is the size of the Ethernet frame. Difference is
>   Ethernet frame overhead, and this overhead may be different from
>   device to device based on what device supports, like VLAN and QinQ.
> * 'max_rx_pkt_len' is only valid when application requested jumbo frame,
>   which adds additional confusion and some APIs and PMDs already
>   discards this documented behavior.
> * For the jumbo frame enabled case, 'max_rx_pkt_len' is an mandatory
>   field, this adds configuration complexity for application.
> 
> As solution, both APIs gets MTU as parameter, and both saves the result
> in same variable '(struct rte_eth_dev)->data->mtu'. For this
> 'max_rx_pkt_len' updated as 'mtu', and it is always valid independent
> from jumbo frame.
> 
> For 'rte_eth_dev_configure()', 'dev->data->dev_conf.rxmode.mtu' is user
> request and it should be used only within configure function and result
> should be stored to '(struct rte_eth_dev)->data->mtu'. After that point
> both application and PMD uses MTU from this variable.
> 
> When application doesn't provide an MTU during 'rte_eth_dev_configure()'
> default 'RTE_ETHER_MTU' value is used.
> 
> Additional clarification done on scattered Rx configuration, in
> relation to MTU and Rx buffer size.
> MTU is used to configure the device for physical Rx/Tx size limitation,
> Rx buffer is where to store Rx packets, many PMDs use mbuf data buffer
> size as Rx buffer size.
> PMDs compare MTU against Rx buffer size to decide enabling scattered Rx
> or not. If scattered Rx is not supported by device, MTU bigger than Rx
> buffer size should fail.
> 
> Signed-off-by: Ferruh Yigit 
> Acked-by: Ajit Khaparde 
> Acked-by: Somnath Kotur 
> Acked-by: Huisong Li 
> ---
> Cc: Min Hu (Connor) 
> 
> v2:
> * Converted to explicit checks for zero/non-zero
> * fixed hns3 checks
> * fixed some sample app rxmode.mtu value
> * fixed some sample app max-pkt-len argument and updated doc for it
> 
> v3:
> * rebased
> 
> v4:
> * fix typos in commit logs
> 
> v5:
> * fix testpmd '--max-pkt-len=###' parameter for DTS jumbo frame test
> 
> v6:
> * uint32_t type used in 'eth_dev_get_overhead_len()' helper function
> ---

Acked-by: Rosen Xu 


RE: [PATCH v3 1/5] raw/ifpga: remove experimental tag from ifpga APIs

2022-05-25 Thread Xu, Rosen
Hi Wei,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, May 26, 2022 11:33
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 1/5] raw/ifpga: remove experimental tag from ifpga APIs
> 
> These APIs are introduced in DPDK 21.05 and have been tested in several
> release, experimental tag can be formally removed.
> 
> Signed-off-by: Wei Huang 
> Acked-by: Tianfei Zhang 
> ---
>  drivers/raw/ifpga/rte_pmd_ifpga.h | 48 
> ---
>  drivers/raw/ifpga/version.map |  7 ++
>  2 files changed, 2 insertions(+), 53 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/rte_pmd_ifpga.h
> b/drivers/raw/ifpga/rte_pmd_ifpga.h
> index 47d66ba..3fa5d34 100644
> --- a/drivers/raw/ifpga/rte_pmd_ifpga.h
> +++ b/drivers/raw/ifpga/rte_pmd_ifpga.h
> @@ -68,9 +68,6 @@
>  } rte_pmd_ifpga_phy_info;
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Get raw device ID from PCI address string like 'Domain:Bus:Dev.Func'
>   *
>   * @param pci_addr
> @@ -82,14 +79,10 @@
>   *   - (-EINVAL) if bad parameter.
>   *   - (-ENODEV) if FPGA is not probed by ifpga driver.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_get_dev_id(const char *pci_addr, uint16_t *dev_id);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Get current RSU status of the specified Intel FPGA device
>   *
>   * @param dev_id
> @@ -103,14 +96,10 @@
>   *   - (-ENODEV) if dev_id is invalid.
>   *   - (-ENOMEM) if share data is not initialized.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t
> *prog);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Set current RSU status of the specified Intel FPGA device
>   *
>   * @param dev_id
> @@ -124,14 +113,10 @@
>   *   - (-ENODEV) if dev_id is invalid.
>   *   - (-ENOMEM) if share data is not initialized.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_set_rsu_status(uint16_t dev_id, uint32_t stat, uint32_t
> prog);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Get FPGA property of specified Intel FPGA device
>   *
>   * @param dev_id
> @@ -144,14 +129,10 @@
>   *   - (-EBUSY) if FPGA is rebooting.
>   *   - (-EIO) if failed to access hardware.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_get_property(uint16_t dev_id, rte_pmd_ifpga_prop *prop);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Get PHY information of specified Intel FPGA device
>   *
>   * @param dev_id
> @@ -164,14 +145,10 @@
>   *   - (-EBUSY) if FPGA is rebooting.
>   *   - (-EIO) if failed to access hardware.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_get_phy_info(uint16_t dev_id, rte_pmd_ifpga_phy_info
> *info);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Update image flash of specified Intel FPGA device
>   *
>   * @param dev_id
> @@ -187,15 +164,11 @@
>   *   - (-EBUSY) if FPGA is updating or rebooting.
>   *   - (-EIO) if failed to open image file.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_update_flash(uint16_t dev_id, const char *image,
>   uint64_t *status);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Stop flash update of specified Intel FPGA device
>   *
>   * @param dev_id
> @@ -208,14 +181,10 @@
>   *   - (-EINVAL) if bad parameter.
>   *   - (-EAGAIN) if failed with force.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_stop_update(uint16_t dev_id, int force);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be removed, without prior
> notice
> - *
>   * Check current Intel FPGA status and change it to reboot status if it is 
> idle
>   *
>   * @param dev_id
> @@ -226,14 +195,10 @@
>   *   - (-ENOMEM) if share data is not initialized.
>   *   - (-EBUSY) if FPGA is updating or rebooting.
>   */
> -__rte_experimental
>  int
>  rte_pmd_ifpga_reboot_try(uint16_t dev_id);
> 
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change, or be

RE: [PATCH v3 2/5] raw/ifpga: remove vdev when ifpga is closed

2022-05-25 Thread Xu, Rosen
Hi Wei,

My comments.

Thanks,
Rosen
> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, May 26, 2022 11:33
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 2/5] raw/ifpga: remove vdev when ifpga is closed
> 
> Virtual devices created on ifpga raw device will not be removed when ifpga
> device has closed. To avoid resource leak problem, this patch introduces an
> ifpga virtual device remove function, virtual devices will be destroyed after
> the ifpga raw device closed.
> 
> Fixes: ef1e8ede3da5 ("raw/ifpga: add Intel FPGA bus rawdev driver")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
> v2: update commit log, use macro to replace immediate value.
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 166
> ++-
>  drivers/raw/ifpga/ifpga_rawdev.h |   8 ++
>  2 files changed, 138 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 6d4117c..fe3fc43 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -134,6 +134,8 @@ struct ifpga_rawdev *
>   for (i = 0; i < IFPGA_MAX_IRQ; i++)
>   dev->intr_handle[i] = NULL;
>   dev->poll_enabled = 0;
> + for (i = 0; i < IFPGA_MAX_VDEV; i++)
> + dev->vdev_name[i] = NULL;
> 
>   return dev;
>  }
> @@ -736,10 +738,22 @@ static int set_surprise_link_check_aer(  static int
> ifpga_rawdev_close(struct rte_rawdev *dev)  {
> + struct ifpga_rawdev *ifpga_rdev = NULL;
>   struct opae_adapter *adapter;
> + char *vdev_name = NULL;
> + int i = 0;
> 
>   if (dev) {
> - ifpga_monitor_stop_func(ifpga_rawdev_get(dev));
> + ifpga_rdev = ifpga_rawdev_get(dev);
> + if (ifpga_rdev) {
> + for (i = 0; i < IFPGA_MAX_VDEV; i++) {
> + vdev_name = ifpga_rdev->vdev_name[i];
> + if (vdev_name)
> + rte_vdev_uninit(vdev_name);
> + }
> + ifpga_monitor_stop_func(ifpga_rdev);
> + ifpga_rdev->rawdev = NULL;
> + }
>   adapter = ifpga_rawdev_get_priv(dev);
>   if (adapter) {
>   opae_adapter_destroy(adapter);
> @@ -1638,8 +1652,6 @@ static int fme_clean_fme_error(struct
> opae_manager *mgr)
>   return -EINVAL;
>   }
>   dev = ifpga_rawdev_get(rawdev);
> - if (dev)
> - dev->rawdev = NULL;
> 
>   adapter = ifpga_rawdev_get_priv(rawdev);
>   if (!adapter)
> @@ -1714,73 +1726,118 @@ static int ifpga_rawdev_get_string_arg(const
> char *key __rte_unused,
> 
>   return 0;
>  }
> +
>  static int
> -ifpga_cfg_probe(struct rte_vdev_device *dev)
> +ifpga_vdev_parse_devargs(struct rte_devargs *devargs,
> + struct ifpga_vdev_args *args)
>  {
> - struct rte_devargs *devargs;
> - struct rte_kvargs *kvlist = NULL;
> - struct rte_rawdev *rawdev = NULL;
> - struct ifpga_rawdev *ifpga_dev;
> - int port;
> + struct rte_kvargs *kvlist;
>   char *name = NULL;
> - char dev_name[RTE_RAWDEV_NAME_MAX_LEN];
> - int ret = -1;
> + int port = 0;
> + int ret = -EINVAL;
> 
> - devargs = dev->device.devargs;
> + if (!devargs || !args)
> + return ret;
> 
>   kvlist = rte_kvargs_parse(devargs->args, valid_args);
>   if (!kvlist) {
> - IFPGA_RAWDEV_PMD_LOG(ERR, "error when parsing
> param");
> - goto end;
> + IFPGA_RAWDEV_PMD_ERR("error when parsing devargs");
> + return ret;
>   }
> 
>   if (rte_kvargs_count(kvlist, IFPGA_ARG_NAME) == 1) {
>   if (rte_kvargs_process(kvlist, IFPGA_ARG_NAME,
> -&ifpga_rawdev_get_string_arg,
> -&name) < 0) {
> + &ifpga_rawdev_get_string_arg, &name) < 0) {
>   IFPGA_RAWDEV_PMD_ERR("error to parse %s",
> -  IFPGA_ARG_NAME);
> + IFPGA_ARG_NAME);
>   goto end;
> + } else {
> + strlcpy(args->bdf, name, sizeof(args->bdf));
> + rte_free(name);
>   }
>   } else {
>   IFPGA_RAWDE

RE: [PATCH v3 3/5] raw/ifpga: unregister interrupt in ifpga close function

2022-05-25 Thread Xu, Rosen
Hi Wei,

It's a little bit hard to find the connections between functions you changed 
and raw API.
Could you add more explanations about the Function Call in the functions you 
mentioned below?

Thanks,
Rosen

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, May 26, 2022 11:33
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 3/5] raw/ifpga: unregister interrupt in ifpga close 
> function
> 
> In original implementation, interrupts are unregistered in
> ifpga_rawdev_destroy function. If application want to release the ifpga
> driver resource by calling rte_rawdev_pmd_release, interrupt resource will
> not be released.
> Now interrupt unregistration is moved from ifpga destroy function to ifpga
> close function, when rte_rawdev_pmd_release is called, rte_rawdev_close
> will be called, then interrupts are unregistered.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: update commit log
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 29 +++--
>  1 file changed, 11 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index fe3fc43..94df56c 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -78,6 +78,7 @@ static int set_surprise_link_check_aer(  static int
> ifpga_pci_find_next_ext_capability(unsigned int fd,
> int start, uint32_t cap);
>  static int ifpga_pci_find_ext_capability(unsigned int fd, uint32_t cap);
> +static void fme_interrupt_handler(void *param);
> 
>  struct ifpga_rawdev *
>  ifpga_rawdev_get(const struct rte_rawdev *rawdev) @@ -740,8 +741,9 @@
> static int set_surprise_link_check_aer(  {
>   struct ifpga_rawdev *ifpga_rdev = NULL;
>   struct opae_adapter *adapter;
> + struct opae_manager *mgr;
>   char *vdev_name = NULL;
> - int i = 0;
> + int i, ret = 0;
> 
>   if (dev) {
>   ifpga_rdev = ifpga_rawdev_get(dev);
> @@ -756,12 +758,19 @@ static int set_surprise_link_check_aer(
>   }
>   adapter = ifpga_rawdev_get_priv(dev);
>   if (adapter) {
> + mgr = opae_adapter_get_mgr(adapter);
> + if (ifpga_rdev && mgr) {
> + if (ifpga_unregister_msix_irq(ifpga_rdev,
> + IFPGA_FME_IRQ, 0,
> + fme_interrupt_handler, mgr) < 0)
> + ret = -EINVAL;
> + }
>   opae_adapter_destroy(adapter);
>   opae_adapter_data_free(adapter->data);
>   }
>   }
> 
> - return dev ? 0:1;
> + return ret;
>  }
> 
>  static int
> @@ -1629,9 +1638,6 @@ static int fme_clean_fme_error(struct
> opae_manager *mgr)
>   int ret;
>   struct rte_rawdev *rawdev;
>   char name[RTE_RAWDEV_NAME_MAX_LEN];
> - struct opae_adapter *adapter;
> - struct opae_manager *mgr;
> - struct ifpga_rawdev *dev;
> 
>   if (!pci_dev) {
>   IFPGA_RAWDEV_PMD_ERR("Invalid pci_dev of the device!");
> @@ -1651,19 +1657,6 @@ static int fme_clean_fme_error(struct
> opae_manager *mgr)
>   IFPGA_RAWDEV_PMD_ERR("Invalid device name (%s)",
> name);
>   return -EINVAL;
>   }
> - dev = ifpga_rawdev_get(rawdev);
> -
> - adapter = ifpga_rawdev_get_priv(rawdev);
> - if (!adapter)
> - return -ENODEV;
> -
> - mgr = opae_adapter_get_mgr(adapter);
> - if (!mgr)
> - return -ENODEV;
> -
> - if (ifpga_unregister_msix_irq(dev, IFPGA_FME_IRQ, 0,
> - fme_interrupt_handler, mgr) < 0)
> - return -EINVAL;
> 
>   /* rte_rawdev_close is called by pmd_release */
>   ret = rte_rawdev_pmd_release(rawdev);
> --
> 1.8.3.1



RE: [PATCH v3 4/5] raw/ifpga: support ofs card probe

2022-05-25 Thread Xu, Rosen
Hi Wei,

Pls close compile warnings. Thanks a lot.

Thanks,
Rosen

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, May 26, 2022 11:33
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 4/5] raw/ifpga: support ofs card probe
> 
> PAC N6000 is the first OFS platform, its device id is added to ifpga device
> support list.
> 
> Previous FPGA platform like Intel PAC N3000 and N5000, FME DFL (Device
> Feature List) starts from BAR0 by default, port DFL location is indicated in
> PORTn_OFFSET register in FME. In OFS implementation, FME DFL and port
> DFL location can be defined individually in PCIe VSEC (Vendor Specific
> Extented Capabilities). In this patch, DFL definition is searched in VSEC, the
> legacy DFL is used only when DFL VSEC is not present.
> 
> In original DFL enumeration process, AFU is expected to locate in port DFL,
> but this is not the case in OFS implementation. In this patch, enumeration can
> search AFU in any PF/VF which has no FME and port.
> 
> Signed-off-by: Wei Huang 
> ---
> v2: fix build error in UB2004-32
> ---
> v3: update commit log with Tianfei's comment, treat 7 as special BAR index.
> ---
>  drivers/raw/ifpga/base/ifpga_api.c |  28 +-
>  drivers/raw/ifpga/base/ifpga_defines.h |   1 +
>  drivers/raw/ifpga/base/ifpga_enumerate.c   | 681
> ++---
>  drivers/raw/ifpga/base/ifpga_enumerate.h   |   2 +
>  drivers/raw/ifpga/base/ifpga_feature_dev.c |  18 +-
>  drivers/raw/ifpga/base/ifpga_hw.h  |   2 +
>  drivers/raw/ifpga/base/opae_hw_api.c   |   2 +-
>  drivers/raw/ifpga/base/opae_hw_api.h   |   2 +
>  drivers/raw/ifpga/ifpga_rawdev.c   |  48 +-
>  9 files changed, 592 insertions(+), 192 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/base/ifpga_api.c
> b/drivers/raw/ifpga/base/ifpga_api.c
> index 4610ef1..f19cc26 100644
> --- a/drivers/raw/ifpga/base/ifpga_api.c
> +++ b/drivers/raw/ifpga/base/ifpga_api.c
> @@ -13,15 +13,22 @@
>  static int ifpga_acc_get_uuid(struct opae_accelerator *acc,
> struct uuid *uuid)
>  {
> - struct opae_bridge *br = acc->br;
> - struct ifpga_port_hw *port;
> + struct ifpga_afu_info *afu_info = acc->data;
> + struct opae_reg_region *region;
> + u64 val = 0;
> 
> - if (!br || !br->data)
> - return -EINVAL;
> + if (!afu_info)
> + return -ENODEV;
> 
> - port = br->data;
> + region = &afu_info->region[0];
> + if (uuid) {
> + val = readq(region->addr + sizeof(struct feature_header));
> + opae_memcpy(uuid->b, &val, sizeof(u64));
> + val = readq(region->addr + sizeof(struct feature_header) + 8);
> + opae_memcpy(uuid->b + 8, &val, sizeof(u64));
> + }
> 
> - return fpga_get_afu_uuid(port, uuid);
> + return 0;
>  }
> 
>  static int ifpga_acc_set_irq(struct opae_accelerator *acc, @@ -32,6 +39,9
> @@ static int ifpga_acc_set_irq(struct opae_accelerator *acc,
>   struct ifpga_port_hw *port;
>   struct fpga_uafu_irq_set irq_set;
> 
> + if (!afu_info)
> + return -ENODEV;
> +
>   if (!br || !br->data)
>   return -EINVAL;
> 
> @@ -68,7 +78,7 @@ static int ifpga_acc_get_region_info(struct
> opae_accelerator *acc,
>   struct ifpga_afu_info *afu_info = acc->data;
> 
>   if (!afu_info)
> - return -EINVAL;
> + return -ENODEV;
> 
>   if (info->index >= afu_info->num_regions)
>   return -EINVAL;
> @@ -89,7 +99,7 @@ static int ifpga_acc_read(struct opae_accelerator *acc,
> unsigned int region_idx,
>   struct opae_reg_region *region;
> 
>   if (!afu_info)
> - return -EINVAL;
> + return -ENODEV;
> 
>   if (offset + byte <= offset)
>   return -EINVAL;
> @@ -129,7 +139,7 @@ static int ifpga_acc_write(struct opae_accelerator
> *acc,
>   struct opae_reg_region *region;
> 
>   if (!afu_info)
> - return -EINVAL;
> + return -ENODEV;
> 
>   if (offset + byte <= offset)
>   return -EINVAL;
> diff --git a/drivers/raw/ifpga/base/ifpga_defines.h
> b/drivers/raw/ifpga/base/ifpga_defines.h
> index 8f62033..9a280eb 100644
> --- a/drivers/raw/ifpga/base/ifpga_defines.h
> +++ b/drivers/raw/ifpga/base/ifpga_defines.h
> @@ -73,6 +73,7 @@
>  enum fpga_id_type {
>   FME_ID,
>   PORT_ID,
> + AFU_ID,
>  

RE: [PATCH v3 5/5] guides/rawdevs: add description of ofs in ifpga doc

2022-05-25 Thread Xu, Rosen
Hi Wei,

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, May 26, 2022 11:33
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v3 5/5] guides/rawdevs: add description of ofs in ifpga doc
> 
> OFS (Open FPGA Stack) specification is introduced briefly.
> 
> Signed-off-by: Wei Huang 
> ---
>  doc/guides/rawdevs/ifpga.rst | 114
> ++-
>  1 file changed, 113 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/guides/rawdevs/ifpga.rst b/doc/guides/rawdevs/ifpga.rst
> index dbd0d6e..8809bfc 100644
> --- a/doc/guides/rawdevs/ifpga.rst
> +++ b/doc/guides/rawdevs/ifpga.rst
> @@ -1,5 +1,5 @@
>  ..  SPDX-License-Identifier: BSD-3-Clause
> -Copyright(c) 2018 Intel Corporation.
> +Copyright(c) 2018-2022 Intel Corporation.
> 
>  IFPGA Rawdev Driver
>  ==
> @@ -100,3 +100,115 @@ The following device parameters are supported:
> 
>If null, the AFU Bit Stream has been PR in FPGA, if not forces PR and
>identifies AFU Bit Stream file.
> +
> +
> +Open FPGA Stack
> +=
> +
> +Open FPGA Stack (OFS) is a collection of RTL and open source software
> +providing interfaces to access the instantiated RTL easily in an FPGA.
> +OFS leverages the DFL for the implementation of the FPGA RTL design.
> +
> +OFS designs allow for the arrangement of software interfaces across
> +multiple PCIe endpoints. Some of these interfaces may be PFs defined in
> +the static region that connect to interfaces in an IP that is loaded via 
> Partial
> Reconfiguration (PR).
> +And some of these interfaces may be VFs defined in the PR region that
> +can be reconfigured by the end-user. Furthermore, these PFs/VFs may use
> +DFLs such that features may be discovered and accessed in user space
> +(with the aid of a generic kernel driver like vfio-pci). The diagram
> +below depicts an example design with two PFs and two VFs. In this
> +example, it will export the management functions via PF0,
> +PF1 will bind with virtio-net driver presenting itself as a network
> +interface to the OS. The other functions, VF0 and VF1, leverage VFIO to
> +export the MMIO space to an application or assign to a VM.::
> +
> + +-+  +--+  +-+  ++
> + | FPGA Management |  |   VirtIO |  |  User App   |  | Virtual|
> + |  App|  | App  |  | |  | Machine|
> + +++  +--+---+  +--+--+  +-+--+
> +  |  | |   |
> + +++  +--+---+  +--+--+|
> + | DFL Driver  |  |VirtIO driver |  |VFIO ||
> + +++  +--+---+  +--+--+|
> +  |  | |   |
> +  |  | |   |
> + +++  +--+---+  +--+--+   ++--+
> + | PF0 |  | PF1  |  |   PF0_VF0   |   |  PF0_VF1  |
> + +-+  +--+  +-+   +---+
> +
> +As accelerators are specialized hardware, they are typically limited in
> +the number installed in a given system. Many use cases require them to
> +be shared across multiple software contexts or threads of software
> +execution, either through partitioning of individual dedicated
> +resources, or virtualization of shared resources. OFS provides several
> +models to share the AFU resources via PR mechanism and hardware-based
> virtualization schemes.
> +
> +1. Legacy model.
> +   With legacy model FPGA cards like Intel PAC N3000 or N5000, there is
> +   a notion that the boundary between the AFU and the shell is also the unit
> of
> +   PR for those FPGA platforms. This model is only able to handle a
> +   single context, because it only has one PR engine, and one PR region
> which
> +   has an associated Port device.
> +2. Multiple VFs per PR slot.
> +   In this model, available AFU resources may allow instantiation of many VFs
> +   which have a dedicated PCIe function with their own dedicated MMIO
> space, or
> +   partition a region of MMIO space on a single PCIe function. Intel PAC
> N6000
> +   card has implemented this model.
> +   In this model, the AFU/PR slot was not connected to port device. For DFL's
> view,
> +   the Next_AFU pointer in FIU feature header of port device points to NULL
> in this
> +   model, so in AFU driver perspective, 

RE: [PATCH v4] raw/afu_mf: introduce AFU MF device driver

2022-05-25 Thread Xu, Rosen
Hi Wei,

A huge patch, can you split it into several patches?

Thanks,
Rosen

> -Original Message-
> From: Huang, Wei 
> Sent: Thursday, May 19, 2022 13:53
> To: dev@dpdk.org; tho...@monjalon.net; nipun.gu...@nxp.com;
> hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v4] raw/afu_mf: introduce AFU MF device driver
> 
> Add afu_mf driver to manage various AFU (Acceleration Function Unit)
> in FPGA.
> 
> Signed-off-by: Wei Huang 
> Acked-by: Tianfei Zhang 
> ---
> v2: fix typo
> ---
> v3: fix build error in FreeBSD13-64, UB2004-32 and UB2204-32
> ---
> v4: fix coding style issue and build error in FreeBSD13-64
> ---
>  drivers/raw/afu_mf/afu_mf_rawdev.c |  440 
>  drivers/raw/afu_mf/afu_mf_rawdev.h |   89 ++
>  drivers/raw/afu_mf/he_hssi.c   |  369 +++
>  drivers/raw/afu_mf/he_hssi.h   |  102 ++
>  drivers/raw/afu_mf/he_lbk.c|  427 
>  drivers/raw/afu_mf/he_lbk.h|  121 +++
>  drivers/raw/afu_mf/he_mem.c|  181 
>  drivers/raw/afu_mf/he_mem.h|   40 +
>  drivers/raw/afu_mf/meson.build |8 +
>  drivers/raw/afu_mf/n3000_afu.c | 2005
> 
>  drivers/raw/afu_mf/n3000_afu.h |  333 ++
>  drivers/raw/afu_mf/rte_pmd_afu.h   |  134 +++
>  drivers/raw/afu_mf/version.map |3 +
>  drivers/raw/meson.build|1 +
>  14 files changed, 4253 insertions(+)
>  create mode 100644 drivers/raw/afu_mf/afu_mf_rawdev.c
>  create mode 100644 drivers/raw/afu_mf/afu_mf_rawdev.h
>  create mode 100644 drivers/raw/afu_mf/he_hssi.c
>  create mode 100644 drivers/raw/afu_mf/he_hssi.h
>  create mode 100644 drivers/raw/afu_mf/he_lbk.c
>  create mode 100644 drivers/raw/afu_mf/he_lbk.h
>  create mode 100644 drivers/raw/afu_mf/he_mem.c
>  create mode 100644 drivers/raw/afu_mf/he_mem.h
>  create mode 100644 drivers/raw/afu_mf/meson.build
>  create mode 100644 drivers/raw/afu_mf/n3000_afu.c
>  create mode 100644 drivers/raw/afu_mf/n3000_afu.h
>  create mode 100644 drivers/raw/afu_mf/rte_pmd_afu.h
>  create mode 100644 drivers/raw/afu_mf/version.map
> 
> diff --git a/drivers/raw/afu_mf/afu_mf_rawdev.c
> b/drivers/raw/afu_mf/afu_mf_rawdev.c
> new file mode 100644
> index 000..f24c748
> --- /dev/null
> +++ b/drivers/raw/afu_mf/afu_mf_rawdev.c
> @@ -0,0 +1,440 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2022 Intel Corporation
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "rte_pmd_afu.h"
> +#include "afu_mf_rawdev.h"
> +#include "n3000_afu.h"
> +#include "he_lbk.h"
> +#include "he_mem.h"
> +#include "he_hssi.h"
> +
> +#define AFU_MF_PMD_RAWDEV_NAME rawdev_afu_mf
> +
> +static const struct rte_afu_uuid afu_uuid_map[] = {
> + { N3000_AFU_UUID_L, N3000_AFU_UUID_H },
> + { HE_LBK_UUID_L, HE_LBK_UUID_H },
> + { HE_MEM_LBK_UUID_L, HE_MEM_LBK_UUID_H },
> + { HE_MEM_TG_UUID_L, HE_MEM_TG_UUID_H },
> + { HE_HSSI_UUID_L, HE_HSSI_UUID_H },
> + { 0, 0 /* sentinel */ }
> +};
> +
> +static struct afu_mf_drv *afu_table[] = {
> + &n3000_afu_drv,
> + &he_lbk_drv,
> + &he_mem_lbk_drv,
> + &he_mem_tg_drv,
> + &he_hssi_drv,
> + NULL
> +};
> +
> +static inline int afu_mf_trylock(struct afu_mf_rawdev *dev)
> +{
> + int32_t x = 0;
> +
> + if (!dev || !dev->shared)
> + return -ENODEV;
> +
> + x = __atomic_load_n(&dev->shared->lock, __ATOMIC_RELAXED);
> +
> + if ((x != 0) || (__atomic_compare_exchange_n(&dev->shared->lock,
> &x, 1,
> + 1, __ATOMIC_ACQUIRE,
> __ATOMIC_RELAXED) == 0))
> + return -EBUSY;
> +
> + return 0;
> +}
> +
> +static inline void afu_mf_unlock(struct afu_mf_rawdev *dev)
> +{
> + if (!dev || !dev->shared)
> + return;
> +
> + __atomic_store_n(&dev->shared->lock, 0, __ATOMIC_RELEASE);
> +}
> +
> +static int afu_mf_rawdev_configure(const struct rte_rawdev *rawdev,
> + rte_rawdev_obj_t config, size_t config_size)
> +{
> + struct afu_mf_rawdev *dev = NULL;
> + int ret = 0;
> +
> + AFU_MF_PMD_FUNC_TRACE();
> +
> + dev = afu_mf_rawdev_get_priv(rawdev);
> + if (!dev)
> + return -ENODEV;
> +
> + if (dev->ops && dev->ops->config)
> +   

Re: [dpdk-dev] [EXT] Re: [PATCH] RFC: ethdev: add reassembly offload

2021-09-12 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Anoob Joseph 
> Sent: Wednesday, September 08, 2021 18:30
> To: Yigit, Ferruh ; Xu, Rosen ;
> Andrew Rybchenko 
> Cc: Nicolau, Radu ; Doherty, Declan
> ; hemant.agra...@nxp.com;
> ma...@nvidia.com; Ananyev, Konstantin ;
> tho...@monjalon.net; Ankur Dwivedi ;
> andrew.rybche...@oktetlabs.ru; Akhil Goyal ;
> dev@dpdk.org
> Subject: RE: [EXT] Re: [PATCH] RFC: ethdev: add reassembly offload
> 
> Hi Ferruh, Rosen, Andrew,
> 
> Please see inline.
> 
> Thanks,
> Anoob
> 
> > Subject: [EXT] Re: [PATCH] RFC: ethdev: add reassembly offload
> >
> > External Email
> >
> > --
> > On 8/23/2021 11:02 AM, Akhil Goyal wrote:
> > > Reassembly is a costly operation if it is done in software, however,
> > > if it is offloaded to HW, it can considerably save application cycles.
> > > The operation becomes even more costlier if IP fragmants are
> > > encrypted.
> > >
> > > To resolve above two issues, a new offload
> > DEV_RX_OFFLOAD_REASSEMBLY
> > > is introduced in ethdev for devices which can attempt reassembly of
> > > packets in hardware.
> > > rte_eth_dev_info is added with the reassembly capabilities which a
> > > device can support.
> > > Now, if IP fragments are encrypted, reassembly can also be attempted
> > > while doing inline IPsec processing.
> > > This is controlled by a flag in rte_security_ipsec_sa_options to
> > > enable reassembly of encrypted IP fragments in the inline path.
> > >
> > > The resulting reassembled packet would be a typical segmented mbuf
> > > in case of success.
> > >
> > > And if reassembly of fragments is failed or is incomplete (if
> > > fragments do not come before the reass_timeout), the mbuf is updated
> > > with an ol_flag PKT_RX_REASSEMBLY_INCOMPLETE and mbuf is returned
> > as
> > > is. Now application may decide the fate of the packet to wait more
> > > for fragments to come or drop.
> > >
> > > Signed-off-by: Akhil Goyal 
> > > ---
> > >  lib/ethdev/rte_ethdev.c |  1 +
> > >  lib/ethdev/rte_ethdev.h | 18 +-
> > >  lib/mbuf/rte_mbuf_core.h|  3 ++-
> > >  lib/security/rte_security.h | 10 ++
> > >  4 files changed, 30 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index
> > > 9d95cd11e1..1ab3a093cf 100644
> > > --- a/lib/ethdev/rte_ethdev.c
> > > +++ b/lib/ethdev/rte_ethdev.c
> > > @@ -119,6 +119,7 @@ static const struct {
> > >   RTE_RX_OFFLOAD_BIT2STR(VLAN_FILTER),
> > >   RTE_RX_OFFLOAD_BIT2STR(VLAN_EXTEND),
> > >   RTE_RX_OFFLOAD_BIT2STR(JUMBO_FRAME),
> > > + RTE_RX_OFFLOAD_BIT2STR(REASSEMBLY),
> > >   RTE_RX_OFFLOAD_BIT2STR(SCATTER),
> > >   RTE_RX_OFFLOAD_BIT2STR(TIMESTAMP),
> > >   RTE_RX_OFFLOAD_BIT2STR(SECURITY),
> > > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index
> > > d2b27c351f..e89a4dc1eb 100644
> > > --- a/lib/ethdev/rte_ethdev.h
> > > +++ b/lib/ethdev/rte_ethdev.h
> > > @@ -1360,6 +1360,7 @@ struct rte_eth_conf {
> > >  #define DEV_RX_OFFLOAD_VLAN_FILTER   0x0200
> > >  #define DEV_RX_OFFLOAD_VLAN_EXTEND   0x0400
> > >  #define DEV_RX_OFFLOAD_JUMBO_FRAME   0x0800
> > > +#define DEV_RX_OFFLOAD_REASSEMBLY0x1000
> >
> > previous '0x1000' was 'DEV_RX_OFFLOAD_CRC_STRIP', it has been
> long
> > that offload has been removed, but not sure if it cause any problem to
> > re- use it.
> >
> > >  #define DEV_RX_OFFLOAD_SCATTER   0x2000
> > >  /**
> > >   * Timestamp is set by the driver in
> > RTE_MBUF_DYNFIELD_TIMESTAMP_NAME
> > > @@ -1477,6 +1478,20 @@ struct rte_eth_dev_portconf {
> > >   */
> > >  #define RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID
> > (UINT16_MAX)
> > >
> > > +/**
> > > + * Reassembly capabilities that a device can support.
> > > + * The device which can support reassembly offload should set
> > > + * DEV_RX_OFFLOAD_REASSEMBLY
> > > + */
> > > +struct rte_eth_reass_capa {
> > > + /** Maximum time in ns that a fragment can wait for further
> > fragments */
> > > + uint64_t reass_timeout;
> > > + /** Maximum number of fragments that device can reassemble */
> > > + uint16_t max_frags;
> >

Re: [dpdk-dev] [PATCH 8/8] bus/pci: remove ABIs in PCI bus

2021-09-14 Thread Xu, Rosen



> -Original Message-
> From: Xia, Chenbo 
> Sent: Friday, September 10, 2021 10:24
> To: dev@dpdk.org
> Cc: Chautru, Nicolas ; Yigit, Ferruh
> ; Burakov, Anatoly ;
> Ray Kinsella ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; Matan Azrad ; Shahaf
> Shuler ; Viacheslav Ovsiienko
> ; Jerin Jacob ; Anoob Joseph
> ; Trahe, Fiona ; Griffin, John
> ; Jain, Deepak K ;
> Andrew Rybchenko ; Ashish Gupta
> ; Somalapuram Amaranath
> ; Ankur Dwivedi ; Tejasree
> Kondoj ; Nagadheeraj Rottela
> ; Srikanth Jampala ;
> Jay Zhou ; McDaniel, Timothy
> ; Pavan Nikhilesh
> ; Ashwin Sekhar T K ;
> Harman Kalra ; Shepard Siegel
> ; Ed Czeck ;
> John Miller ; Steven Webster
> ; Peters, Matt
> ; Rasesh Mody ;
> Shahed Shaikh ; Ajit Khaparde
> ; Somnath Kotur
> ; Chas Williams ; Min Hu
> (Connor) ; Rahul Lakkireddy
> ; Wang, Haiyue ;
> Marcin Wojtas ; Michal Krawczyk ;
> Shai Brandes ; Evgeny Schemeilin
> ; Igor Chauskin ; Daley, John
> ; Hyong Youb Kim ; Ziyang
> Xuan ; Xiaoyun Wang
> ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Xing, Beilei ;
> Andrew Boyer ; Xu, Rosen ;
> Stephen Hemminger ; Long Li
> ; Devendra Singh Rawat
> ; Maciej Czekaj ;
> Jiawen Wu ; Jian Wang
> ; Maxime Coquelin
> ; Yong Wang ;
> Jakub Palider ; Tomasz Duszynski
> ; Zhang, Tianfei ;
> Richardson, Bruce ; Li, Xiaoyun
> ; Wu, Jingjing ; Radha Mohan
> Chintakuntla ; Veerasenareddy Burru
> ; Ori Kam ; Wang, Xiao W
> ; Thomas Monjalon 
> Subject: [PATCH 8/8] bus/pci: remove ABIs in PCI bus
> 
> As announced in the deprecation note, most of ABIs in PCI bus are
> removed in this patch. Only the function rte_pci_dump is still ABI
> and experimental APIs are kept for future promotion.
> 
> This patch creates a new file named pci_driver.h and moves most of
> the content in original rte_bus_pci.h to it. After that, pci_driver.h
> is considered the interface for drivers and rte_bus_pci.h for
> applications. pci_driver.h is defined as driver_sdk_headers so that
> out-of-tree drivers can use it.
> 
> Then this patch replaces the including of rte_bus_pci.h with pci_driver.h
> in all related drivers.
> 
> Signed-off-by: Chenbo Xia 
> ---
>  app/test/virtual_pmd.c|   2 +-
>  doc/guides/rel_notes/release_21_11.rst|   2 +
>  drivers/baseband/acc100/rte_acc100_pmd.c  |   2 +-
>  .../fpga_5gnr_fec/rte_fpga_5gnr_fec.c |   2 +-
>  drivers/baseband/fpga_lte_fec/fpga_lte_fec.c  |   2 +-
>  drivers/bus/pci/bsd/pci.c |   1 -
>  drivers/bus/pci/linux/pci.c   |   1 -
>  drivers/bus/pci/linux/pci_uio.c   |   1 -
>  drivers/bus/pci/linux/pci_vfio.c  |   1 -
>  drivers/bus/pci/meson.build   |   4 +
>  drivers/bus/pci/pci_common_uio.c  |   1 -
>  drivers/bus/pci/pci_driver.h  | 402 ++
>  drivers/bus/pci/pci_params.c  |   1 -
>  drivers/bus/pci/private.h |   3 +-
>  drivers/bus/pci/rte_bus_pci.h | 375 +---
>  drivers/bus/pci/version.map   |  32 +-
>  drivers/common/cnxk/roc_platform.h|   2 +-
>  drivers/common/mlx5/linux/mlx5_common_verbs.c |   2 +-
>  drivers/common/mlx5/mlx5_common_pci.c |   2 +-
>  drivers/common/octeontx2/otx2_dev.h   |   2 +-
>  drivers/common/octeontx2/otx2_sec_idev.c  |   2 +-
>  drivers/common/qat/qat_device.h   |   2 +-
>  drivers/common/qat/qat_qp.c   |   2 +-
>  drivers/common/sfc_efx/sfc_efx.h  |   2 +-
>  drivers/compress/mlx5/mlx5_compress.c |   2 +-
>  drivers/compress/octeontx/otx_zip.h   |   2 +-
>  drivers/compress/qat/qat_comp.c   |   2 +-
>  drivers/crypto/ccp/ccp_dev.h  |   2 +-
>  drivers/crypto/ccp/ccp_pci.h  |   2 +-
>  drivers/crypto/ccp/rte_ccp_pmd.c  |   2 +-
>  drivers/crypto/cnxk/cn10k_cryptodev.c |   2 +-
>  drivers/crypto/cnxk/cn9k_cryptodev.c  |   2 +-
>  drivers/crypto/mlx5/mlx5_crypto.c |   2 +-
>  drivers/crypto/nitrox/nitrox_device.h |   2 +-
>  drivers/crypto/octeontx/otx_cryptodev.c   |   2 +-
>  drivers/crypto/octeontx/otx_cryptodev_ops.c   |   2 +-
>  drivers/crypto/octeontx2/otx2_cryptodev.c |   2 +-
>  drivers/crypto/qat/qat_sym.c  |   2 +-
>  drivers/crypto/qat/qat_sym_pmd.c  |   2 +-
>  drivers/crypto/virtio/virtio_cryptodev.c  |   2 +-
>  drivers/crypto/virtio/virtio_pci.h|   2 +-
>  drivers/event/dlb2/pf/dlb2_main.h |   2 +-
>  drivers/event/dlb2/pf/dlb2_pf.c

Re: [dpdk-dev] [PATCH 1/4] ethdev: fix max Rx packet length

2021-07-18 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Saturday, July 10, 2021 1:29
> To: Jerin Jacob ; Li, Xiaoyun ;
> Chas Williams ; Min Hu (Connor) ;
> Hemant Agrawal ; Sachin Saxena
> ; Zhang, Qi Z ; Wang,
> Xiao W ; Matan Azrad ;
> Shahaf Shuler ; Viacheslav Ovsiienko
> ; Harman Kalra ; Maciej
> Czekaj ; Ray Kinsella ; Neil
> Horman ; Iremonger, Bernard
> ; Richardson, Bruce
> ; Ananyev, Konstantin
> ; Mcnamara, John
> ; Igor Russkikh ;
> Pavel Belous ; Steven Webster
> ; Matt Peters
> ; Somalapuram Amaranath
> ; Rasesh Mody ; Shahed
> Shaikh ; Ajit Khaparde
> ; Somnath Kotur
> ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; Rahul Lakkireddy
> ; Wang, Haiyue ;
> Marcin Wojtas ; Michal Krawczyk ;
> Guy Tzalik ; Evgeny Schemeilin
> ; Igor Chauskin ;
> Gagandeep Singh ; Daley, John ;
> Hyong Youb Kim ; Ziyang Xuan
> ; Xiaoyun Wang
> ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ;
> Andrew Boyer ; Xu, Rosen ;
> Shijith Thotton ; Srisivasubramanian Srinivasan
> ; Zyta Szpak ; Liron Himi
> ; Heinrich Kuhn ;
> Devendra Singh Rawat ; Andrew Rybchenko
> ; Wiles, Keith ;
> Jiawen Wu ; Jian Wang
> ; Maxime Coquelin
> ; Xia, Chenbo ;
> Chautru, Nicolas ; Hunt, David
> ; Van Haaren, Harry ;
> Dumitrescu, Cristian ; Nicolau, Radu
> ; Akhil Goyal ; Kantecki,
> Tomasz ; Doherty, Declan
> ; Pavan Nikhilesh
> ; Rybalchenko, Kirill
> ; Singh, Jasvinder
> ; Thomas Monjalon 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH 1/4] ethdev: fix max Rx packet length
> 
> There is a confusion on setting max Rx packet length, this patch aims to
> clarify it.
> 
> 'rte_eth_dev_configure()' API accepts max Rx packet size via
> 'uint32_t max_rx_pkt_len' filed of the config struct 'struct
> rte_eth_conf'.
> 
> Also 'rte_eth_dev_set_mtu()' API can be used to set the MTU, and result
> stored into '(struct rte_eth_dev)->data->mtu'.
> 
> These two APIs are related but they work in a disconnected way, they
> store the set values in different variables which makes hard to figure
> out which one to use, also two different related method is confusing for
> the users.
> 
> Other issues causing confusion is:
> * maximum transmission unit (MTU) is payload of the Ethernet frame. And
>   'max_rx_pkt_len' is the size of the Ethernet frame. Difference is
>   Ethernet frame overhead, but this may be different from device to
>   device based on what device supports, like VLAN and QinQ.
> * 'max_rx_pkt_len' is only valid when application requested jumbo frame,
>   which adds additional confusion and some APIs and PMDs already
>   discards this documented behavior.
> * For the jumbo frame enabled case, 'max_rx_pkt_len' is an mandatory
>   field, this adds configuration complexity for application.
> 
> As solution, both APIs gets MTU as parameter, and both saves the result
> in same variable '(struct rte_eth_dev)->data->mtu'. For this
> 'max_rx_pkt_len' updated as 'mtu', and it is always valid independent
> from jumbo frame.
> 
> For 'rte_eth_dev_configure()', 'dev->data->dev_conf.rxmode.mtu' is user
> request and it should be used only within configure function and result
> should be stored to '(struct rte_eth_dev)->data->mtu'. After that point
> both application and PMD uses MTU from this variable.
> 
> When application doesn't provide an MTU during 'rte_eth_dev_configure()'
> default 'RTE_ETHER_MTU' value is used.
> 
> As additional clarification, MTU is used to configure the device for
> physical Rx/Tx limitation. Other related issue is size of the buffer to
> store Rx packets, many PMDs use mbuf data buffer size as Rx buffer size.
> And compares MTU against Rx buffer size to decide enabling scattered Rx
> or not, if PMD supports it. If scattered Rx is not supported by device,
> MTU bigger than Rx buffer size should fail.
> 
> Signed-off-by: Ferruh Yigit 
> ---
>  app/test-eventdev/test_perf_common.c  |  1 -
>  app/test-eventdev/test_pipeline_common.c  |  5 +-
>  app/test-pmd/cmdline.c| 45 -
>  app/test-pmd/config.c | 18 ++--
>  app/test-pmd/parameters.c |  4 +-
>  app/test-pmd/testpmd.c| 94 ++
>  app/test-pmd/testpmd.h|  2 +-
>  app/test/test_link_bonding.c  |  1 -
>  app/test/test_link_bonding_mode4.c|  1 -
>  app/test/test_link_bonding_rssconf.c

Re: [dpdk-dev] [PATCH 2/4] ethdev: move jumbo frame offload check to library

2021-07-18 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Saturday, July 10, 2021 1:29
> To: Somalapuram Amaranath ; Ajit Khaparde
> ; Somnath Kotur
> ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; Rahul Lakkireddy
> ; Hemant Agrawal
> ; Sachin Saxena ;
> Wang, Haiyue ; Gagandeep Singh
> ; Ziyang Xuan ; Xiaoyun
> Wang ; Guoyang Zhou
> ; Min Hu (Connor) ;
> Yisen Zhuang ; Lijun Ou
> ; Xing, Beilei ; Wu, Jingjing
> ; Yang, Qiming ; Zhang, Qi
> Z ; Xu, Rosen ; Shijith Thotton
> ; Srisivasubramanian Srinivasan
> ; Heinrich Kuhn
> ; Harman Kalra ;
> Jerin Jacob ; Rasesh Mody ;
> Devendra Singh Rawat ; Igor Russkikh
> ; Andrew Rybchenko
> ; Maciej Czekaj ;
> Jiawen Wu ; Jian Wang
> ; Thomas Monjalon 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH 2/4] ethdev: move jumbo frame offload check to library
> 
> Setting MTU bigger than RTE_ETHER_MTU requires the jumbo frame support,
> and application should enable the jumbo frame offload support for it.
> 
> When jumbo frame offload is not enabled by application, but MTU bigger
> than RTE_ETHER_MTU is requested there are two options, either fail or
> enable jumbo frame offload implicitly.
> 
> Enabling jumbo frame offload implicitly is selected by many drivers since
> setting a big MTU value already implies it, and this increases usability.
> 
> This patch moves this logic from drivers to the library, both to reduce the
> duplicated code in the drivers and to make behaviour more visible.
> 
> Signed-off-by: Ferruh Yigit 
> ---
>  drivers/net/axgbe/axgbe_ethdev.c|  9 ++---
>  drivers/net/bnxt/bnxt_ethdev.c  |  9 ++---
>  drivers/net/cnxk/cnxk_ethdev_ops.c  |  5 -
>  drivers/net/cxgbe/cxgbe_ethdev.c|  8 
>  drivers/net/dpaa/dpaa_ethdev.c  |  7 ---
>  drivers/net/dpaa2/dpaa2_ethdev.c|  7 ---
>  drivers/net/e1000/em_ethdev.c   |  9 ++---
>  drivers/net/e1000/igb_ethdev.c  |  9 ++---
>  drivers/net/enetc/enetc_ethdev.c|  7 ---
>  drivers/net/hinic/hinic_pmd_ethdev.c|  7 ---
>  drivers/net/hns3/hns3_ethdev.c  |  8 
>  drivers/net/hns3/hns3_ethdev_vf.c   |  6 --
>  drivers/net/i40e/i40e_ethdev.c  |  5 -
>  drivers/net/i40e/i40e_ethdev_vf.c   |  5 -
>  drivers/net/iavf/iavf_ethdev.c  |  7 ---
>  drivers/net/ice/ice_ethdev.c|  5 -
>  drivers/net/igc/igc_ethdev.c|  9 ++---
>  drivers/net/ipn3ke/ipn3ke_representor.c |  5 -
>  drivers/net/ixgbe/ixgbe_ethdev.c|  7 ++-
>  drivers/net/liquidio/lio_ethdev.c   |  7 ---
>  drivers/net/nfp/nfp_net.c   |  6 --
>  drivers/net/octeontx/octeontx_ethdev.c  |  5 -
> drivers/net/octeontx2/otx2_ethdev_ops.c |  5 -
>  drivers/net/qede/qede_ethdev.c  |  4 
>  drivers/net/sfc/sfc_ethdev.c|  9 -
>  drivers/net/thunderx/nicvf_ethdev.c |  6 --
>  drivers/net/txgbe/txgbe_ethdev.c|  6 --
>  lib/ethdev/rte_ethdev.c | 18 +-
>  28 files changed, 29 insertions(+), 171 deletions(-)
> 
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c
> b/drivers/net/axgbe/axgbe_ethdev.c
> index 76aeec077f2b..2960834b4539 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1492,15 +1492,10 @@ static int axgb_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
>   dev->data->port_id);
>   return -EBUSY;
>   }
> - if (mtu > RTE_ETHER_MTU) {
> - dev->data->dev_conf.rxmode.offloads |=
> - DEV_RX_OFFLOAD_JUMBO_FRAME;
> + if (mtu > RTE_ETHER_MTU)
>   val = 1;
> - } else {
> - dev->data->dev_conf.rxmode.offloads &=
> - ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> + else
>   val = 0;
> - }
>   AXGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
>   return 0;
>  }
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c index 335505a106d5..4344a012f06e
> 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -3018,15 +3018,10 @@ int bnxt_mtu_set_op(struct rte_eth_dev
> *eth_dev, uint16_t new_mtu)
>   return -EINVAL;
>   }
> 
> - if (new_mtu > RTE_ETHER_MTU) {
> + if (new_mtu > RTE_ETHER_MTU)
>   bp->flags |= BNXT_FLAG_JUMBO;
> - bp->eth_dev->data->dev_conf.rxmode.offloads |=
> - DEV_RX_OFFLOAD_JUMBO_FRAME;
> - } el

Re: [dpdk-dev] [PATCH 3/4] ethdev: move check to library for MTU set

2021-07-18 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Saturday, July 10, 2021 1:29
> To: Somalapuram Amaranath ; Ajit Khaparde
> ; Somnath Kotur
> ; Rahul Lakkireddy
> ; Hemant Agrawal
> ; Sachin Saxena ;
> Wang, Haiyue ; Gagandeep Singh
> ; Ziyang Xuan ; Xiaoyun
> Wang ; Guoyang Zhou
> ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ;
> Zhang, Qi Z ; Xu, Rosen ;
> Shijith Thotton ; Srisivasubramanian Srinivasan
> ; Heinrich Kuhn
> ; Harman Kalra ;
> Jerin Jacob ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Rasesh Mody ; Devendra Singh Rawat
> ; Igor Russkikh ;
> Maciej Czekaj ; Jiawen Wu
> ; Jian Wang ;
> Thomas Monjalon ; Andrew Rybchenko
> 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH 3/4] ethdev: move check to library for MTU set
> 
> Move requested MTU value check to the API to prevent the duplicated code.
> 
> Signed-off-by: Ferruh Yigit 
> ---
>  drivers/net/axgbe/axgbe_ethdev.c| 15 ---
>  drivers/net/bnxt/bnxt_ethdev.c  |  2 +-
>  drivers/net/cxgbe/cxgbe_ethdev.c| 13 +
>  drivers/net/dpaa/dpaa_ethdev.c  |  2 --
>  drivers/net/dpaa2/dpaa2_ethdev.c|  4 
>  drivers/net/e1000/em_ethdev.c   | 10 --
>  drivers/net/e1000/igb_ethdev.c  | 11 ---
>  drivers/net/enetc/enetc_ethdev.c|  4 
>  drivers/net/hinic/hinic_pmd_ethdev.c|  8 +---
>  drivers/net/i40e/i40e_ethdev.c  | 17 -
>  drivers/net/i40e/i40e_ethdev_vf.c   | 17 -
>  drivers/net/iavf/iavf_ethdev.c  | 10 ++
>  drivers/net/ice/ice_ethdev.c| 14 +++---
>  drivers/net/igc/igc_ethdev.c|  5 -
>  drivers/net/ipn3ke/ipn3ke_representor.c |  6 --
>  drivers/net/liquidio/lio_ethdev.c   | 10 --
>  drivers/net/nfp/nfp_net.c   |  4 
>  drivers/net/octeontx/octeontx_ethdev.c  |  4 
> drivers/net/octeontx2/otx2_ethdev_ops.c |  5 -
>  drivers/net/qede/qede_ethdev.c  | 12 
>  drivers/net/thunderx/nicvf_ethdev.c |  6 --
>  drivers/net/txgbe/txgbe_ethdev.c| 10 --
>  lib/ethdev/rte_ethdev.c |  9 +
>  23 files changed, 29 insertions(+), 169 deletions(-)
> 
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c
> b/drivers/net/axgbe/axgbe_ethdev.c
> index 2960834b4539..c36cd7b1d2f0 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1478,25 +1478,18 @@ axgbe_dev_supported_ptypes_get(struct
> rte_eth_dev *dev)
> 
>  static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)  {
> - struct rte_eth_dev_info dev_info;
>   struct axgbe_port *pdata = dev->data->dev_private;
> - uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN +
> RTE_ETHER_CRC_LEN;
> - unsigned int val = 0;
> - axgbe_dev_info_get(dev, &dev_info);
> - /* check that mtu is within the allowed range */
> - if (mtu < RTE_ETHER_MIN_MTU || frame_size >
> dev_info.max_rx_pktlen)
> - return -EINVAL;
> + unsigned int val;
> +
>   /* mtu setting is forbidden if port is start */
>   if (dev->data->dev_started) {
>   PMD_DRV_LOG(ERR, "port %d must be stopped before
> configuration",
>   dev->data->port_id);
>   return -EBUSY;
>   }
> - if (mtu > RTE_ETHER_MTU)
> - val = 1;
> - else
> - val = 0;
> + val = mtu > RTE_ETHER_MTU ? 1 : 0;
>   AXGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
> +
>   return 0;
>  }
> 
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c index 4344a012f06e..1e7da8ba61a6
> 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -2991,7 +2991,7 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev,
> uint16_t new_mtu)
>   uint32_t overhead = BNXT_MAX_PKT_LEN - BNXT_MAX_MTU;
>   struct bnxt *bp = eth_dev->data->dev_private;
>   uint32_t new_pkt_size;
> - uint32_t rc = 0;
> + uint32_t rc;
>   uint32_t i;
> 
>   rc = is_bnxt_in_error(bp);
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c
> b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 0c9cc2f5bb3f..70b879fed100 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -301,21 +301,10 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev
> *eth_dev, uint16_t mtu)  {
>   struct port_info *pi = eth_dev->data->dev_private;
>   struct adapter *adapter = pi->adapter;
> - struct rte_eth_dev_info dev_info;
> - i

Re: [dpdk-dev] [PATCH 4/4] ethdev: remove jumbo offload flag

2021-07-18 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Saturday, July 10, 2021 1:29
> To: Jerin Jacob ; Li, Xiaoyun ;
> Ajit Khaparde ; Somnath Kotur
> ; Igor Russkikh
> ; Pavel Belous ;
> Somalapuram Amaranath ; Rasesh Mody
> ; Shahed Shaikh ; Chas
> Williams ; Min Hu (Connor) ;
> Nithin Dabilpuram ; Kiran Kumar K
> ; Sunil Kumar Kori ; Satha
> Rao ; Rahul Lakkireddy
> ; Hemant Agrawal
> ; Sachin Saxena ;
> Wang, Haiyue ; Marcin Wojtas
> ; Michal Krawczyk ; Guy Tzalik
> ; Evgeny Schemeilin ; Igor
> Chauskin ; Gagandeep Singh ;
> Daley, John ; Hyong Youb Kim ;
> Gaetan Rivet ; Zhang, Qi Z ; Wang,
> Xiao W ; Ziyang Xuan ;
> Xiaoyun Wang ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ;
> Andrew Boyer ; Xu, Rosen ;
> Matan Azrad ; Shahaf Shuler ;
> Viacheslav Ovsiienko ; Zyta Szpak
> ; Liron Himi ; Heinrich Kuhn
> ; Harman Kalra ;
> Nalla Pradeep ; Radha Mohan Chintakuntla
> ; Veerasenareddy Burru ;
> Devendra Singh Rawat ; Andrew Rybchenko
> ; Maciej Czekaj ;
> Jiawen Wu ; Jian Wang
> ; Maxime Coquelin
> ; Xia, Chenbo ;
> Yong Wang ; Ananyev, Konstantin
> ; Nicolau, Radu ;
> Akhil Goyal ; Hunt, David ;
> Mcnamara, John ; Thomas Monjalon
> 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH 4/4] ethdev: remove jumbo offload flag
> 
> Removing 'DEV_RX_OFFLOAD_JUMBO_FRAME' offload flag.
> 
> Instead of drivers announce this capability, application can deduct the
> capability by checking reported 'dev_info.max_mtu' or
> 'dev_info.max_rx_pktlen'.
> 
> And instead of application explicitly set this flag to enable jumbo
> frames, this can be deducted by driver by comparing requested 'mtu' to
> 'RTE_ETHER_MTU'.
> 
> Removing this additional configuration for simplification.
> 
> Signed-off-by: Ferruh Yigit 
> ---
>  app/test-eventdev/test_pipeline_common.c  |  2 -
>  app/test-pmd/cmdline.c|  2 +-
>  app/test-pmd/config.c | 24 +-
>  app/test-pmd/testpmd.c| 46 +--
>  app/test-pmd/testpmd.h|  2 +-
>  doc/guides/howto/debug_troubleshoot.rst   |  2 -
>  doc/guides/nics/bnxt.rst  |  1 -
>  doc/guides/nics/features.rst  |  3 +-
>  drivers/net/atlantic/atl_ethdev.c |  1 -
>  drivers/net/axgbe/axgbe_ethdev.c  |  1 -
>  drivers/net/bnx2x/bnx2x_ethdev.c  |  1 -
>  drivers/net/bnxt/bnxt.h   |  1 -
>  drivers/net/bnxt/bnxt_ethdev.c| 10 +---
>  drivers/net/bonding/rte_eth_bond_pmd.c|  8 
>  drivers/net/cnxk/cnxk_ethdev.h|  5 +-
>  drivers/net/cnxk/cnxk_ethdev_ops.c|  1 -
>  drivers/net/cxgbe/cxgbe.h |  1 -
>  drivers/net/cxgbe/cxgbe_ethdev.c  |  8 
>  drivers/net/cxgbe/sge.c   |  5 +-
>  drivers/net/dpaa/dpaa_ethdev.c|  2 -
>  drivers/net/dpaa2/dpaa2_ethdev.c  |  2 -
>  drivers/net/e1000/e1000_ethdev.h  |  4 +-
>  drivers/net/e1000/em_ethdev.c |  4 +-
>  drivers/net/e1000/em_rxtx.c   | 19 +++-
>  drivers/net/e1000/igb_rxtx.c  |  3 +-
>  drivers/net/ena/ena_ethdev.c  |  2 -
>  drivers/net/enetc/enetc_ethdev.c  |  3 +-
>  drivers/net/enic/enic_res.c   |  1 -
>  drivers/net/failsafe/failsafe_ops.c   |  2 -
>  drivers/net/fm10k/fm10k_ethdev.c  |  1 -
>  drivers/net/hinic/hinic_pmd_ethdev.c  |  1 -
>  drivers/net/hns3/hns3_ethdev.c|  1 -
>  drivers/net/hns3/hns3_ethdev_vf.c |  1 -
>  drivers/net/i40e/i40e_ethdev.c|  1 -
>  drivers/net/i40e/i40e_ethdev_vf.c |  3 +-
>  drivers/net/i40e/i40e_rxtx.c  |  2 +-
>  drivers/net/iavf/iavf_ethdev.c|  3 +-
>  drivers/net/ice/ice_dcf_ethdev.c  |  3 +-
>  drivers/net/ice/ice_dcf_vf_representor.c  |  1 -
>  drivers/net/ice/ice_ethdev.c  |  1 -
>  drivers/net/ice/ice_rxtx.c|  3 +-
>  drivers/net/igc/igc_ethdev.h  |  1 -
>  drivers/net/igc/igc_txrx.c|  2 +-
>  drivers/net/ionic/ionic_ethdev.c  |  1 -
>  drivers/net/ipn3ke/ipn3ke_representor.c   |  3 +-
>  drivers/net/ixgbe/ixgbe_ethdev.c  |  5 +-
>  drivers/net/ixgbe/ixgbe_pf.c  |  9 +---
>  drivers/net/ixgbe/ixgbe_rxtx.c|  3 +-
>  drivers/net/mlx4/mlx4_rxq.c   |  1 -
>  drivers/n

RE: [PATCH] net: add macro for VLAN header length

2021-11-11 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Thursday, November 11, 2021 1:40
> To: Rasesh Mody ; Shahed Shaikh
> ; Rahul Lakkireddy ;
> Zhang, Qi Z ; Wang, Xiao W
> ; Ziyang Xuan ;
> Xiaoyun Wang ; Guoyang Zhou
> ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ; Xu,
> Rosen ; Wang, Haiyue ;
> Jiawen Wu ; Jian Wang
> ; Maxime Coquelin
> ; Xia, Chenbo ;
> Olivier Matz 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH] net: add macro for VLAN header length
> 
> Multiple drivers are defining macros for VLAN header length, to remove the
> redundancy defining macro in the ether header.
> And updated drivers to use the new macro.
> 
> Signed-off-by: Ferruh Yigit 
> ---
>  drivers/net/bnx2x/bnx2x_vfpf.c   | 2 +-
>  drivers/net/bnx2x/bnx2x_vfpf.h   | 2 --
>  drivers/net/cxgbe/cxgbe_compat.h | 1 -
>  drivers/net/cxgbe/sge.c  | 2 +-
>  drivers/net/fm10k/fm10k.h| 2 --
>  drivers/net/fm10k/fm10k_ethdev.c | 2 +-
>  drivers/net/hinic/hinic_pmd_ethdev.h | 3 +--
>  drivers/net/i40e/i40e_ethdev.h   | 4 +---
>  drivers/net/iavf/iavf.h  | 3 +--
>  drivers/net/ice/ice_dcf_ethdev.c | 2 +-
>  drivers/net/ice/ice_ethdev.h | 4 +---
>  drivers/net/ipn3ke/ipn3ke_ethdev.h   | 3 +--

Acked-by: Rosen Xu 

>  drivers/net/ixgbe/ixgbe_ethdev.c | 4 ++--
>  drivers/net/ixgbe/ixgbe_ethdev.h | 1 -
>  drivers/net/ixgbe/ixgbe_rxtx.c   | 4 ++--
>  drivers/net/ngbe/ngbe_ethdev.c   | 2 +-
>  drivers/net/ngbe/ngbe_ethdev.h   | 1 -
>  drivers/net/ngbe/ngbe_rxtx.c | 2 +-
>  drivers/net/txgbe/txgbe_ethdev.c | 2 +-
>  drivers/net/txgbe/txgbe_ethdev.h | 1 -
>  drivers/net/txgbe/txgbe_ethdev_vf.c  | 2 +-
>  drivers/net/txgbe/txgbe_rxtx.c   | 4 ++--
>  examples/vhost/main.c| 3 +--
>  lib/net/rte_ether.h  | 5 +++--
>  24 files changed, 23 insertions(+), 38 deletions(-)



Re: [dpdk-dev] [dpdk-stable] [PATCH v11 1/4] raw/ifpga: add fpga rsu function

2021-01-25 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Ferruh Yigit 
> Sent: Monday, January 25, 2021 18:01
> To: Huang, Wei ; dev@dpdk.org; Xu, Rosen
> ; Zhang, Qi Z 
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Ray Kinsella
> 
> Subject: Re: [dpdk-stable] [PATCH v11 1/4] raw/ifpga: add fpga rsu function
> 
> On 1/22/2021 2:18 AM, Huang, Wei wrote:
> 
> 
> 
> >>
> >> -Original Message-
> >> From: Ferruh Yigit 
> >> Sent: Friday, January 22, 2021 00:30
> >> To: Huang, Wei ; dev@dpdk.org; Xu, Rosen
> >> ; Zhang, Qi Z 
> >> Cc: sta...@dpdk.org; Zhang, Tianfei ; Ray
> >> Kinsella 
> >> Subject: Re: [dpdk-stable] [PATCH v11 1/4] raw/ifpga: add fpga rsu
> >> function
> >>
> >> On 1/21/2021 6:03 AM, Wei Huang wrote:
> >>> RSU (Remote System Update) depends on secure manager which may be
> >>> different on various implementations, so a new secure manager device
> >>> is implemented for adapting such difference.
> >>> There are three major functions added:
> >>> 1. ifpga_rawdev_update_flash() updates flash with specific image file.
> >>> 2. ifpga_rawdev_stop_flash_update() aborts flash update process.
> >>> 3. ifpga_rawdev_reload() reloads FPGA from updated flash.
> >>>
> >>> Signed-off-by: Wei Huang 
> >>> Acked-by: Tianfei Zhang 
> >>> Acked-by: Rosen Xu 
> >>
> >> <...>
> >>
> >>> @@ -76,4 +76,9 @@ int
> >>>ifpga_unregister_msix_irq(enum ifpga_irq_type type,
> >>>int vec_start, rte_intr_callback_fn handler, void *arg);
> >>>
> >>> +int ifpga_rawdev_update_flash(struct rte_rawdev *dev, const char
> >>> +*image, uint64_t *status); int
> >>> +ifpga_rawdev_stop_flash_update(struct rte_rawdev *dev, int force);
> >>> +int ifpga_rawdev_reload(struct rte_rawdev *dev, int type, int
> >>> +page);
> >>> +
> >>>#endif /* _IFPGA_RAWDEV_H_ */
> >>>
> >>
> >> Hi Wei,
> >>
> >> Please help me understand the rawdev, who should be calling the above
> newly added functions?
> >>
>  >
>  > Hi Ferruh,
>  >
>  > Cyborg is an OpenStack project that aims to provide a general purpose
> management framework for acceleration resources (i.e. various types of
> accelerators such as GPU, FPGA, NP, ODP, DPDK/SPDK and so on).
>  >
>  > To update the FPGA flash is one of requirements from Cyborg. Originally
> there are no such interfaces, so I added them.
>  >
>  > These interfaces use rte_rawdev to identify which FPGA to access, they will
> be called in opae_update_flash(),  > opae_cancel_flash_update() and
> opae_reboot_device() in ifpga_opae_api.c .
>  >
>  > These opae_xxx function use PCI address to identify FPGA instead of
> rte_rawdev, so the caller has no need to know the existence of rte_rawdev.
>  > In fact, Cyborg is Python application, these opae_xxx functions will be
> eventually wrapped in a Python module for Cyborg to call.
>  >
> 
> Thanks for clarification, I see what you are doing, but still I think these 
> APIs
> are not belong to a driver, they look like more application level.
> 
> @Wei, @Rosen, what do you think to keep only generic raw/ipfga APIs in the
> driver and move all 'ifpga_opae_api.c/h' to the sample application?

@Huang, Wei, could you classify which functions are only used in sample 
application?

> In that case raw/ifpga APIs still can get the port_id as parameter, and the
> 'opae' layer in the sample can do the conversion?


RE: [PATCH v2 12/20] raw/ifpga: inherit lock annotations

2023-02-26 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Friday, February 24, 2023 11:12 PM
> To: dev@dpdk.org
> Cc: tho...@monjalon.net; Xu, Rosen ; Zhang, Tianfei
> 
> Subject: [PATCH v2 12/20] raw/ifpga: inherit lock annotations
> 
> The checks in those helpers are useless:
> - all (start/stop/reset/test) callers ensure that dev != NULL,
> - dev->sd can't be NULL either as it would mean the application is calling
>   those helpers for a dev pointer that did not pass initialisation,
> 
> Once the checks are removed, the only thing that remains is calls to the
> rte_spinlock API, so simply use macros and inherit annotations from the lock
> API.
> 
> Signed-off-by: David Marchand 
> ---
>  drivers/raw/ifpga/afu_pmd_core.c | 17 ++---
>  1 file changed, 2 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_core.c
> b/drivers/raw/ifpga/afu_pmd_core.c
> index ddf7a34f33..3ab1f47ac1 100644
> --- a/drivers/raw/ifpga/afu_pmd_core.c
> +++ b/drivers/raw/ifpga/afu_pmd_core.c
> @@ -23,21 +23,8 @@ static struct rte_afu_uuid
> afu_pmd_uuid_map[AFU_RAWDEV_MAX_DRVS+1];
>  TAILQ_HEAD(afu_drv_list, afu_rawdev_drv);  static struct afu_drv_list
> afu_pmd_list = TAILQ_HEAD_INITIALIZER(afu_pmd_list);
> 
> -static inline int afu_rawdev_trylock(struct afu_rawdev *dev) -{
> - if (!dev || !dev->sd)
> - return 0;
> -
> - return rte_spinlock_trylock(&dev->sd->lock);
> -}
> -
> -static inline void afu_rawdev_unlock(struct afu_rawdev *dev) -{
> - if (!dev || !dev->sd)
> - return;
> -
> - rte_spinlock_unlock(&dev->sd->lock);
> -}
> +#define afu_rawdev_trylock(dev) rte_spinlock_trylock(&dev->sd->lock)
> +#define afu_rawdev_unlock(dev) rte_spinlock_unlock(&dev->sd->lock)
> 
>  static int afu_rawdev_configure(const struct rte_rawdev *rawdev,
>   rte_rawdev_obj_t config, size_t config_size)
> --
> 2.39.2


It looks good for me.
Reviewed-by: Rosen Xu 


RE: [PATCH v1] raw/ifpga: check afu device before unplug

2023-05-02 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Monday, March 27, 2023 5:42 AM
> To: dev@dpdk.org; tho...@monjalon.net; david.march...@redhat.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] raw/ifpga: check afu device before unplug
> 
> AFU device may be already unplugged in IFPGA bus cleanup process, unplug
> AFU device only when it exists.
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 16 +++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 1020adc..0d43c87 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -29,6 +29,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
> 
>  #include "base/opae_hw_api.h"
>  #include "base/opae_ifpga_hw_api.h"
> @@ -1832,12 +1833,19 @@ static int ifpga_rawdev_get_string_arg(const
> char *key __rte_unused,
>   return ret;
>  }
> 
> +static int cmp_dev_name(const struct rte_device *dev, const void
> +*_name) {
> + const char *name = _name;
> + return strcmp(dev->name, name);
> +}
> +
>  static int
>  ifpga_cfg_remove(struct rte_vdev_device *vdev)  {
>   struct rte_rawdev *rawdev = NULL;
>   struct ifpga_rawdev *ifpga_dev;
>   struct ifpga_vdev_args args;
> + struct rte_bus *bus;
>   char dev_name[RTE_RAWDEV_NAME_MAX_LEN];
>   const char *vdev_name = NULL;
>   char *tmp_vdev = NULL;
> @@ -1864,7 +1872,13 @@ static int ifpga_rawdev_get_string_arg(const char
> *key __rte_unused,
> 
>   snprintf(dev_name, RTE_RAWDEV_NAME_MAX_LEN, "%d|%s",
>   args.port, args.bdf);
> - ret = rte_eal_hotplug_remove(RTE_STR(IFPGA_BUS_NAME),
> dev_name);
> + bus = rte_bus_find_by_name(RTE_STR(IFPGA_BUS_NAME));
> + if (bus) {
> + if (bus->find_device(NULL, cmp_dev_name, dev_name)) {
> + ret =
> rte_eal_hotplug_remove(RTE_STR(IFPGA_BUS_NAME),
> + dev_name);
> + }
> + }
> 
>   for (i = 0; i < IFPGA_MAX_VDEV; i++) {
>   tmp_vdev = ifpga_dev->vdev_name[i];
> --
> 1.8.3.1

Reviewed-by: Rosen Xu 


RE: [PATCH 04/25] raw/ifpga: replace snprintf with strlcpy

2023-06-01 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Stephen Hemminger 
> Sent: Thursday, June 1, 2023 11:01 PM
> To: dev@dpdk.org
> Cc: Stephen Hemminger ; Xu, Rosen
> ; Zhang, Tianfei 
> Subject: [PATCH 04/25] raw/ifpga: replace snprintf with strlcpy
> 
> Suggested by devtools/cocci/strlcpy-with-header.cocci
> 
> Signed-off-by: Stephen Hemminger 
> ---
>  drivers/raw/ifpga/afu_pmd_core.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_core.c
> b/drivers/raw/ifpga/afu_pmd_core.c
> index 3ab1f47ac1a4..e969897dbe7d 100644
> --- a/drivers/raw/ifpga/afu_pmd_core.c
> +++ b/drivers/raw/ifpga/afu_pmd_core.c
> @@ -16,6 +16,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
> 
>  #include "afu_pmd_core.h"
> 
> @@ -225,7 +226,7 @@ static int afu_shared_data_alloc(const char *name,
>   return -EINVAL;
> 
>   /* name format is afu_?|??:??.? which is unique */
> - snprintf(mz_name, sizeof(mz_name), "%s", name);
> + strlcpy(mz_name, name, sizeof(mz_name));
> 
>   mz = rte_memzone_lookup(mz_name);
>   if (!mz) {
> --
> 2.39.2

Reviewed-by: Rosen Xu 


RE: [PATCH 20/25] net/ionic: replace snprintf with strlcpy

2023-06-01 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Stephen Hemminger 
> Sent: Thursday, June 1, 2023 11:01 PM
> To: dev@dpdk.org
> Cc: Stephen Hemminger ; Andrew Boyer
> ; Xu, Rosen 
> Subject: [PATCH 20/25] net/ionic: replace snprintf with strlcpy
> 
> Suggested by devtools/cocci/strlcpy-with-header.cocci
> 
> Signed-off-by: Stephen Hemminger 
> ---
>  drivers/net/ipn3ke/ipn3ke_representor.c | 17 +++--


> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c
> b/drivers/net/ipn3ke/ipn3ke_representor.c
> index e50fc73f43c4..feafe9679907 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -124,8 +124,7 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev)
>   rawdev = hw->rawdev;
> 
>   memset(attr_name, 0, sizeof(attr_name));
> - snprintf(attr_name, IPN3KE_RAWDEV_ATTR_LEN_MAX, "%s",
> - "LineSideBaseMAC");
> + strlcpy(attr_name, "LineSideBaseMAC",
> IPN3KE_RAWDEV_ATTR_LEN_MAX);
>   rawdev->dev_ops->attr_get(rawdev, attr_name, &base_mac);
>   rte_ether_addr_copy((struct rte_ether_addr *)&base_mac,
>   &rpst->mac_addr);
> @@ -2330,19 +2329,17 @@ __rte_unused unsigned int limit)
> 
>   /* Get stats from ipn3ke_rpst_stats */
>   for (i = 0; i < IPN3KE_RPST_ETH_XSTATS_CNT; i++) {
> - snprintf(xstats_names[count].name,
> -  sizeof(xstats_names[count].name),
> -  "%s",
> -  ipn3ke_rpst_stats_strings[i].name);
> + strlcpy(xstats_names[count].name,
> + ipn3ke_rpst_stats_strings[i].name,
> + sizeof(xstats_names[count].name));
>   count++;
>   }
> 
>   /* Get individual stats from ipn3ke_rpst_hw_port */
>   for (i = 0; i < IPN3KE_RPST_HW_PORT_XSTATS_CNT; i++) {
> - snprintf(xstats_names[count].name,
> -  sizeof(xstats_names[count].name),
> -  "%s",
> -  ipn3ke_rpst_hw_port_strings[i].name);
> + strlcpy(xstats_names[count].name,
> + ipn3ke_rpst_hw_port_strings[i].name,
> + sizeof(xstats_names[count].name));
>   count++;
>   }
> 
> --
> 2.39.2

Reviewed-by: Rosen Xu 


RE: [PATCH v2 2/3] drivers: use common min/max macros

2024-02-18 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Friday, February 16, 2024 6:25 PM
> To: dev@dpdk.org
> Cc: Ajit Khaparde ; Somnath Kotur
> ; Devendra Singh Rawat
> ; Alok Prasad ; Xu, Rosen
> 
> Subject: [PATCH v2 2/3] drivers: use common min/max macros
> 
> Use newly introduced macro.
> 
> Signed-off-by: David Marchand 
> ---
>  drivers/net/bnxt/bnxt_ethdev.c   | 12 +---
>  drivers/net/qede/base/bcm_osal.h |  6 ++
>  drivers/raw/ifpga/base/osdep_rte/osdep_generic.h | 11 ++-
>  3 files changed, 5 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c index 45d840d7af..8cc012206a 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -4867,17 +4867,7 @@ static void bnxt_free_ctx_mem(struct bnxt *bp)
> 
>  #define bnxt_roundup(x, y)   x) + ((y) - 1)) / (y)) * (y))
> 
> -#define min_t(type, x, y) ({\
> - type __min1 = (x);  \
> - type __min2 = (y);  \
> - __min1 < __min2 ? __min1 : __min2; })
> -
> -#define max_t(type, x, y) ({\
> - type __max1 = (x);  \
> - type __max2 = (y);  \
> - __max1 > __max2 ? __max1 : __max2; })
> -
> -#define clamp_t(type, _x, min, max) min_t(type, max_t(type, _x, min),
> max)
> +#define clamp_t(type, _x, min, max) RTE_MIN_T(RTE_MAX_T(_x, min,
> type),
> +max, type)
> 
>  int bnxt_alloc_ctx_mem(struct bnxt *bp)  { diff --git
> a/drivers/net/qede/base/bcm_osal.h b/drivers/net/qede/base/bcm_osal.h
> index 11019b5623..7869103c63 100644
> --- a/drivers/net/qede/base/bcm_osal.h
> +++ b/drivers/net/qede/base/bcm_osal.h
> @@ -443,10 +443,8 @@ u32 qede_osal_log2(u32);  #define OSAL_IOMEM
> volatile
>  #define OSAL_UNUSED__rte_unused
>  #define OSAL_UNLIKELY(x)  __builtin_expect(!!(x), 0)
> -#define OSAL_MIN_T(type, __min1, __min2) \
> - ((type)(__min1) < (type)(__min2) ? (type)(__min1) : (type)(__min2))
> -#define OSAL_MAX_T(type, __max1, __max2) \
> - ((type)(__max1) > (type)(__max2) ? (type)(__max1) :
> (type)(__max2))
> +#define OSAL_MIN_T(type, __min1, __min2) RTE_MIN_T(__min1, __min2,
> +type) #define OSAL_MAX_T(type, __max1, __max2) RTE_MAX_T(__max1,
> +__max2, type)
> 
>  void qede_get_mcp_proto_stats(struct ecore_dev *, enum
> ecore_mcp_protocol_type,
> union ecore_mcp_protocol_stats *); diff --git
> a/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> b/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> index 62c5666ca9..427793a578 100644
> --- a/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> +++ b/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> @@ -44,15 +44,8 @@ extern int ifpga_rawdev_logtype;  #define min(a, b)
> RTE_MIN(a, b)  #define max(a, b) RTE_MAX(a, b)
> 
> -#define min_t(type, x, y) ({\
> - type __min1 = (x);  \
> - type __min2 = (y);  \
> - __min1 < __min2 ? __min1 : __min2; })
> -
> -#define max_t(type, x, y) ({\
> - type __max1 = (x);  \
> - type __max2 = (y);  \
> - __max1 > __max2 ? __max1 : __max2; })
> +#define min_t(type, x, y) RTE_MIN_T(x, y, type) #define max_t(type, x,
> +y) RTE_MAX_T(x, y, type)
> 
>  #define spinlock_t rte_spinlock_t
>  #define spinlock_init(x) rte_spinlock_init(x)
> --
> 2.43.0

Reviewed-by: Rosen Xu 


RE: [PATCH v3 30/37] raw/ifpga: replace PMD logtype with dynamic type

2023-12-13 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Stephen Hemminger 
> Sent: Thursday, December 14, 2023 12:36 AM
> To: dev@dpdk.org
> Cc: Stephen Hemminger ; Xu, Rosen
> ; Tianfei Zhang 
> Subject: [PATCH v3 30/37] raw/ifpga: replace PMD logtype with dynamic type
> 
> Driver should not be using PMD logtype, they should have their own logtype.
> 
> Signed-off-by: Stephen Hemminger 
> ---
>  drivers/raw/ifpga/base/osdep_rte/osdep_generic.h | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> b/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> index 33041c907e19..ad885107ab7d 100644
> --- a/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> +++ b/drivers/raw/ifpga/base/osdep_rte/osdep_generic.h
> @@ -16,8 +16,10 @@
>  #include 
>  #include 
> 
> +extern int ifpga_rawdev_logtype;
> +
>  #define dev_printf(level, fmt, args...) \
> - RTE_LOG(level, PMD, "osdep_rte: " fmt, ## args)
> + rte_log(RTE_LOG_ ## level, ifpga_rawdev_logtype, "osdep_rte: "
> fmt, ##
> +args)
> 
>  #define osdep_panic(...) rte_panic(...)
> 
> --
> 2.43.0

Reviewed-by: Rosen Xu 


RE: [PATCH] bus/ifpga: remove dead code

2023-12-18 Thread Xu, Rosen
Hi

> -Original Message-
> From: David Marchand 
> Sent: Monday, December 18, 2023 11:45 PM
> To: dev@dpdk.org
> Cc: Xu, Rosen ; Tianfei Zhang
> ; Zhang, Qi Z 
> Subject: [PATCH] bus/ifpga: remove dead code
> 
> This macro was never used.
> 
> Fixes: 05fa3d4a6539 ("bus/ifpga: add Intel FPGA bus library")
> 
> Signed-off-by: David Marchand 
> ---
>  drivers/bus/ifpga/ifpga_logs.h | 4 
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/bus/ifpga/ifpga_logs.h b/drivers/bus/ifpga/ifpga_logs.h
> index 873e0a4f2f..248bccba5d 100644
> --- a/drivers/bus/ifpga/ifpga_logs.h
> +++ b/drivers/bus/ifpga/ifpga_logs.h
> @@ -9,10 +9,6 @@
> 
>  extern int ifpga_bus_logtype;
> 
> -#define IFPGA_LOG(level, fmt, args...) \
> - rte_log(RTE_LOG_ ## level, ifpga_bus_logtype, "%s(): " fmt "\n", \
> - __func__, ##args)
> -
>  #define IFPGA_BUS_LOG(level, fmt, args...) \
>   rte_log(RTE_LOG_ ## level, ifpga_bus_logtype, "%s(): " fmt "\n", \
>   __func__, ##args)
> --
> 2.43.0

Acked-by: Rosen Xu 


RE: [PATCH v5 22/45] raw/ifpga: use rte stdatomic API

2024-05-07 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Tyler Retzlaff 
> Sent: Tuesday, May 7, 2024 1:58 AM
> To: dev@dpdk.org
> Cc: Mattias Rönnblom ; Morten Brørup
> ; Sevincer, Abdullah
> ; Ajit Khaparde
> ; Alok Prasad ;
> Burakov, Anatoly ; Andrew Rybchenko
> ; Anoob Joseph ;
> Richardson, Bruce ; Marohn, Byron
> ; Chenbo Xia ;
> Chengwen Feng ; Loftus, Ciara
> ; Power, Ciara ; Dariusz
> Sosnowski ; Hunt, David ;
> Devendra Singh Rawat ; Carrillo, Erik G
> ; Guoyang Zhou ;
> Harman Kalra ; Van Haaren, Harry
> ; Nagarahalli, Honnappa
> ; Jakub Grajciar ;
> Jerin Jacob ; Jeroen de Borst ;
> Jian Wang ; Jiawen Wu
> ; Jie Hai ; Wu, Jingjing
> ; Joshua Washington ;
> Joyce Kong ; Guo, Junfeng
> ; Laatz, Kevin ; Konstantin
> Ananyev ; Liang Ma
> ; Long Li ; Maciej Czekaj
> ; Matan Azrad ; Maxime
> Coquelin ; Chautru, Nicolas
> ; Ori Kam ; Pavan Nikhilesh
> ; Mccarthy, Peter
> ; Rahul Lakkireddy
> ; Pattan, Reshma
> ; Xu, Rosen ; Ruifeng
> Wang ; Rushil Gupta ;
> Gobriel, Sameh ; Sivaprasad Tummala
> ; Somnath Kotur
> ; Stephen Hemminger
> ; Suanming Mou
> ; Sunil Kumar Kori ; Sunil
> Uttarwar ; Tetsuya Mukawa
> ; Vamsi Attunuru ;
> Viacheslav Ovsiienko ; Medvedkin, Vladimir
> ; Xiaoyun Wang
> ; Wang, Yipeng1
> ; Yisen Zhuang ;
> Ziyang Xuan ; Tyler Retzlaff
> 
> Subject: [PATCH v5 22/45] raw/ifpga: use rte stdatomic API
> 
> Replace the use of gcc builtin __atomic_xxx intrinsics with corresponding
> rte_atomic_xxx optional rte stdatomic API.
> 
> Signed-off-by: Tyler Retzlaff 
> Acked-by: Stephen Hemminger 
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 9 +
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index f89bd3f..78d3c88 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -73,7 +73,7 @@
> 
>  static struct ifpga_rawdev ifpga_rawdevices[IFPGA_RAWDEV_NUM];
> 
> -static int ifpga_monitor_refcnt;
> +static RTE_ATOMIC(int) ifpga_monitor_refcnt;
>  static rte_thread_t ifpga_monitor_start_thread;
> 
>  static struct ifpga_rawdev *
> @@ -512,7 +512,7 @@ static int set_surprise_link_check_aer(
>   int gsd_enable, ret;
>  #define MS 1000
> 
> - while (__atomic_load_n(&ifpga_monitor_refcnt,
> __ATOMIC_RELAXED)) {
> + while (rte_atomic_load_explicit(&ifpga_monitor_refcnt,
> +rte_memory_order_relaxed)) {
>   gsd_enable = 0;
>   for (i = 0; i < IFPGA_RAWDEV_NUM; i++) {
>   ifpga_rdev = &ifpga_rawdevices[i];
> @@ -549,7 +549,7 @@ static int set_surprise_link_check_aer(
> 
>   dev->poll_enabled = 1;
> 
> - if (!__atomic_fetch_add(&ifpga_monitor_refcnt, 1,
> __ATOMIC_RELAXED)) {
> + if (!rte_atomic_fetch_add_explicit(&ifpga_monitor_refcnt, 1,
> +rte_memory_order_relaxed)) {
>   ret =
> rte_thread_create_internal_control(&ifpga_monitor_start_thread,
>   "ifpga-mon", ifpga_rawdev_gsd_handle,
> NULL);
>   if (ret != 0) {
> @@ -573,7 +573,8 @@ static int set_surprise_link_check_aer(
> 
>   dev->poll_enabled = 0;
> 
> - if (!(__atomic_fetch_sub(&ifpga_monitor_refcnt, 1,
> __ATOMIC_RELAXED) - 1) &&
> + if (!(rte_atomic_fetch_sub_explicit(&ifpga_monitor_refcnt, 1,
> + rte_memory_order_relaxed) - 1) &&
>   ifpga_monitor_start_thread.opaque_id != 0) {
>   ret =
> pthread_cancel((pthread_t)ifpga_monitor_start_thread.opaque_id);
>   if (ret)
> --
> 1.8.3.1

Reviewed-by: Rosen Xu 


RE: [PATCH 10/11] doc: add Traffic Manager feature for ipn3ke

2023-11-27 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huisong Li 
> Sent: Tuesday, November 28, 2023 2:10 PM
> To: dev@dpdk.org; ferruh.yi...@amd.com; tho...@monjalon.net; Xu,
> Rosen 
> Cc: liuyongl...@huawei.com; lihuis...@huawei.com
> Subject: [PATCH 10/11] doc: add Traffic Manager feature for ipn3ke
> 
> Add Traffic Manager feature for ipn3ke.
> 
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Huisong Li 
> ---
>  doc/guides/nics/features/ipn3ke.ini | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/doc/guides/nics/features/ipn3ke.ini
> b/doc/guides/nics/features/ipn3ke.ini
> index 1f6b780273..e412978820 100644
> --- a/doc/guides/nics/features/ipn3ke.ini
> +++ b/doc/guides/nics/features/ipn3ke.ini
> @@ -25,6 +25,7 @@ SR-IOV   = Y
>  DCB  = Y
>  VLAN filter  = Y
>  Flow control = Y
> +Traffic manager  = Y
>  CRC offload  = Y
>  VLAN offload = Y
>  QinQ offload = Y
> --
> 2.33.0

Acked-by: Rosen Xu 


RE: [PATCH v1] maintainers: remove tianfei from ifpga

2023-11-28 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Wednesday, November 29, 2023 9:45 AM
> To: dev@dpdk.org; tho...@monjalon.net
> Cc: sta...@dpdk.org; Xu, Rosen ; Mcnamara, John
> ; Huang, Wei 
> Subject: [PATCH v1] maintainers: remove tianfei from ifpga
> 
> Signed-off-by: Wei Huang 
> ---
>  MAINTAINERS | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 0d1c812..6eedea1 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1440,7 +1440,6 @@ Rawdev Drivers
> 
>  Intel FPGA
>  M: Rosen Xu 
> -M: Tianfei zhang 
>  T: git://dpdk.org/next/dpdk-next-net-intel
>  F: drivers/raw/ifpga/
>  F: doc/guides/rawdevs/ifpga.rst
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH v2 22/71] raw/ifpga: replace use of fixed size rte_memcpy

2024-03-05 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Stephen Hemminger 
> Sent: Saturday, March 2, 2024 1:15 AM
> To: dev@dpdk.org
> Cc: Stephen Hemminger ; Xu, Rosen
> 
> Subject: [PATCH v2 22/71] raw/ifpga: replace use of fixed size rte_memcpy
> 
> Automatically generated by devtools/cocci/rte_memcpy.cocci
> 
> Signed-off-by: Stephen Hemminger 
> ---
>  drivers/raw/ifpga/afu_pmd_he_hssi.c |  3 +--
> drivers/raw/ifpga/afu_pmd_he_lpbk.c |  3 +--
> drivers/raw/ifpga/afu_pmd_he_mem.c  |  3 +--
>  drivers/raw/ifpga/afu_pmd_n3000.c   |  8 
>  drivers/raw/ifpga/ifpga_rawdev.c| 11 +--
>  5 files changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/afu_pmd_he_hssi.c
> b/drivers/raw/ifpga/afu_pmd_he_hssi.c
> index 859f28dcc1f0..c2aaed9203ae 100644
> --- a/drivers/raw/ifpga/afu_pmd_he_hssi.c
> +++ b/drivers/raw/ifpga/afu_pmd_he_hssi.c
> @@ -15,7 +15,6 @@
> 
>  #include 
>  #include 
> -#include 
>  #include 
>  #include 
>  #include 
> @@ -314,7 +313,7 @@ static int he_hssi_config(struct afu_rawdev *dev,
> void *config,
>   if (cfg->port >= NUM_HE_HSSI_PORTS)
>   return -EINVAL;
> 
> - rte_memcpy(&priv->he_hssi_cfg, cfg, sizeof(priv->he_hssi_cfg));
> + memcpy(&priv->he_hssi_cfg, cfg, sizeof(priv->he_hssi_cfg));
> 
>   return 0;
>  }
> diff --git a/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> b/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> index c7c5cda48c35..ffb7075c84d2 100644
> --- a/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> +++ b/drivers/raw/ifpga/afu_pmd_he_lpbk.c
> @@ -15,7 +15,6 @@
> 
>  #include 
>  #include 
> -#include 
>  #include 
>  #include 
>  #include 
> @@ -363,7 +362,7 @@ static int he_lpbk_config(struct afu_rawdev *dev,
> void *config,
>   if ((cfg->end < cfg->begin) || (cfg->end > MAX_CACHE_LINES))
>   return -EINVAL;
> 
> - rte_memcpy(&priv->he_lpbk_cfg, cfg, sizeof(priv->he_lpbk_cfg));
> + memcpy(&priv->he_lpbk_cfg, cfg, sizeof(priv->he_lpbk_cfg));
> 
>   return 0;
>  }
> diff --git a/drivers/raw/ifpga/afu_pmd_he_mem.c
> b/drivers/raw/ifpga/afu_pmd_he_mem.c
> index a1db533eeb93..b799e40d2db9 100644
> --- a/drivers/raw/ifpga/afu_pmd_he_mem.c
> +++ b/drivers/raw/ifpga/afu_pmd_he_mem.c
> @@ -14,7 +14,6 @@
> 
>  #include 
>  #include 
> -#include 
>  #include 
>  #include 
>  #include 
> @@ -126,7 +125,7 @@ static int he_mem_tg_config(struct afu_rawdev *dev,
> void *config,
>   if (config_size != sizeof(struct rte_pmd_afu_he_mem_tg_cfg))
>   return -EINVAL;
> 
> - rte_memcpy(&priv->he_mem_tg_cfg, config, sizeof(priv-
> >he_mem_tg_cfg));
> + memcpy(&priv->he_mem_tg_cfg, config, sizeof(priv-
> >he_mem_tg_cfg));
> 
>   return 0;
>  }
> diff --git a/drivers/raw/ifpga/afu_pmd_n3000.c
> b/drivers/raw/ifpga/afu_pmd_n3000.c
> index 67b394126595..9236c0b15371 100644
> --- a/drivers/raw/ifpga/afu_pmd_n3000.c
> +++ b/drivers/raw/ifpga/afu_pmd_n3000.c
> @@ -1867,8 +1867,8 @@ static int n3000_afu_config(struct afu_rawdev *dev,
> void *config,
>   if ((cfg->nlb_cfg.end < cfg->nlb_cfg.begin) ||
>   (cfg->nlb_cfg.end > MAX_CACHE_LINES))
>   return -EINVAL;
> - rte_memcpy(&priv->nlb_cfg, &cfg->nlb_cfg,
> - sizeof(struct rte_pmd_afu_nlb_cfg));
> + memcpy(&priv->nlb_cfg, &cfg->nlb_cfg,
> +sizeof(struct rte_pmd_afu_nlb_cfg));
>   } else if (cfg->type == RTE_PMD_AFU_N3000_DMA) {
>   if (cfg->dma_cfg.index >= NUM_N3000_DMA)
>   return -EINVAL;
> @@ -1887,8 +1887,8 @@ static int n3000_afu_config(struct afu_rawdev *dev,
> void *config,
>   cfg->dma_cfg.length);
>   }
>   }
> - rte_memcpy(&priv->dma_cfg, &cfg->dma_cfg,
> - sizeof(struct rte_pmd_afu_dma_cfg));
> + memcpy(&priv->dma_cfg, &cfg->dma_cfg,
> +sizeof(struct rte_pmd_afu_dma_cfg));
>   } else {
>   IFPGA_RAWDEV_PMD_ERR("Invalid type of N3000 AFU");
>   return -EINVAL;
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index f89bd3f9e2c3..d5d47e14dd0e 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -14,7 +14,6 @@
>  #include 
>  #include 
>  #include 
> -#include 
>  #include 
>  #include 
>  #include 
&

RE: [Bug 1094] Add FPGA bus cleanup

2023-03-14 Thread Xu, Rosen
Hi David,

Sorry I miss that email, I will try to fix it ASAP.

Thanks,
Rosen

> -Original Message-
> From: David Marchand 
> Sent: Tuesday, March 14, 2023 4:20 PM
> To: Xu, Rosen 
> Cc: dev@dpdk.org
> Subject: Re: [Bug 1094] Add FPGA bus cleanup
> 
> Hi Rosen,
> 
> I don't think you are subscribed to bugzilla, so pinging here.
> 
> On Wed, Oct 5, 2022 at 12:49 PM  wrote:
> >
> > https://bugs.dpdk.org/show_bug.cgi?id=1094
> >
> > Bug ID: 1094
> >Summary: Add FPGA bus cleanup
> >Product: DPDK
> >Version: unspecified
> >   Hardware: All
> > OS: All
> > Status: UNCONFIRMED
> >   Severity: normal
> >   Priority: Normal
> >  Component: other
> >   Assignee: dev@dpdk.org
> >   Reporter: kevin.la...@intel.com
> >   Target Milestone: future
> >
> > Bus cleanup is now done as part of EAL cleanup [1].
> >
> > A new cleanup function should be implemented and registered to the bus
> > struct to ensure proper cleanup is done for devices on the FPGA bus on
> shutdown.
> >
> > [1]
> >
> https://github.com/DPDK/dpdk/commit/1cab1a40ea9b858821aaf4655486e31
> ca1
> > b52456
> 
> Can you register to bugzilla and have a look?
> Thanks.
> 
> 
> --
> David Marchand



RE: [PATCH v1] bus/ifpga: add fpga bus cleanup

2023-03-19 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, March 17, 2023 4:45 AM
> To: dev@dpdk.org; tho...@monjalon.net; david.march...@redhat.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] bus/ifpga: add fpga bus cleanup
> 
> In this patch, cleanup method is implemented for FPGA bus which will be
> called during eal_bus_cleanup().
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/bus/ifpga/ifpga_bus.c | 36
> 
>  1 file changed, 36 insertions(+)
> 
> diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
> index 07e316b..ffb0c61 100644
> --- a/drivers/bus/ifpga/ifpga_bus.c
> +++ b/drivers/bus/ifpga/ifpga_bus.c
> @@ -360,6 +360,41 @@ struct rte_afu_device *
>   return ret;
>  }
> 
> +/*
> + * Cleanup the content of the Intel FPGA bus, and call the remove()
> +function
> + * for all registered devices.
> + */
> +static int
> +ifpga_cleanup(void)
> +{
> + struct rte_afu_device *afu_dev, *tmp_dev;
> + int error = 0;
> +
> + RTE_TAILQ_FOREACH_SAFE(afu_dev, &ifpga_afu_dev_list, next,
> tmp_dev) {
> + struct rte_afu_driver *drv = afu_dev->driver;
> + int ret = 0;
> +
> + if (drv == NULL || drv->remove == NULL)
> + goto free;
> +
> + ret = drv->remove(afu_dev);
> + if (ret < 0) {
> + rte_errno = errno;
> + error = -1;
> + }
> + afu_dev->driver = NULL;
> + afu_dev->device.driver = NULL;
> +
> +free:
> + TAILQ_REMOVE(&ifpga_afu_dev_list, afu_dev, next);
> + rte_devargs_remove(afu_dev->device.devargs);
> + rte_intr_instance_free(afu_dev->intr_handle);
> + free(afu_dev);
> + }
> +
> + return error;
> +}
> +
>  static int
>  ifpga_plug(struct rte_device *dev)
>  {
> @@ -470,6 +505,7 @@ struct rte_afu_device *  static struct rte_bus
> rte_ifpga_bus = {
>   .scan= ifpga_scan,
>   .probe   = ifpga_probe,
> + .cleanup = ifpga_cleanup,
>   .find_device = ifpga_find_device,
>   .plug= ifpga_plug,
>   .unplug  = ifpga_unplug,
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH v1] raw/ifpga: remove virtual device unplug operation

2023-03-19 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, March 17, 2023 4:45 AM
> To: dev@dpdk.org; tho...@monjalon.net; david.march...@redhat.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] raw/ifpga: remove virtual device unplug operation
> 
> VDEV bus has implemented cleanup() function to perform cleanup for
> devices on the bus during eal_cleanup(), so there is no need for ifpga driver
> to record virtual devices and unplug them.
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 99 
> 
>  drivers/raw/ifpga/ifpga_rawdev.h |  2 -
>  2 files changed, 9 insertions(+), 92 deletions(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 1020adc..8e6e70f 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -140,8 +140,6 @@ struct ifpga_rawdev *
>   for (i = 0; i < IFPGA_MAX_IRQ; i++)
>   dev->intr_handle[i] = NULL;
>   dev->poll_enabled = 0;
> - for (i = 0; i < IFPGA_MAX_VDEV; i++)
> - dev->vdev_name[i] = NULL;
> 
>   return dev;
>  }
> @@ -749,17 +747,11 @@ static int set_surprise_link_check_aer(
>   struct ifpga_rawdev *ifpga_rdev = NULL;
>   struct opae_adapter *adapter;
>   struct opae_manager *mgr;
> - char *vdev_name = NULL;
> - int i, ret = 0;
> + int ret = 0;
> 
>   if (dev) {
>   ifpga_rdev = ifpga_rawdev_get(dev);
>   if (ifpga_rdev) {
> - for (i = 0; i < IFPGA_MAX_VDEV; i++) {
> - vdev_name = ifpga_rdev->vdev_name[i];
> - if (vdev_name)
> - rte_vdev_uninit(vdev_name);
> - }
>   ifpga_monitor_stop_func(ifpga_rdev);
>   ifpga_rdev->rawdev = NULL;
>   }
> @@ -1778,104 +1770,31 @@ static int ifpga_rawdev_get_string_arg(const
> char *key __rte_unused,  static int  ifpga_cfg_probe(struct rte_vdev_device
> *vdev)  {
> - struct rte_rawdev *rawdev = NULL;
> - struct ifpga_rawdev *ifpga_dev;
>   struct ifpga_vdev_args args;
>   char dev_name[RTE_RAWDEV_NAME_MAX_LEN];
> - const char *vdev_name = NULL;
> - int i, n, ret = 0;
> -
> - vdev_name = rte_vdev_device_name(vdev);
> - if (!vdev_name)
> - return -EINVAL;
> + int ret = 0;
> 
> - IFPGA_RAWDEV_PMD_INFO("probe ifpga virtual device %s",
> vdev_name);
> + IFPGA_RAWDEV_PMD_INFO("probe ifpga virtual device %s",
> + rte_vdev_device_name(vdev));
> 
>   ret = ifpga_vdev_parse_devargs(vdev->device.devargs, &args);
>   if (ret)
>   return ret;
> 
>   memset(dev_name, 0, sizeof(dev_name));
> - snprintf(dev_name, RTE_RAWDEV_NAME_MAX_LEN, "IFPGA:%s",
> args.bdf);
> - rawdev = rte_rawdev_pmd_get_named_dev(dev_name);
> - if (!rawdev)
> - return -ENODEV;
> - ifpga_dev = ifpga_rawdev_get(rawdev);
> - if (!ifpga_dev)
> - return -ENODEV;
> -
> - for (i = 0; i < IFPGA_MAX_VDEV; i++) {
> - if (ifpga_dev->vdev_name[i] == NULL) {
> - n = strlen(vdev_name) + 1;
> - ifpga_dev->vdev_name[i] = rte_malloc(NULL, n, 0);
> - if (ifpga_dev->vdev_name[i] == NULL)
> - return -ENOMEM;
> - strlcpy(ifpga_dev->vdev_name[i], vdev_name, n);
> - break;
> - }
> - }
> -
> - if (i >= IFPGA_MAX_VDEV) {
> - IFPGA_RAWDEV_PMD_ERR("Can't create more virtual
> device!");
> - return -ENOENT;
> - }
> -
>   snprintf(dev_name, RTE_RAWDEV_NAME_MAX_LEN, "%d|%s",
>   args.port, args.bdf);
> - ret = rte_eal_hotplug_add(RTE_STR(IFPGA_BUS_NAME),
> - dev_name, vdev->device.devargs->args);
> - if (ret) {
> - rte_free(ifpga_dev->vdev_name[i]);
> - ifpga_dev->vdev_name[i] = NULL;
> - }
> -
> - return ret;
> + return rte_eal_hotplug_add(RTE_STR(IFPGA_BUS_NAME),
> dev_name,
> + vdev->device.devargs->args);
>  }
> 
>  static int
>  ifpga_cfg_remove(struct rte_vdev_device *vdev)  {
> - struct rte_rawdev *rawdev = NULL;
> - struct ifpga_rawdev *ifpga_dev;
> - struct ifpga_vdev_args args;
> - char dev_name[RTE

RE: [PATCH v1] net/ipn3ke: fix representor name

2023-03-19 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, March 17, 2023 4:45 AM
> To: dev@dpdk.org; tho...@monjalon.net; david.march...@redhat.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] net/ipn3ke: fix representor name
> 
> The device name used in rte_eth_dev_allocated() function is afu device
> name instead of representor name, this patch correct it.
> 
> Fixes: c01c748e4ae6 ("net/ipn3ke: add new driver")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/net/ipn3ke/ipn3ke_ethdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ipn3ke/ipn3ke_ethdev.c
> b/drivers/net/ipn3ke/ipn3ke_ethdev.c
> index 70a06a3..2c15611 100644
> --- a/drivers/net/ipn3ke/ipn3ke_ethdev.c
> +++ b/drivers/net/ipn3ke/ipn3ke_ethdev.c
> @@ -558,7 +558,7 @@ static int ipn3ke_vswitch_remove(struct
> rte_afu_device *afu_dev)
>   snprintf(name, sizeof(name), "net_%s_representor_%d",
>   afu_dev->device.name, i);
> 
> - ethdev = rte_eth_dev_allocated(afu_dev->device.name);
> + ethdev = rte_eth_dev_allocated(name);
>   if (ethdev != NULL)
>   rte_eth_dev_destroy(ethdev, ipn3ke_rpst_uninit);
>   }
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH v1] net/ipn3ke: fix thread exit issue

2023-03-19 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, March 17, 2023 4:45 AM
> To: dev@dpdk.org; tho...@monjalon.net; david.march...@redhat.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] net/ipn3ke: fix thread exit issue
> 
> Thread does not exit after driver is removed. When there is no more
> representor exist, the variable 'num' will be 0 and thread can exit safely at
> this time.
> 
> Fixes: 70d6b7f550f4 ("net/ipn3ke: add representor")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/net/ipn3ke/ipn3ke_representor.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c
> b/drivers/net/ipn3ke/ipn3ke_representor.c
> index 2ef96a9..e50fc73 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -2579,7 +2579,7 @@ struct rte_eth_xstat_name *xstats_names,
>   }
>   rte_delay_us(50 * MS);
> 
> - if (num == 0xff)
> + if (num == 0 || num == 0xff)
>   return NULL;
>   }
> 
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [PATCH v1] bus/ifpga: fix issue of accessing null address

2023-03-19 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Friday, March 17, 2023 4:44 AM
> To: dev@dpdk.org; tho...@monjalon.net; david.march...@redhat.com
> Cc: sta...@dpdk.org; Xu, Rosen ; Zhang, Tianfei
> ; Zhang, Qi Z ; Huang, Wei
> 
> Subject: [PATCH v1] bus/ifpga: fix issue of accessing null address
> 
> In function ifpga_scan_one(), variable 'path' is NULL if device argument
> 'afu_bts' is not set, subsequent string copy with 'path' would lead to
> segmentation fault.
> 
> Fixes: 6fa4aa2b3645 ("bus/ifpga: fix forcing optional devargs")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
>  drivers/bus/ifpga/ifpga_bus.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
> index bb943b5..07e316b 100644
> --- a/drivers/bus/ifpga/ifpga_bus.c
> +++ b/drivers/bus/ifpga/ifpga_bus.c
> @@ -135,6 +135,8 @@ struct rte_afu_device *
>   goto end;
>   }
>   afu_pr_conf.pr_enable = 1;
> + strlcpy(afu_pr_conf.bs_path, path,
> + sizeof(afu_pr_conf.bs_path));
>   } else {
>   afu_pr_conf.pr_enable = 0;
>   }
> @@ -174,7 +176,6 @@ struct rte_afu_device *
>   rawdev->dev_ops->dev_start(rawdev))
>   goto end;
> 
> - strlcpy(afu_pr_conf.bs_path, path, sizeof(afu_pr_conf.bs_path));
>   if (rawdev->dev_ops &&
>   rawdev->dev_ops->firmware_load &&
>   rawdev->dev_ops->firmware_load(rawdev,
> --
> 1.8.3.1

Acked-by: Rosen Xu 


RE: [dpdk-dev] [PATCH v9 03/14] net/ipn3ke: add IPN3KE ethdev PMD driver

2023-03-21 Thread Xu, Rosen
Hi Ferruh,

No, thanks your reminder.

Thanks,
Rosen

> -Original Message-
> From: Ferruh Yigit 
> Sent: Wednesday, March 22, 2023 4:20 AM
> To: Xu, Rosen ; dev@dpdk.org
> Cc: Zhang, Tianfei ; Wei, Dan
> ; Pei, Andy ; Yang, Qiming
> ; Wang, Haiyue ;
> santos.c...@intel.com; zhang.zh...@intel.com; Lomartire, David
> ; Hu, Jia 
> Subject: Re: [dpdk-dev] [PATCH v9 03/14] net/ipn3ke: add IPN3KE ethdev
> PMD driver
> 
> On 4/16/2019 4:17 AM, Rosen Xu wrote:
> > +Limitations or Known issues
> > +---
> > +
> > +19.05 limitation
> > +
> > +
> > +Ipn3ke code released in 19.05 is for evaluation only.
> 
> Hi Rosen,
> 
> What is the status of the driver, is it still "evaluation only" ?


RE: [PATCH 15/33] doc: update ipn3ke guide

2023-03-21 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Ferruh Yigit 
> Sent: Wednesday, March 22, 2023 7:59 AM
> To: Mcnamara, John ; Xu, Rosen
> 
> Cc: Thomas Monjalon ; Andrew Rybchenko
> ; dev@dpdk.org
> Subject: [PATCH 15/33] doc: update ipn3ke guide
> 
> - Rename "Pre-Installation Configuration" section to "Configuration"
> - Rename "Runtime Config Options" section to "Runtime Configuration"
> 
> Signed-off-by: Ferruh Yigit 
> ---
>  doc/guides/nics/ipn3ke.rst | 9 -
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/doc/guides/nics/ipn3ke.rst b/doc/guides/nics/ipn3ke.rst index
> a89e3719f2e0..e7e5bb79915d 100644
> --- a/doc/guides/nics/ipn3ke.rst
> +++ b/doc/guides/nics/ipn3ke.rst
> @@ -28,12 +28,11 @@ Prerequisites
>section of the :ref:`Getting Started Guide for Linux `.
> 
> 
> -Pre-Installation Configuration
> ---
> -
> +Configuration
> +-
> 
> -Runtime Config Options
> -~~
> +Runtime Configuration
> +~
> 
>  - ``AFU name``
> 
> --
> 2.34.1

Reviewed-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v7 1/2] ethdev: make queue release callback optional

2021-10-08 Thread Xu, Rosen
Hi

> -Original Message-
> From: Xueming Li 
> Sent: Wednesday, October 06, 2021 19:18
> To: dev@dpdk.org
> Cc: xuemi...@nvidia.com; Yigit, Ferruh ; Andrew
> Rybchenko ; Singh, Aman Deep
> ; Thomas Monjalon ;
> John W. Linville ; Loftus, Ciara
> ; Zhang, Qi Z ; Hemant
> Agrawal ; Sachin Saxena
> ; Xu, Rosen ;
> Gagandeep Singh ; Richardson, Bruce
> ; Maxime Coquelin
> ; Xia, Chenbo 
> Subject: [PATCH v7 1/2] ethdev: make queue release callback optional
> 
> Some drivers don't need Rx and Tx queue release callback, make them
> optional. Clean up empty queue release callbacks for some drivers.
> 
> Signed-off-by: Xueming Li 
> Reviewed-by: Andrew Rybchenko 
> Acked-by: Ferruh Yigit 
> Acked-by: Thomas Monjalon 
> ---
>  app/test/virtual_pmd.c| 12 
>  drivers/net/af_packet/rte_eth_af_packet.c |  7 --
>  drivers/net/af_xdp/rte_eth_af_xdp.c   |  7 --
>  drivers/net/dpaa/dpaa_ethdev.c| 13 
>  drivers/net/dpaa2/dpaa2_ethdev.c  |  7 --
>  drivers/net/ipn3ke/ipn3ke_representor.c   | 12 
>  drivers/net/kni/rte_eth_kni.c |  7 --
>  drivers/net/pcap/pcap_ethdev.c|  7 --
>  drivers/net/pfe/pfe_ethdev.c  | 14 
>  drivers/net/ring/rte_eth_ring.c   |  4 --
>  drivers/net/virtio/virtio_ethdev.c|  8 ---
>  lib/ethdev/rte_ethdev.c   | 86 ++-
>  12 files changed, 36 insertions(+), 148 deletions(-)
> 
> diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index
> 7036f401ed9..7e15b47eb0f 100644
> --- a/app/test/virtual_pmd.c
> +++ b/app/test/virtual_pmd.c
> @@ -163,16 +163,6 @@ virtual_ethdev_tx_queue_setup_fail(struct
> rte_eth_dev *dev __rte_unused,
>   return -1;
>  }
> 
> -static void
> -virtual_ethdev_rx_queue_release(void *q __rte_unused) -{ -}
> -
> -static void
> -virtual_ethdev_tx_queue_release(void *q __rte_unused) -{ -}
> -
>  static int
>  virtual_ethdev_link_update_success(struct rte_eth_dev *bonded_eth_dev,
>   int wait_to_complete __rte_unused)
> @@ -243,8 +233,6 @@ static const struct eth_dev_ops
> virtual_ethdev_default_dev_ops = {
>   .dev_infos_get = virtual_ethdev_info_get,
>   .rx_queue_setup = virtual_ethdev_rx_queue_setup_success,
>   .tx_queue_setup = virtual_ethdev_tx_queue_setup_success,
> - .rx_queue_release = virtual_ethdev_rx_queue_release,
> - .tx_queue_release = virtual_ethdev_tx_queue_release,
>   .link_update = virtual_ethdev_link_update_success,
>   .mac_addr_set = virtual_ethdev_mac_address_set,
>   .stats_get = virtual_ethdev_stats_get, diff --git
> a/drivers/net/af_packet/rte_eth_af_packet.c
> b/drivers/net/af_packet/rte_eth_af_packet.c
> index fcd80903995..c73d2ec5c86 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -427,11 +427,6 @@ eth_dev_close(struct rte_eth_dev *dev)
>   return 0;
>  }
> 
> -static void
> -eth_queue_release(void *q __rte_unused) -{ -}
> -
>  static int
>  eth_link_update(struct rte_eth_dev *dev __rte_unused,
>  int wait_to_complete __rte_unused) @@ -594,8 +589,6 @@ static
> const struct eth_dev_ops ops = {
>   .promiscuous_disable = eth_dev_promiscuous_disable,
>   .rx_queue_setup = eth_rx_queue_setup,
>   .tx_queue_setup = eth_tx_queue_setup,
> - .rx_queue_release = eth_queue_release,
> - .tx_queue_release = eth_queue_release,
>   .link_update = eth_link_update,
>   .stats_get = eth_stats_get,
>   .stats_reset = eth_stats_reset,
> diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c
> b/drivers/net/af_xdp/rte_eth_af_xdp.c
> index 9bea0a895a3..a619dd218d0 100644
> --- a/drivers/net/af_xdp/rte_eth_af_xdp.c
> +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
> @@ -989,11 +989,6 @@ eth_dev_close(struct rte_eth_dev *dev)
>   return 0;
>  }
> 
> -static void
> -eth_queue_release(void *q __rte_unused) -{ -}
> -
>  static int
>  eth_link_update(struct rte_eth_dev *dev __rte_unused,
>   int wait_to_complete __rte_unused)
> @@ -1474,8 +1469,6 @@ static const struct eth_dev_ops ops = {
>   .promiscuous_disable = eth_dev_promiscuous_disable,
>   .rx_queue_setup = eth_rx_queue_setup,
>   .tx_queue_setup = eth_tx_queue_setup,
> - .rx_queue_release = eth_queue_release,
> - .tx_queue_release = eth_queue_release,
>   .link_update = eth_link_update,
>   .stats_get = eth_stats_get,
>   .stats_reset = eth_stats_reset,
> diff --git a/drivers/net/dpaa/dpaa_ethdev.c
> b/drivers/net/dpaa/dpaa_ethdev.c index 36d8f9249df..2c12956ff6b 100644
> --- a/drivers/net/dpaa

Re: [dpdk-dev] [PATCH v4 4/6] ethdev: remove jumbo offload flag

2021-10-08 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Wednesday, October 06, 2021 1:17
> To: Jerin Jacob ; Li, Xiaoyun ;
> Ajit Khaparde ; Somnath Kotur
> ; Igor Russkikh ;
> Somalapuram Amaranath ; Rasesh Mody
> ; Shahed Shaikh ; Chas
> Williams ; Min Hu (Connor) ;
> Nithin Dabilpuram ; Kiran Kumar K
> ; Sunil Kumar Kori ; Satha
> Rao ; Rahul Lakkireddy
> ; Hemant Agrawal
> ; Sachin Saxena ;
> Wang, Haiyue ; Marcin Wojtas
> ; Michal Krawczyk ; Shai Brandes
> ; Evgeny Schemeilin ; Igor
> Chauskin ; Gagandeep Singh ;
> Daley, John ; Hyong Youb Kim ;
> Gaetan Rivet ; Zhang, Qi Z ; Wang,
> Xiao W ; Ziyang Xuan ;
> Xiaoyun Wang ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ;
> Andrew Boyer ; Xu, Rosen ;
> Matan Azrad ; Viacheslav Ovsiienko
> ; Zyta Szpak ; Liron Himi
> ; Heinrich Kuhn ;
> Harman Kalra ; Nalla Pradeep ;
> Radha Mohan Chintakuntla ; Veerasenareddy Burru
> ; Devendra Singh Rawat
> ; Andrew Rybchenko
> ; Maciej Czekaj ;
> Jiawen Wu ; Jian Wang
> ; Maxime Coquelin
> ; Xia, Chenbo ;
> Yong Wang ; Ananyev, Konstantin
> ; Nicolau, Radu ;
> Akhil Goyal ; Hunt, David ;
> Mcnamara, John ; Thomas Monjalon
> 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH v4 4/6] ethdev: remove jumbo offload flag
> 
> Removing 'DEV_RX_OFFLOAD_JUMBO_FRAME' offload flag.
> 
> Instead of drivers announce this capability, application can deduct the
> capability by checking reported 'dev_info.max_mtu' or
> 'dev_info.max_rx_pktlen'.
> 
> And instead of application setting this flag explicitly to enable jumbo
> frames, this can be deduced by driver by comparing requested 'mtu' to
> 'RTE_ETHER_MTU'.
> 
> Removing this additional configuration for simplification.
> 
> Suggested-by: Konstantin Ananyev 
> Signed-off-by: Ferruh Yigit 
> Acked-by: Andrew Rybchenko 
> Reviewed-by: Rosen Xu 
> Acked-by: Somnath Kotur 
> ---
>  app/test-eventdev/test_pipeline_common.c  |  2 -
>  app/test-pmd/cmdline.c|  2 +-
>  app/test-pmd/config.c | 25 +-
>  app/test-pmd/testpmd.c| 48 +--
>  app/test-pmd/testpmd.h|  2 +-
>  doc/guides/howto/debug_troubleshoot.rst   |  2 -
>  doc/guides/nics/bnxt.rst  |  1 -
>  doc/guides/nics/features.rst  |  3 +-
>  drivers/net/atlantic/atl_ethdev.c |  1 -
>  drivers/net/axgbe/axgbe_ethdev.c  |  1 -
>  drivers/net/bnx2x/bnx2x_ethdev.c  |  1 -
>  drivers/net/bnxt/bnxt.h   |  1 -
>  drivers/net/bnxt/bnxt_ethdev.c| 10 +---
>  drivers/net/bonding/rte_eth_bond_pmd.c|  8 
>  drivers/net/cnxk/cnxk_ethdev.h|  5 +-
>  drivers/net/cnxk/cnxk_ethdev_ops.c|  1 -
>  drivers/net/cxgbe/cxgbe.h |  1 -
>  drivers/net/cxgbe/cxgbe_ethdev.c  |  8 
>  drivers/net/cxgbe/sge.c   |  5 +-
>  drivers/net/dpaa/dpaa_ethdev.c|  2 -
>  drivers/net/dpaa2/dpaa2_ethdev.c  |  2 -
>  drivers/net/e1000/e1000_ethdev.h  |  4 +-
>  drivers/net/e1000/em_ethdev.c |  4 +-
>  drivers/net/e1000/em_rxtx.c   | 19 +++-
>  drivers/net/e1000/igb_rxtx.c  |  3 +-
>  drivers/net/ena/ena_ethdev.c  |  1 -
>  drivers/net/enetc/enetc_ethdev.c  |  3 +-
>  drivers/net/enic/enic_res.c   |  1 -
>  drivers/net/failsafe/failsafe_ops.c   |  2 -
>  drivers/net/fm10k/fm10k_ethdev.c  |  1 -
>  drivers/net/hinic/hinic_pmd_ethdev.c  |  1 -
>  drivers/net/hns3/hns3_ethdev.c|  1 -
>  drivers/net/hns3/hns3_ethdev_vf.c |  1 -
>  drivers/net/i40e/i40e_ethdev.c|  1 -
>  drivers/net/i40e/i40e_rxtx.c  |  2 +-
>  drivers/net/iavf/iavf_ethdev.c|  3 +-
>  drivers/net/ice/ice_dcf_ethdev.c  |  3 +-
>  drivers/net/ice/ice_dcf_vf_representor.c  |  1 -
>  drivers/net/ice/ice_ethdev.c  |  1 -
>  drivers/net/ice/ice_rxtx.c|  3 +-
>  drivers/net/igc/igc_ethdev.h  |  1 -
>  drivers/net/igc/igc_txrx.c|  2 +-
>  drivers/net/ionic/ionic_ethdev.c  |  1 -
>  drivers/net/ipn3ke/ipn3ke_representor.c   |  3 +-
>  drivers/net/ixgbe/ixgbe_ethdev.c  |  5 +-
>  drivers/net/ixgbe/ixgbe_pf.c  |  9 +---
>  drivers/net/ixgbe/ixgbe_rxtx.c|  3 +-
>  drivers/net/mlx4/mlx4_r

Re: [dpdk-dev] [PATCH v4 2/6] ethdev: move jumbo frame offload check to library

2021-10-08 Thread Xu, Rosen
Reviewed-by: Rosen Xu 

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Wednesday, October 06, 2021 1:17
> To: Somalapuram Amaranath ; Ajit Khaparde
> ; Somnath Kotur
> ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; Rahul Lakkireddy
> ; Hemant Agrawal
> ; Sachin Saxena ;
> Wang, Haiyue ; Gagandeep Singh
> ; Ziyang Xuan ; Xiaoyun
> Wang ; Guoyang Zhou
> ; Min Hu (Connor) ;
> Yisen Zhuang ; Lijun Ou
> ; Xing, Beilei ; Wu, Jingjing
> ; Yang, Qiming ; Zhang, Qi
> Z ; Xu, Rosen ; Shijith Thotton
> ; Srisivasubramanian Srinivasan
> ; Heinrich Kuhn ;
> Harman Kalra ; Jerin Jacob ;
> Rasesh Mody ; Devendra Singh Rawat
> ; Andrew Rybchenko
> ; Maciej Czekaj ;
> Jiawen Wu ; Jian Wang
> ; Thomas Monjalon 
> Cc: Yigit, Ferruh ; dev@dpdk.org
> Subject: [PATCH v4 2/6] ethdev: move jumbo frame offload check to library
> 
> Setting MTU bigger than RTE_ETHER_MTU requires the jumbo frame support,
> and application should enable the jumbo frame offload support for it.
> 
> When jumbo frame offload is not enabled by application, but MTU bigger
> than RTE_ETHER_MTU is requested there are two options, either fail or
> enable jumbo frame offload implicitly.
> 
> Enabling jumbo frame offload implicitly is selected by many drivers since
> setting a big MTU value already implies it, and this increases usability.
> 
> This patch moves this logic from drivers to the library, both to reduce the
> duplicated code in the drivers and to make behaviour more visible.
> 
> Signed-off-by: Ferruh Yigit 
> Reviewed-by: Andrew Rybchenko 
> Reviewed-by: Rosen Xu 
> Acked-by: Ajit Khaparde 
> Acked-by: Somnath Kotur 
> ---
>  drivers/net/axgbe/axgbe_ethdev.c|  9 ++---
>  drivers/net/bnxt/bnxt_ethdev.c  |  9 ++---
>  drivers/net/cnxk/cnxk_ethdev_ops.c  |  5 -
>  drivers/net/cxgbe/cxgbe_ethdev.c|  8 
>  drivers/net/dpaa/dpaa_ethdev.c  |  7 ---
>  drivers/net/dpaa2/dpaa2_ethdev.c|  7 ---
>  drivers/net/e1000/em_ethdev.c   |  9 ++---
>  drivers/net/e1000/igb_ethdev.c  |  9 ++---
>  drivers/net/enetc/enetc_ethdev.c|  7 ---
>  drivers/net/hinic/hinic_pmd_ethdev.c|  7 ---
>  drivers/net/hns3/hns3_ethdev.c  |  8 
>  drivers/net/hns3/hns3_ethdev_vf.c   |  6 --
>  drivers/net/i40e/i40e_ethdev.c  |  5 -
>  drivers/net/iavf/iavf_ethdev.c  |  7 ---
>  drivers/net/ice/ice_ethdev.c|  5 -
>  drivers/net/igc/igc_ethdev.c|  9 ++---
>  drivers/net/ipn3ke/ipn3ke_representor.c |  5 -
>  drivers/net/ixgbe/ixgbe_ethdev.c|  7 ++-
>  drivers/net/liquidio/lio_ethdev.c   |  7 ---
>  drivers/net/nfp/nfp_common.c|  6 --
>  drivers/net/octeontx/octeontx_ethdev.c  |  5 -
> drivers/net/octeontx2/otx2_ethdev_ops.c |  5 -
>  drivers/net/qede/qede_ethdev.c  |  4 
>  drivers/net/sfc/sfc_ethdev.c|  9 -
>  drivers/net/thunderx/nicvf_ethdev.c |  6 --
>  drivers/net/txgbe/txgbe_ethdev.c|  6 --
>  lib/ethdev/rte_ethdev.c | 18 +-
>  27 files changed, 29 insertions(+), 166 deletions(-)
> 
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c
> b/drivers/net/axgbe/axgbe_ethdev.c
> index 76aeec077f2b..2960834b4539 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1492,15 +1492,10 @@ static int axgb_mtu_set(struct rte_eth_dev *dev,
> uint16_t mtu)
>   dev->data->port_id);
>   return -EBUSY;
>   }
> - if (mtu > RTE_ETHER_MTU) {
> - dev->data->dev_conf.rxmode.offloads |=
> - DEV_RX_OFFLOAD_JUMBO_FRAME;
> + if (mtu > RTE_ETHER_MTU)
>   val = 1;
> - } else {
> - dev->data->dev_conf.rxmode.offloads &=
> - ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> + else
>   val = 0;
> - }
>   AXGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
>   return 0;
>  }
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index 8c6f20b75aed..07ee19938930 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -3052,15 +3052,10 @@ int bnxt_mtu_set_op(struct rte_eth_dev
> *eth_dev, uint16_t new_mtu)
>   return -EINVAL;
>   }
> 
> - if (new_mtu > RTE_ETHER_MTU) {
> + if (new_mtu > RTE_ETHER_MTU)
>   bp->flags |= BNXT_FLAG_JUMBO;
> - bp->eth_dev->data->dev_conf.rxmode.offloads |=
> - 

Re: [dpdk-dev] [DPDK] net/ipn3ke: change function label from EXPERIMENTAL to INTERNAL

2021-08-20 Thread Xu, Rosen
Thanks a lot Ferruh.

> -Original Message-
> From: Yigit, Ferruh 
> Sent: Friday, August 20, 2021 21:13
> To: Xu, Rosen ; dev@dpdk.org
> Cc: m...@ashroe.eu; tho...@monjalon.net; Zhang, Tianfei
> ; Huang, Wei 
> Subject: Re: [DPDK] net/ipn3ke: change function label from EXPERIMENTAL
> to INTERNAL
> 
> On 8/19/2021 7:05 AM, Rosen Xu wrote:
> > 'ipn3ke_bridge_func' is a global variable and it used in net & raw drivers.
> > It's only used for drivers, so change it from EXPERIMENTAL to INTERNAL.
> >
> > Signed-off-by: Rosen Xu 
> 
> Acked-by: Ferruh Yigit 


Re: [dpdk-dev] [DPDK] net/ipn3ke: change function label from EXPERIMENTAL to INTERNAL

2021-08-21 Thread Xu, Rosen
Thanks a lot Ray.

> -Original Message-
> From: Kinsella, Ray 
> Sent: Friday, August 20, 2021 23:39
> To: Yigit, Ferruh ; Xu, Rosen ;
> dev@dpdk.org
> Cc: tho...@monjalon.net; Zhang, Tianfei ; Huang,
> Wei 
> Subject: Re: [DPDK] net/ipn3ke: change function label from EXPERIMENTAL
> to INTERNAL
> 
> 
> 
> On 20/08/2021 14:13, Ferruh Yigit wrote:
> > On 8/19/2021 7:05 AM, Rosen Xu wrote:
> >> 'ipn3ke_bridge_func' is a global variable and it used in net & raw drivers.
> >> It's only used for drivers, so change it from EXPERIMENTAL to INTERNAL.
> >>
> >> Signed-off-by: Rosen Xu 
> >
> > Acked-by: Ferruh Yigit 
> >
> 
> Acked-by: Ray Kinsella 


Re: [dpdk-dev] [PATCH v2] ethdev: add namespace

2021-08-29 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Wisam Monther 
> Sent: Sunday, August 29, 2021 16:18
> To: Ajit Khaparde ; Andrew Rybchenko
> 
> Cc: Yigit, Ferruh ; Tahhan, Maryam
> ; Pattan, Reshma ;
> Jerin Jacob ; Dumitrescu, Cristian
> ; Li, Xiaoyun ; NBU-
> Contact-Thomas Monjalon ; Jayatheerthan, Jay
> ; Chas Williams ; Min Hu
> (Connor) ; Pavan Nikhilesh
> ; Shijith Thotton ;
> Somnath Kotur ; Daley, John
> ; Hyong Youb Kim ; Zhang, Qi Z
> ; Wang, Xiao W ; Xing,
> Beilei ; Wang, Haiyue ;
> Matan Azrad ; Shahaf Shuler ;
> Slava Ovsiienko ; Wiles, Keith
> ; Hu, Jiayu ; Olivier Matz
> ; Ori Kam ; Akhil Goyal
> ; Doherty, Declan ; Ray
> Kinsella ; Nicolau, Radu ;
> Hemant Agrawal ; Sachin Saxena
> ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Sunil Kumar Kori ; Satha Rao
> ; John W. Linville ;
> Loftus, Ciara ; Shepard Siegel
> ; Ed Czeck ;
> John Miller ; Igor Russkikh
> ; Steven Webster
> ; Matt Peters
> ; Somalapuram Amaranath
> ; Rasesh Mody ; Shahed
> Shaikh ; Richardson, Bruce
> ; Ananyev, Konstantin
> ; Ruifeng Wang ;
> Rahul Lakkireddy ; Marcin Wojtas
> ; Michal Krawczyk ; Shai Brandes
> ; Evgeny Schemeilin ;
> Igor Chauskin ; Gagandeep Singh
> ; Gaetan Rivet ; Ziyang Xuan
> ; Xiaoyun Wang
> ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Wu, Jingjing ;
> Yang, Qiming ; Andrew Boyer
> ; Xu, Rosen ;
> Srisivasubramanian Srinivasan ; Jakub Grajciar
> ; Zyta Szpak ; Liron Himi
> ; Stephen Hemminger ;
> NBU-Contact-longli ; Martin Spinler
> ; Heinrich Kuhn ;
> Jiawen Wu ; Tetsuya Mukawa
> ; Harman Kalra ; Anoob
> Joseph ; Nalla Pradeep ;
> Radha Mohan Chintakuntla ; Veerasenareddy Burru
> ; Devendra Singh Rawat
> ; Singh, Jasvinder ;
> Maciej Czekaj ; Jian Wang
> ; Maxime Coquelin
> ; Xia, Chenbo ;
> Yong Wang ; Chautru, Nicolas
> ; Hunt, David ; Van
> Haaren, Harry ; Iremonger, Bernard
> ; Burakov, Anatoly
> ; Mcnamara, John
> ; Rybalchenko, Kirill
> ; Marohn, Byron ;
> Wang, Yipeng1 ; dpdk-dev ;
> Tyler Retzlaff 
> Subject: RE: [PATCH v2] ethdev: add namespace
> 
> Hi,
> 
> > -Original Message-
> > From: Ajit Khaparde 
> > Sent: Saturday, August 28, 2021 5:26 PM
> > To: Andrew Rybchenko 
> > Cc: Ferruh Yigit ; Maryam Tahhan
> > ; Reshma Pattan
> ;
> > Jerin Jacob ; Wisam Monther
> ;
> > Cristian Dumitrescu ; Xiaoyun Li
> > ; NBU-Contact-Thomas Monjalon
> > ; Jay Jayatheerthan
> > ; Chas Williams ; Min Hu
> > (Connor) ; Pavan Nikhilesh
> > ; Shijith Thotton ;
> > Somnath Kotur ; John Daley
> > ; Hyong Youb Kim ; Qi Zhang
> > ; Xiao Wang ; Beilei Xing
> > ; Haiyue Wang ; Matan
> > Azrad ; Shahaf Shuler ; Slava
> > Ovsiienko ; Keith Wiles
> > ; Jiayu Hu ; Olivier Matz
> > ; Ori Kam ; Akhil Goyal
> > ; Declan Doherty ; Ray
> > Kinsella ; Radu Nicolau ;
> > Hemant Agrawal ; Sachin Saxena
> > ; Nithin Dabilpuram
> > ; Kiran Kumar K ;
> > Sunil Kumar Kori ; Satha Rao
> > ; John W. Linville ;
> > Ciara Loftus ; Shepard Siegel
> > ; Ed Czeck
> ;
> > John Miller ; Igor Russkikh
> > ; Steven Webster
> > ; Matt Peters
> > ; Somalapuram Amaranath
> ;
> > Rasesh Mody ; Shahed Shaikh
> ;
> > Bruce Richardson ; Konstantin Ananyev
> > ; Ruifeng Wang
> ;
> > Rahul Lakkireddy ; Marcin Wojtas
> > ; Michal Krawczyk ; Shai Brandes
> > ; Evgeny Schemeilin ;
> Igor
> > Chauskin ; Gagandeep Singh ;
> > Gaetan Rivet ; Ziyang Xuan ;
> > Xiaoyun Wang ; Guoyang Zhou
> > ; Yisen Zhuang
> ;
> > Lijun Ou ; Jingjing Wu ;
> > Qiming Yang ; Andrew Boyer
> > ; Rosen Xu ;
> > Srisivasubramanian Srinivasan ; Jakub Grajciar
> > ; Zyta Szpak ; Liron Himi
> > ; Stephen Hemminger ;
> > NBU-Contact-longli ; Martin Spinler
> > ; Heinrich Kuhn ;
> > Jiawen Wu ; Tetsuya Mukawa
> > ; Harman Kalra ; Anoob
> Joseph
> > ; Nalla Pradeep ; Radha
> Mohan
> > Chintakuntla ; Veerasenareddy Burru
> > ; Devendra Singh Rawat
> ;
> > Jasvinder Singh ; Maciej Czekaj
> > ; Jian Wang ; Maxime
> > Coquelin ; Chenbo Xia
> > ; Yong Wang ; Nicolas
> > Chautru ; David Hunt
> > ; Harry van Haaren ;
> > Bernard Iremonger ; Anatoly Burakov
> > ; John McNamara
> ;
> > Kirill Rybalchenko ; Byron Marohn
> > ; Yipeng Wang ;
> > dpdk-dev ; Tyler Retzlaff 
> > Subject: Re: [PATCH v2] ethdev: add namespace
> >
> > On Fri, Aug 27, 2021 at 12:59 AM Andrew Rybchenko
> >  wrote:
> > >
> > > On 8/27/21 4:19 AM, Ferruh Yigit wrote:
> > > > Add 'RTE_ETH' namespace to all enums & macros in a backward
> > compatible
> > > > way. The macros for backward compatibility can be removed in next LTS.
> > > >
> > > > Internal components switched to new enum & macro names.
> > > >
> > > > Signed-off-by: Ferruh Yigit 
> > > > Acked-By: Tyler Retzlaff 
> > >
> > > Acked-by: Andrew Rybchenko 
> > Acked-by: Ajit Khaparde 
> 
> Acked-by: Wisam Jaddo 

Acked-by: Rosen Xu 

> >
> > >
> > > I think that it should be pushed as early as possible in the release
> > > cycle.
> > >
> > > The changeset definitely deserves entry in release notes.


Re: [dpdk-dev] [PATCH] RFC: ethdev: add reassembly offload

2021-09-07 Thread Xu, Rosen
Hi,

> -Original Message-
> From: dev  On Behalf Of Akhil Goyal
> Sent: Monday, August 23, 2021 18:03
> To: dev@dpdk.org
> Cc: ano...@marvell.com; Nicolau, Radu ; Doherty,
> Declan ; hemant.agra...@nxp.com;
> ma...@nvidia.com; Ananyev, Konstantin ;
> tho...@monjalon.net; adwiv...@marvell.com; Yigit, Ferruh
> ; andrew.rybche...@oktetlabs.ru; Akhil Goyal
> 
> Subject: [dpdk-dev] [PATCH] RFC: ethdev: add reassembly offload
> 
> Reassembly is a costly operation if it is done in software, however, if it is
> offloaded to HW, it can considerably save application cycles.
> The operation becomes even more costlier if IP fragmants are encrypted.
> 
> To resolve above two issues, a new offload DEV_RX_OFFLOAD_REASSEMBLY
> is introduced in ethdev for devices which can attempt reassembly of packets
> in hardware.
> rte_eth_dev_info is added with the reassembly capabilities which a device
> can support.
> Now, if IP fragments are encrypted, reassembly can also be attempted while
> doing inline IPsec processing.
> This is controlled by a flag in rte_security_ipsec_sa_options to enable
> reassembly of encrypted IP fragments in the inline path.
> 
> The resulting reassembled packet would be a typical segmented mbuf in case
> of success.
> 
> And if reassembly of fragments is failed or is incomplete (if fragments do not
> come before the reass_timeout), the mbuf is updated with an ol_flag
> PKT_RX_REASSEMBLY_INCOMPLETE and mbuf is returned as is. Now
> application may decide the fate of the packet to wait more for fragments to
> come or drop.
> 
> Signed-off-by: Akhil Goyal 
> ---
>  lib/ethdev/rte_ethdev.c |  1 +
>  lib/ethdev/rte_ethdev.h | 18 +-
>  lib/mbuf/rte_mbuf_core.h|  3 ++-
>  lib/security/rte_security.h | 10 ++
>  4 files changed, 30 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index
> 9d95cd11e1..1ab3a093cf 100644
> --- a/lib/ethdev/rte_ethdev.c
> +++ b/lib/ethdev/rte_ethdev.c
> @@ -119,6 +119,7 @@ static const struct {
>   RTE_RX_OFFLOAD_BIT2STR(VLAN_FILTER),
>   RTE_RX_OFFLOAD_BIT2STR(VLAN_EXTEND),
>   RTE_RX_OFFLOAD_BIT2STR(JUMBO_FRAME),
> + RTE_RX_OFFLOAD_BIT2STR(REASSEMBLY),
>   RTE_RX_OFFLOAD_BIT2STR(SCATTER),
>   RTE_RX_OFFLOAD_BIT2STR(TIMESTAMP),
>   RTE_RX_OFFLOAD_BIT2STR(SECURITY),
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index
> d2b27c351f..e89a4dc1eb 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -1360,6 +1360,7 @@ struct rte_eth_conf {
>  #define DEV_RX_OFFLOAD_VLAN_FILTER   0x0200
>  #define DEV_RX_OFFLOAD_VLAN_EXTEND   0x0400
>  #define DEV_RX_OFFLOAD_JUMBO_FRAME   0x0800
> +#define DEV_RX_OFFLOAD_REASSEMBLY0x1000
>  #define DEV_RX_OFFLOAD_SCATTER   0x2000
>  /**
>   * Timestamp is set by the driver in
> RTE_MBUF_DYNFIELD_TIMESTAMP_NAME @@ -1477,6 +1478,20 @@ struct
> rte_eth_dev_portconf {
>   */
>  #define RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID
>   (UINT16_MAX)
> 
> +/**
> + * Reassembly capabilities that a device can support.
> + * The device which can support reassembly offload should set
> + * DEV_RX_OFFLOAD_REASSEMBLY
> + */
> +struct rte_eth_reass_capa {
> + /** Maximum time in ns that a fragment can wait for further
> fragments */
> + uint64_t reass_timeout;
> + /** Maximum number of fragments that device can reassemble */
> + uint16_t max_frags;
> + /** Reserved for future capabilities */
> + uint16_t reserved[3];
> +};

IP reassembly occurs at the final recipient of the message, NIC attempts to do 
it has a fer challenges. The reason is that having NICs need to worry about 
reassembling fragments would increase their complexity, so most likely it only 
can handle range length of datagrams. Seems rte_eth_reass_capa miss the max 
original datagrams length which NIC can support, this features is better to be 
negotiated between NIC and SW as well.

>  /**
>   * Ethernet device associated switch information
>   */
> @@ -1582,8 +1597,9 @@ struct rte_eth_dev_info {
>* embedded managed interconnect/switch.
>*/
>   struct rte_eth_switch_info switch_info;
> + /* Reassembly capabilities of a device for reassembly offload */
> + struct rte_eth_reass_capa reass_capa;
> 
> - uint64_t reserved_64s[2]; /**< Reserved for future fields */
>   void *reserved_ptrs[2];   /**< Reserved for future fields */
>  };
> 
> diff --git a/lib/mbuf/rte_mbuf_core.h b/lib/mbuf/rte_mbuf_core.h index
> bb38d7f581..cea25c87f7 100644
> --- a/lib/mbuf/rte_mbuf_core.h
> +++ b/lib/mbuf/rte_mbuf_core.h
> @@ -200,10 +200,11 @@ extern "C" {
>  #define PKT_RX_OUTER_L4_CKSUM_BAD(1ULL << 21)
>  #define PKT_RX_OUTER_L4_CKSUM_GOOD   (1ULL << 22)
>  #define PKT_RX_OUTER_L4_CKSUM_INVALID((1ULL << 21) | (1ULL << 22))
> +#define PKT_RX_REASSEMBLY_INCOMPLETE (1ULL << 23)
> 
>  /* add new RX flags here, don't forget to update PKT_FIRST_FREE */
> 
> -#define 

Re: [dpdk-dev] [PATCH] RFC: ethdev: add reassembly offload

2021-09-07 Thread Xu, Rosen
Cc  myself

> -Original Message-
> From: dev  On Behalf Of Xu, Rosen
> Sent: Wednesday, September 08, 2021 14:34
> To: Akhil Goyal ; dev@dpdk.org
> Cc: ano...@marvell.com; Nicolau, Radu ; Doherty,
> Declan ; hemant.agra...@nxp.com;
> ma...@nvidia.com; Ananyev, Konstantin ;
> tho...@monjalon.net; adwiv...@marvell.com; Yigit, Ferruh
> ; andrew.rybche...@oktetlabs.ru
> Subject: Re: [dpdk-dev] [PATCH] RFC: ethdev: add reassembly offload
> 
> Hi,
> 
> > -Original Message-
> > From: dev  On Behalf Of Akhil Goyal
> > Sent: Monday, August 23, 2021 18:03
> > To: dev@dpdk.org
> > Cc: ano...@marvell.com; Nicolau, Radu ;
> > Doherty, Declan ; hemant.agra...@nxp.com;
> > ma...@nvidia.com; Ananyev, Konstantin
> ;
> > tho...@monjalon.net; adwiv...@marvell.com; Yigit, Ferruh
> > ; andrew.rybche...@oktetlabs.ru; Akhil Goyal
> > 
> > Subject: [dpdk-dev] [PATCH] RFC: ethdev: add reassembly offload
> >
> > Reassembly is a costly operation if it is done in software, however,
> > if it is offloaded to HW, it can considerably save application cycles.
> > The operation becomes even more costlier if IP fragmants are encrypted.
> >
> > To resolve above two issues, a new offload
> DEV_RX_OFFLOAD_REASSEMBLY
> > is introduced in ethdev for devices which can attempt reassembly of
> > packets in hardware.
> > rte_eth_dev_info is added with the reassembly capabilities which a
> > device can support.
> > Now, if IP fragments are encrypted, reassembly can also be attempted
> > while doing inline IPsec processing.
> > This is controlled by a flag in rte_security_ipsec_sa_options to
> > enable reassembly of encrypted IP fragments in the inline path.
> >
> > The resulting reassembled packet would be a typical segmented mbuf in
> > case of success.
> >
> > And if reassembly of fragments is failed or is incomplete (if
> > fragments do not come before the reass_timeout), the mbuf is updated
> > with an ol_flag PKT_RX_REASSEMBLY_INCOMPLETE and mbuf is returned
> as
> > is. Now application may decide the fate of the packet to wait more for
> > fragments to come or drop.
> >
> > Signed-off-by: Akhil Goyal 
> > ---
> >  lib/ethdev/rte_ethdev.c |  1 +
> >  lib/ethdev/rte_ethdev.h | 18 +-
> >  lib/mbuf/rte_mbuf_core.h|  3 ++-
> >  lib/security/rte_security.h | 10 ++
> >  4 files changed, 30 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index
> > 9d95cd11e1..1ab3a093cf 100644
> > --- a/lib/ethdev/rte_ethdev.c
> > +++ b/lib/ethdev/rte_ethdev.c
> > @@ -119,6 +119,7 @@ static const struct {
> > RTE_RX_OFFLOAD_BIT2STR(VLAN_FILTER),
> > RTE_RX_OFFLOAD_BIT2STR(VLAN_EXTEND),
> > RTE_RX_OFFLOAD_BIT2STR(JUMBO_FRAME),
> > +   RTE_RX_OFFLOAD_BIT2STR(REASSEMBLY),
> > RTE_RX_OFFLOAD_BIT2STR(SCATTER),
> > RTE_RX_OFFLOAD_BIT2STR(TIMESTAMP),
> > RTE_RX_OFFLOAD_BIT2STR(SECURITY),
> > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index
> > d2b27c351f..e89a4dc1eb 100644
> > --- a/lib/ethdev/rte_ethdev.h
> > +++ b/lib/ethdev/rte_ethdev.h
> > @@ -1360,6 +1360,7 @@ struct rte_eth_conf {
> >  #define DEV_RX_OFFLOAD_VLAN_FILTER 0x0200
> >  #define DEV_RX_OFFLOAD_VLAN_EXTEND 0x0400
> >  #define DEV_RX_OFFLOAD_JUMBO_FRAME 0x0800
> > +#define DEV_RX_OFFLOAD_REASSEMBLY  0x1000
> >  #define DEV_RX_OFFLOAD_SCATTER 0x2000
> >  /**
> >   * Timestamp is set by the driver in
> > RTE_MBUF_DYNFIELD_TIMESTAMP_NAME @@ -1477,6 +1478,20 @@
> struct
> > rte_eth_dev_portconf {
> >   */
> >  #define RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID
> > (UINT16_MAX)
> >
> > +/**
> > + * Reassembly capabilities that a device can support.
> > + * The device which can support reassembly offload should set
> > + * DEV_RX_OFFLOAD_REASSEMBLY
> > + */
> > +struct rte_eth_reass_capa {
> > +   /** Maximum time in ns that a fragment can wait for further
> > fragments */
> > +   uint64_t reass_timeout;
> > +   /** Maximum number of fragments that device can reassemble */
> > +   uint16_t max_frags;
> > +   /** Reserved for future capabilities */
> > +   uint16_t reserved[3];
> > +};
> 
> IP reassembly occurs at the final recipient of the message, NIC attempts to
> do it has a fer challenges. The reason is that having NICs need to worry about
> reassembling fragments would increase their complexity, so most likely it
> only can handle range length of datagra

Re: [dpdk-dev] [PATCH 3/3] drivers: align log names

2021-03-10 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Thomas Monjalon 
> Sent: Wednesday, March 10, 2021 22:01
> To: dev@dpdk.org
> Cc: Griffin, John ; Trahe, Fiona
> ; Jain, Deepak K ; Ajit
> Khaparde ; Raveendra Padasalagi
> ; Vikas Gupta
> ; Xu, Rosen ; Zhang,
> Tianfei ; Richardson, Bruce
> ; Nipun Gupta ;
> Hemant Agrawal ; Wang, Xiao W
> 
> Subject: [PATCH 3/3] drivers: align log names
> 
> The log levels are configured by using the name of the logs.
> Some drivers are aligned to follow a common log name standard:
>   pmd.class.driver[.sub]
> Some "common" drivers skip the "class" part:
>   pmd.driver.sub
> 
> Signed-off-by: Thomas Monjalon 
> ---
>  doc/guides/cryptodevs/qat.rst  | 10 +-
>  drivers/common/qat/qat_logs.c  |  4 ++--
>  drivers/crypto/bcmfs/bcmfs_logs.c  |  4 ++--
>  drivers/raw/ifpga/ifpga_rawdev.c   |  2 +-
>  drivers/raw/ioat/ioat_rawdev.c |  2 +-
>  drivers/raw/skeleton/skeleton_rawdev.c |  2 +-
>  drivers/vdpa/ifc/ifcvf_vdpa.c  |  2 +-
>  7 files changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
> index cf16f03503..224b22b3f7 100644
> --- a/doc/guides/cryptodevs/qat.rst
> +++ b/doc/guides/cryptodevs/qat.rst
> @@ -659,15 +659,15 @@ Debugging
> 
>  There are 2 sets of trace available via the dynamic logging feature:
> 
> -* pmd.qat_dp exposes trace on the data-path.
> -* pmd.qat_general exposes all other trace.
> +* pmd.qat.dp exposes trace on the data-path.
> +* pmd.qat.general exposes all other trace.
> 
>  pmd.qat exposes both sets of traces.
>  They can be enabled using the log-level option (where 8=maximum log level)
> on  the process cmdline, e.g. using any of the following::
> 
> ---log-level="pmd.qat_general,8"
> ---log-level="pmd.qat_dp,8"
> +--log-level="pmd.qat.general,8"
> +--log-level="pmd.qat.dp,8"
>  --log-level="pmd.qat,8"
> 
>  .. Note::
> @@ -678,4 +678,4 @@ the process cmdline, e.g. using any of the following::
>  Also the dynamic global log level overrides both sets of trace, so e.g. 
> no
>  QAT trace would display in this case::
> 
> - --log-level="7" --log-level="pmd.qat_general,8"
> + --log-level="7" --log-level="pmd.qat.general,8"
> diff --git a/drivers/common/qat/qat_logs.c
> b/drivers/common/qat/qat_logs.c index fa48be53c3..adbe163cd9 100644
> --- a/drivers/common/qat/qat_logs.c
> +++ b/drivers/common/qat/qat_logs.c
> @@ -17,5 +17,5 @@ qat_hexdump_log(uint32_t level, uint32_t logtype,
> const char *title,
>   return 0;
>  }
> 
> -RTE_LOG_REGISTER(qat_gen_logtype, pmd.qat_general, NOTICE); -
> RTE_LOG_REGISTER(qat_dp_logtype, pmd.qat_dp, NOTICE);
> +RTE_LOG_REGISTER(qat_gen_logtype, pmd.qat.general, NOTICE);
> +RTE_LOG_REGISTER(qat_dp_logtype, pmd.qat.dp, NOTICE);
> diff --git a/drivers/crypto/bcmfs/bcmfs_logs.c
> b/drivers/crypto/bcmfs/bcmfs_logs.c
> index 701da9ecf3..9faf12f238 100644
> --- a/drivers/crypto/bcmfs/bcmfs_logs.c
> +++ b/drivers/crypto/bcmfs/bcmfs_logs.c
> @@ -21,5 +21,5 @@ bcmfs_hexdump_log(uint32_t level, uint32_t logtype,
> const char *title,
>   return 0;
>  }
> 
> -RTE_LOG_REGISTER(bcmfs_conf_logtype, pmd.bcmfs_config, NOTICE) -
> RTE_LOG_REGISTER(bcmfs_dp_logtype, pmd.bcmfs_fp, NOTICE)
> +RTE_LOG_REGISTER(bcmfs_conf_logtype, pmd.crypto.bcmfs.config, NOTICE)
> +RTE_LOG_REGISTER(bcmfs_dp_logtype, pmd.crypto.bcmfs.fp, NOTICE)
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index 27129b133e..56b1866f77 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -1611,7 +1611,7 @@ static struct rte_pci_driver rte_ifpga_rawdev_pmd
> = {  RTE_PMD_REGISTER_PCI(ifpga_rawdev_pci_driver,
> rte_ifpga_rawdev_pmd);
> RTE_PMD_REGISTER_PCI_TABLE(ifpga_rawdev_pci_driver,
> rte_ifpga_rawdev_pmd);
> RTE_PMD_REGISTER_KMOD_DEP(ifpga_rawdev_pci_driver, "* igb_uio |
> uio_pci_generic | vfio-pci"); -RTE_LOG_REGISTER(ifpga_rawdev_logtype,
> driver.raw.init, NOTICE);
> +RTE_LOG_REGISTER(ifpga_rawdev_logtype, pmd.raw.ifpga, NOTICE);
> 
>  static const char * const valid_args[] = {
>  #define IFPGA_ARG_NAME "ifpga"
> diff --git a/drivers/raw/ioat/ioat_rawdev.c b/drivers/raw/ioat/ioat_rawdev.c
> index a95854d5ac..15af07017c 100644
> --- a/drivers/raw/ioat/ioat_rawdev.c
> +++ b/drivers/raw/ioat/ioat_rawdev.c
> @@ -28,7 +28,7 @@ static struct rte_pci_driver ioat_pmd_drv;
>  #define IOAT_DEVICE_ID_BDXF  0x6f2F
>  #define IOAT_DEVICE_ID_ICX   0x0b00
> 
> -RTE

Re: [dpdk-dev] [PATCH 2/2] drivers/net: remove explicit include of legacy filtering

2021-03-11 Thread Xu, Rosen
Hi,

-Original Message-
From: Thomas Monjalon  
Sent: Friday, March 12, 2021 6:18 AM
To: dev@dpdk.org
Cc: Hemant Agrawal ; Sachin Saxena 
; Wu, Jingjing ; Xing, Beilei 
; Yang, Qiming ; Zhang, Qi Z 
; Guo, Jia ; Wang, Haiyue 
; Xu, Rosen 
Subject: [PATCH 2/2] drivers/net: remove explicit include of legacy filtering

The header file rte_eth_ctrl.h should not be needed because this legacy 
filtering API is completely replaced with the rte_flow API.
However some definitions from this file are still used by some drivers, but 
such usage is already covered by an implicit include via rte_ethdev.h.

Signed-off-by: Thomas Monjalon 
---
 drivers/net/dpaa2/dpaa2_ptp.c   | 1 -
 drivers/net/iavf/iavf_hash.c| 1 -
 drivers/net/ice/ice_acl_filter.c| 1 -
 drivers/net/ice/ice_hash.c  | 1 -
 drivers/net/ice/ice_switch_filter.c | 1 -
 drivers/net/igc/igc_filter.h| 1 -
 drivers/net/ipn3ke/ipn3ke_flow.c| 1 -
 7 files changed, 7 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_ptp.c b/drivers/net/dpaa2/dpaa2_ptp.c 
index 899dd5d442..6290a559d0 100644
--- a/drivers/net/dpaa2/dpaa2_ptp.c
+++ b/drivers/net/dpaa2/dpaa2_ptp.c
@@ -12,7 +12,6 @@
 
 #include 
 #include 
-#include 
 #include 
 #include 
 
diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index 
d8d22f8009..82f017db3d 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -15,7 +15,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 
diff --git a/drivers/net/ice/ice_acl_filter.c b/drivers/net/ice/ice_acl_filter.c
index 113cb68765..6fd6e2d6af 100644
--- a/drivers/net/ice/ice_acl_filter.c
+++ b/drivers/net/ice/ice_acl_filter.c
@@ -14,7 +14,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index 
81caf6c635..6ac9f374fa 100644
--- a/drivers/net/ice/ice_hash.c
+++ b/drivers/net/ice/ice_hash.c
@@ -15,7 +15,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 
diff --git a/drivers/net/ice/ice_switch_filter.c 
b/drivers/net/ice/ice_switch_filter.c
index 6525e6c115..2742ce29c5 100644
--- a/drivers/net/ice/ice_switch_filter.c
+++ b/drivers/net/ice/ice_switch_filter.c
@@ -14,7 +14,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
diff --git a/drivers/net/igc/igc_filter.h b/drivers/net/igc/igc_filter.h index 
781d270def..fb51f7066c 100644
--- a/drivers/net/igc/igc_filter.h
+++ b/drivers/net/igc/igc_filter.h
@@ -9,7 +9,6 @@
 #include 
 #include 
 #include 
-#include 
 
 #include "igc_ethdev.h"
 
diff --git a/drivers/net/ipn3ke/ipn3ke_flow.c b/drivers/net/ipn3ke/ipn3ke_flow.c
index c702e19ea5..452fb447ef 100644
--- a/drivers/net/ipn3ke/ipn3ke_flow.c
+++ b/drivers/net/ipn3ke/ipn3ke_flow.c
@@ -16,7 +16,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
--
2.30.1

Acked-by: Rosen Xu 


Re: [dpdk-dev] [PATCH v2 1/2] ethdev: replace callback getting filter operations

2021-03-14 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Thomas Monjalon 
> Sent: Saturday, March 13, 2021 1:47
> To: dev@dpdk.org
> Cc: Ori Kam ; Ajit Khaparde
> ; Somnath Kotur
> ; Chas Williams ; Min Hu
> (Connor) ; Rahul Lakkireddy
> ; Hemant Agrawal
> ; Sachin Saxena ;
> Guo, Jia ; Wang, Haiyue ;
> Daley, John ; Hyong Youb Kim ;
> Gaetan Rivet ; Ziyang Xuan ;
> Xiaoyun Wang ; Guoyang Zhou
> ; Yisen Zhuang ;
> Lijun Ou ; Xing, Beilei ; Wu,
> Jingjing ; Yang, Qiming ;
> Zhang, Qi Z ; Xu, Rosen ;
> Matan Azrad ; Shahaf Shuler ;
> Viacheslav Ovsiienko ; Liron Himi
> ; Jerin Jacob ; Nithin Dabilpuram
> ; Kiran Kumar K ;
> Rasesh Mody ; Shahed Shaikh
> ; Andrew Rybchenko
> ; Singh, Jasvinder
> ; Dumitrescu, Cristian
> ; Wiles, Keith ;
> Jiawen Wu ; Jian Wang
> ; Yigit, Ferruh 
> Subject: [PATCH v2 1/2] ethdev: replace callback getting filter operations
> 
> Since rte_flow is the only API for filtering operations,
> the legacy driver interface filter_ctrl was too much complicated
> for the simple task of getting the struct rte_flow_ops.
> 
> The filter type RTE_ETH_FILTER_GENERIC and
> the filter operarion RTE_ETH_FILTER_GET are removed.
> The new driver callback flow_ops_get replaces filter_ctrl.
> 
> Signed-off-by: Thomas Monjalon 
> ---
>  drivers/net/ipn3ke/ipn3ke_representor.c | 28 ---

> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c
> b/drivers/net/ipn3ke/ipn3ke_representor.c
> index 856d21ef9b..589d9fa587 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -2821,11 +2821,9 @@ ipn3ke_rpst_mtu_set(struct rte_eth_dev *ethdev,
> uint16_t mtu)
>  }
> 
>  static int
> -ipn3ke_afu_filter_ctrl(struct rte_eth_dev *ethdev,
> - enum rte_filter_type filter_type, enum rte_filter_op filter_op,
> - void *arg)
> +ipn3ke_afu_flow_ops_get(struct rte_eth_dev *ethdev,
> + const struct rte_flow_ops **ops)
>  {
> - int ret = 0;
>   struct ipn3ke_hw *hw;
>   struct ipn3ke_rpst *rpst;
> 
> @@ -2836,27 +2834,13 @@ ipn3ke_afu_filter_ctrl(struct rte_eth_dev
> *ethdev,
>   rpst = IPN3KE_DEV_PRIVATE_TO_RPST(ethdev);
> 
>   if (hw->acc_flow)
> - switch (filter_type) {
> - case RTE_ETH_FILTER_GENERIC:
> - if (filter_op != RTE_ETH_FILTER_GET)
> - return -EINVAL;
> - *(const void **)arg = &ipn3ke_flow_ops;
> - break;
> - default:
> - IPN3KE_AFU_PMD_WARN("Filter type (%d) not
> supported",
> - filter_type);
> - ret = -EINVAL;
> - break;
> - }
> + *ops = &ipn3ke_flow_ops;
>   else if (rpst->i40e_pf_eth)
> - (*rpst->i40e_pf_eth->dev_ops->filter_ctrl)(ethdev,
> - filter_type,
> - filter_op,
> - arg);
> + (*rpst->i40e_pf_eth->dev_ops->flow_ops_get)(ethdev, ops);
>   else
>   return -EINVAL;
> 
> - return ret;
> + return 0;
>  }
> 
>  static const struct eth_dev_ops ipn3ke_rpst_dev_ops = {
> @@ -2874,7 +2858,7 @@ static const struct eth_dev_ops
> ipn3ke_rpst_dev_ops = {
>   .stats_reset  = ipn3ke_rpst_stats_reset,
>   .xstats_reset = ipn3ke_rpst_stats_reset,
> 
> - .filter_ctrl  = ipn3ke_afu_filter_ctrl,
> + .flow_ops_get = ipn3ke_afu_flow_ops_get,
> 
>   .rx_queue_start   = ipn3ke_rpst_rx_queue_start,
>   .rx_queue_stop= ipn3ke_rpst_rx_queue_stop,

Acked-by: Rosen Xu 


RE: [RFC v3 03/26] raw/ifpga: remove PCI bus accessor

2022-07-28 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Thursday, July 28, 2022 23:26
> To: dev@dpdk.org
> Cc: Ray Kinsella ; Xu, Rosen ; Zhang,
> Tianfei 
> Subject: [RFC v3 03/26] raw/ifpga: remove PCI bus accessor
> 
> There is no in-tree user for this accessor that returns the PCI bus object.
> On the other hand, a bus object can be retrieved by name using
> rte_bus_find_by_name.
> We can remove this driver specific API.
> 
> Signed-off-by: David Marchand 
> ---
> Changes since RFC v2:
> - updated release notes,
> 
> ---
>  doc/guides/rel_notes/deprecation.rst   |  3 ---
>  doc/guides/rel_notes/release_22_11.rst |  2 ++
>  drivers/raw/ifpga/ifpga_rawdev.c   |  7 +--
>  drivers/raw/ifpga/ifpga_rawdev.h   |  1 -
>  drivers/raw/ifpga/rte_pmd_ifpga.c  |  6 --
>  drivers/raw/ifpga/rte_pmd_ifpga.h  | 10 --
>  drivers/raw/ifpga/version.map  |  1 -
>  7 files changed, 3 insertions(+), 27 deletions(-)
> 


Acked-by: Rosen Xu 




RE: [RFC v3 14/26] bus/ifpga: cleanup exported symbols

2022-07-28 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Thursday, July 28, 2022 23:26
> To: dev@dpdk.org
> Cc: Xu, Rosen ; Ray Kinsella ; Zhang,
> Tianfei 
> Subject: [RFC v3 14/26] bus/ifpga: cleanup exported symbols
> 
> Remove unused symbols (exposed only in an internal header which
> guarantees that no application out there relied on them).
> 
> Remove rte_ prefix and inline the rest to avoid having to expose them as
> global symbols for a relatively small added value.
> 
> Signed-off-by: David Marchand 
> ---
>  drivers/bus/ifpga/ifpga_bus.c| 13 +++--
>  drivers/bus/ifpga/ifpga_common.c | 88 
> drivers/bus/ifpga/ifpga_common.h | 54 
>  drivers/bus/ifpga/meson.build|  2 +-
>  drivers/bus/ifpga/version.map|  2 -
>  drivers/raw/ifpga/ifpga_rawdev.c |  2 +-
>  6 files changed, 53 insertions(+), 108 deletions(-)  delete mode 100644
> drivers/bus/ifpga/ifpga_common.c
> 

Acked-by: Rosen Xu 


RE: [RFC v3 15/26] bus/ifpga: make driver-only headers private

2022-07-28 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Thursday, July 28, 2022 23:26
> To: dev@dpdk.org
> Cc: Xu, Rosen ; Ray Kinsella ; Zhang,
> Tianfei 
> Subject: [RFC v3 15/26] bus/ifpga: make driver-only headers private
> 
> The ifpga bus interface is for drivers only.
> Mark as internal and move the header in the driver headers list.
> 
> While at it, cleanup the code:
> - remove unneeded list head structure type,
> - reorder the definitions and macro manipulating the bus singleton object,
> - remove inclusion of rte_bus.h and fix the code that relied on implicit
>   inclusion,
> 
> Signed-off-by: David Marchand 
> ---
> Changes since RFC v2:
> - squashed cleanup for this bus code from other patches,
> - updated release notes,
> 
> ---
>  doc/guides/rel_notes/release_22_11.rst |  2 +-
>  .../{rte_bus_ifpga.h => bus_ifpga_driver.h}| 18 --
>  drivers/bus/ifpga/ifpga_bus.c  |  6 +++---
>  drivers/bus/ifpga/ifpga_common.h   |  2 +-
>  drivers/bus/ifpga/meson.build  |  2 +-
>  drivers/bus/ifpga/version.map  |  2 +-
>  drivers/net/ipn3ke/ipn3ke_ethdev.c |  2 +-
>  drivers/net/ipn3ke/ipn3ke_ethdev.h |  2 +-
>  drivers/net/ipn3ke/ipn3ke_flow.c   |  2 +-
>  drivers/net/ipn3ke/ipn3ke_representor.c|  2 +-
>  drivers/net/ipn3ke/ipn3ke_tm.c |  2 +-
>  drivers/raw/ifpga/afu_pmd_core.h   |  2 +-
>  drivers/raw/ifpga/afu_pmd_he_hssi.c|  2 +-
>  drivers/raw/ifpga/afu_pmd_he_lpbk.c|  2 +-
>  drivers/raw/ifpga/afu_pmd_he_mem.c |  2 +-
>  drivers/raw/ifpga/afu_pmd_n3000.c  |  2 +-
>  drivers/raw/ifpga/ifpga_rawdev.c   |  2 +-
>  17 files changed, 26 insertions(+), 28 deletions(-)  rename
> drivers/bus/ifpga/{rte_bus_ifpga.h => bus_ifpga_driver.h} (91%)
> 

Acked-by: Rosen Xu 


RE: [RFC v3 17/26] bus/vdev: make driver-only headers private

2022-07-28 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Thursday, July 28, 2022 23:27
> To: dev@dpdk.org
> Cc: Gagandeep Singh ; Hemant Agrawal
> ; Chautru, Nicolas ;
> Ray Kinsella ; Daly, Lee ; Zhang, Roy
> Fan ; Ashish Gupta ;
> Sunila Sahu ; Ruifeng Wang ;
> Ajit Khaparde ; Raveendra Padasalagi
> ; Vikas Gupta
> ; Chandubabu Namburu ;
> De Lara Guarch, Pablo ; Michael Shamis
> ; Liron Himi ; Chengwen
> Feng ; Laatz, Kevin ;
> Richardson, Bruce ; Sachin Saxena
> ; Jerin Jacob ; Liang Ma
> ; Mccarthy, Peter ; Van
> Haaren, Harry ; John W. Linville
> ; Loftus, Ciara ; Zhang, Qi Z
> ; Chas Williams ; Min Hu (Connor)
> ; Gaetan Rivet ; Xu, Rosen
> ; Jakub Grajciar ; Zyta Szpak
> ; Tetsuya Mukawa ; Harman
> Kalra ; Singh, Jasvinder ;
> Dumitrescu, Cristian ; Matan Azrad
> ; Maxime Coquelin ;
> Xia, Chenbo ; Jakub Palider ;
> Tomasz Duszynski ; Zhang, Tianfei
> ; Thomas Monjalon ;
> Ferruh Yigit ; Andrew Rybchenko
> 
> Subject: [RFC v3 17/26] bus/vdev: make driver-only headers private
> 
> The vdev bus interface is for drivers only.
> Mark as internal and move the header in the driver headers list.
> 
> While at it, cleanup the code:
> - fix indentation,
> - remove unneeded reference to bus specific singleton object,
> - remove unneeded list head structure type,
> - reorder the definitions and macro manipulating the bus singleton object,
> - remove inclusion of rte_bus.h and fix the code that relied on implicit
>   inclusion,
> 
> Signed-off-by: David Marchand 
> ---
> Changes since RFC v2:
> - squashed cleanup for this bus code from other patches,
> - updated release notes,
> 
> ---
>  app/test/test_vdev.c  |   2 +-
>  doc/guides/rel_notes/release_22_11.rst|   4 +-
>  drivers/baseband/la12xx/bbdev_la12xx.c|   2 +-
>  drivers/baseband/null/bbdev_null.c|   2 +-
>  .../baseband/turbo_sw/bbdev_turbo_software.c  |   2 +-
>  drivers/bus/vdev/bus_vdev_driver.h| 151 ++
>  drivers/bus/vdev/meson.build  |   1 +
>  drivers/bus/vdev/rte_bus_vdev.h   | 134 
>  drivers/bus/vdev/vdev.c   |   8 +-
>  drivers/bus/vdev/vdev_params.c|   1 -
>  drivers/bus/vdev/version.map  |   9 +-
>  drivers/compress/isal/isal_compress_pmd.c |   2 +-
>  drivers/compress/zlib/zlib_pmd.c  |   2 +-
>  drivers/crypto/armv8/rte_armv8_pmd.c  |   2 +-
>  drivers/crypto/bcmfs/bcmfs_device.h   |   2 +-
>  drivers/crypto/caam_jr/caam_jr.c  |   2 +-
>  drivers/crypto/ccp/rte_ccp_pmd.c  |   2 +-
>  drivers/crypto/ipsec_mb/ipsec_mb_private.c|   2 +-
>  drivers/crypto/ipsec_mb/ipsec_mb_private.h|   2 +-
>  drivers/crypto/ipsec_mb/pmd_kasumi.c  |   2 +-
>  drivers/crypto/mvsam/rte_mrvl_pmd.c   |   2 +-
>  drivers/crypto/null/null_crypto_pmd.c |   2 +-
>  drivers/crypto/openssl/rte_openssl_pmd.c  |   2 +-
>  drivers/crypto/scheduler/scheduler_pmd.c  |   2 +-
>  drivers/dma/skeleton/skeleton_dmadev.c|   2 +-
>  drivers/event/dpaa2/dpaa2_eventdev.c  |   2 +-
>  drivers/event/dpaa2/dpaa2_eventdev_selftest.c |   2 +-
>  drivers/event/octeontx/ssovf_evdev.c  |   2 +-
>  drivers/event/octeontx/ssovf_evdev_selftest.c |   2 +-
>  drivers/event/opdl/opdl_evdev.c   |   2 +-
>  drivers/event/opdl/opdl_evdev_init.c  |   2 +-
>  drivers/event/opdl/opdl_test.c|   2 +-
>  drivers/event/skeleton/skeleton_eventdev.c|   2 +-
>  drivers/event/sw/sw_evdev.c   |   2 +-
>  drivers/event/sw/sw_evdev_selftest.c  |   2 +-
>  drivers/net/af_packet/rte_eth_af_packet.c |   2 +-
>  drivers/net/af_xdp/rte_eth_af_xdp.c   |   2 +-
>  drivers/net/bonding/rte_eth_bond_api.c|   2 +-
>  drivers/net/bonding/rte_eth_bond_pmd.c|   2 +-
>  drivers/net/failsafe/failsafe.c   |   3 +-
>  drivers/net/ipn3ke/ipn3ke_ethdev.h|   2 +-
>  drivers/net/kni/rte_eth_kni.c |   2 +-
>  drivers/net/memif/memif_socket.c  |   2 +-
>  drivers/net/memif/rte_eth_memif.c |   2 +-
>  drivers/net/mvneta/mvneta_ethdev.c|   2 +-
>  drivers/net/mvpp2/mrvl_ethdev.c   |   2 +-
>  drivers/net/null/rte_eth_null.c   |   2 +-
>  drivers/net/octeontx/octeontx_ethdev.c|   2 +-
>  drivers/net/pcap/pcap_ethdev.c|   2 +-
>  drivers/net/pfe/pfe_ethdev.c  |   2 +-
>  drivers/net/ring/rte_eth_ring.c   |   2 +-
>  drivers/net/softnic/rte_eth_softnic.c |   2 +-
>  drivers/net/

RE: [RFC v3 16/26] bus/pci: make driver-only headers private

2022-07-28 Thread Xu, Rosen
Hi,

> -Original Message-
> From: David Marchand 
> Sent: Thursday, July 28, 2022 23:27
> To: dev@dpdk.org
> Cc: Chautru, Nicolas ; Ray Kinsella
> ; Nithin Dabilpuram ; Kiran
> Kumar K ; Sunil Kumar Kori
> ; Satha Rao ; Matan Azrad
> ; Viacheslav Ovsiienko ;
> Zhang, Roy Fan ; Andrew Rybchenko
> ; Ashish Gupta
> ; Chandubabu Namburu ;
> Ankur Dwivedi ; Anoob Joseph
> ; Tejasree Kondoj ;
> Nagadheeraj Rottela ; Srikanth Jampala
> ; Jay Zhou ; Radha
> Mohan Chintakuntla ; Veerasenareddy Burru
> ; Chengwen Feng ;
> Richardson, Bruce ; Laatz, Kevin
> ; Walsh, Conor ; McDaniel,
> Timothy ; Jerin Jacob ;
> Pavan Nikhilesh ; Elena Agostini
> ; Ashwin Sekhar T K ;
> Harman Kalra ; Shepard Siegel
> ; Ed Czeck ;
> John Miller ; Webster, Steven
> ; Peters, Matt
> ; Rasesh Mody ;
> Shahed Shaikh ; Ajit Khaparde
> ; Somnath Kotur
> ; Chas Williams ; Min Hu
> (Connor) ; Rahul Lakkireddy
> ; Su, Simei ; Wu,
> Wenjun1 ; Marcin Wojtas ;
> Michal Krawczyk ; Shai Brandes
> ; Evgeny Schemeilin ;
> Igor Chauskin ; Daley, John ;
> Hyong Youb Kim ; Ziyang Xuan
> ; Xiaoyun Wang
> ; Guoyang Zhou
> ; Dongdong Liu ;
> Yisen Zhuang ; Zhang, Yuying
> ; Xing, Beilei ; Guo,
> Junfeng ; Andrew Boyer ;
> Xu, Rosen ; Yang, Qiming ;
> Stephen Hemminger ; Long Li
> ; Jiawen Wu ; Devendra
> Singh Rawat ; Maciej Czekaj
> ; Jian Wang ; Maxime
> Coquelin ; Xia, Chenbo
> ; Jochen Behrens ; Jakub
> Palider ; Tomasz Duszynski
> ; Zhang, Tianfei ; Wu,
> Jingjing ; Ori Kam ; Wang, Xiao
> W ; Vijay Kumar Srivastava ;
> Thomas Monjalon ; Ferruh Yigit
> 
> Subject: [RFC v3 16/26] bus/pci: make driver-only headers private
> 
> The pci bus interface is for drivers only.
> Mark as internal and move the header in the driver headers list.
> 
> While at it, cleanup the code:
> - fix indentation,
> - remove unneeded reference to bus specific singleton object,
> - remove unneeded list head structure type,
> - reorder the definitions and macro manipulating the bus singleton object,
> - remove inclusion of rte_bus.h and fix the code that relied on implicit
>   inclusion,
> 
> Signed-off-by: David Marchand 
> ---
> Changes since RFC v2:
> - squashed cleanup for this bus code from other patches,
> - updated release notes,
> 
Acked-by: Rosen Xu 


RE: [PATCH v3] raw/ifpga: initialize scalar variable before using

2022-02-20 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Huang, Wei 
> Sent: Monday, February 21, 2022 10:20
> To: dev@dpdk.org; Xu, Rosen ; Zhang, Qi Z
> ; nipun.gu...@nxp.com; hemant.agra...@nxp.com
> Cc: sta...@dpdk.org; Zhang, Tianfei ; Yigit, Ferruh
> ; Huang, Wei 
> Subject: [PATCH v3] raw/ifpga: initialize scalar variable before using
> 
> Scalar variable sub_brg_bdf may be used uninitialized in function
> ifpga_rawdev_fill_info(). It is initialized now in this fix.
> 
> Fixes: 9c006c45d0c5 ("raw/ifpga: scan PCIe BDF device tree")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Wei Huang 
> ---
> v2: add space after comma to meet coding style requirement
> ---
> v3: refine log
> ---
>  drivers/raw/ifpga/ifpga_rawdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index b73512d..c133a94 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -216,7 +216,7 @@ static int ifpga_rawdev_fill_info(struct ifpga_rawdev
> *ifpga_dev,
>   char dir[1024] = "/sys/devices/";
>   char *c;
>   int ret;
> - char sub_brg_bdf[4][16];
> + char sub_brg_bdf[4][16] = {{0}, {0}, {0}, {0}};
>   int point;
>   DIR *dp = NULL;
>   struct dirent *entry;
> --
> 1.8.3.1

Acked-by: Rosen Xu 



Re: [dpdk-dev] [PATCH 5/8] doc: fix driver names in NIC devices guide

2020-11-02 Thread Xu, Rosen


> Subject: [PATCH 5/8] doc: fix driver names in NIC devices guide
> 
> Since the built driver filenames have changed in DPDK 20.11, we need to
> update the driver doc to match.
> 
> Most drivers start their section with the driver filename highlighted in bold,
> while a number were missing the highlight. When updating the names, add
> the markers for bold text to any missing it, so as to have things more
> consistent.
> 
> Fixes: a20b2c01a7a1 ("build: standardize component names and defines")
> 
> Signed-off-by: Bruce Richardson 
> ---
> 
> NOTE: the mlx4 and mlx5 chapters include a lot of output text which includes
> the driver name. I have updated this in the patch to use the new name, but
> at least for mlx4 I can't see some of the quoted printouts in the code any
> more, and for both drivers I think the output needs to be double-checked for
> correctness by maintainers.
> 
> ---
>  doc/guides/nics/ark.rst |  2 +-
>  doc/guides/nics/axgbe.rst   |  2 +-
>  doc/guides/nics/bnx2x.rst   |  2 +-
>  doc/guides/nics/bnxt.rst|  2 +-
>  doc/guides/nics/cxgbe.rst   |  8 ++--
>  doc/guides/nics/dpaa.rst|  2 +-
>  doc/guides/nics/dpaa2.rst   |  2 +-
>  doc/guides/nics/ena.rst |  2 +-
>  doc/guides/nics/enetc.rst   |  2 +-
>  doc/guides/nics/fail_safe.rst   |  2 +-
>  doc/guides/nics/hinic.rst   |  2 +-
>  doc/guides/nics/hns3.rst|  2 +-
>  doc/guides/nics/i40e.rst|  2 +-
>  doc/guides/nics/ice.rst |  2 +-
>  doc/guides/nics/igb.rst |  2 +-
>  doc/guides/nics/igc.rst |  2 +-
>  doc/guides/nics/ipn3ke.rst  |  2 +-
>  doc/guides/nics/liquidio.rst|  2 +-
>  doc/guides/nics/mlx4.rst| 52 +-
>  doc/guides/nics/mlx5.rst| 66 -
>  doc/guides/nics/mvneta.rst  |  2 +-
>  doc/guides/nics/mvpp2.rst   |  2 +-
>  doc/guides/nics/octeontx.rst|  2 +-
>  doc/guides/nics/octeontx2.rst   |  2 +-
>  doc/guides/nics/pcap_ring.rst   |  4 +-
>  doc/guides/nics/pfe.rst |  2 +-
>  doc/guides/nics/qede.rst|  4 +-
>  doc/guides/nics/sfc_efx.rst |  2 +-
>  doc/guides/nics/thunderx.rst|  4 +-
>  doc/guides/nics/vdev_netvsc.rst |  2 +-
>  30 files changed, 93 insertions(+), 93 deletions(-)
> 
>  - For information about I225, please refer to:
> diff --git a/doc/guides/nics/ipn3ke.rst b/doc/guides/nics/ipn3ke.rst index
> 5d4534e4da..a89e3719f2 100644
> --- a/doc/guides/nics/ipn3ke.rst
> +++ b/doc/guides/nics/ipn3ke.rst
> @@ -4,7 +4,7 @@
>  IPN3KE Poll Mode Driver
>  ===
> 
> -The ipn3ke PMD (librte_pmd_ipn3ke) provides poll mode driver support
> +The ipn3ke PMD (**librte_net_ipn3ke**) provides poll mode driver
> +support
>  for Intel® FPGA PAC(Programmable Acceleration Card) N3000 based on  the
> Intel Ethernet Controller X710/XXV710 and Intel Arria 10 FPGA.

Reviewed-by: Rosen Xu 



Re: [dpdk-dev] [PATCH] app/test-pmd: expand test-pmd queue threshold size of RED parameters

2018-12-04 Thread Xu, Rosen



> -Original Message-
> From: Singh, Jasvinder
> Sent: Tuesday, December 04, 2018 20:29
> To: Xu, Rosen ; dev@dpdk.org
> Cc: Dumitrescu, Cristian ; Lu, Wenzhuo
> ; Yigit, Ferruh ; Wu,
> Jingjing 
> Subject: RE: [PATCH] app/test-pmd: expand test-pmd queue threshold size of
> RED parameters
> 
> 
> 
> > -Original Message-
> > From: Xu, Rosen
> > Sent: Monday, November 26, 2018 8:36 AM
> > To: dev@dpdk.org
> > Cc: Dumitrescu, Cristian ; Lu, Wenzhuo
> > ; Singh, Jasvinder ;
> > Xu, Rosen ; Yigit, Ferruh
> > ; Wu, Jingjing 
> > Subject: [PATCH] app/test-pmd: expand test-pmd queue threshold size of
> > RED parameters
> >
> > There's very commonly that more than 4G DDR memory in NIC for HQoS,
> so
> > right now the queue threshold size of RED needs to expand to uint64_t.
> > For struct rte_tm_red_params, it has been fixed, but for test-pmd TM
> > configuration, it hasn't been fixed. This patch fixes it.
> >
> > Fixes: bddc2f40b594 ("app/testpmd: add commands for shaper and wred
> > profiles")
> > Cc: jasvinder.si...@intel.com
> >
> > Signed-off-by: Rosen Xu 
> > ---
> >  app/test-pmd/cmdline_tm.c | 24 
> >  1 file changed, 12 insertions(+), 12 deletions(-)
> >
> > diff --git a/app/test-pmd/cmdline_tm.c b/app/test-pmd/cmdline_tm.c
> > index
> > 4c76348..1012084 100644
> > --- a/app/test-pmd/cmdline_tm.c
> > +++ b/app/test-pmd/cmdline_tm.c
> > @@ -1156,18 +1156,18 @@ struct
> > cmd_add_port_tm_node_wred_profile_result {
> > uint16_t port_id;
> > uint32_t wred_profile_id;
> > cmdline_fixed_string_t color_g;
> > -   uint16_t min_th_g;
> > -   uint16_t max_th_g;
> > +   uint64_t min_th_g;
> > +   uint64_t max_th_g;
> > uint16_t maxp_inv_g;
> > uint16_t wq_log2_g;
> > cmdline_fixed_string_t color_y;
> > -   uint16_t min_th_y;
> > -   uint16_t max_th_y;
> > +   uint64_t min_th_y;
> > +   uint64_t max_th_y;
> > uint16_t maxp_inv_y;
> > uint16_t wq_log2_y;
> > cmdline_fixed_string_t color_r;
> > -   uint16_t min_th_r;
> > -   uint16_t max_th_r;
> > +   uint64_t min_th_r;
> > +   uint64_t max_th_r;
> > uint16_t maxp_inv_r;
> > uint16_t wq_log2_r;
> >  };
> > @@ -1206,11 +1206,11 @@ struct
> > cmd_add_port_tm_node_wred_profile_result
> {  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_min_th_g =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > -   min_th_g, UINT16);
> > +   min_th_g, UINT64);
> >  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_max_th_g =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > -   max_th_g, UINT16);
> > +   max_th_g, UINT64);
> >  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_maxp_inv_g =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > @@ -1226,11 +1226,11 @@ struct
> > cmd_add_port_tm_node_wred_profile_result
> {  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_min_th_y =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > -   min_th_y, UINT16);
> > +   min_th_y, UINT64);
> >  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_max_th_y =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > -   max_th_y, UINT16);
> > +   max_th_y, UINT64);
> >  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_maxp_inv_y =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > @@ -1246,11 +1246,11 @@ struct
> > cmd_add_port_tm_node_wred_profile_result
> {  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_min_th_r =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > -   min_th_r, UINT16);
> > +   min_th_r, UINT64);
> >  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_max_th_r =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > -   max_th_r, UINT16);
> > +   max_th_r, UINT64);
> >  cmdline_parse_token_num_t
> > cmd_add_port_tm_node_wred_profile_maxp_inv_r =
> > TOKEN_NUM_INITIALIZER(
> > struct cmd_add_port_tm_node_wred_profile_result,
> > --
> 
> 
> Reviewed-by: Jasvinder Singh 
> 

Thanks


Re: [dpdk-dev] [PATCH] app/test-pmd: add IFPGA AFU register read/write access for testpmd

2018-12-13 Thread Xu, Rosen
Hi Iremonger,

All the warnings have been fixed. Thanks a lot.

> -Original Message-
> From: Iremonger, Bernard
> Sent: Friday, December 07, 2018 18:25
> To: Xu, Rosen ; dev@dpdk.org
> Cc: Lu, Wenzhuo ; Wu, Jingjing
> ; Yigit, Ferruh 
> Subject: RE: [PATCH] app/test-pmd: add IFPGA AFU register read/write access
> for testpmd
> 
> Hi Rosen
> 
> > -----Original Message-
> > From: Xu, Rosen
> > Sent: Thursday, December 6, 2018 12:17 PM
> > To: dev@dpdk.org
> > Cc: Lu, Wenzhuo ; Wu, Jingjing
> > ; Iremonger, Bernard
> > ; Xu, Rosen ; Yigit,
> > Ferruh 
> > Subject: [PATCH] app/test-pmd: add IFPGA AFU register read/write
> > access for testpmd
> >
> > Currently register read/write of testpmd is only for PCI device, but
> > more and more IFPGA based AFU devices need this feature to access
> > registers, this patch will add support for it.
> >
> > Signed-off-by: Rosen Xu 
> > ---
> >  app/test-pmd/config.c  | 112
> > -
> > 
> >  app/test-pmd/testpmd.h |  60 ++
> >  2 files changed, 152 insertions(+), 20 deletions(-)
> >
> > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index
> > b9e5dd9..d401bf4 100644
> > --- a/app/test-pmd/config.c
> > +++ b/app/test-pmd/config.c
> > @@ -872,7 +872,8 @@ void print_valid_ports(void)  {
> > const struct rte_pci_device *pci_dev;
> > const struct rte_bus *bus;
> > -   uint64_t pci_len;
> > +   uint64_t len;
> > +   const struct rte_afu_device *afu_dev;
> >
> > if (reg_off & 0x3) {
> > printf("Port register offset 0x%X not aligned on a 4-byte "
> > @@ -889,16 +890,19 @@ void print_valid_ports(void)
> > bus = rte_bus_find_by_device(ports[port_id].dev_info.device);
> > if (bus && !strcmp(bus->name, "pci")) {
> > pci_dev = RTE_DEV_TO_PCI(ports[port_id].dev_info.device);
> > +   len = pci_dev->mem_resource[0].len;
> > +   } else if (bus && !strcmp(bus->name, "ifpga")) {
> > +   afu_dev = RTE_DEV_TO_AFU(ports[port_id].dev_info.device);
> > +   len = afu_dev->mem_resource[0].len;
> > } else {
> > -   printf("Not a PCI device\n");
> > +   printf("Not a PCI or AFU device\n");
> > return 1;
> > }
> >
> > -   pci_len = pci_dev->mem_resource[0].len;
> > -   if (reg_off >= pci_len) {
> > +   if (reg_off >= len) {
> > printf("Port %d: register offset %u (0x%X) out of port PCI "
> >"resource (length=%"PRIu64")\n",
> > -  port_id, (unsigned)reg_off, (unsigned)reg_off,  pci_len);
> > +  port_id, (unsigned)reg_off, (unsigned)reg_off, len);
> > return 1;
> > }
> > return 0;
> > @@ -927,7 +931,7 @@ void print_valid_ports(void)
> > port_reg_bit_display(portid_t port_id, uint32_t reg_off, uint8_t bit_x)  {
> > uint32_t reg_v;
> > -
> > +   const struct rte_bus *bus;
> >
> > if (port_id_is_invalid(port_id, ENABLED_WARN))
> > return;
> > @@ -935,7 +939,16 @@ void print_valid_ports(void)
> > return;
> > if (reg_bit_pos_is_invalid(bit_x))
> > return;
> > -   reg_v = port_id_pci_reg_read(port_id, reg_off);
> > +
> > +   bus = rte_bus_find_by_device(ports[port_id].dev_info.device);
> > +   if (bus && !strcmp(bus->name, "pci")) {
> > +   reg_v = port_id_pci_reg_read(port_id, reg_off);
> > +   } else if (bus && !strcmp(bus->name, "ifpga")) {
> > +   reg_v = port_id_afu_reg_read(port_id, reg_off);
> > +   } else {
> > +   printf("Not a PCI or AFU device\n");
> > +   return;
> > +   }
> > display_port_and_reg_off(port_id, (unsigned)reg_off);
> > printf("bit %d=%d\n", bit_x, (int) ((reg_v & (1 << bit_x)) >>
> > bit_x));  } @@
> > -947,6 +960,7 @@ void print_valid_ports(void)
> > uint32_t reg_v;
> > uint8_t  l_bit;
> > uint8_t  h_bit;
> > +   const struct rte_bus *bus;
> >
> > if (port_id_is_invalid(port_id, ENABLED_WARN))
> > return;
> > @@ -961,7 +975,15 @@ void print_valid_ports(void)
> > else
> > l_bit = bit1_pos, h_bit = bit2_pos;
> >
> > -   reg_v = port_id_pci_reg_read(port_id, reg_off);

Re: [dpdk-dev] [PATCH v2] app/test-pmd: add IFPGA AFU register read/write access for testpmd

2018-12-17 Thread Xu, Rosen
Hi,

> -Original Message-
> From: Pattan, Reshma
> Sent: Saturday, December 15, 2018 1:38
> To: Xu, Rosen ; dev@dpdk.org
> Cc: Lu, Wenzhuo ; Wu, Jingjing
> ; Iremonger, Bernard
> ; Xu, Rosen ; Yigit,
> Ferruh 
> Subject: RE: [dpdk-dev] [PATCH v2] app/test-pmd: add IFPGA AFU register
> read/write access for testpmd
> 
> Hi,
> 
> > -Original Message-
> > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Rosen Xu
> > Sent: Friday, December 14, 2018 1:14 AM
> > To: dev@dpdk.org
> > Cc: Lu, Wenzhuo ; Wu, Jingjing
> > ; Iremonger, Bernard
> > ; Xu, Rosen ; Yigit,
> > Ferruh 
> > Subject: [dpdk-dev] [PATCH v2] app/test-pmd: add IFPGA AFU register
> > read/write access for testpmd
> >
> > Currently register read/write of testpmd is only for PCI device, but
> > more and more IFPGA based AFU devices need this feature to access
> > registers, this patch will add support for it.
> >
> > Signed-off-by: Rosen Xu 
> > -   pci_len = pci_dev->mem_resource[0].len;
> > -   if (reg_off >= pci_len) {
> > +   if (reg_off >= len) {
> > printf("Port %d: register offset %u (0x%X) out of port PCI "
> 
> Here log message mentions only PCI not ifpga device. Might need to edit the
> log.

I have fixed in revision V3.

> > port_reg_bit_display(portid_t port_id, uint32_t reg_off, uint8_t bit_x)  {
> > uint32_t reg_v;
> > -
> > +   const struct rte_bus *bus;
> >
> > if (port_id_is_invalid(port_id, ENABLED_WARN))
> > return;
> > @@ -935,7 +940,16 @@ void print_valid_ports(void)
> > return;
> > if (reg_bit_pos_is_invalid(bit_x))
> > return;
> > -   reg_v = port_id_pci_reg_read(port_id, reg_off);
> > +
> > +   bus = rte_bus_find_by_device(ports[port_id].dev_info.device);
> > +   if (bus && !strcmp(bus->name, "pci")) {
> > +   reg_v = port_id_pci_reg_read(port_id, reg_off);
> > +   } else if (bus && !strcmp(bus->name, "ifpga")) {
> > +   reg_v = port_id_afu_reg_read(port_id, reg_off);
> > +   } else {
> > +   printf("Not a PCI or AFU device\n");
> > +   return;
> > +   }
> 
> Here and in other places for reg_read , we have similar code  i.e. finding the
> device , checking its type, if ifpga call ifpga function else call pci 
> functions.
> Can this common code be moved to new function say pci_read_reg like
> port_reg_set() which we have already.
> Also , again inside respective pci/ifpga reg read/write we are checking for 
> pci
> type. So can all this be simplified, to remove redundant code.

PCI device and AFU device belongs to different bus, if we merge the register 
access
code to same function, it's not clarify.
 
> Thanks,
> Reshma
> 



  1   2   3   4   >