Re: [PATCH v4 00/20] Support Clang context analysis for NVMe host drivers

Marco Elver <[email protected]>
Newsgroups org.infradead.lists.linux-nvme,org.kernel.vger.linux-kernel
Message-ID <CANpmjNNa=rNAaRSWg6ao9HGxH6JTRr7AgZfw8kqHGQCHJWmQfQ@mail.gmail.com>
On Mon, 13 Jul 2026 at 13:55, Nilay Shroff <[email protected]> wrote:
>
> Hi,
>
> This series adds support for Clang's context analysis to the NVMe host
> drivers.
>
> Recent work[1] by Marco Elver introduced infrastructure for lock context
> analysis in the kernel, allowing Clang to verify locking requirements at
> compile time through various annotations.
>
> This series build on top of that infrastructure by annotating the NVMe
> host drivers with the appropriate locking requirements and by addressing
> warnings reported by the analyzer.
>
> The series was built and tested with LLVM/Clang 23.x and enables the
> NVMe host drivers to build cleanly with CONFIG_CONTEXT_ANALYSIS enabled.
>
> Support for the NVMe target drivers will be addressed separately.
>
> As usual, comments/feedback/suggestions are most welcome!
>
> Thanks!
>
> [1] https://lore.kernel.org/lkml/[email protected]/
>
> Changes from v3:
>
> - Moved the infrastructure patches to the front of the series; the first two
>   patches are now the infrastructure patches (hch).
>
> - Annotated initialization functions, which typically initialize objects
>   before they are published, with __context_unsafe instead of wrapping
>   individual initialization statements in context_unsafe(...).
>
> - Annotated nvme_next_ns() and nvme_available_path() with
>   __must_hold_shared(&head->srcu) since both APIs require the caller to
>   hold the SRCU read lock (Sashiko).
>
> - Split the removal of the redundant initialization of
>   nvme_ns_head::delayed_removal_secs into a separate patch (09/20)
>   (hch).
>
> - Split the removal of the redundant initialization of
>   nvme_ns_head::requeue_list into a separate patch (05/20)
>
> Link to v3: https://lore.kernel.org/all/[email protected]/
>
> Changes from v2:
>
> - removed "Clang" from each commit subject line (hch)
>
> - for zero-initialized struct bio_list_init() is redundant and also to
>   suppress false-positive context analysis warning for a list variable
>   guarded by lock, remove bio_list_init(&head->requeue_list) from
>   nvme_mpath_alloc_disk() (hch)
>
> - get rid off wrapping rcu_access_pointer() using context_unsafe() as
>   the access to __rcu_guarded pointer using helper rcu_access_pointer()
>   should be implicitly safe (hch, Marco, Paul)
>
> - wrap INIT_LIST_HEAD() under context_unsafe(...) instead of interleaving
>   it under scoped_guard(...) to suppress context analysis warning while
>   initializing subsys->nsheads  (hch)
>
> - initializing head->delayed_removal_secs from nvme_mpath_alloc_disk() is
>   redudnamt as struct nvme_ns_head is zero allocated. This also helps
>   avoid false positive conext analysis warning (hch)
>
> - introduce LIST_HEAD_GUARDED(_name, _lock) and use it for guarding a
>   list (hch)
>
> - dropped context annotations for nvme_queue::cq_poll_lock as this
>   requires a annotation which could support guarding multiple
>   valid synchronization mechanisms for a single object, which is
>   ,as of today, not yet avalilable (hch)
>
> - new patch in the series from Marco Elver <[email protected]>, which
>   annotates list_empty_careful() using __context_unsafe
>
> - context_unsafe() has a statement expression inside so group
>   multiple scope guarded variables before those are publsihed
>   under context_unsafe(...) where possible (Marco)
>
> Link to v2: https://lore.kernel.org/all/[email protected]/
>
> Changes from v1:
>   - replace guard() with scoped_guard() for guarding request_list (Bart)
>   - annotate nvme_alloc_ns_head() using __must_hold(&ctrl->subsys->lock)
>     (Sashiko)
>   - guard nvme_queue::sq_cmds using nvme_queue::sq_lock
>   - annotate nvme_cqe_pending() using context_unsafe in nvme_poll()
>     (Keith)
>   - Split patch #13 and #14 to separate the context annotation change
>     from functionality change (Bart)
>
> Marco Elver (1):
>   list: Permit context-unguarded access with list_empty_careful()
>
> Nilay Shroff (19):
>   list: introduce LIST_HEAD_GUARDED
>   nvme: update nvme_passthru_end() signature
>   nvme: add context annotations for nvme_passthru_{start|stop}
>   nvme: add context annotations for nvme_ns_head::srcu
>   nvme: remove redundant initialization of nvme_ns_head::requeue_list
>   nvme: add context annotations for nvme_ns_head::requeue_list
>   nvme: add context annotations for nvme_ns_head::current_path
>   nvme: add context annotations for nvme_dev::shutdown_lock
>   nvme: remove redundant initialization of delayed_removal_secs
>   nvme: add context annotations for nvme_subsystem::lock
>   nvme: add context annotations for nvme_ctrl::ana_lock
>   nvme: add context annotations for nvme_subsystems_lock
>   nvme: add context annotations in fabric.c
>   nvme: add context annotations for nvme_queue::sq_lock
>   nvme: add context annotations in rdma.c
>   nvme: fix context analysis warning in rdma.c
>   nvme: add context annotations in tcp.c
>   nvme: fix context analysis warning in tcp.c
>   nvme: enable context analysis support for nvme host driver

Acked-by: Marco Elver <[email protected]>

... from my end this looks reasonable.

Thanks!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.