Re: [PATCH net-next v9 3/3] net: ethernet: ti: am65-cpsw: Add minimal XDP support
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
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
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
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;
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