Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-16 Thread Behera, VIVEK via Intel-wired-lan



> -Original Message-
> From: Maciej Fijalkowski 
> Sent: Thursday, January 15, 2026 8:53 PM
> To: Behera, Vivek (DI FA DSP ICC PRC1) 
> Cc: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]; intel-wired-
> [email protected]; [email protected]
> Subject: Re: AW: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in
> igb_xsk_wakeup
> 
> On Thu, Jan 15, 2026 at 11:05:37AM +, Behera, VIVEK wrote:
> > Hi Maciej
> >
> > > -Original Message-
> > > From: Maciej Fijalkowski 
> > > Sent: Wednesday, January 14, 2026 7:21 PM
> > > To: Behera, Vivek (DI FA DSP ICC PRC1) 
> > > Cc: [email protected]; [email protected];
> > > [email protected]; [email protected];
> > > [email protected]; [email protected]; intel-wired-
> > > [email protected]; [email protected]
> > > Subject: Re: AW: [PATCH iwl-net v5] igb: Fix trigger of incorrect
> > > irq in igb_xsk_wakeup
> > >
> > > On Wed, Jan 14, 2026 at 08:19:37AM +, Behera, VIVEK wrote:
> > >
> > > (...)
> > >
> > > > > >
> > > > > > diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > > b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > > index fa028928482f..9357564a2d58 100644
> > > > > > --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > > +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > > @@ -443,6 +443,7 @@
> > > > > >  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status 
> > > > > > Change
> */
> > > > > >  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min.
> > > threshold
> > > > > */
> > > > > >  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset
> > > Aserted */
> > > > > > +#define E1000_ICS_TXDW  E1000_ICR_TXDW /* Transmit desc
> > > written
> > > > > back */
> > > > > >
> > > > > >  /* Extended Interrupt Cause Set */
> > > > > >  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ diff
> > > > > > --git a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > > b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > > index 30ce5fbb5b77..6e51b5b6f131 100644
> > > > > > --- a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > > +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > > @@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device
> > > > > > *dev,
> > > > > > u32 qid, u32
> > > > > flags)
> > > > > > struct igb_adapter *adapter = netdev_priv(dev);
> > > > > > struct e1000_hw *hw = &adapter->hw;
> > > > > > struct igb_ring *ring;
> > > > > > +   struct igb_q_vector *q_vector;
> > > > > > +   struct napi_struct *rx_napi;
> > > > > > +   struct napi_struct *tx_napi;
> > > > > > +   bool trigger_irq_tx = false;
> > > > > > +   bool trigger_irq_rx = false;
> > > > > > +   u32 eics_tx = 0;
> > > > > > +   u32 eics_rx = 0;
> > > > > > u32 eics = 0;
> > > > > >
> > > > > > if (test_bit(__IGB_DOWN, &adapter->state)) @@ -536,27
> > > > > > +543,65 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid,
> > > > > > u32 flags)
> > > > > >
> > > > > > if (!igb_xdp_is_enabled(adapter))
> > > > > > return -EINVAL;
> > > > > > -
> > > > > > -   if (qid >= adapter->num_tx_queues)
> > > > > > +   /* Check if queue_id is valid. Tx and Rx queue numbers are 
> > > > > > always
> same */
> > > > > > +   if (qid >= adapter->num_rx_queues)
> > > > > > return -EINVAL;
> > > > > > -
> > > > > > -   ring = adapter->tx_ring[qid];
> > > > > > -
> > > > > > -   if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
> > > > > > -   return -ENETDOWN;
> > > > > > -
> > > > > > -   if (!READ_ONCE(ring->xsk_pool))
> > > > > > +   /* Check if flags are valid */
> > > > > > +   if (!(flags & XDP_WAKEUP_RX) && !(flags & XDP_WAKEUP_TX))
> > > > > > return -EINVAL;
> > > > > > -
> > > > > > -   if (!napi_if_scheduled_mark_missed(&ring->q_vector->napi)) {
> > > > > > -   /* Cause software interrupt */
> > > > > > +   if (flags & XDP_WAKEUP_RX) {
> > > > > > +   /* IRQ trigger preparation for Rx */
> > > > > > +   ring = adapter->rx_ring[qid];
> > > > > > +   if (!READ_ONCE(ring->xsk_pool))
> > > > > > +   return -ENXIO;
> > > > > > +   q_vector = ring->q_vector;
> > > > > > +   rx_napi = &q_vector->napi;
> > > > > > +   /* Extend the BIT mask for eics */
> > > > > > +   eics_rx = ring->q_vector->eims_value;
> > > > > > +   trigger_irq_rx = true;
> > > > > > +   }
> > > > > > +   if (flags & XDP_WAKEUP_TX) {
> > > > > > +   if (adapter->flags & IGB_FLAG_QUEUE_PAIRS) {
> > > > > > +   /* In queue-pair mode, rx_ring and tx_ring share the 
> > > > > > same
> > > q_vector,
> > > > > > +* so a single IRQ trigger will wake both RX and TX
> processing
> > > > > > +*/
> > > > > > +   } else {
> > 

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-15 Thread Maciej Fijalkowski
On Thu, Jan 15, 2026 at 11:05:37AM +, Behera, VIVEK wrote:
> Hi Maciej
> 
> > -Original Message-
> > From: Maciej Fijalkowski 
> > Sent: Wednesday, January 14, 2026 7:21 PM
> > To: Behera, Vivek (DI FA DSP ICC PRC1) 
> > Cc: [email protected]; [email protected];
> > [email protected]; [email protected];
> > [email protected]; [email protected]; intel-wired-
> > [email protected]; [email protected]
> > Subject: Re: AW: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in
> > igb_xsk_wakeup
> > 
> > On Wed, Jan 14, 2026 at 08:19:37AM +, Behera, VIVEK wrote:
> > 
> > (...)
> > 
> > > > >
> > > > > diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > index fa028928482f..9357564a2d58 100644
> > > > > --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > > @@ -443,6 +443,7 @@
> > > > >  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status 
> > > > > Change */
> > > > >  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min.
> > threshold
> > > > */
> > > > >  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset
> > Aserted */
> > > > > +#define E1000_ICS_TXDW  E1000_ICR_TXDW   /* Transmit desc
> > written
> > > > back */
> > > > >
> > > > >  /* Extended Interrupt Cause Set */
> > > > >  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ diff --git
> > > > > a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > index 30ce5fbb5b77..6e51b5b6f131 100644
> > > > > --- a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > > @@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev,
> > > > > u32 qid, u32
> > > > flags)
> > > > >   struct igb_adapter *adapter = netdev_priv(dev);
> > > > >   struct e1000_hw *hw = &adapter->hw;
> > > > >   struct igb_ring *ring;
> > > > > + struct igb_q_vector *q_vector;
> > > > > + struct napi_struct *rx_napi;
> > > > > + struct napi_struct *tx_napi;
> > > > > + bool trigger_irq_tx = false;
> > > > > + bool trigger_irq_rx = false;
> > > > > + u32 eics_tx = 0;
> > > > > + u32 eics_rx = 0;
> > > > >   u32 eics = 0;
> > > > >
> > > > >   if (test_bit(__IGB_DOWN, &adapter->state)) @@ -536,27 +543,65 @@
> > > > > int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)
> > > > >
> > > > >   if (!igb_xdp_is_enabled(adapter))
> > > > >   return -EINVAL;
> > > > > -
> > > > > - if (qid >= adapter->num_tx_queues)
> > > > > + /* Check if queue_id is valid. Tx and Rx queue numbers are 
> > > > > always same */
> > > > > + if (qid >= adapter->num_rx_queues)
> > > > >   return -EINVAL;
> > > > > -
> > > > > - ring = adapter->tx_ring[qid];
> > > > > -
> > > > > - if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
> > > > > - return -ENETDOWN;
> > > > > -
> > > > > - if (!READ_ONCE(ring->xsk_pool))
> > > > > + /* Check if flags are valid */
> > > > > + if (!(flags & XDP_WAKEUP_RX) && !(flags & XDP_WAKEUP_TX))
> > > > >   return -EINVAL;
> > > > > -
> > > > > - if (!napi_if_scheduled_mark_missed(&ring->q_vector->napi)) {
> > > > > - /* Cause software interrupt */
> > > > > + if (flags & XDP_WAKEUP_RX) {
> > > > > + /* IRQ trigger preparation for Rx */
> > > > > + ring = adapter->rx_ring[qid];
> > > > > + if (!READ_ONCE(ring->xsk_pool))
> > > > > + return -ENXIO;
> > > > > + q_vector = ring->q_vector;
> > > > > + rx_napi = &q_vector->napi;
> > > > > + /* Extend the BIT mask for eics */
> > > > > + eics_rx = ring->q_vector->eims_value;
> > > > > + trigger_irq_rx = true;
> > > > > + }
> > > > > + if (flags & XDP_WAKEUP_TX) {
> > > > > + if (adapter->flags & IGB_FLAG_QUEUE_PAIRS) {
> > > > > + /* In queue-pair mode, rx_ring and tx_ring share the 
> > > > > same
> > q_vector,
> > > > > +  * so a single IRQ trigger will wake both RX and TX 
> > > > > processing
> > > > > +  */
> > > > > + } else {
> > > > > + /* IRQ trigger preparation for Tx */
> > > > > + ring = adapter->tx_ring[qid];
> > > > > + if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring-
> > >flags))
> > > > > + return -ENETDOWN;
> > > > > +
> > > > > + if (!READ_ONCE(ring->xsk_pool))
> > > > > + return -ENXIO;
> > > > > + q_vector = ring->q_vector;
> > > > > + tx_napi = &q_vector->napi;
> > > > > + /* Extend the BIT mask for eics */
> > > > > +

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-15 Thread Behera, VIVEK via Intel-wired-lan
Hi Maciej

> -Original Message-
> From: Maciej Fijalkowski 
> Sent: Wednesday, January 14, 2026 7:21 PM
> To: Behera, Vivek (DI FA DSP ICC PRC1) 
> Cc: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]; intel-wired-
> [email protected]; [email protected]
> Subject: Re: AW: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in
> igb_xsk_wakeup
> 
> On Wed, Jan 14, 2026 at 08:19:37AM +, Behera, VIVEK wrote:
> 
> (...)
> 
> > > >
> > > > diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > index fa028928482f..9357564a2d58 100644
> > > > --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > > @@ -443,6 +443,7 @@
> > > >  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change 
> > > > */
> > > >  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min.
> threshold
> > > */
> > > >  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset
> Aserted */
> > > > +#define E1000_ICS_TXDW  E1000_ICR_TXDW /* Transmit desc
> written
> > > back */
> > > >
> > > >  /* Extended Interrupt Cause Set */
> > > >  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ diff --git
> > > > a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > index 30ce5fbb5b77..6e51b5b6f131 100644
> > > > --- a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > > @@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev,
> > > > u32 qid, u32
> > > flags)
> > > > struct igb_adapter *adapter = netdev_priv(dev);
> > > > struct e1000_hw *hw = &adapter->hw;
> > > > struct igb_ring *ring;
> > > > +   struct igb_q_vector *q_vector;
> > > > +   struct napi_struct *rx_napi;
> > > > +   struct napi_struct *tx_napi;
> > > > +   bool trigger_irq_tx = false;
> > > > +   bool trigger_irq_rx = false;
> > > > +   u32 eics_tx = 0;
> > > > +   u32 eics_rx = 0;
> > > > u32 eics = 0;
> > > >
> > > > if (test_bit(__IGB_DOWN, &adapter->state)) @@ -536,27 +543,65 @@
> > > > int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)
> > > >
> > > > if (!igb_xdp_is_enabled(adapter))
> > > > return -EINVAL;
> > > > -
> > > > -   if (qid >= adapter->num_tx_queues)
> > > > +   /* Check if queue_id is valid. Tx and Rx queue numbers are 
> > > > always same */
> > > > +   if (qid >= adapter->num_rx_queues)
> > > > return -EINVAL;
> > > > -
> > > > -   ring = adapter->tx_ring[qid];
> > > > -
> > > > -   if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
> > > > -   return -ENETDOWN;
> > > > -
> > > > -   if (!READ_ONCE(ring->xsk_pool))
> > > > +   /* Check if flags are valid */
> > > > +   if (!(flags & XDP_WAKEUP_RX) && !(flags & XDP_WAKEUP_TX))
> > > > return -EINVAL;
> > > > -
> > > > -   if (!napi_if_scheduled_mark_missed(&ring->q_vector->napi)) {
> > > > -   /* Cause software interrupt */
> > > > +   if (flags & XDP_WAKEUP_RX) {
> > > > +   /* IRQ trigger preparation for Rx */
> > > > +   ring = adapter->rx_ring[qid];
> > > > +   if (!READ_ONCE(ring->xsk_pool))
> > > > +   return -ENXIO;
> > > > +   q_vector = ring->q_vector;
> > > > +   rx_napi = &q_vector->napi;
> > > > +   /* Extend the BIT mask for eics */
> > > > +   eics_rx = ring->q_vector->eims_value;
> > > > +   trigger_irq_rx = true;
> > > > +   }
> > > > +   if (flags & XDP_WAKEUP_TX) {
> > > > +   if (adapter->flags & IGB_FLAG_QUEUE_PAIRS) {
> > > > +   /* In queue-pair mode, rx_ring and tx_ring share the 
> > > > same
> q_vector,
> > > > +* so a single IRQ trigger will wake both RX and TX 
> > > > processing
> > > > +*/
> > > > +   } else {
> > > > +   /* IRQ trigger preparation for Tx */
> > > > +   ring = adapter->tx_ring[qid];
> > > > +   if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring-
> >flags))
> > > > +   return -ENETDOWN;
> > > > +
> > > > +   if (!READ_ONCE(ring->xsk_pool))
> > > > +   return -ENXIO;
> > > > +   q_vector = ring->q_vector;
> > > > +   tx_napi = &q_vector->napi;
> > > > +   /* Extend the BIT mask for eics */
> > > > +   eics_tx = ring->q_vector->eims_value;
> > > > +   trigger_irq_tx = true;
> > > > +   }
> > > > +   }
> > > > +   /* All er

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-14 Thread Maciej Fijalkowski
On Wed, Jan 14, 2026 at 08:19:37AM +, Behera, VIVEK wrote:

(...)

> > >
> > > diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > index fa028928482f..9357564a2d58 100644
> > > --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> > > @@ -443,6 +443,7 @@
> > >  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change */
> > >  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min. threshold
> > */
> > >  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted 
> > > */
> > > +#define E1000_ICS_TXDW  E1000_ICR_TXDW   /* Transmit desc written
> > back */
> > >
> > >  /* Extended Interrupt Cause Set */
> > >  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ diff --git
> > > a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > index 30ce5fbb5b77..6e51b5b6f131 100644
> > > --- a/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
> > > @@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, 
> > > u32
> > flags)
> > >   struct igb_adapter *adapter = netdev_priv(dev);
> > >   struct e1000_hw *hw = &adapter->hw;
> > >   struct igb_ring *ring;
> > > + struct igb_q_vector *q_vector;
> > > + struct napi_struct *rx_napi;
> > > + struct napi_struct *tx_napi;
> > > + bool trigger_irq_tx = false;
> > > + bool trigger_irq_rx = false;
> > > + u32 eics_tx = 0;
> > > + u32 eics_rx = 0;
> > >   u32 eics = 0;
> > >
> > >   if (test_bit(__IGB_DOWN, &adapter->state)) @@ -536,27 +543,65 @@ int
> > > igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)
> > >
> > >   if (!igb_xdp_is_enabled(adapter))
> > >   return -EINVAL;
> > > -
> > > - if (qid >= adapter->num_tx_queues)
> > > + /* Check if queue_id is valid. Tx and Rx queue numbers are always same 
> > > */
> > > + if (qid >= adapter->num_rx_queues)
> > >   return -EINVAL;
> > > -
> > > - ring = adapter->tx_ring[qid];
> > > -
> > > - if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
> > > - return -ENETDOWN;
> > > -
> > > - if (!READ_ONCE(ring->xsk_pool))
> > > + /* Check if flags are valid */
> > > + if (!(flags & XDP_WAKEUP_RX) && !(flags & XDP_WAKEUP_TX))
> > >   return -EINVAL;
> > > -
> > > - if (!napi_if_scheduled_mark_missed(&ring->q_vector->napi)) {
> > > - /* Cause software interrupt */
> > > + if (flags & XDP_WAKEUP_RX) {
> > > + /* IRQ trigger preparation for Rx */
> > > + ring = adapter->rx_ring[qid];
> > > + if (!READ_ONCE(ring->xsk_pool))
> > > + return -ENXIO;
> > > + q_vector = ring->q_vector;
> > > + rx_napi = &q_vector->napi;
> > > + /* Extend the BIT mask for eics */
> > > + eics_rx = ring->q_vector->eims_value;
> > > + trigger_irq_rx = true;
> > > + }
> > > + if (flags & XDP_WAKEUP_TX) {
> > > + if (adapter->flags & IGB_FLAG_QUEUE_PAIRS) {
> > > + /* In queue-pair mode, rx_ring and tx_ring share the same 
> > > q_vector,
> > > +  * so a single IRQ trigger will wake both RX and TX processing
> > > +  */
> > > + } else {
> > > + /* IRQ trigger preparation for Tx */
> > > + ring = adapter->tx_ring[qid];
> > > + if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
> > > + return -ENETDOWN;
> > > +
> > > + if (!READ_ONCE(ring->xsk_pool))
> > > + return -ENXIO;
> > > + q_vector = ring->q_vector;
> > > + tx_napi = &q_vector->napi;
> > > + /* Extend the BIT mask for eics */
> > > + eics_tx = ring->q_vector->eims_value;
> > > + trigger_irq_tx = true;
> > > + }
> > > + }
> > > + /* All error checks are finished. Check and update napi states for rx 
> > > and tx */
> > > + if (trigger_irq_rx) {
> > > + if (!napi_if_scheduled_mark_missed(rx_napi))
> > > + eics |= eics_rx;
> > > + }
> > > + if (trigger_irq_tx) {
> > > + if (!napi_if_scheduled_mark_missed(tx_napi))
> > > + eics |= eics_tx;
> > > + }
> > > + /* Now we trigger the required irqs for Rx and Tx */
> > > + if ((trigger_irq_rx) || (trigger_irq_tx)) {
> > >   if (adapter->flags & IGB_FLAG_HAS_MSIX) {
> > > - eics |= ring->q_vector->eims_value;
> > >   wr32(E1000_EICS, eics);
> > >   } else {
> > > - wr32(E1000_ICS, E1000_ICS_RXDMT0);
> > > + if ((trigger_irq_rx) && (trigger_irq_tx))
> > > + wr32(E1000_ICS,
> > > +  E1000_ICS_RXDMT0 | E1000_ICS_TXDW);
> > > + else if (trigger_irq_rx)
> > > + wr32(E1000_ICS, E1000_ICS_RXDMT0);
> > > +

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-14 Thread Behera, VIVEK via Intel-wired-lan



> -Ursprüngliche Nachricht-
> Von: Maciej Fijalkowski 
> Gesendet: Dienstag, 13. Januar 2026 12:41
> An: Behera, Vivek (DI FA DSP ICC PRC1) 
> Cc: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]; intel-wired-
> [email protected]; [email protected]
> Betreff: Re: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in 
> igb_xsk_wakeup
> 
> On Mon, Jan 12, 2026 at 02:03:49PM +0100, Vivek Behera wrote:
> > The current implementation in the igb_xsk_wakeup expects the Rx and Tx
> > queues to share the same irq. This would lead to triggering of
> > incorrect irq in split irq configuration.
> > This patch addresses this issue which could impact environments with 2
> > active cpu cores or when the number of queues is reduced to 2 or less
> >
> > cat /proc/interrupts | grep eno2
> >  167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >  0-edge  eno2
> >  168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >  1-edge  eno2-rx-0
> >  169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >  2-edge  eno2-rx-1
> >  170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >  3-edge  eno2-tx-0
> >  171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >  4-edge  eno2-tx-1
> >
> > Furthermore it uses the flags input argument to trigger either rx, tx
> > or both rx and tx irqs as specified in the ndo_xsk_wakeup api
> > documentation
> >
> > Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> > Signed-off-by: Vivek Behera 
> > Reviewed-by: Aleksandr Loktionov 
> > ---
> > v1:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251212131454.124116-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7Ca31558f
> 1fe
> >
> ea4357387008de5298bc67%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9039013116385150%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=6jtDYEHBQwK0mSoY5bRnMu2YXbrZzKqEeTSim8EsumI%3D&re
> served=0
> > v2:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251215115416.410619-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7Ca31558f
> 1fe
> >
> ea4357387008de5298bc67%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9039013116422789%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=V7%2BmPEiR7nJ9a9p9Fcl8RqPjij%2BgGop05dkWB7pRMlM%3D
> &reserv
> > ed=0
> > v3:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251220114936.140473-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7Ca31558f
> 1fe
> >
> ea4357387008de5298bc67%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9039013116446169%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=c9OVw3ziHwqlpeXKJGsUxVyJCyeO2pwwf98ejBaSg9s%3D&reser
> ved=0
> > v4:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251222115747.230521-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7Ca31558f
> 1fe
> >
> ea4357387008de5298bc67%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9039013116466859%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=HJsueSZ49aNY%2FSY7iCQwvc7pcLWvB7I%2FXUdx%2F%2Ft70
> gQ%3D&re
> > served=0
> >
> > changelog:
> > v1
> > - Inital description of the Bug and fixes made in the patch
> >
> > v1 -> v2
> > - Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ
> > configuration
> > - Review suggestions by Aleksander: Modified sequence to complete all
> >   error checks for rx and tx before updating napi states and
> > triggering irqs
> > - Corrected trigger of TX and RX interrupts over E1000_ICS (non msix
> > use case)
> > - Added define for Tx interrupt trigger bit mask for E1000_ICS
> >
> > v2 -> v3
> > - Included applicable feedback and suggestions from igc patch
> > - Fixed logic in updating eics value when  both TX and RX need wakeup
> >
> > v3 -> v4
> > - Added comments to explain trigerring of both TX and RX with active
> > queue pairs
> > - Fixed check of xsk pools in if statement
> >
> > v4 -> v5
> > - Introduced a simplified logic for sequential check for RX and TX
> > ---
> >  .../net/ethernet/intel/igb/e1000_defines.h|  1 +
> 

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-13 Thread Maciej Fijalkowski
On Mon, Jan 12, 2026 at 02:03:49PM +0100, Vivek Behera wrote:
> The current implementation in the igb_xsk_wakeup expects the Rx and Tx queues
> to share the same irq. This would lead to triggering of incorrect irq
> in split irq configuration.
> This patch addresses this issue which could impact environments
> with 2 active cpu cores
> or when the number of queues is reduced to 2 or less
> 
> cat /proc/interrupts | grep eno2
>  167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  0-edge  eno2
>  168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  1-edge  eno2-rx-0
>  169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  2-edge  eno2-rx-1
>  170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  3-edge  eno2-tx-0
>  171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  4-edge  eno2-tx-1
> 
> Furthermore it uses the flags input argument to trigger either rx, tx or
> both rx and tx irqs as specified in the ndo_xsk_wakeup api documentation
> 
> Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> Signed-off-by: Vivek Behera 
> Reviewed-by: Aleksandr Loktionov 
> ---
> v1: 
> https://lore.kernel.org/intel-wired-lan/[email protected]/
> v2: 
> https://lore.kernel.org/intel-wired-lan/[email protected]/
> v3: 
> https://lore.kernel.org/intel-wired-lan/[email protected]/
> v4: 
> https://lore.kernel.org/intel-wired-lan/[email protected]/
> 
> changelog:
> v1
> - Inital description of the Bug and fixes made in the patch
> 
> v1 -> v2
> - Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ configuration
> - Review suggestions by Aleksander: Modified sequence to complete all
>   error checks for rx and tx before updating napi states and triggering irqs
> - Corrected trigger of TX and RX interrupts over E1000_ICS (non msix use case)
> - Added define for Tx interrupt trigger bit mask for E1000_ICS
> 
> v2 -> v3
> - Included applicable feedback and suggestions from igc patch
> - Fixed logic in updating eics value when  both TX and RX need wakeup
> 
> v3 -> v4
> - Added comments to explain trigerring of both TX and RX with active queue 
> pairs
> - Fixed check of xsk pools in if statement
> 
> v4 -> v5
> - Introduced a simplified logic for sequential check for RX and TX
> ---
>  .../net/ethernet/intel/igb/e1000_defines.h|  1 +
>  drivers/net/ethernet/intel/igb/igb_xsk.c  | 75 +++
>  2 files changed, 61 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h 
> b/drivers/net/ethernet/intel/igb/e1000_defines.h
> index fa028928482f..9357564a2d58 100644
> --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> @@ -443,6 +443,7 @@
>  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change */
>  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min. threshold */
>  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted */
> +#define E1000_ICS_TXDW  E1000_ICR_TXDW   /* Transmit desc written back */
>  
>  /* Extended Interrupt Cause Set */
>  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */
> diff --git a/drivers/net/ethernet/intel/igb/igb_xsk.c 
> b/drivers/net/ethernet/intel/igb/igb_xsk.c
> index 30ce5fbb5b77..6e51b5b6f131 100644
> --- a/drivers/net/ethernet/intel/igb/igb_xsk.c
> +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
> @@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 
> flags)
>   struct igb_adapter *adapter = netdev_priv(dev);
>   struct e1000_hw *hw = &adapter->hw;
>   struct igb_ring *ring;
> + struct igb_q_vector *q_vector;
> + struct napi_struct *rx_napi;
> + struct napi_struct *tx_napi;
> + bool trigger_irq_tx = false;
> + bool trigger_irq_rx = false;
> + u32 eics_tx = 0;
> + u32 eics_rx = 0;
>   u32 eics = 0;
>  
>   if (test_bit(__IGB_DOWN, &adapter->state))
> @@ -536,27 +543,65 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 
> flags)
>  
>   if (!igb_xdp_is_enabled(adapter))
>   return -EINVAL;
> -
> - if (qid >= adapter->num_tx_queues)
> + /* Check if queue_id is valid. Tx and Rx queue numbers are always same 
> */
> + if (qid >= adapter->num_rx_queues)
>   return -EINVAL;
> -
> - ring = adapter->tx_ring[qid];
> -
> - if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
> - return -ENETDOWN;
> -
> - if (!READ_ONCE(ring->xsk_pool))
> + /* Check if flags are valid */
> + if (!(flags & XDP_WAKEUP_RX) && !(flags & XDP_WAKEUP_TX))
>   return -EINVAL;
> -
> - if (!napi_if_scheduled_mark_missed(&ring->q_vector->napi)) {
> - /* Cause software interrupt */
> + if (flags & XDP_

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-13 Thread Behera, VIVEK via Intel-wired-lan



> -Ursprüngliche Nachricht-
> Von: Loktionov, Aleksandr 
> Gesendet: Dienstag, 13. Januar 2026 10:00
> An: Behera, Vivek (DI FA DSP ICC PRC1) ; Keller,
> Jacob E ; Nguyen, Anthony L
> ; Kitszel, Przemyslaw
> ; Fijalkowski, Maciej
> ; [email protected];
> [email protected]
> Cc: [email protected]; Behera, Vivek (DI FA DSP ICC PRC1)
> 
> Betreff: RE: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in 
> igb_xsk_wakeup
> 
> 
> 
> > -Original Message-
> > From: Vivek Behera 
> > Sent: Monday, January 12, 2026 2:04 PM
> > To: Loktionov, Aleksandr ; Keller,
> > Jacob E ; Nguyen, Anthony L
> > ; Kitszel, Przemyslaw
> > ; Fijalkowski, Maciej
> > ; [email protected];
> > [email protected]
> > Cc: [email protected]; Behera, Vivek
> > 
> > Subject: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in
> > igb_xsk_wakeup
> >
> > The current implementation in the igb_xsk_wakeup expects the Rx and Tx
> > queues to share the same irq. This would lead to triggering of
> > incorrect irq in split irq configuration.
> > This patch addresses this issue which could impact environments with 2
> > active cpu cores or when the number of queues is reduced to 2 or less
> >
> > cat /proc/interrupts | grep eno2
> >  167:  0  0  0  0 IR-PCI-MSIX-
> > :08:00.0
> >  0-edge  eno2
> >  168:  0  0  0  0 IR-PCI-MSIX-
> > :08:00.0
> >  1-edge  eno2-rx-0
> >  169:  0  0  0  0 IR-PCI-MSIX-
> > :08:00.0
> >  2-edge  eno2-rx-1
> >  170:  0  0  0  0 IR-PCI-MSIX-
> > :08:00.0
> >  3-edge  eno2-tx-0
> >  171:  0  0  0  0 IR-PCI-MSIX-
> > :08:00.0
> >  4-edge  eno2-tx-1
> >
> > Furthermore it uses the flags input argument to trigger either rx, tx
> > or both rx and tx irqs as specified in the ndo_xsk_wakeup api
> > documentation
> >
> > Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> > Signed-off-by: Vivek Behera 
> > Reviewed-by: Aleksandr Loktionov 
> > ---
> > v1:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251212131454.124116-1-&data=05%7C02%
> >
> 7Cvivek.behera%40siemens.com%7C89e4331d9dd54d83b19108de5282346c%7C38
> ae
> >
> 3bcd95794fd4addab42e1495d55a%7C1%7C0%7C639038916338104430%7CUnknow
> n%7C
> >
> TWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4
> zMi
> >
> IsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=m3LL7aO3Tvj9
> Kimm
> > uKo9Fgw6dEqAg%2F1pUBRzk3haioo%3D&reserved=0
> > [email protected]/
> > v2:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251215115416.410619-1-&data=05%7C02%
> >
> 7Cvivek.behera%40siemens.com%7C89e4331d9dd54d83b19108de5282346c%7C38
> ae
> >
> 3bcd95794fd4addab42e1495d55a%7C1%7C0%7C639038916338132851%7CUnknow
> n%7C
> >
> TWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4
> zMi
> >
> IsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=KaVmMrku6oX
> yzlRh
> > Ii5qvgm47j5HWJ4ma601OvHysxM%3D&reserved=0
> > [email protected]/
> > v3:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251220114936.140473-1-&data=05%7C02%
> >
> 7Cvivek.behera%40siemens.com%7C89e4331d9dd54d83b19108de5282346c%7C38
> ae
> >
> 3bcd95794fd4addab42e1495d55a%7C1%7C0%7C639038916338151419%7CUnknow
> n%7C
> >
> TWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4
> zMi
> >
> IsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=lTjnm324in4Zap
> H4
> > veRCyAqnkYpAgfzi1fcDpAxqmZE%3D&reserved=0
> > [email protected]/
> > v4:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251222115747.230521-1-&data=05%7C02%
> >
> 7Cvivek.behera%40siemens.com%7C89e4331d9dd54d83b19108de5282346c%7C38
> ae
> >
> 3bcd95794fd4addab42e1495d55a%7C1%7C0%7C639038916338169212%7CUnknow
> n%7C
> >
> TWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4
> zMi
> >
> IsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=YE9U7UzDDE
> %2FyNc
> > tyeMkJgD8Jmdhch4TlpuovCNa4bY0%3D&reserved=0
> > [email protected]/
> >
> > changelog:
> > v1
> > - Inital description of the Bug and fixes made in the patch
> >
> > v1 -> v2
> > - Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ
> > configuration
> > - Review suggestions by Aleksander: Modified sequence to complete all
> >   error checks for rx and tx before updating napi states and
> > triggering irqs
> > - Corrected trigger of TX and RX interrupts over E1000_ICS (non msix
> > use case)
> > - Added define for Tx interrupt trigger bit mask for E1000_ICS
> >
> > v2 -> v3
> > - Included applicable feedback and suggestions from igc patch
> > - Fixed logic in updating ei

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-13 Thread Loktionov, Aleksandr



> -Original Message-
> From: Vivek Behera 
> Sent: Monday, January 12, 2026 2:04 PM
> To: Loktionov, Aleksandr ; Keller,
> Jacob E ; Nguyen, Anthony L
> ; Kitszel, Przemyslaw
> ; Fijalkowski, Maciej
> ; [email protected];
> [email protected]
> Cc: [email protected]; Behera, Vivek
> 
> Subject: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in
> igb_xsk_wakeup
> 
> The current implementation in the igb_xsk_wakeup expects the Rx and Tx
> queues to share the same irq. This would lead to triggering of
> incorrect irq in split irq configuration.
> This patch addresses this issue which could impact environments with 2
> active cpu cores or when the number of queues is reduced to 2 or less
> 
> cat /proc/interrupts | grep eno2
>  167:  0  0  0  0 IR-PCI-MSIX-
> :08:00.0
>  0-edge  eno2
>  168:  0  0  0  0 IR-PCI-MSIX-
> :08:00.0
>  1-edge  eno2-rx-0
>  169:  0  0  0  0 IR-PCI-MSIX-
> :08:00.0
>  2-edge  eno2-rx-1
>  170:  0  0  0  0 IR-PCI-MSIX-
> :08:00.0
>  3-edge  eno2-tx-0
>  171:  0  0  0  0 IR-PCI-MSIX-
> :08:00.0
>  4-edge  eno2-tx-1
> 
> Furthermore it uses the flags input argument to trigger either rx, tx
> or both rx and tx irqs as specified in the ndo_xsk_wakeup api
> documentation
> 
> Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> Signed-off-by: Vivek Behera 
> Reviewed-by: Aleksandr Loktionov 
> ---
> v1: https://lore.kernel.org/intel-wired-lan/20251212131454.124116-1-
> [email protected]/
> v2: https://lore.kernel.org/intel-wired-lan/20251215115416.410619-1-
> [email protected]/
> v3: https://lore.kernel.org/intel-wired-lan/20251220114936.140473-1-
> [email protected]/
> v4: https://lore.kernel.org/intel-wired-lan/20251222115747.230521-1-
> [email protected]/
> 
> changelog:
> v1
> - Inital description of the Bug and fixes made in the patch
> 
> v1 -> v2
> - Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ
> configuration
> - Review suggestions by Aleksander: Modified sequence to complete all
>   error checks for rx and tx before updating napi states and
> triggering irqs
> - Corrected trigger of TX and RX interrupts over E1000_ICS (non msix
> use case)
> - Added define for Tx interrupt trigger bit mask for E1000_ICS
> 
> v2 -> v3
> - Included applicable feedback and suggestions from igc patch
> - Fixed logic in updating eics value when  both TX and RX need wakeup
> 
> v3 -> v4
> - Added comments to explain trigerring of both TX and RX with active
> queue pairs
> - Fixed check of xsk pools in if statement
> 
> v4 -> v5
> - Introduced a simplified logic for sequential check for RX and TX
> ---
>  .../net/ethernet/intel/igb/e1000_defines.h|  1 +
>  drivers/net/ethernet/intel/igb/igb_xsk.c  | 75 +++---
> -
>  2 files changed, 61 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h
> b/drivers/net/ethernet/intel/igb/e1000_defines.h
> index fa028928482f..9357564a2d58 100644
> --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> @@ -443,6 +443,7 @@
>  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change
> */
>  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min.
> threshold */
>  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset
> Aserted */
> +#define E1000_ICS_TXDW  E1000_ICR_TXDW   /* Transmit desc
> written back */
> 
>  /* Extended Interrupt Cause Set */
>  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ diff --git
> a/drivers/net/ethernet/intel/igb/igb_xsk.c
> b/drivers/net/ethernet/intel/igb/igb_xsk.c
> index 30ce5fbb5b77..6e51b5b6f131 100644
> --- a/drivers/net/ethernet/intel/igb/igb_xsk.c
> +++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
> @@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev, u32
> qid, u32 flags)
>   struct igb_adapter *adapter = netdev_priv(dev);
>   struct e1000_hw *hw = &adapter->hw;
>   struct igb_ring *ring;
> + struct igb_q_vector *q_vector;
> + struct napi_struct *rx_napi;
> + struct napi_struct *tx_napi;
> + bool trigger_irq_tx = false;
> + bool trigger_irq_rx = false;
> + u32 eics_tx = 0;
> + u32 eics_rx = 0;
>   u32 eics = 0;
> 
>   if (test_bit(__IGB_DOWN, &adapter->state)) @@ -536,27 +543,65
> @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)
> 
>   if (!igb_xdp_is_enabled(adapter))
>   return -EINVAL;
> -
> - if (qid >= adapter->num_tx_queues)
> + /* Check if queue_id is valid. Tx and Rx queue numbers are
> always same */
> + if (qid >= adapter->num_rx_queues)
>   return -EINVAL;
But the number may differ in case of reconfiguration.
Why not:
if (qid >= adapter->num_rx_queues |

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-12 Thread Behera, VIVEK via Intel-wired-lan
Hi Paul,

Thanks for your feedback. I will include your suggestions in the next version 
of the patch 

> -Ursprüngliche Nachricht-
> Von: Paul Menzel 
> Gesendet: Montag, 12. Januar 2026 15:12
> An: Behera, Vivek (DI FA DSP ICC PRC1) 
> Cc: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]
> Betreff: Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of 
> incorrect irq in
> igb_xsk_wakeup
> 
> Dear Vivek,
> 
> 
> Thank you for your patch. Some minor comments below.
> 
> Am 12.01.26 um 14:03 schrieb Vivek Behera via Intel-wired-lan:
> > The current implementation in the igb_xsk_wakeup expects the Rx and Tx
> > queues
> 
> Please re-flow for 75 characters per line.
> 
> > to share the same irq. This would lead to triggering of incorrect irq
> > in split irq configuration.
> > This patch addresses this issue which could impact environments with 2
> > active cpu cores or when the number of queues is reduced to 2 or less
> 
> Why break the line in the middle of the sentence?
> 
> > cat /proc/interrupts | grep eno2
> >   167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >   0-edge  eno2
> >   168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >   1-edge  eno2-rx-0
> >   169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >   2-edge  eno2-rx-1
> >   170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >   3-edge  eno2-tx-0
> >   171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> >   4-edge  eno2-tx-1
> >
> > Furthermore it uses the flags input argument to trigger either rx, tx
> > or both rx and tx irqs as specified in the ndo_xsk_wakeup api
> > documentation
> 
> Please add a dot/period at the end of sentences.
> 
> > Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> > Signed-off-by: Vivek Behera 
> > Reviewed-by: Aleksandr Loktionov 
> > ---
> > v1:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251212131454.124116-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7C96def2f
> e2d
> >
> 6c49e4144208de51e49371%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9038239346073271%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=WjSv74wZk60k3930VLYz2L2C8jAWfWVLWHyqBuoIiCQ%3D&rese
> rved=0
> > v2:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251215115416.410619-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7C96def2f
> e2d
> >
> 6c49e4144208de51e49371%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9038239346119542%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=d6BslMcsbOzhMJ7mPhiO2%2B1voZ1pUEDtlt5IEcEDiXQ%3D&re
> served
> > =0
> > v3:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251220114936.140473-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7C96def2f
> e2d
> >
> 6c49e4144208de51e49371%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9038239346160501%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=vTKHOwGEYTxFTxKLD1HSmD6r88cQI8SB9KBexi128HA%3D&re
> served=0
> > v4:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fintel-wired-lan%2F20251222115747.230521-1-vivek.behera%4
> >
> 0siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.com%7C96def2f
> e2d
> >
> 6c49e4144208de51e49371%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7
> C63
> >
> 9038239346202115%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiO
> >
> iIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7
> C
> >
> %7C%7C&sdata=FqWB94I9hDxPnQy3OLmkzv7WZrG80fpOyW2saoMDDOM%3D&r
> eserved=0
> >
&

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-12 Thread Behera, VIVEK via Intel-wired-lan



