Commit cc21150cdea8 for kernel

commit cc21150cdea8813fc9677ff61a3cbe9995801aa0
Merge: b84c5632c7b3 552cc2306c3d
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed May 13 19:03:07 2026 -0700

    Merge branch 'macsec-use-rcu_work-to-fix-crypto-cleanup-in-softirq-context'

    Jinliang Zheng says:

    ====================
    macsec: use rcu_work to fix crypto cleanup in softirq context

    From: Jinliang Zheng <alexjlzheng@tencent.com>

    crypto_free_aead() can internally call vunmap() (e.g. via dma_free_attrs()
    in hardware crypto drivers like hisi_sec2), which must not be invoked from
    softirq context. Both free_rxsa() and free_txsa() are RCU callbacks that
    run in softirq, causing a kernel crash on affected hardware.

    This series fixes the issue by deferring the actual cleanup to a workqueue
    using rcu_work, which combines the RCU grace period and workqueue dispatch
    into a single primitive.

    Two design decisions worth noting:

    1. rcu_work instead of schedule_work() + synchronize_rcu()

       An alternative would be to call schedule_work() directly from
       macsec_rxsa_put()/macsec_txsa_put(), then call synchronize_rcu() at
       the start of the work handler to replace the grace period previously
       provided by call_rcu(). However, synchronize_rcu() blocks the worker
       thread for the duration of a full RCU grace period. Under high SA
       churn (e.g. tearing down an interface with many SAs), each SA would
       occupy a worker thread while waiting, and multiple concurrent calls
       cannot share the same grace period — leading to unnecessary latency
       and resource waste.

       rcu_work uses call_rcu_hurry() internally, which is fully asynchronous:
       the worker thread is only dispatched after the grace period has elapsed,
       and multiple concurrent queue_rcu_work() calls naturally batch under the
       same grace period via the RCU subsystem's existing coalescing mechanism.

    2. Dedicated workqueue instead of system_wq

       Using a dedicated workqueue (macsec_wq) allows macsec_exit() to drain
       exactly the work items belonging to this module — by calling
       destroy_workqueue() after rcu_barrier(). If system_wq were used,
       flush_scheduled_work() would drain all pending work items across the
       entire system, creating unnecessary coupling with unrelated subsystems
       and potentially causing unexpected delays. The dedicated workqueue
       provides a clean, contained teardown path.
    ====================

    Link: https://patch.msgid.link/20260511153102.2640368-1-alexjlzheng@tencent.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>