On Thu, Apr 10, 2025 at 01:39:18PM -0500, Dave Marquardt wrote:
> - Replaced BUG_ON calls with WARN_ON calls with error handling,
>   with calls to a new ibmveth_reset routine, which resets the device.
> - Added KUnit tests for ibmveth_remove_buffer_from_pool and
>   ibmveth_rxq_get_buffer under new IBMVETH_KUNIT_TEST config option.
> - Removed unneeded forward declaration of ibmveth_rxq_harvest_buffer.

It will be great if you split this patch into 3 patches according to
your description.

> 
> Signed-off-by: Dave Marquardt <davem...@linux.ibm.com>
> ---
>  drivers/net/ethernet/ibm/Kconfig   |  13 ++
>  drivers/net/ethernet/ibm/ibmveth.c | 242 ++++++++++++++++++++++++++---
>  drivers/net/ethernet/ibm/ibmveth.h |  65 ++++----
>  3 files changed, 269 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/net/ethernet/ibm/Kconfig 
> b/drivers/net/ethernet/ibm/Kconfig
> index c0c112d95b89..4f4b23465c47 100644
> --- a/drivers/net/ethernet/ibm/Kconfig
> +++ b/drivers/net/ethernet/ibm/Kconfig
> @@ -27,6 +27,19 @@ config IBMVETH
>         To compile this driver as a module, choose M here. The module will
>         be called ibmveth.
>  
> +config IBMVETH_KUNIT_TEST
> +     bool "KUnit test for IBM LAN Virtual Ethernet support" if 
> !KUNIT_ALL_TESTS
> +     depends on KUNIT
> +     depends on KUNIT=y && IBMVETH=y
> +     default KUNIT_ALL_TESTS
> +     help
> +       This builds unit tests for the IBM LAN Virtual Ethernet driver.
> +
> +       For more information on KUnit and unit tests in general, please refer
> +       to the KUnit documentation in Documentation/dev-tools/kunit/.
> +
> +       If unsure, say N.
> +
>  source "drivers/net/ethernet/ibm/emac/Kconfig"
>  
>  config EHEA
> diff --git a/drivers/net/ethernet/ibm/ibmveth.c 
> b/drivers/net/ethernet/ibm/ibmveth.c
> index 04192190beba..ea201e5cc8bc 100644
> --- a/drivers/net/ethernet/ibm/ibmveth.c
> +++ b/drivers/net/ethernet/ibm/ibmveth.c
> @@ -28,6 +28,7 @@
>  #include <linux/ip.h>
>  #include <linux/ipv6.h>
>  #include <linux/slab.h>
> +#include <linux/workqueue.h>
>  #include <asm/hvcall.h>
>  #include <linux/atomic.h>
>  #include <asm/vio.h>
> @@ -39,8 +40,6 @@
>  #include "ibmveth.h"
>  
>  static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance);
> -static void ibmveth_rxq_harvest_buffer(struct ibmveth_adapter *adapter,
> -                                    bool reuse);
>  static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev);
>  
>  static struct kobj_type ktype_veth_pool;
> @@ -231,7 +230,10 @@ static void ibmveth_replenish_buffer_pool(struct 
> ibmveth_adapter *adapter,
>               index = pool->free_map[free_index];
>               skb = NULL;
>  
> -             BUG_ON(index == IBM_VETH_INVALID_MAP);
> +             if (WARN_ON(index == IBM_VETH_INVALID_MAP)) {
> +                     (void)schedule_work(&adapter->work);

What is the purpose of void casting here (and in other places in this
patch)?

> +                     goto failure2;

Maybe increment_buffer_failure, or sth that is telling what happen after
goto.

> +             }
>  
>               /* are we allocating a new buffer or recycling an old one */
>               if (pool->skbuff[index])
> @@ -300,6 +302,7 @@ static void ibmveth_replenish_buffer_pool(struct 
> ibmveth_adapter *adapter,
>                                DMA_FROM_DEVICE);
>       dev_kfree_skb_any(pool->skbuff[index]);
>       pool->skbuff[index] = NULL;
> +failure2:
>       adapter->replenish_add_buff_failure++;
>  
>       mb();
> @@ -370,20 +373,36 @@ static void ibmveth_free_buffer_pool(struct 
> ibmveth_adapter *adapter,
>       }
>  }
>  

[...]

Reply via email to