> -Ursprüngliche Nachricht-
> Von: Kwapulinski, Piotr 
> Gesendet: Montag, 12. Januar 2026 15:54
> An: Behera, Vivek (DI FA DSP ICC PRC1) ;
> Loktionov, Aleksandr ; Keller, Jacob E
> ; Nguyen, Anthony L ;
> Kitszel, Przemyslaw ; Fijalkowski, Maciej
> ; [email protected];
> [email protected]
> Cc: [email protected]
> Betreff: RE: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of 
> incorrect irq in
> igb_xsk_wakeup
>
> >-Original Message-
> >From: Intel-wired-lan  On Behalf Of Vivek
> Behera via Intel-wired-lan
> >Sent: Monday, January 12, 2026 2:04 PM
> >To: Loktionov, Aleksandr ; Keller, Jacob E
> ; Nguyen, Anthony L ;
> Kitszel, Przemyslaw ; Fijalkowski, Maciej
> ; [email protected];
> [email protected]
> >Cc: [email protected]; Behera, Vivek 
> >
> >Subject: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect 
> >irq in
> igb_xsk_wakeup
> >
> >The current implementation in the igb_xsk_wakeup expects the Rx and Tx queues
> to share the same irq. This would lead to triggering of incorrect irq in 
> split irq
> configuration.
> >This patch addresses this issue which could impact environments with 2 
> >active cpu
> cores or when the number of queues is reduced to 2 or less
> >
> >cat /proc/interrupts | grep eno2
> > 167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> > 0-edge  eno2
> > 168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> > 1-edge  eno2-rx-0
> > 169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> > 2-edge  eno2-rx-1
> > 170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> > 3-edge  eno2-tx-0
> > 171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> > 4-edge  eno2-tx-1
> >
> >Furthermore it uses the flags input argument to trigger either rx, tx or 
> >both rx and tx
> irqs as specified in the ndo_xsk_wakeup api documentation
> >
> >Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> >Signed-off-by: Vivek Behera 
> >Reviewed-by: Aleksandr Loktionov 
> >---
> >v1:
> https://lore.kernel.org/
> %2Fintel-wired-lan%2F20251212131454.124116-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.c
> om%7Ccb7787910aa7418c604008de51ea6e02%7C38ae3bcd95794fd4addab42e1495
> d55a%7C1%7C0%7C639038264488251701%7CUnknown%7CTWFpbGZsb3d8eyJFb
> XB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbC
> IsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=MQHlgMmrbsKJOnjBXpN3r0XDa2
> omFxwgw9eJrfypeyU%3D&reserved=0
> >v2:
> https://lore.kernel.org/
> %2Fintel-wired-lan%2F20251215115416.410619-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.c
> om%7Ccb7787910aa7418c604008de51ea6e02%7C38ae3bcd95794fd4addab42e1495
> d55a%7C1%7C0%7C639038264488322888%7CUnknown%7CTWFpbGZsb3d8eyJFb
> XB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbC
> IsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=6bf2asonyRHwDTgMKdsrtuuprEn
> oDSC8FH9lXaNOmcc%3D&reserved=0
> >v3:
> https://lore.kernel.org/
> %2Fintel-wired-lan%2F20251220114936.140473-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.c
> om%7Ccb7787910aa7418c604008de51ea6e02%7C38ae3bcd95794fd4addab42e1495
> d55a%7C1%7C0%7C639038264488406758%7CUnknown%7CTWFpbGZsb3d8eyJFb
> XB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbC
> IsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=kWSBkyPnmfekbtpSw2pbD2OMf
> 7auXWIfPWRArZuFK98%3D&reserved=0
> >v4:
> https://lore.kernel.org/
> %2Fintel-wired-lan%2F20251222115747.230521-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens.c
> om%7Ccb7787910aa7418c604008de51ea6e02%7C38ae3bcd95794fd4addab42e1495
> d55a%7C1%7C0%7C639038264488464388%7CUnknown%7CTWFpbGZsb3d8eyJFb
> XB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbC
> IsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=NIanHqowaMuUfVsgYDEDTkY5rt
> RfD8Aj6Tnk1O6aN14%3D&reserved=0
> >
> >changelog:
> >v1
> >- Inital description of the Bug and fixes made in the patch
> >
> >v1 -> v2
> >- Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ 
> >configuration
> >- Review suggestions by Aleksander: Modified sequence to complete all
> >  error checks for rx and tx before updating napi states and triggering irqs
> >- Corrected trigger of TX and RX interrupts over E1000_ICS (non msix use 
> >case)
> >- Added define for Tx int

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-12 Thread Behera, VIVEK via Intel-wired-lan



> -Original Message-
> From: Behera, Vivek (DI FA DSP ICC PRC1) 
> Sent: Monday, January 12, 2026 2:04 PM
> To: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]
> Cc: [email protected]; Behera, Vivek (DI FA DSP ICC PRC1)
> 
> Subject: [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in 
> igb_xsk_wakeup
>
> The current implementation in the igb_xsk_wakeup expects the Rx and Tx queues
> to share the same irq. This would lead to triggering of incorrect irq in 
> split irq
> configuration.
> This patch addresses this issue which could impact environments with 2 active
> cpu cores or when the number of queues is reduced to 2 or less
>
> cat /proc/interrupts | grep eno2
>  167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  0-edge  eno2
>  168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  1-edge  eno2-rx-0
>  169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  2-edge  eno2-rx-1
>  170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  3-edge  eno2-tx-0
>  171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
>  4-edge  eno2-tx-1
>
> Furthermore it uses the flags input argument to trigger either rx, tx or both 
> rx and
> tx irqs as specified in the ndo_xsk_wakeup api documentation
>
> Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
> Signed-off-by: Vivek Behera 
> Reviewed-by: Aleksandr Loktionov 
> ---
> v1:
> https://lore.kernel.o/
> rg%2Fintel-wired-lan%2F20251212131454.124116-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens
> .com%7C195e9677fcd9464e392c08de51db0d32%7C38ae3bcd95794fd4addab42e1
> 495d55a%7C1%7C0%7C639038198405683495%7CUnknown%7CTWFpbGZsb3d8
> eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoi
> TWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=rSn9N%2B9xaRiZoE5
> mjETCe2iG%2Buu4CfCnjwsJ8lIgLSg%3D&reserved=0
> v2:
> https://lore.kernel.o/
> rg%2Fintel-wired-lan%2F20251215115416.410619-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens
> .com%7C195e9677fcd9464e392c08de51db0d32%7C38ae3bcd95794fd4addab42e1
> 495d55a%7C1%7C0%7C639038198405727630%7CUnknown%7CTWFpbGZsb3d8
> eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoi
> TWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=uC83YhZDYrzPPMfbbk
> b06AEgsP%2Bqqre4Ht5TIZT46vI%3D&reserved=0
> v3:
> https://lore.kernel.o/
> rg%2Fintel-wired-lan%2F20251220114936.140473-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens
> .com%7C195e9677fcd9464e392c08de51db0d32%7C38ae3bcd95794fd4addab42e1
> 495d55a%7C1%7C0%7C639038198405760767%7CUnknown%7CTWFpbGZsb3d8
> eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoi
> TWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=ZYaDd3oMihS3FXabs
> NAMHTh0cVHxErFXsZ7V%2BK74TzY%3D&reserved=0
> v4:
> https://lore.kernel.o/
> rg%2Fintel-wired-lan%2F20251222115747.230521-1-
> vivek.behera%40siemens.com%2F&data=05%7C02%7Cvivek.behera%40siemens
> .com%7C195e9677fcd9464e392c08de51db0d32%7C38ae3bcd95794fd4addab42e1
> 495d55a%7C1%7C0%7C639038198405783856%7CUnknown%7CTWFpbGZsb3d8
> eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoi
> TWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=HYb8WkqgdiGLkXASa
> pmMQKvnFXAFwYFEErxQHAkSPXI%3D&reserved=0
>
> changelog:
> v1
> - Inital description of the Bug and fixes made in the patch
>
> v1 -> v2
> - Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ configuration
> - Review suggestions by Aleksander: Modified sequence to complete all
>   error checks for rx and tx before updating napi states and triggering irqs
> - Corrected trigger of TX and RX interrupts over E1000_ICS (non msix use case)
> - Added define for Tx interrupt trigger bit mask for E1000_ICS
>
> v2 -> v3
> - Included applicable feedback and suggestions from igc patch
> - Fixed logic in updating eics value when  both TX and RX need wakeup
>
> v3 -> v4
> - Added comments to explain trigerring of both TX and RX with active queue 
> pairs
> - Fixed check of xsk pools in if statement
>
> v4 -> v5
> - Introduced a simplified logic for sequential check for RX and TX
> ---
>  .../net/ethernet/intel/igb/e1000_defines.h|  1 +
>  drivers/net/ethernet/intel/igb/igb_xsk.c  | 75 +++
>  2 files changed, 61 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h
> b/drivers/net/ethernet/intel/igb/e1000_defines.h
> index fa028928482f..9357564a2d58 100644
> --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
> +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
> @@ -443,6 +443,7 @@
>  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change */
>  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min. thre

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-12 Thread Kwapulinski, Piotr
>-Original Message-
>From: Intel-wired-lan  On Behalf Of Vivek 
>Behera via Intel-wired-lan
>Sent: Monday, January 12, 2026 2:04 PM
>To: Loktionov, Aleksandr ; Keller, Jacob E 
>; Nguyen, Anthony L ; 
>Kitszel, Przemyslaw ; Fijalkowski, Maciej 
>; [email protected]; 
>[email protected]
>Cc: [email protected]; Behera, Vivek 
>Subject: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect 
>irq in igb_xsk_wakeup
>
>The current implementation in the igb_xsk_wakeup expects the Rx and Tx queues 
>to share the same irq. This would lead to triggering of incorrect irq in split 
>irq configuration.
>This patch addresses this issue which could impact environments with 2 active 
>cpu cores or when the number of queues is reduced to 2 or less
>
>cat /proc/interrupts | grep eno2
> 167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> 0-edge  eno2
> 168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> 1-edge  eno2-rx-0
> 169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> 2-edge  eno2-rx-1
> 170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> 3-edge  eno2-tx-0
> 171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
> 4-edge  eno2-tx-1
>
>Furthermore it uses the flags input argument to trigger either rx, tx or both 
>rx and tx irqs as specified in the ndo_xsk_wakeup api documentation
>
>Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
>Signed-off-by: Vivek Behera 
>Reviewed-by: Aleksandr Loktionov 
>---
>v1: 
>https://lore.kernel.org/intel-wired-lan/[email protected]/
>v2: 
>https://lore.kernel.org/intel-wired-lan/[email protected]/
>v3: 
>https://lore.kernel.org/intel-wired-lan/[email protected]/
>v4: 
>https://lore.kernel.org/intel-wired-lan/[email protected]/
>
>changelog:
>v1
>- Inital description of the Bug and fixes made in the patch
>
>v1 -> v2
>- Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ configuration
>- Review suggestions by Aleksander: Modified sequence to complete all
>  error checks for rx and tx before updating napi states and triggering irqs
>- Corrected trigger of TX and RX interrupts over E1000_ICS (non msix use case)
>- Added define for Tx interrupt trigger bit mask for E1000_ICS
>
>v2 -> v3
>- Included applicable feedback and suggestions from igc patch
>- Fixed logic in updating eics value when  both TX and RX need wakeup
>
>v3 -> v4
>- Added comments to explain trigerring of both TX and RX with active queue 
>pairs
>- Fixed check of xsk pools in if statement
>
>v4 -> v5
>- Introduced a simplified logic for sequential check for RX and TX
>---
> .../net/ethernet/intel/igb/e1000_defines.h|  1 +
> drivers/net/ethernet/intel/igb/igb_xsk.c  | 75 +++
> 2 files changed, 61 insertions(+), 15 deletions(-)
>
>diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h 
>b/drivers/net/ethernet/intel/igb/e1000_defines.h
>index fa028928482f..9357564a2d58 100644
>--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
>+++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
>@@ -443,6 +443,7 @@
> #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change */
> #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min. threshold */
> #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted */
>+#define E1000_ICS_TXDW  E1000_ICR_TXDW/* Transmit desc written back */
> 
> /* Extended Interrupt Cause Set */
> /* E1000_EITR_CNT_IGNR is only for 82576 and newer */ diff --git 
> a/drivers/net/ethernet/intel/igb/igb_xsk.c 
> b/drivers/net/ethernet/intel/igb/igb_xsk.c
>index 30ce5fbb5b77..6e51b5b6f131 100644
>--- a/drivers/net/ethernet/intel/igb/igb_xsk.c
>+++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
>@@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 
>flags)
>   struct igb_adapter *adapter = netdev_priv(dev);
>   struct e1000_hw *hw = &adapter->hw;
>   struct igb_ring *ring;
>+  struct igb_q_vector *q_vector;
>+  struct napi_struct *rx_napi;
>+  struct napi_struct *tx_napi;
Please merge into a single line

