From patchwork Sat Apr 13 03:47:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 13628624 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9BA86C04FFE for ; Sat, 13 Apr 2024 03:50:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=C75StbWQadPtxd98NoAXlcNqXDmYIhqldHa2ytRyt78=; b=deff8GUT0i9m4y GAtIWg4AErTyKZjMATgOgioGJVbY2L40dljwpVnUpg/XbAz7Sln3uOHljOh/jezRJ8MMYTKyBcZE8 6H6Xj+AsMC+8GEx+pnmuK6uAZqg9yVmeeY/fqR6fzbVTHR0OWI56onOclZA+pOrt7cFRZB8DRPDBs zXz1+PF2+/JiEyN9GQ1wyOq0XdiGe8BG3yETu6peLAn5FTkeZNkHoD6NjbHFuVWWb6J1qIG9fuTsR kdVeLwJv7udIFA8dsf7Pl4KK7sbxS7+8B0RBbChhEDH1qpVnjJcnadv/W48Pu2f3JIa8ATh8Nl6D6 dcmfN9133YETwp5BCyvg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvUOq-00000002GG4-0heX; Sat, 13 Apr 2024 03:49:56 +0000 Received: from mail-dm6nam04on20600.outbound.protection.outlook.com ([2a01:111:f403:2409::600] helo=NAM04-DM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvUMy-00000002FBn-2Mks for linux-arm-kernel@lists.infradead.org; Sat, 13 Apr 2024 03:48:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C19fObg/Kw+If8Y44pWWr8vC1VtKwmvbYvOAomajqcetadVIvpCgrI6dD8wHQ490eht3gQs2LZhN5Aw0fUft7OSqhHDdhXZ3oDGRt/cQ91KfCBCbbjw9ayJdqwi0e/bFVN1LnOVcEgtS6e9QeKWtpn64azrPTEqWI3H9hqZBeBk4w9YCJWHkRd7PXVhGXTrF4yCKH2cglAp+NmkapRwd8a60C2v84hW26TJNCPUZlsxkX7QPrVHiFS50mCYaNybNuSuLJAFb9tu4y13AL4ADf33hE7GPyDrg2GsEPk1N8DyysGijB/4MK0qOasDKtHc4lmAJGSvMOvSgT4ScS96eaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BV2YKrMCqKwNq604f0AmVBlZsF+4Z51ZwJFOxrnx4vk=; b=mxIXX2w0Uf2XzuaG9ZE7lNHr21p4NXQViHsgeG+GTTe+vuNGzZ1oIlkamuzmSE0nzJuznsaBHdAYrSeVHGvjbKuqxSbXpQ9vaxOpUrkDU0r7v/nUNLC3upEddLXUPyEz0Iv+sTRqgwSY4+yLn/MHcFrQ+KPHj+bskdifn8pI5fzuhJQ0oVOm90Lu5qRnMvGxmnnDc3axmambnRpSmNjPSPXx9sEuD4fU6lKQ2kqxDeD6wqjhrIIl150EDO8Yu5SP5KFThvMPqnB0a9zukO12iXZ8Ce7RnvTt47VhSRgz7Jlzp6vwrpPrx4OJYc8CzqydJUsVP84QDu/T33japhxCVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BV2YKrMCqKwNq604f0AmVBlZsF+4Z51ZwJFOxrnx4vk=; b=TGUcBNp8Yw7fB59Q4PqaH0wgzeC1JrgjGX83XxEyCeLxRD5ZlY1/aCAPPI6dWBeFq18yUOr/zG0DwpJANX0Ysf+qaXi6VfyxPfBw7CvK2PQoC5XJc/m5rP34z6pFCsBOStGVgKmyCGFz2AzJVk7ZWr2q+L63G+MiLGZYP8ItR/3m6ZIfBdpl2ZmS97kQjxdhIW8SjMS4Ou2GmqpkpnKlqNDkgKrDiABxE21lCR1Thr2UBJIwGRBSLm2stOgtZfyMBsiNVJuImKJ7KSMVMqjSpIKbIotQhxPF1mP/7csMXTp84brohwAT1RqJ+KXCxwpf04cOQw+9JLSXc0pCmo+XHQ== Received: from CH2PR05CA0036.namprd05.prod.outlook.com (2603:10b6:610::49) by PH7PR12MB6954.namprd12.prod.outlook.com (2603:10b6:510:1b7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Sat, 13 Apr 2024 03:47:56 +0000 Received: from DS3PEPF000099E0.namprd04.prod.outlook.com (2603:10b6:610:0:cafe::2a) by CH2PR05CA0036.outlook.office365.com (2603:10b6:610::49) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7495.12 via Frontend Transport; Sat, 13 Apr 2024 03:47:56 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by DS3PEPF000099E0.mail.protection.outlook.com (10.167.17.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7452.22 via Frontend Transport; Sat, 13 Apr 2024 03:47:56 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Fri, 12 Apr 2024 20:47:50 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 12 Apr 2024 20:47:49 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 12 Apr 2024 20:47:49 -0700 From: Nicolin Chen To: , , , , CC: , , , , , , , , , , , Subject: [PATCH RFCv1 10/14] iommufd/selftest: Add IOMMU_TEST_OP_MV_CHECK_DEV_ID Date: Fri, 12 Apr 2024 20:47:07 -0700 Message-ID: <25795ef3ef187b1d2fda3d385b0d678ffefce875.1712978213.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS3PEPF000099E0:EE_|PH7PR12MB6954:EE_ X-MS-Office365-Filtering-Correlation-Id: 05085a7d-d773-4cf1-8a85-08dc5b6c814f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DDwD7WaHGe8yqbLT5IHEt921OMiAE/Nqfosjs1ZsKIqatHsW1E0MnJh/hkL0K/XQZukaH8jGmsH3JgvIBYcar2zWsPZcBVkVHOJd56peivFNlR63oWw78G3Q/0q2lU3h9q18crDyRFHaFMUNDeZJGU8/j+mW09K0giQ0ljl7u3mb/g44+eUnzVuSkHOkSFxpSusVSw3oP5ZMxRtZCXo411d2P4u+eFKqYTVm4VnOcndrmP8hJe2ECJcI3cS3nd4OQDmFDkFZQ/67vqZkgd+anbakQ87/wLEILRFBFxuYv/G5vm11ClVMVMLkNbA6YYp7LjmdF24A8DfRHqzXwvmsp8gwuce9q0F4QFp3FA672j5Eel5ZYkn7Ias/LAdc0p+uxL0iWEomZpKuigXB3RVlsIDzWRkw9l5diSNYLQbncnOrr+SdS19qCklcpwC65owQ6wHO8W4Neto0TvLwG0MB6s3F6gZjLGrwyNDvMxTRSPRfSaFeUmcSVMLsZ23jV2apaPQ8VInt7WNNdWIOtvDyPWUKc0ASN0tpP70LeQOVxgr/MuKsLbovzzRgEYyFN7OiZ8CWaV8v0GgfXNfSzCeQ2W+ELctzJExhZTzFUA7Te1d3tocGi6IxnKE3ZBx7u+swSs+OwuWtu7lNzd9vEZ5zTPCwXIlH+NbAW2BAyFNtsp/O8kuEfyJBH7TWUHVva2wGIFdpIvb7PSchJreaSefj+ZaTq7JVkMTp+/GHy47JQXcmu97GU9FluOU/b3OLH4/V X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230031)(82310400014)(7416005)(1800799015)(376005)(36860700004);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2024 03:47:56.2587 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 05085a7d-d773-4cf1-8a85-08dc5b6c814f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS3PEPF000099E0.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6954 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240412_204800_644344_F0600692 X-CRM114-Status: GOOD ( 12.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This allows verifying the ids xarray of struct mock_viommu, and confirming the correctness of an IOMMU_VIOMMU_SET_DEV_ID call. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_test.h | 5 +++ drivers/iommu/iommufd/selftest.c | 32 +++++++++++++++++++ tools/testing/selftests/iommu/iommufd.c | 7 ++++ tools/testing/selftests/iommu/iommufd_utils.h | 24 ++++++++++++++ 4 files changed, 68 insertions(+) diff --git a/drivers/iommu/iommufd/iommufd_test.h b/drivers/iommu/iommufd/iommufd_test.h index e854d3f67205..91af979a0c23 100644 --- a/drivers/iommu/iommufd/iommufd_test.h +++ b/drivers/iommu/iommufd/iommufd_test.h @@ -22,6 +22,7 @@ enum { IOMMU_TEST_OP_MOCK_DOMAIN_FLAGS, IOMMU_TEST_OP_DIRTY, IOMMU_TEST_OP_MD_CHECK_IOTLB, + IOMMU_TEST_OP_MV_CHECK_DEVID, }; enum { @@ -127,6 +128,10 @@ struct iommu_test_cmd { __u32 id; __u32 iotlb; } check_iotlb; + struct { + __u32 idev_id; + __u32 dev_id; + } check_dev_id; }; __u32 last; }; diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index 4caed9304065..b7d0ce3d3659 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -999,6 +999,34 @@ static int iommufd_test_md_check_iotlb(struct iommufd_ucmd *ucmd, return rc; } +static int iommufd_test_mv_check_dev_id(struct iommufd_ucmd *ucmd, + u32 viommu_id, unsigned int idev_id, + u32 dev_id) +{ + struct iommufd_device *idev; + struct mock_viommu *mv; + int rc = 0; + + mv = container_of(iommufd_get_viommu(ucmd, viommu_id), + struct mock_viommu, core); + if (IS_ERR(mv)) + return PTR_ERR(mv); + + idev = iommufd_get_device(ucmd, idev_id); + if (IS_ERR(idev)) { + rc = PTR_ERR(idev); + goto out_put_viommu; + } + + if (idev->dev != xa_load(&mv->ids, dev_id)) + rc = -EINVAL; + + iommufd_put_object(ucmd->ictx, &idev->obj); +out_put_viommu: + iommufd_put_object(ucmd->ictx, &mv->core.obj); + return rc; +} + struct selftest_access { struct iommufd_access *access; struct file *file; @@ -1484,6 +1512,10 @@ int iommufd_test(struct iommufd_ucmd *ucmd) return iommufd_test_md_check_iotlb(ucmd, cmd->id, cmd->check_iotlb.id, cmd->check_iotlb.iotlb); + case IOMMU_TEST_OP_MV_CHECK_DEVID: + return iommufd_test_mv_check_dev_id(ucmd, cmd->id, + cmd->check_dev_id.idev_id, + cmd->check_dev_id.dev_id); case IOMMU_TEST_OP_CREATE_ACCESS: return iommufd_test_create_access(ucmd, cmd->id, cmd->create_access.flags); diff --git a/tools/testing/selftests/iommu/iommufd.c b/tools/testing/selftests/iommu/iommufd.c index 378fbf00730e..3af5932c227c 100644 --- a/tools/testing/selftests/iommu/iommufd.c +++ b/tools/testing/selftests/iommu/iommufd.c @@ -288,14 +288,21 @@ TEST_F(iommufd_ioas, viommu) test_err_viommu_set_dev_id(EINVAL, dev_id, viommu_id, 1ULL << 32); test_cmd_viommu_set_dev_id(dev_id, viommu_id, 0x99); test_err_viommu_set_dev_id(EBUSY, dev_id, viommu_id, 0x99); + test_cmd_viommu_check_dev_id(viommu_id, dev_id, 0x99); test_cmd_mock_domain(self->ioas_id, &stdev2, &hwpt2, &device2); test_err_viommu_set_dev_id(EBUSY, device2, viommu_id, 0x99); test_cmd_viommu_set_dev_id(device2, viommu_id, 0xaa); test_err_viommu_set_dev_id(EBUSY, device2, viommu_id, 0xaa); + test_cmd_viommu_check_dev_id(viommu_id, dev_id, 0x99); + test_cmd_viommu_check_dev_id(viommu_id, device2, 0xaa); + test_ioctl_destroy(stdev2); + test_cmd_viommu_check_dev_id(viommu_id, dev_id, 0x99); + test_err_viommu_check_dev_id(ENOENT, viommu_id, device2, 0xaa); test_ioctl_destroy(viommu_id); + test_err_viommu_check_dev_id(ENOENT, viommu_id, dev_id, 0x99); test_ioctl_destroy(hwpt_id); } else { test_err_viommu_alloc(ENOENT, dev_id, hwpt_id, &viommu_id); diff --git a/tools/testing/selftests/iommu/iommufd_utils.h b/tools/testing/selftests/iommu/iommufd_utils.h index 81e9184fd1d5..e926fa289baa 100644 --- a/tools/testing/selftests/iommu/iommufd_utils.h +++ b/tools/testing/selftests/iommu/iommufd_utils.h @@ -731,3 +731,27 @@ static int _test_cmd_viommu_set_dev_id(int fd, __u32 device_id, EXPECT_ERRNO(_errno, \ _test_cmd_viommu_set_dev_id(self->fd, device_id, \ viommu_id, virtual_id)) + +static int _test_cmd_viommu_check_dev_id(int fd, __u32 viommu_id, + __u32 device_id, __u64 virtual_id) +{ + struct iommu_test_cmd test_cmd = { + .size = sizeof(test_cmd), + .op = IOMMU_TEST_OP_MV_CHECK_DEVID, + .id = viommu_id, + .check_dev_id = { + .idev_id = device_id, + .dev_id = virtual_id, + }, + }; + return ioctl(fd, _IOMMU_TEST_CMD(IOMMU_TEST_OP_MV_CHECK_DEVID), + &test_cmd); +} +#define test_cmd_viommu_check_dev_id(viommu_id, device_id, expected) \ + ASSERT_EQ(0, _test_cmd_viommu_check_dev_id(self->fd, viommu_id, \ + device_id, expected)) + +#define test_err_viommu_check_dev_id(_errno, viommu_id, device_id, expected) \ + EXPECT_ERRNO(_errno, \ + _test_cmd_viommu_check_dev_id(self->fd, viommu_id, \ + device_id, expected))