• Shannon Nelson's avatar
    ionic: use dev_consume_skb_any outside of napi · 84b767f9
    Shannon Nelson authored
    If we're not in a NAPI softirq context, we need to be careful
    about how we call napi_consume_skb(), specifically we need to
    call it with budget==0 to signal to it that we're not in a
    safe context.
    
    This was found while running some configuration stress testing
    of traffic and a change queue config loop running, and this
    curious note popped out:
    
    [ 4371.402645] BUG: using smp_processor_id() in preemptible [00000000] code: ethtool/20545
    [ 4371.402897] caller is napi_skb_cache_put+0x16/0x80
    [ 4371.403120] CPU: 25 PID: 20545 Comm: ethtool Kdump: loaded Tainted: G           OE      6.10.0-rc3-netnext+ #8
    [ 4371.403302] Hardware name: HPE ProLiant DL360 Gen10/ProLiant DL360 Gen10, BIOS U32 01/23/2021
    [ 4371.403460] Call Trace:
    [ 4371.403613]  <TASK>
    [ 4371.403758]  dump_stack_lvl+0x4f/0x70
    [ 4371.403904]  check_preemption_disabled+0xc1/0xe0
    [ 4371.404051]  napi_skb_cache_put+0x16/0x80
    [ 4371.404199]  ionic_tx_clean+0x18a/0x240 [ionic]
    [ 4371.404354]  ionic_tx_cq_service+0xc4/0x200 [ionic]
    [ 4371.404505]  ionic_tx_flush+0x15/0x70 [ionic]
    [ 4371.404653]  ? ionic_lif_qcq_deinit.isra.23+0x5b/0x70 [ionic]
    [ 4371.404805]  ionic_txrx_deinit+0x71/0x190 [ionic]
    [ 4371.404956]  ionic_reconfigure_queues+0x5f5/0xff0 [ionic]
    [ 4371.405111]  ionic_set_ringparam+0x2e8/0x3e0 [ionic]
    [ 4371.405265]  ethnl_set_rings+0x1f1/0x300
    [ 4371.405418]  ethnl_default_set_doit+0xbb/0x160
    [ 4371.405571]  genl_family_rcv_msg_doit+0xff/0x130
    	[...]
    
    I found that ionic_tx_clean() calls napi_consume_skb() which calls
    napi_skb_cache_put(), but before that last call is the note
        /* Zero budget indicate non-NAPI context called us, like netpoll */
    and
        DEBUG_NET_WARN_ON_ONCE(!in_softirq());
    
    Those are pretty big hints that we're doing it wrong.  We can pass a
    context hint down through the calls to let ionic_tx_clean() know what
    we're doing so it can call napi_consume_skb() correctly.
    
    Fixes: 386e6986 ("ionic: Make use napi_consume_skb")
    Signed-off-by: default avatarShannon Nelson <shannon.nelson@amd.com>
    Link: https://patch.msgid.link/20240624175015.4520-1-shannon.nelson@amd.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    84b767f9
ionic_lif.c 105 KB