All of lore.kernel.org
 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 v4 18/20] nvme: add context annotations in tcp.c
Date: Mon, 13 Jul 2026 17:24:19 +0530	[thread overview]
Message-ID: <20260713115444.465704-19-nilay@linux.ibm.com> (raw)
In-Reply-To: <20260713115444.465704-1-nilay@linux.ibm.com>

The nvme_tcp_ctrl_list and nvme_tcp_ctrl::list are protected by
nvme_tcp_ctrl_mutex. Define nvme_tcp_ctrl_list using
LIST_HEAD_GUARDED(nvme_tcp_ctrl_list, nvme_tcp_ctrl_mutex) and
annotate nvme_tcp_ctrl::list using
__guarded_by(&nvme_tcp_ctrl_mutex) so that Clang's context analysis
can validate accesses against the corresponding locking requirements.

It is safe to initialize nvme_tcp_ctrl::list while allocating the
controller object because the list entry has not yet been added to
nvme_tcp_ctrl_list. Annotate the initialization with context_unsafe()
to suppress the corresponding Clang warning.

Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
---
 drivers/nvme/host/tcp.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
index ba5c7b3e2a7c..8d2fbfc7cd8d 100644
--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -149,13 +149,17 @@ struct nvme_tcp_queue {
 #endif
 };
 
+static DEFINE_MUTEX(nvme_tcp_ctrl_mutex);
+static LIST_HEAD_GUARDED(nvme_tcp_ctrl_list, nvme_tcp_ctrl_mutex);
+
 struct nvme_tcp_ctrl {
 	/* read only in the hot path */
 	struct nvme_tcp_queue	*queues;
 	struct blk_mq_tag_set	tag_set;
 
 	/* other member variables */
-	struct list_head	list;
+	struct list_head	list
+		__guarded_by(&nvme_tcp_ctrl_mutex);
 	struct blk_mq_tag_set	admin_tag_set;
 	struct sockaddr_storage addr;
 	struct sockaddr_storage src_addr;
@@ -167,8 +171,6 @@ struct nvme_tcp_ctrl {
 	u32			io_queues[HCTX_MAX_TYPES];
 };
 
-static LIST_HEAD(nvme_tcp_ctrl_list);
-static DEFINE_MUTEX(nvme_tcp_ctrl_mutex);
 static struct workqueue_struct *nvme_tcp_wq;
 static const struct blk_mq_ops nvme_tcp_mq_ops;
 static const struct blk_mq_ops nvme_tcp_admin_mq_ops;
@@ -2919,7 +2921,10 @@ static struct nvme_tcp_ctrl *nvme_tcp_alloc_ctrl(struct device *dev,
 	if (!ctrl)
 		return ERR_PTR(-ENOMEM);
 
-	INIT_LIST_HEAD(&ctrl->list);
+	/*
+	 * Safe to init list while allocating ctrl object.
+	 */
+	context_unsafe(INIT_LIST_HEAD(&ctrl->list));
 	ctrl->ctrl.opts = opts;
 	ctrl->ctrl.queue_count = opts->nr_io_queues + opts->nr_write_queues +
 				opts->nr_poll_queues + 1;
-- 
2.53.0


  parent reply	other threads:[~2026-07-13 11:55 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-13 11:54 [PATCH v4 00/20] Support Clang context analysis for NVMe host drivers Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 01/20] list: introduce LIST_HEAD_GUARDED Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 02/20] list: Permit context-unguarded access with list_empty_careful() Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 03/20] nvme: update nvme_passthru_end() signature Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 04/20] nvme: add context annotations for nvme_passthru_{start|stop} Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 05/20] nvme: add context annotations for nvme_ns_head::srcu Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 06/20] nvme: remove redundant initialization of nvme_ns_head::requeue_list Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 07/20] nvme: add context annotations for nvme_ns_head::requeue_list Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 08/20] nvme: add context annotations for nvme_ns_head::current_path Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 09/20] nvme: add context annotations for nvme_dev::shutdown_lock Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 10/20] nvme: remove redundant initialization of delayed_removal_secs Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 11/20] nvme: add context annotations for nvme_subsystem::lock Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 12/20] nvme: add context annotations for nvme_ctrl::ana_lock Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 13/20] nvme: add context annotations for nvme_subsystems_lock Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 14/20] nvme: add context annotations in fabric.c Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 15/20] nvme: add context annotations for nvme_queue::sq_lock Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 16/20] nvme: add context annotations in rdma.c Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 17/20] nvme: fix context analysis warning " Nilay Shroff
2026-07-13 11:54 ` Nilay Shroff [this message]
2026-07-13 11:54 ` [PATCH v4 19/20] nvme: fix context analysis warning in tcp.c Nilay Shroff
2026-07-13 11:54 ` [PATCH v4 20/20] 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=20260713115444.465704-19-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.