>+  bool trigger_irq_tx = false;
>+  bool trigger_irq_rx = false;
Please merge into a single line

>+  u32 eics_tx = 0;
>+  u32 eics_rx = 0;
>   u32 eics = 0;
Please merge into a single line

> 
>   if (test_bit(__IGB_DOWN, &adapter->state)) @@ -536,27 +543,65 @@ int 
> igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)
> 
>   if (!igb_xdp_is_enabled(adapter))
>   return -EINVAL;
>-
>-  if (qid >= adapter->num_tx_queues)
>+  /* Check if queue_id is valid. Tx and Rx queue numbers are always same 
>*/
>+  if (qid >= adapter->num_rx_queues)
>   return -EINVAL;
>-
>-  ring = adapter->tx_ring[qid];
>-
>-

Re: [Intel-wired-lan] [PATCH iwl-net v5] igb: Fix trigger of incorrect irq in igb_xsk_wakeup

2026-01-12 Thread Paul Menzel

Dear Vivek,


Thank you for your patch. Some minor comments below.

Am 12.01.26 um 14:03 schrieb Vivek Behera via Intel-wired-lan:

The current implementation in the igb_xsk_wakeup expects the Rx and Tx queues


Please re-flow for 75 characters per line.


to share the same irq. This would lead to triggering of incorrect irq
in split irq configuration.
This patch addresses this issue which could impact environments
with 2 active cpu cores
or when the number of queues is reduced to 2 or less


