From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02AAA433048 for ; Fri, 24 Jul 2026 11:11:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784891493; cv=none; b=EJyDvMaJjvjbYnjpdruLQXz/iuEXiQ3t15trvvIEVkZpjO6MSgiMSwKTxQOpgPXENZEl74bHsAb8mv1oopDYaH7k6meZ2vrZVyXuYNNBDlwBO8UQ3GTm9ayXrxR3Hlw5EULhPCmDDc4C+VvAJFrIQHumCTJi32yBLUMKZuarq5U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784891493; c=relaxed/simple; bh=DCUAfDxEseZk6ZmmVcrtbVNMa1iqDO1q+qOvgJZt55w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V9MvqtCzQdnaDHBGuQYXJ8HUa1j10RzhtIUCdoUh9mqshOLAVBBgXql702TCP9IP6LdvcVy9vjyBnxRli6t7hqiwKjexLIsyechiHwVS6EA+sPaRSjs5ZoNJ8L6buOByykbd0E7l478rovxCJVx+XNEzyITwmfGReli9hIZ2kUE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HI15W8z9; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HI15W8z9" Received: by smtp.kernel.org (Postfix) with ESMTPS id CC5DDC5383A; Fri, 24 Jul 2026 11:11:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1784891492; bh=DCUAfDxEseZk6ZmmVcrtbVNMa1iqDO1q+qOvgJZt55w=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HI15W8z9H2F/ItIkgJzoiEQ2O5YH3W5nyujbrAmdQE4/I/3MgSjwSAit88cw1tEOr 8FB5FsST/OWB/XH8aNqK76B5kxAw8UiWlKzlp6HtGFyEzesyuReCQ757DSlNwUeKCy mxU61txk+cHVlV5BIqh2Bh+QXroNhUk8ABnlftoQgrfuUSK71wiBQNevdkdbXJxr6X 2+dZzKoqdQMHko6omwh5o6A3adTvpMWDGltSmAwM4kLvTKjuFJwgEclwRFf1RN8zZN aA4KH4Oejma+BYBgVDeqAAqjQaw1W5+LMDq4zO7h8lRE6ps6v/H+IN5wM2x1dUgQn3 avR7lUVxS3Grg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7D22C531F9; Fri, 24 Jul 2026 11:11:32 +0000 (UTC) From: Joel Granados Date: Fri, 24 Jul 2026 13:11:04 +0200 Subject: [PATCH RFC v2 10/14] nvme: Pin a ctrl ref to every CDQ Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260724-jag-cdq-lkml-v2-10-659a7449e849@kernel.org> References: <20260724-jag-cdq-lkml-v2-0-659a7449e849@kernel.org> In-Reply-To: <20260724-jag-cdq-lkml-v2-0-659a7449e849@kernel.org> To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni , Jason Gunthorpe Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Joel Granados X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2007; i=joel.granados@kernel.org; h=from:subject:message-id; bh=DCUAfDxEseZk6ZmmVcrtbVNMa1iqDO1q+qOvgJZt55w=; b=owJ4nAHtARL+kA0DAAoBupfNUreWQU8ByyZiAGpjSF69HTOAZxtOOJS4e3Kf5yJRhPvY7UVMU E3e6K8IECOrbYkBswQAAQoAHRYhBK5HCVcl5jElzssnkLqXzVK3lkFPBQJqY0heAAoJELqXzVK3 lkFPR+oL/iwl4Zmoe0nvHf9iQioW99Y9emfyJqBLzf61u2qRPuNce3fo9FMLlJoIjugVUpeiwQ7 iqfw9mfKGkgl7bEpt2xT2VDwdvly9QbmFd90pevNlhv3jbAK2VH3XOuB4HVm3BhbIvkvpa5OE8o IOz4tjHFTN3y8K0MErx03GXxi1ERGWPtTC72S2egNte+1mztCRcc+CnUN1UDeXweD2nuaKCgdPu bzi9AomZq1JBPlXUDCx3s/BPWSDdZ/t1WvSrFUucagCeIasbSQK1RGD5N97yUxXA6qIZ5kds6aa vs0KwLOzlPSFLxJAPg7M4RRWodw18ecSjBDoJcLeESwZ+RM8ONj8MUFVDQyfrwtFRDQwoyOChSM W6MUNsa/E/dNDGGA9u3QFhYZ55deAt62+nyXtAowbQNt8aWLfR83fjzQblU2DBpNNOKcBtsMg/Y 7JXA6WfjwaDtgE66VSlRmavOJCQ0DLkOSomyUU6iq4XrLFOiZAV+7Ej39vOxyAyexQBdwt/kUh5 8g= X-Developer-Key: i=joel.granados@kernel.org; a=openpgp; fpr=F1F8E46D30F0F6C4A45FF4465895FAAC338C6E77 X-Endpoint-Received: by B4 Relay for joel.granados@kernel.org/default with auth_id=239 Make sure that the migration manager controller pointed by the CDQ does not get freed unless all CDQs are terminated by user space. Signed-off-by: Joel Granados --- drivers/nvme/host/cdq.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/nvme/host/cdq.h b/drivers/nvme/host/cdq.h index aa9469af0c7ef08b9f8ebf93e468c7f892aee4b1..a8c714ab5fada4325463013c2ffb23a117cd8423 100644 --- a/drivers/nvme/host/cdq.h +++ b/drivers/nvme/host/cdq.h @@ -29,7 +29,7 @@ struct nvme_cdq_chunk { struct cdq_nvme_queue { u16 id; - struct nvme_ctrl *ctrl; + struct nvme_ctrl *ctrl; // this is kref'ed for the life of the CDQ u32 size_nbyte; u16 mc_id; // migratable controller id @@ -49,11 +49,20 @@ struct cdq_nvme_queue { struct kref ref; }; -/* Must not touch cdq->ctrl: Ctrl may have been freed */ -static inline void nvme_free_cdq(struct kref *ref) -{ - kfree(container_of(ref, struct cdq_nvme_queue, ref)); -} +/* + * nvme_free_cdq: + * - Is called with the cdq struct has no more krefs. + * - Will free (cdq) and decrease ctrl kref. + */ +void nvme_free_cdq(struct kref *ref); +/* nvme_cdq_delete: + * - Sends a nvme delete cmd to the controller + * - removes (cdq) from controller xarray + * - frees the backing CDQ mem + * - Calls nvme_free_cdq if there are no more refs + */ +void nvme_delete_cdq(struct cdq_nvme_queue *cdq); +int nvme_create_cdq(struct nvme_ctrl *ctrl, const u32 entry_nr, const u16 mc_id); static inline void nvme_cdq_get(struct cdq_nvme_queue *cdq) { @@ -65,8 +74,6 @@ static inline void nvme_cdq_put(struct cdq_nvme_queue *cdq) kref_put(&cdq->ref, nvme_free_cdq); } -void nvme_delete_cdq(struct cdq_nvme_queue *cdq); -int nvme_create_cdq(struct nvme_ctrl *ctrl, const u32 entry_nr, const u16 mc_id); void nvme_delete_cdqs_host(struct nvme_ctrl *ctrl); void nvme_free_cdqs(struct nvme_ctrl *ctrl); -- 2.50.1