Skip to content

Commit

Permalink
net: napi_hash_del() returns a boolean status
Browse files Browse the repository at this point in the history
napi_hash_del() will soon be used from both drivers (if they want)
or core networking stack.

Callers are responsibles to ensure an RCU grace period is respected
before freeing napi structure : napi_hash_del() can signal if
this RCU grace period is needed or not.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Nov 18, 2015
1 parent 6180d9d commit 34cbe27
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
5 changes: 3 additions & 2 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -474,9 +474,10 @@ void napi_hash_add(struct napi_struct *napi);
* @napi: napi context
*
* Warning: caller must observe rcu grace period
* before freeing memory containing @napi
* before freeing memory containing @napi, if
* this function returns true.
*/
void napi_hash_del(struct napi_struct *napi);
bool napi_hash_del(struct napi_struct *napi);

/**
* napi_disable - prevent NAPI from scheduling
Expand Down
10 changes: 7 additions & 3 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -4760,14 +4760,18 @@ EXPORT_SYMBOL_GPL(napi_hash_add);
/* Warning : caller is responsible to make sure rcu grace period
* is respected before freeing memory containing @napi
*/
void napi_hash_del(struct napi_struct *napi)
bool napi_hash_del(struct napi_struct *napi)
{
bool rcu_sync_needed = false;

spin_lock(&napi_hash_lock);

if (test_and_clear_bit(NAPI_STATE_HASHED, &napi->state))
if (test_and_clear_bit(NAPI_STATE_HASHED, &napi->state)) {
rcu_sync_needed = true;
hlist_del_rcu(&napi->napi_hash_node);

}
spin_unlock(&napi_hash_lock);
return rcu_sync_needed;
}
EXPORT_SYMBOL_GPL(napi_hash_del);

Expand Down

0 comments on commit 34cbe27

Please sign in to comment.