Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34cbe27e authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: napi_hash_del() returns a boolean status



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: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6180d9de
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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
+7 −3
Original line number Diff line number Diff line
@@ -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);