The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Nilay Shroff <nilay@linux.ibm.com>
To: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: hch@lst.de, elver@google.com, kbusch@kernel.org,
	sagi@grimberg.me, axboe@fb.com, bvanassche@acm.org,
	gjoyce@linux.ibm.com, Nilay Shroff <nilay@linux.ibm.com>
Subject: [PATCH v3 00/18] Support Clang context analysis for NVMe host drivers
Date: Mon,  6 Jul 2026 19:44:02 +0530	[thread overview]
Message-ID: <20260706141452.3008233-1-nilay@linux.ibm.com> (raw)

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/20251219154418.3592607-1-elver@google.com/

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 <elver@google.com>, 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/20260614131541.2017845-1-nilay@linux.ibm.com/

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 (17):
  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: 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: add context annotations for nvme_subsystem::lock
  nvme: add context annotations for nvme_ctrl::ana_lock
  list: introduce LIST_HEAD_GUARDED
  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

 drivers/nvme/host/Makefile    |  1 +
 drivers/nvme/host/core.c      | 20 ++++++++++++----
 drivers/nvme/host/fabrics.c   |  4 ++--
 drivers/nvme/host/ioctl.c     |  2 +-
 drivers/nvme/host/multipath.c |  7 ++++--
 drivers/nvme/host/nvme.h      | 44 ++++++++++++++++++++++++-----------
 drivers/nvme/host/pci.c       | 28 +++++++++++++++++-----
 drivers/nvme/host/rdma.c      | 25 ++++++++++++--------
 drivers/nvme/host/tcp.c       | 15 ++++++++----
 include/linux/list.h          |  9 +++++++
 10 files changed, 110 insertions(+), 45 deletions(-)

-- 
2.53.0


             reply	other threads:[~2026-07-06 14:15 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-06 14:14 Nilay Shroff [this message]
2026-07-06 14:14 ` [PATCH v3 01/18] nvme: update nvme_passthru_end() signature Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 02/18] nvme: add context annotations for nvme_passthru_{start|stop} Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 03/18] nvme: add context annotations for nvme_ns_head::srcu Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 04/18] nvme: add context annotations for nvme_ns_head::requeue_list Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 05/18] nvme: add context annotations for nvme_ns_head::current_path Nilay Shroff
2026-07-06 16:08   ` Paul E. McKenney
2026-07-06 14:14 ` [PATCH v3 06/18] nvme: add context annotations for nvme_dev::shutdown_lock Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 07/18] nvme: add context annotations for nvme_subsystem::lock Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 08/18] nvme: add context annotations for nvme_ctrl::ana_lock Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 09/18] list: introduce LIST_HEAD_GUARDED Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 10/18] nvme: add context annotations for nvme_subsystems_lock Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 11/18] nvme: add context annotations in fabric.c Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 12/18] nvme: add context annotations for nvme_queue::sq_lock Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 13/18] nvme: add context annotations in rdma.c Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 14/18] list: Permit context-unguarded access with list_empty_careful() Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 15/18] nvme: fix context analysis warning in rdma.c Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 16/18] nvme: add context annotations in tcp.c Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 17/18] nvme: fix context analysis warning " Nilay Shroff
2026-07-06 14:14 ` [PATCH v3 18/18] nvme: enable context analysis support for nvme host driver Nilay Shroff

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260706141452.3008233-1-nilay@linux.ibm.com \
    --to=nilay@linux.ibm.com \
    --cc=axboe@fb.com \
    --cc=bvanassche@acm.org \
    --cc=elver@google.com \
    --cc=gjoyce@linux.ibm.com \
    --cc=hch@lst.de \
    --cc=kbusch@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox