net: use napi_id_valid helper
authorStefano Jordhani <sjordhani@gmail.com>
Fri, 14 Feb 2025 18:17:51 +0000 (18:17 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 18 Feb 2025 00:43:04 +0000 (16:43 -0800)
In commit 6597e8d35851 ("netdev-genl: Elide napi_id when not present"),
napi_id_valid function was added. Use the helper to refactor open-coded
checks in the source.

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Stefano Jordhani <sjordhani@gmail.com>
Reviewed-by: Joe Damato <jdamato@fastly.com>
Reviewed-by: Jens Axboe <axboe@kernel.dk> # for iouring
Link: https://patch.msgid.link/20250214181801.931-1-sjordhani@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
fs/eventpoll.c
include/net/busy_poll.h
io_uring/napi.c
net/core/dev.c
net/core/netdev-genl.c
net/core/page_pool_user.c
net/core/sock.c
net/xdp/xsk.c

index 7c0980db77b3178ae23699f0907bcbdaee44c458..2fecf66661e9ace450157ab46efec93b516c1d62 100644 (file)
@@ -447,7 +447,7 @@ static bool ep_busy_loop(struct eventpoll *ep, int nonblock)
        if (!budget)
                budget = BUSY_POLL_BUDGET;
 
-       if (napi_id >= MIN_NAPI_ID && ep_busy_loop_on(ep)) {
+       if (napi_id_valid(napi_id) && ep_busy_loop_on(ep)) {
                napi_busy_loop(napi_id, nonblock ? NULL : ep_busy_loop_end,
                               ep, prefer_busy_poll, budget);
                if (ep_events_available(ep))
@@ -492,7 +492,7 @@ static inline void ep_set_busy_poll_napi_id(struct epitem *epi)
         *      or
         * Nothing to do if we already have this ID
         */
-       if (napi_id < MIN_NAPI_ID || napi_id == ep->napi_id)
+       if (!napi_id_valid(napi_id) || napi_id == ep->napi_id)
                return;
 
        /* record NAPI ID for use in next busy poll */
@@ -546,7 +546,7 @@ static void ep_suspend_napi_irqs(struct eventpoll *ep)
 {
        unsigned int napi_id = READ_ONCE(ep->napi_id);
 
-       if (napi_id >= MIN_NAPI_ID && READ_ONCE(ep->prefer_busy_poll))
+       if (napi_id_valid(napi_id) && READ_ONCE(ep->prefer_busy_poll))
                napi_suspend_irqs(napi_id);
 }
 
@@ -554,7 +554,7 @@ static void ep_resume_napi_irqs(struct eventpoll *ep)
 {
        unsigned int napi_id = READ_ONCE(ep->napi_id);
 
-       if (napi_id >= MIN_NAPI_ID && READ_ONCE(ep->prefer_busy_poll))
+       if (napi_id_valid(napi_id) && READ_ONCE(ep->prefer_busy_poll))
                napi_resume_irqs(napi_id);
 }
 
index 741fa77547001aa5d966763c81540ee9210c949e..cab6146a510a17ea605100273478f18f74f85283 100644 (file)
@@ -119,7 +119,7 @@ static inline void sk_busy_loop(struct sock *sk, int nonblock)
 #ifdef CONFIG_NET_RX_BUSY_POLL
        unsigned int napi_id = READ_ONCE(sk->sk_napi_id);
 
-       if (napi_id >= MIN_NAPI_ID)
+       if (napi_id_valid(napi_id))
                napi_busy_loop(napi_id, nonblock ? NULL : sk_busy_loop_end, sk,
                               READ_ONCE(sk->sk_prefer_busy_poll),
                               READ_ONCE(sk->sk_busy_poll_budget) ?: BUSY_POLL_BUDGET);
@@ -134,7 +134,7 @@ static inline void skb_mark_napi_id(struct sk_buff *skb,
        /* If the skb was already marked with a valid NAPI ID, avoid overwriting
         * it.
         */
-       if (skb->napi_id < MIN_NAPI_ID)
+       if (!napi_id_valid(skb->napi_id))
                skb->napi_id = napi->napi_id;
 #endif
 }
index b1ade3fda30f3e97110503cfe7b19d8fee5d22c0..4a10de03e42693022a773fdfe10162159acfdc14 100644 (file)
@@ -44,7 +44,7 @@ int __io_napi_add_id(struct io_ring_ctx *ctx, unsigned int napi_id)
        struct io_napi_entry *e;
 
        /* Non-NAPI IDs can be rejected. */
-       if (napi_id < MIN_NAPI_ID)
+       if (!napi_id_valid(napi_id))
                return -EINVAL;
 
        hash_list = &ctx->napi_ht[hash_min(napi_id, HASH_BITS(ctx->napi_ht))];
@@ -87,7 +87,7 @@ static int __io_napi_del_id(struct io_ring_ctx *ctx, unsigned int napi_id)
        struct io_napi_entry *e;
 
        /* Non-NAPI IDs can be rejected. */
-       if (napi_id < MIN_NAPI_ID)
+       if (!napi_id_valid(napi_id))
                return -EINVAL;
 
        hash_list = &ctx->napi_ht[hash_min(napi_id, HASH_BITS(ctx->napi_ht))];
index d5ab9a4b318ea4926c200ef20dae01eaafa18c6b..bcb266ab29126c590ac8b10054ddd8360dd2b34a 100644 (file)
@@ -1008,7 +1008,7 @@ struct net_device *dev_get_by_napi_id(unsigned int napi_id)
 
        WARN_ON_ONCE(!rcu_read_lock_held());
 
-       if (napi_id < MIN_NAPI_ID)
+       if (!napi_id_valid(napi_id))
                return NULL;
 
        napi = napi_by_id(napi_id);
@@ -6740,7 +6740,7 @@ static void napi_hash_add(struct napi_struct *napi)
 
        /* 0..NR_CPUS range is reserved for sender_cpu use */
        do {
-               if (unlikely(++napi_gen_id < MIN_NAPI_ID))
+               if (unlikely(!napi_id_valid(++napi_gen_id)))
                        napi_gen_id = MIN_NAPI_ID;
        } while (napi_by_id(napi_gen_id));
 
@@ -6911,7 +6911,7 @@ netif_napi_dev_list_add(struct net_device *dev, struct napi_struct *napi)
 
        higher = &dev->napi_list;
        list_for_each_entry(pos, &dev->napi_list, dev_list) {
-               if (pos->napi_id >= MIN_NAPI_ID)
+               if (napi_id_valid(pos->napi_id))
                        pos_id = pos->napi_id;
                else if (pos->config)
                        pos_id = pos->config->napi_id;
index c18bb53d13fd81fe4e414ac79d3cd16f734d7176..22ac51356d9f6d83a682bd013fd21ede48ca0c26 100644 (file)
@@ -267,7 +267,7 @@ netdev_nl_napi_dump_one(struct net_device *netdev, struct sk_buff *rsp,
 
        prev_id = UINT_MAX;
        list_for_each_entry(napi, &netdev->napi_list, dev_list) {
-               if (napi->napi_id < MIN_NAPI_ID)
+               if (!napi_id_valid(napi->napi_id))
                        continue;
 
                /* Dump continuation below depends on the list being sorted */
index 9d8a3d8597fa84bb35b948d2984f9d6a2a2a55a4..c82a95beceff84e9ec5fcbae957f897368044829 100644 (file)
@@ -233,7 +233,7 @@ page_pool_nl_fill(struct sk_buff *rsp, const struct page_pool *pool,
                goto err_cancel;
 
        napi_id = pool->p.napi ? READ_ONCE(pool->p.napi->napi_id) : 0;
-       if (napi_id >= MIN_NAPI_ID &&
+       if (napi_id_valid(napi_id) &&
            nla_put_uint(rsp, NETDEV_A_PAGE_POOL_NAPI_ID, napi_id))
                goto err_cancel;
 
index a197f0a0b8788590f33ba0dda0528b03dc087497..53c7af0038c4fca630e1ac2ebecf55558cb16eef 100644 (file)
@@ -2042,7 +2042,7 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
                v.val = READ_ONCE(sk->sk_napi_id);
 
                /* aggregate non-NAPI IDs down to 0 */
-               if (v.val < MIN_NAPI_ID)
+               if (!napi_id_valid(v.val))
                        v.val = 0;
 
                break;
index 89d2bef964698434be6c7f994e278602821f651c..0edf259730726c7fcbd333e486fca3749394010c 100644 (file)
@@ -875,7 +875,7 @@ static bool xsk_no_wakeup(struct sock *sk)
 #ifdef CONFIG_NET_RX_BUSY_POLL
        /* Prefer busy-polling, skip the wakeup. */
        return READ_ONCE(sk->sk_prefer_busy_poll) && READ_ONCE(sk->sk_ll_usec) &&
-               READ_ONCE(sk->sk_napi_id) >= MIN_NAPI_ID;
+               napi_id_valid(READ_ONCE(sk->sk_napi_id));
 #else
        return false;
 #endif