Skip to content

Commit

Permalink
net: add napi_if_scheduled_mark_missed
Browse files Browse the repository at this point in the history
The function napi_if_scheduled_mark_missed is used to check if the
NAPI context is scheduled, if so set NAPIF_STATE_MISSED and return
true. Used by the AF_XDP zero-copy i40e Tx code implementation in
order to make sure that irq affinity is honored by the napi context.

Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
  • Loading branch information
Magnus Karlsson authored and Alexei Starovoitov committed Aug 29, 2018
1 parent 9025403 commit 6c5c958
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,32 @@ static inline void napi_synchronize(const struct napi_struct *n)
barrier();
}

/**
* napi_if_scheduled_mark_missed - if napi is running, set the
* NAPIF_STATE_MISSED
* @n: NAPI context
*
* If napi is running, set the NAPIF_STATE_MISSED, and return true if
* NAPI is scheduled.
**/
static inline bool napi_if_scheduled_mark_missed(struct napi_struct *n)
{
unsigned long val, new;

do {
val = READ_ONCE(n->state);
if (val & NAPIF_STATE_DISABLE)
return true;

if (!(val & NAPIF_STATE_SCHED))
return false;

new = val | NAPIF_STATE_MISSED;
} while (cmpxchg(&n->state, val, new) != val);

return true;
}

enum netdev_queue_state_t {
__QUEUE_STATE_DRV_XOFF,
__QUEUE_STATE_STACK_XOFF,
Expand Down

0 comments on commit 6c5c958

Please sign in to comment.