Why break the line in the middle of the sentence?


cat /proc/interrupts | grep eno2
  167:  0  0  0  0 IR-PCI-MSIX-:08:00.0
  0-edge  eno2
  168:  0  0  0  0 IR-PCI-MSIX-:08:00.0
  1-edge  eno2-rx-0
  169:  0  0  0  0 IR-PCI-MSIX-:08:00.0
  2-edge  eno2-rx-1
  170:  0  0  0  0 IR-PCI-MSIX-:08:00.0
  3-edge  eno2-tx-0
  171:  0  0  0  0 IR-PCI-MSIX-:08:00.0
  4-edge  eno2-tx-1

Furthermore it uses the flags input argument to trigger either rx, tx or
both rx and tx irqs as specified in the ndo_xsk_wakeup api documentation


Please add a dot/period at the end of sentences.


Fixes: 80f6ccf9f116 ("igb: Introduce XSK data structures and helpers")
Signed-off-by: Vivek Behera 
Reviewed-by: Aleksandr Loktionov 
---
v1: 
https://lore.kernel.org/intel-wired-lan/[email protected]/
v2: 
https://lore.kernel.org/intel-wired-lan/[email protected]/
v3: 
https://lore.kernel.org/intel-wired-lan/[email protected]/
v4: 
https://lore.kernel.org/intel-wired-lan/[email protected]/

changelog:
v1
- Inital description of the Bug and fixes made in the patch


Initial



v1 -> v2
- Handling of RX and TX Wakeup in igc_xsk_wakeup for a split IRQ configuration
- Review suggestions by Aleksander: Modified sequence to complete all
   error checks for rx and tx before updating napi states and triggering irqs
- Corrected trigger of TX and RX interrupts over E1000_ICS (non msix use case)
- Added define for Tx interrupt trigger bit mask for E1000_ICS

v2 -> v3
- Included applicable feedback and suggestions from igc patch
- Fixed logic in updating eics value when  both TX and RX need wakeup

v3 -> v4
- Added comments to explain trigerring of both TX and RX with active queue pairs
- Fixed check of xsk pools in if statement

v4 -> v5
- Introduced a simplified logic for sequential check for RX and TX
---
  .../net/ethernet/intel/igb/e1000_defines.h|  1 +
  drivers/net/ethernet/intel/igb/igb_xsk.c  | 75 +++
  2 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h 
b/drivers/net/ethernet/intel/igb/e1000_defines.h
index fa028928482f..9357564a2d58 100644
--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
+++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
@@ -443,6 +443,7 @@
  #define E1000_ICS_LSC   E1000_ICR_LSC   /* Link Status Change */
  #define E1000_ICS_RXDMT0E1000_ICR_RXDMT0/* rx desc min. threshold */
  #define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted */
