Re: [PATCH net-next v9 3/3] net: ethernet: ti: am65-cpsw: Add minimal XDP support

2024-04-12 Thread Jacob Keller



On 4/12/2024 8:38 AM, Julien Panis wrote:
> This patch adds XDP (eXpress Data Path) support to TI AM65 CPSW
> Ethernet driver. The following features are implemented:
> - NETDEV_XDP_ACT_BASIC (XDP_PASS, XDP_TX, XDP_DROP, XDP_ABORTED)
> - NETDEV_XDP_ACT_REDIRECT (XDP_REDIRECT)
> - NETDEV_XDP_ACT_NDO_XMIT (ndo_xdp_xmit callback)
> 
> The page pool memory model is used to get better performance.
> Below are benchmark results obtained for the receiver with iperf3 default
> parameters:
> - Without page pool: 495 Mbits/sec
> - With page pool: 605 Mbits/sec (actually 610 Mbits/sec, with a 5 Mbits/sec
> loss due to extra processing in the hot path to handle XDP).
> 
> Signed-off-by: Julien Panis 

Reviewed-by: Jacob Keller 


Re: [PATCH net-next v9 2/3] net: ethernet: ti: Add desc_infos member to struct k3_cppi_desc_pool

2024-04-12 Thread Jacob Keller



