[PATCH net-next] ibmveth: Use WARN_ON with error handling rather than BUG_ON

Michal Swiatkowski michal.swiatkowski at linux.intel.com
Fri Apr 11 16:02:31 AEST 2025


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 <davemarq at 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,
>  	}
>  }
>  

[...]


More information about the Linuxppc-dev mailing list