+#define E1000_ICS_TXDW  E1000_ICR_TXDW /* Transmit desc written back */
  
  /* Extended Interrupt Cause Set */

  /* E1000_EITR_CNT_IGNR is only for 82576 and newer */
diff --git a/drivers/net/ethernet/intel/igb/igb_xsk.c 
b/drivers/net/ethernet/intel/igb/igb_xsk.c
index 30ce5fbb5b77..6e51b5b6f131 100644
--- a/drivers/net/ethernet/intel/igb/igb_xsk.c
+++ b/drivers/net/ethernet/intel/igb/igb_xsk.c
@@ -529,6 +529,13 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 
flags)
struct igb_adapter *adapter = netdev_priv(dev);
struct e1000_hw *hw = &adapter->hw;
struct igb_ring *ring;
+   struct igb_q_vector *q_vector;
+   struct napi_struct *rx_napi;
+   struct napi_struct *tx_napi;
+   bool trigger_irq_tx = false;
+   bool trigger_irq_rx = false;
+   u32 eics_tx = 0;
+   u32 eics_rx = 0;
u32 eics = 0;
  
  	if (test_bit(__IGB_DOWN, &adapter->state))

@@ -536,27 +543,65 @@ int igb_xsk_wakeup(struct net_device *dev, u32 qid, u32 
flags)
  
  	if (!igb_xdp_is_enabled(adapter))

return -EINVAL;
-


Why remove the blank line.


-   if (qid >= adapter->num_tx_queues)
+   /* Check if queue_id is valid. Tx and Rx queue numbers are always same 
*/
+   if (qid >= adapter->num_rx_queues)
return -EINVAL;
-
-   ring = adapter->tx_ring[qid];
-
-   if (test_bit(IGB_RING_FLAG_TX_DISABLED, &ring->flags))
-   return -ENETDOWN;
-
-   if (!READ_ONCE(ring->xsk_pool))
+   /* Check if flags are valid */
+   if (!(flags & XDP_WAKEUP_RX) && !(flags & XDP_WAKEUP_TX))
return -EINVAL;


The comment seems redundant.


-
-   i