On 4/12/2024 8:38 AM, Julien Panis wrote:
> This patch introduces a member and the related accessors which can be
> used to store descriptor specific additional information. This member
> can store, for instance, an ID to differentiate a skb TX buffer type
> from a xdpf TX buffer type.
> 
> Signed-off-by: Julien Panis 
> ---
>  drivers/net/ethernet/ti/k3-cppi-desc-pool.c | 34 
> -
>  drivers/net/ethernet/ti/k3-cppi-desc-pool.h |  4 
>  2 files changed, 33 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/ethernet/ti/k3-cppi-desc-pool.c 
> b/drivers/net/ethernet/ti/k3-cppi-desc-pool.c
> index 414bcac9dcc6..739bae8e11ee 100644
> --- a/drivers/net/ethernet/ti/k3-cppi-desc-pool.c
> +++ b/drivers/net/ethernet/ti/k3-cppi-desc-pool.c
> @@ -22,6 +22,7 @@ struct k3_cppi_desc_pool {
>   size_t  mem_size;
>   size_t  num_desc;
>   struct gen_pool *gen_pool;
> + void**desc_infos;
>  };
>  
>  void k3_cppi_desc_pool_destroy(struct k3_cppi_desc_pool *pool)
> @@ -37,7 +38,11 @@ void k3_cppi_desc_pool_destroy(struct k3_cppi_desc_pool 
> *pool)
>   dma_free_coherent(pool->dev, pool->mem_size, pool->cpumem,
> pool->dma_addr);
>  
> + kfree(pool->desc_infos);
> +
>   gen_pool_destroy(pool->gen_pool);   /* frees pool->name */
> +
> + kfree(pool);
>  }
>  EXPORT_SYMBOL_GPL(k3_cppi_desc_pool_destroy);
>  
> @@ -50,7 +55,7 @@ k3_cppi_desc_pool_create_name(struct device *dev, size_t 
> size,
>   const char *pool_name = NULL;
>   int ret = -ENOMEM;
>  
> - pool = devm_kzalloc(dev, sizeof(*pool), GFP_KERNEL);
> + pool = kzalloc(sizeof(*pool), GFP_KERNEL);

You could refactor pool to use the new __free cleanup annotations along
with return_no_free() to automatically handle cleanup of the pool when
the function exits on an error state. It's pretty recent, and i don't
think its strictly necessary to do here just thought I'd point it out.

Reviewed-by: Jacob Keller 

>   if (!pool)
>   return ERR_PTR(ret);
>  
> @@ -62,18 +67,21 @@ k3_cppi_desc_pool_create_name(struct device *dev, size_t 
> size,
>   pool_name = kstrdup_const(name ? name : dev_name(pool->dev),
> GFP_KERNEL);
>   if (!pool_name)
> - return ERR_PTR(-ENOMEM);
> + goto gen_pool_create_fail;
>  
>   pool->gen_pool = gen_pool_create(ilog2(pool->desc_size), -1);
>   if (!pool->gen_pool) {
> - ret = -ENOMEM;
> - dev_err(pool->dev, "pool create failed %d\n", ret);
>   kfree_const(pool_name);
>   goto gen_pool_create_fail;
>   }
>  
>   pool->gen_pool->name = pool_name;
>  
> + pool->desc_infos = kcalloc(pool->num_desc,
> +sizeof(*pool->desc_infos), GFP_KERNEL);
> + if (!pool->desc_infos)
> + goto gen_pool_desc_infos_alloc_fail;
> +
>   pool->cpumem = dma_alloc_coherent(pool->dev, pool->mem_size,
> &pool->dma_addr, GFP_KERNEL);
>  
> @@ -94,9 +102,11 @@ k3_cppi_desc_pool_create_name(struct device *dev, size_t 
> size,
>   dma_free_coherent(pool->dev, pool->mem_size, pool->cpumem,
> pool->dma_addr);
>  dma_alloc_fail:
> + kfree(pool->desc_infos);
> +gen_pool_desc_infos_alloc_fail:
>   gen_pool_destroy(pool->gen_pool);   /* frees pool->name */
>  gen_pool_create_fail:
> - devm_kfree(pool->dev, pool);
> + kfree(pool);
>   return ERR_PTR(ret);
>  }
>  EXPORT_SYMBOL_GPL(k3_cppi_desc_pool_create_name);
> @@ -144,5 +154,19 @@ void *k3_cppi_desc_pool_cpuaddr(const struct 
> k3_cppi_desc_pool *pool)
>  }
>  EXPORT_SYMBOL_GPL(k3_cppi_desc_pool_cpuaddr);
>  
> +void k3_cppi_desc_pool_desc_info_set(struct k3_cppi_desc_pool *pool,
> +  int desc_idx, void *info)
> +{
> + pool->desc_infos[desc_idx] = info;
> +}
> +EXPORT_SYMBOL_GPL(k3_cppi_desc_pool_desc_info_set);
> +
> +void *k3_cppi_desc_pool_desc_info(const struct k3_cppi_desc_pool *pool,
> +   int desc_idx)
> +{
> + return pool->desc_infos[desc_idx];
> +}
> +EXPORT_SYMBOL_GPL(k3_cppi_desc_pool_desc_info);
> +
>  MODULE_LICENSE("GPL");
>  MODULE_DESCRIPTION("TI K3 CPPI5 descriptors pool API");
> diff --git a/drivers/net/ethernet/ti/k3-cppi-desc-pool.h 
> b/drivers/net/ethernet/ti/k3-cppi-desc-pool.h
> index 3c6aed0bed

Re: [PATCH net-next v8 0/3] Add minimal XDP support to TI AM65 CPSW Ethernet driver

2024-04-09 Thread Jacob Keller



On 4/8/2024 2:38 AM, Julien Panis wrote:
> This patch adds XDP support to TI AM65 CPSW Ethernet driver.
> 
> The following features are implemented: NETDEV_XDP_ACT_BASIC,
> NETDEV_XDP_ACT_REDIRECT, and NETDEV_XDP_ACT_NDO_XMIT.
> 
> Zero-copy and non-linear XDP buffer supports are NOT implemented.
> 
> Besides, the page pool memory model is used to get better performance.
> 
> Signed-off-by: Julien Panis 
> ---

Reviewed-by: Jacob Keller 

> Changes in v8:
> - Fix some warnings reported by patchwork.
> - Link to v7: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v7-0-c3857c82d...@baylibre.com
> 
> Changes in v7:
> - Move xdp_do_flush() function call in am65_cpsw_nuss_rx_poll().
> - Link to v6: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v6-0-212eeff5b...@baylibre.com
> 
> Changes in v6:
> - In k3_cppi_*() functions, use const qualifier when the content of
> pool is not modified.
> - Add allow_direct bool parameter to am65_cpsw_alloc_skb() function
> for direct use by page_pool_put_full_page().
> - Link to v5: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v5-0-bc1739170...@baylibre.com
> 
> Changes in v5:
> - In k3_cppi_desc_pool_destroy(), free memory allocated for desc_infos.
> - Link to v4: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v4-0-2e45e5dec...@baylibre.com
> 
> Changes in v4:
> - Add skb_mark_for_recycle() in am65_cpsw_nuss_rx_packets() function.
> - Specify napi page pool parameter in am65_cpsw_create_xdp_rxqs() function.
> - Add benchmark numbers (with VS without page pool) in the commit description.
> - Add xdp_do_flush() in am65_cpsw_run_xdp() function for XDP_REDIRECT case.
> - Link to v3: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v3-0-5d944a9d8...@baylibre.com
> 
> Changes in v3:
> - Fix a potential issue with TX buffer type, which is now set for each buffer.
> - Link to v2: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v2-0-01c6caaca...@baylibre.com
> 
> Changes in v2:
> - Use page pool memory model instead of MEM_TYPE_PAGE_ORDER0.
> - In am65_cpsw_alloc_skb(), release reference on the page pool page
> in case of error returned by build_skb().
> - [nit] Cleanup am65_cpsw_nuss_common_open/stop() functions.
> - [nit] Arrange local variables in reverse xmas tree order.
> - Link to v1: 
> https://lore.kernel.org/r/20240223-am65-cpsw-xdp-basic-v1-1-9f0b6cbda...@baylibre.com
> 
> ---
> Julien Panis (3):
>   net: ethernet: ti: Add accessors for struct k3_cppi_desc_pool members
>   net: ethernet: ti: Add desc_infos member to struct k3_cppi_desc_pool
>   net: ethernet: ti: am65-cpsw: Add minimal XDP support
> 
>  drivers/net/ethernet/ti/am65-cpsw-nuss.c| 569 
> +---
>  drivers/net/ethernet/ti/am65-cpsw-nuss.h|  13 +
>  drivers/net/ethernet/ti/k3-cppi-desc-pool.c |  41 ++
>  drivers/net/ethernet/ti/k3-cppi-desc-pool.h |   6 +
>  4 files changed, 578 insertions(+), 51 deletions(-)
> ---
> base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d
> change-id: 20240223-am65-cpsw-xdp-basic-4db828508b48
> 
> Best regards,


[PATCH] drm/rockchip: use struct_size() in vop2_bind

2023-02-22 Thread Jacob Keller
Use the overflow-protected struct_size() helper macro to compute the
allocation size of the vop2 data structure.

Signed-off-by: Jacob Keller 
Cc: Sandy Huang 
Cc: Heiko Stübner 
Cc: David Airlie 
---
I found this while developing a coccinelle script to detect potential places
where struct_size() would be appropriate.

 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c 
b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index 0e0012368976..3e5861653b69 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -2655,7 +2655,7 @@ static int vop2_bind(struct device *dev, struct device 
*master, void *data)
return -ENODEV;
 
/* Allocate vop2 struct and its vop2_win array */
-   alloc_size = sizeof(*vop2) + sizeof(*vop2->win) * vop2_data->win_size;
+   alloc_size = struct_size(vop2, win, vop2_data->win_size);
vop2 = devm_kzalloc(dev, alloc_size, GFP_KERNEL);
if (!vop2)
return -ENOMEM;

base-commit: 4d5a2cce47a8e1e7119a881a4714f0eee557c1cd
-- 
2.39.1.405.gd4c25cc71f83



Re: [trivial PATCH] treewide: Convert switch/case fallthrough; to break;

2020-09-17 Thread Jacob Keller



On 9/9/2020 1:55 PM, Keith Busch wrote:
> On Wed, Sep 09, 2020 at 01:06:39PM -0700, Joe Perches wrote:
>> diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
>> index eea0f453cfb6..8aac5bc60f4c 100644
>> --- a/crypto/tcrypt.c
>> +++ b/crypto/tcrypt.c
>> @@ -2464,7 +2464,7 @@ static int do_test(const char *alg, u32 type, u32 
>> mask, int m, u32 num_mb)
>>  test_hash_speed("streebog512", sec,
>>  generic_hash_speed_template);
>>  if (mode > 300 && mode < 400) break;
>> -fallthrough;
>> +break;
>>  case 399:
>>  break;
> 
> Just imho, this change makes the preceding 'if' look even more
> pointless. Maybe the fallthrough was a deliberate choice? Not that my
> opinion matters here as I don't know this module, but it looked a bit
> odd to me.
> 

Yea this does look very odd..
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel