From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 3BDE56DCE1; Thu, 8 Oct 2026 06:01:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791439316; cv=none; b=tJQkVG+5qyK6c4/iv7NWQyGGo/CyxR7VlI+f/Nb7NTt1D3WVAeIH+aamxivHayY1oi/mAmNzTSp5jMIMMYFNhjsaO2dBgoXPC6g6HuEaYH7Xh47rFtptiq2HQui8SEsdiSTz0CUt8UXYV6jow+/WUbJ+C5BAS1HzGtETipzDG94= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791439316; c=relaxed/simple; bh=SvMO6qFEjRCtWfja9+sBsp21D1mdmpmlZxY6ZT4oy0k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MLCrcjzD0NAaUF5+oYpklU8JEPUvPvq39hNrQdZ22ORksdXfMgSs1Vdz1vgfduYq2DshxGGHIlI4RZzauGW+t3kjjOBuV+r2dYMrGr+AZ36Y9cvvP0vt2N0BgBQFHmrII1eR8c+DOoRn3yD9NxGlPVYJ3RdVO4I+C9yPg0Dlwnc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ecnkl+tp; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ecnkl+tp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 042A51F00898; Thu, 8 Oct 2026 06:01:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791439315; bh=KLweadiYo2vH0waTkqSl+mQK/ZtD8+rq+Wg79VFE0qg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ecnkl+tpPD8Smqvs2cvkpg24f1CVRN5mYdeKQwZ5WJ092sEQK6DLnNrOgRL6z0kWo q8/soD+eryj1jPjg0KLkLFelNV0Tz9wzgM9I6pRxI7p2QQNgsmDT8LbxNlvEu314Zr zFo4Fnwh8bRvmsuivbxxON5kbe+6C1HKRYOKr6AHd0po6CS+UpNhiJePsAWVgqigPf X5eqXH/9857o7/eBbPJpvQ4bbmw9/1yJ3T2FSwxs2Elql5jE+Ds9M22NYbkxWW+1nV sgQQqvHWJ/xBoj+OyzQnyR/U24QAjyOOynp4bUacXR3j5tVe6bLfqsHh1t195AGn/X KZ7gKgRaMsR8Q== From: "Aneesh Kumar K.V (Arm)" To: iommu@lists.linux.dev Cc: "Aneesh Kumar K.V (Arm)" , Alex Williamson , Alexey Kardashevskiy , Bjorn Helgaas , Catalin Marinas , Jacob Pan , Jason Gunthorpe , Joerg Roedel , Jonathan Cameron , Jonathan Hunter , Kevin Tian , Krishna Reddy , Lukas Wunner , Nicolin Chen , Robin Murphy , Samuel Ortiz , Shameer Kolothum , Steven Price , Suravee Suthikulpanit , Suzuki K Poulose , Thierry Reding , Vasant Hegde , Will Deacon , Xu Yilun , kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-tegra@vger.kernel.org Subject: [PATCH v7 11/16] PCI/TSM: Remove the legacy guest request interface Date: Thu, 8 Oct 2026 11:29:50 +0530 Message-ID: <20261008055955.4014342-12-aneesh.kumar@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261008055955.4014342-1-aneesh.kumar@kernel.org> References: <20261008055955.4014342-1-aneesh.kumar@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Guest TSM requests can now be dispatched through the IOMMUFD vdevice operation. Remove the PCI-device-based guest request entry point, its scope enum and the corresponding PCI/TSM driver callback. Cc: bhelgaas@google.com Cc: linux-pci@vger.kernel.org Signed-off-by: Aneesh Kumar K.V (Arm) --- drivers/pci/tsm.c | 60 ---------------------------------------- include/linux/pci-tsm.h | 61 +---------------------------------------- 2 files changed, 1 insertion(+), 120 deletions(-) diff --git a/drivers/pci/tsm.c b/drivers/pci/tsm.c index 5fdcd7f2e820..1423c64dc9c8 100644 --- a/drivers/pci/tsm.c +++ b/drivers/pci/tsm.c @@ -375,66 +375,6 @@ int pci_tsm_bind(struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id) } EXPORT_SYMBOL_GPL(pci_tsm_bind); -/** - * pci_tsm_guest_req() - helper to marshal guest requests to the TSM driver - * @pdev: @pdev representing a bound tdi - * @scope: caller asserts this passthrough request is limited to TDISP operations - * @req_in: Input payload forwarded from the guest - * @in_len: Length of @req_in - * @req_out: Output payload buffer response to the guest - * @out_len: Length of @req_out on input, bytes filled in @req_out on output - * @tsm_code: Optional TSM arch specific result code for the guest TSM - * - * This is a common entry point for requests triggered by userspace KVM-exit - * service handlers responding to TDI information or state change requests. The - * scope parameter limits requests to TDISP state management, or limited debug. - * This path is only suitable for commands and results that are the host kernel - * has no use, the host is only facilitating guest to TSM communication. - * - * Returns 0 on success and -error on failure and positive "residue" on success - * but @req_out is filled with less then @out_len, or @req_out is NULL and a - * residue number of bytes were not consumed from @req_in. On success or - * failure @tsm_code may be populated with a TSM implementation specific result - * code for the guest to consume. - * - * Context: Caller is responsible for calling this within the pci_tsm_bind() - * state of the TDI. - */ -ssize_t pci_tsm_guest_req(struct pci_dev *pdev, enum pci_tsm_req_scope scope, - sockptr_t req_in, size_t in_len, sockptr_t req_out, - size_t out_len, u64 *tsm_code) -{ - struct pci_tsm_pf0 *tsm_pf0; - struct pci_tdi *tdi; - int rc; - - /* Forbid requests that are not directly related to TDISP operations */ - if (scope > PCI_TSM_REQ_STATE_CHANGE) - return -EINVAL; - - ACQUIRE(rwsem_read_intr, lock)(&pci_tsm_rwsem); - if ((rc = ACQUIRE_ERR(rwsem_read_intr, &lock))) - return rc; - - if (!pdev->tsm) - return -ENXIO; - - if (!is_link_tsm(pdev->tsm->tsm_dev)) - return -ENXIO; - - tsm_pf0 = to_pci_tsm_pf0(pdev->tsm); - ACQUIRE(mutex_intr, ops_lock)(&tsm_pf0->lock); - if ((rc = ACQUIRE_ERR(mutex_intr, &ops_lock))) - return rc; - - tdi = pdev->tsm->tdi; - if (!tdi) - return -ENXIO; - return to_pci_tsm_ops(pdev->tsm)->guest_req(tdi, scope, req_in, in_len, - req_out, out_len, tsm_code); -} -EXPORT_SYMBOL_GPL(pci_tsm_guest_req); - static void pci_tsm_unbind_all(struct pci_dev *pdev) { pci_tsm_walk_fns_reverse(pdev, __pci_tsm_unbind, NULL); diff --git a/include/linux/pci-tsm.h b/include/linux/pci-tsm.h index a6435aba03f9..6fe3d0ea875f 100644 --- a/include/linux/pci-tsm.h +++ b/include/linux/pci-tsm.h @@ -3,12 +3,10 @@ #define __PCI_TSM_H #include #include -#include struct pci_tsm; struct tsm_dev; struct kvm; -enum pci_tsm_req_scope; /* * struct pci_tsm_ops - manage confidential links and security state @@ -34,14 +32,13 @@ struct pci_tsm_ops { * @disconnect: teardown the secure link * @bind: bind a TDI in preparation for it to be accepted by a TVM * @unbind: remove a TDI from secure operation with a TVM - * @guest_req: marshal TVM information and state change requests * * Context: @probe, @remove, @connect, and @disconnect run under * pci_tsm_rwsem held for write to sync with TSM unregistration and * mutual exclusion of @connect and @disconnect. @connect and * @disconnect additionally run under the DSM lock (struct * pci_tsm_pf0::lock) as well as @probe and @remove of the subfunctions. - * @bind, @unbind, and @guest_req run under pci_tsm_rwsem held for read + * @bind and @unbind run under pci_tsm_rwsem held for read * and the DSM lock. */ struct_group_tagged(pci_tsm_link_ops, link_ops, @@ -53,11 +50,6 @@ struct pci_tsm_ops { struct pci_tdi *(*bind)(struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id); void (*unbind)(struct pci_tdi *tdi); - ssize_t (*guest_req)(struct pci_tdi *tdi, - enum pci_tsm_req_scope scope, - sockptr_t req_in, size_t in_len, - sockptr_t req_out, size_t out_len, - u64 *tsm_code); ); /* @@ -159,46 +151,6 @@ static inline bool is_pci_tsm_pf0(struct pci_dev *pdev) return PCI_FUNC(pdev->devfn) == 0; } -/** - * enum pci_tsm_req_scope - Scope of guest requests to be validated by TSM - * - * Guest requests are a transport for a TVM to communicate with a TSM + DSM for - * a given TDI. A TSM driver is responsible for maintaining the kernel security - * model and limit commands that may affect the host, or are otherwise outside - * the typical TDISP operational model. - */ -enum pci_tsm_req_scope { - /** - * @PCI_TSM_REQ_INFO: Read-only, without side effects, request for - * typical TDISP collateral information like Device Interface Reports. - * No device secrets are permitted, and no device state is changed. - */ - PCI_TSM_REQ_INFO = 0, - /** - * @PCI_TSM_REQ_STATE_CHANGE: Request to change the TDISP state from - * UNLOCKED->LOCKED, LOCKED->RUN, or other architecture specific state - * changes to support those transitions for a TDI. No other (unrelated - * to TDISP) device / host state, configuration, or data change is - * permitted. - */ - PCI_TSM_REQ_STATE_CHANGE = 1, - /** - * @PCI_TSM_REQ_DEBUG_READ: Read-only request for debug information - * - * A method to facilitate TVM information retrieval outside of typical - * TDISP operational requirements. No device secrets are permitted. - */ - PCI_TSM_REQ_DEBUG_READ = 2, - /** - * @PCI_TSM_REQ_DEBUG_WRITE: Device state changes for debug purposes - * - * The request may affect the operational state of the device outside of - * the TDISP operational model. If allowed, requires CAP_SYS_RAW_IO, and - * will taint the kernel. - */ - PCI_TSM_REQ_DEBUG_WRITE = 3, -}; - #ifdef CONFIG_PCI_TSM int pci_tsm_register(struct tsm_dev *tsm_dev); void pci_tsm_unregister(struct tsm_dev *tsm_dev); @@ -213,9 +165,6 @@ int pci_tsm_bind(struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id); void pci_tsm_unbind(struct pci_dev *pdev); void pci_tsm_tdi_constructor(struct pci_dev *pdev, struct pci_tdi *tdi, struct kvm *kvm, u32 tdi_id); -ssize_t pci_tsm_guest_req(struct pci_dev *pdev, enum pci_tsm_req_scope scope, - sockptr_t req_in, size_t in_len, sockptr_t req_out, - size_t out_len, u64 *tsm_code); #else static inline int pci_tsm_register(struct tsm_dev *tsm_dev) { @@ -231,13 +180,5 @@ static inline int pci_tsm_bind(struct pci_dev *pdev, struct kvm *kvm, u64 tdi_id static inline void pci_tsm_unbind(struct pci_dev *pdev) { } -static inline ssize_t pci_tsm_guest_req(struct pci_dev *pdev, - enum pci_tsm_req_scope scope, - sockptr_t req_in, size_t in_len, - sockptr_t req_out, size_t out_len, - u64 *tsm_code) -{ - return -ENXIO; -} #endif #endif /*__PCI_TSM_H */ -- 2.43.0