From patchwork Wed Aug 31 20:15:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961399 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C368ECAAD8 for ; Wed, 31 Aug 2022 20:16:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232185AbiHaUQX (ORCPT ); Wed, 31 Aug 2022 16:16:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232228AbiHaUQP (ORCPT ); Wed, 31 Aug 2022 16:16:15 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2053.outbound.protection.outlook.com [40.107.101.53]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60C04EEF29 for ; Wed, 31 Aug 2022 13:16:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YC6cveTi8FeAgM3TgIBk29Es9x+X07jqy/E1grU8kZ+IsBaJxtIyPBLBq7NuXMc4TalzXbNWXznr5ZHCQERLKwJR7NlstpsxkfdsPaZ84aL6c1jFQ1LPN2Sk/7WSOvYZqtzGDyo6HLuSGmtfK3CIZzMHj2k1w5z3S4McwMh7PbyJo9nT5SUQRgV2Cbpng8EET9+oPWPP2N0xKBCEhxzBHvtwNRmJ766HLzji+G1duAut2b0egTyOOBLjaxDiZuoNN95eZPrT+pwaFZpVRbynRnez3nP6/Bi3m9+w4K1cW+pBG8Q2WqNcoWRoCVuUU4+RQINIDVoHXvWueuC7d/ZXAA== 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=43hIONZo9MUVaehPd96715Nqngi48XPak0yVu3PYuQA=; b=Ocwy4Ei8b6oi5fy9Qo9YcMmwvDRxHAAikQCJab+5ao2TF8oo4qL1KwTIMga04mI8DkSc0qG9KTsS5hpR5lOZnzjiqNlY/t7bqhdZ31oLS+jWcqFnHtknrhJn4T4Ekdx/iGx2b+zghzgU6/6lb4oqEEzyDrlSYr0SgrygpwXiZLGI3brustsOOjr+hGUZTRyxCTTXGiOrGOId4EfgR6y/WtuC+N0dIfSJACWSy+xe0g4V78eDDn67CWRFj/ZRYcqNqAq+8BZV65KVQ9sxnMmeCepsXoBJ/U86pOg62VlqDqIS420+Wg7MWqkBAooX2XRa2cxzKc+kspAbU0Q99CbBtw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=43hIONZo9MUVaehPd96715Nqngi48XPak0yVu3PYuQA=; b=MJqsVN5NcY6gaLSWYXkNTvMgs9uQZnKGqK3VEQliPMkfnzemypvi7Ayazvi9sm3DYfQD4v6E6IHakmKucNsW+p34A5LcTutFwtt5GpB6g7TjOqXw2fFiVJrvUS5oO43t8agsPS0KwKRwJDk7kwvmuWZRZfLKcaNOScY85z2KG9H89yjcmPCWT4UcZwRcVjJUqkAgCk8E1tsPEu/85WWq5rTMWtGLJLWuK1fA49+muy0KiDX6Bu0yZ2uo+mPxh8G0UXui11GQRLBpDYwVTN481p9v8ObTiYPwk7dlMB8YahW9iLu1C6Ltsk4R0hun9CgD+KDtfHc6F+uEXsdfNmniUQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:06 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:06 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 1/8] vfio-pci: Fix vfio_pci_ioeventfd() to return int Date: Wed, 31 Aug 2022 17:15:56 -0300 Message-Id: <1-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BL1PR13CA0383.namprd13.prod.outlook.com (2603:10b6:208:2c0::28) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8b0aebff-61de-48b7-2bed-08da8b8da204 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GXbS+YppRU6CZJQZFx195cYUA4PQ9hOzFueXIeeQWz4PO1y5n5SC37nR8fkxyTxQBTNrB6mfR2DVXiQIfeIxeOn4G2vSYQud6KDn+F1fQ/9oApWZAOmXDBc2zqYjtwp1H5zvyzAEWgczWhgo+i4WP7R/3Lk1qQHQ/j0E/1EliYUoMUcy/zumTwmjyjipRbcrl6x7xg8yvK0lWxQvUiXAPnC4n2APs0fMq4qjkFzUE70RMBdTC1QS2yyZfn70+GpPkNjbRctpMwI00FLEwBZDW3fcBMKgTbB3ad59Y73rltP2+Giyo2OXSUL+0pxnktV+Ud/drUT4A5XYLn1+g6nSSs1yfv3RtyHlbdExA1rJt69d6Dk93nCpqM+UfujhP1vaDv44RwdDHi8WaCCeCFkis6xMpe9UrKK74vTLjgkBysP6l5x7fn7Gb+3FxyfLz5ymQ4458aQ9ooehqcijirJsac03cB87dIt5T78j+//U0svGzS54QH7fXU+VmgiqzFb/A9o4xUcQPw3IZUVYYxi9ui5yh+OIs2qsZfcW+/fOF0HCwse5nyHtuuZUaBV5bSDJTeBu3ZdGpaUcpqBBXM+bRhavQ4hgBcgO5EeVg6piXRJEsPyMiIZ8kSB8hu6/r2lroHWVM9Li1ySet9jCaGd+FY9GooZ48OacmoUSPliZNk/9FprIhjyMMJSUpv0LmAMRAEgZSkxGgVpP54ae07s7EtZ+b8Gp4dw1/j7jHnTkD2dUYluX41XVwigUU6JF8m/X X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JQWr3kcXQM0rVkMC/suT1TyR4zH6SCf+VNbRy+yCQRN8D2gJucAlOsLO8RakNb0PmqQNHsArqs3FgLv91aZkqtWllN4aiMAym/wHqwkraaH0lxVLD/XpWi3NlvAHNpf0cyHf9muZCC0OJbOeHMiKN0gGeMaTTeKy4uy7hBkZGO9IPAHWy2/QA98MDPSlCLE7PK8Lm/9tkJIu89BZS5kzoTrHVpwea8cwYlIY0GZtPt6ErS/xREEynaxQD509prkVq8v1SdjAHXMrOUCri9W7epkiNqk0rqXft4yEgCOqLcHTtQIbvFlCY72gn84lLk+G4Eh1shpF9kXGNkGLbNeu+AKFthazPcer0A1w6jxUATUQ9t/FEc+DxHNruWNAPYqh7Gm1kOgPFDGblDf4obMQDe3rYO0ntC7nNUHYab+BBJIjegxwQuPy6jRueaX3e6nFDjASPU/EdUNDdv1GKlCygbQnLnWAH8eFkKTCWX93KdbnGLzImbxX4xPZv3BLFj6haYNuGHudcIUQxCscSWlKclaBZuqyKC7hnbsSVOf/CyIvb1VWC3I01fifECv3Fy0YmcMzg/uwKuRIqLMR+7RFrMyLXTR+zUNPOFU88ZC76dAljZ60v1fzAGgxu8Ur0InwSy5RbQYqLnk8jfGa/w72FvjdKB1j8z3ZiR7WDlIesW2YvoteZgLb2BUZasWtSi9LqmytnPh5fHqDNzkWNCtgtsrmsB36N+SsqCNHW2Bopr9aM6VWk8vwNv3Lklk7RB//mlRA1M+ayIEPoZVP6fC1uDKPE569UlDqWN4MwGS3C0wbI13wE4xNkZPQwupzN850arOyESBi01twRl2jsOLwE4jlgXr89RoM7PIEmQnO/3dTNwgt9/F4puI9iBpQTjpAynCXnIqEukpt0M9FVli8K0717CWBngKRAkBzr5rLDzZvWXBtgksUec2FxYGGC4c0L9wq3je1SjunkhJ7Y6Cz+7hAtplOZqOoLrymiqCbJOzu+x6bMp8YuB1Q4gRYMGMUcYZPh6dfvOV4X9qUQ/pJQrApclSkd53s4ZY5/Sr/m0mPF65oRDXcSeFUT34NVJDierH9fciQlgo5gra9fBVPPOJuvab7NVvhAkYPA7BrUtEZdFle4KRV6H0fGVVRXixrWT5rtTR5ieHl08nICrG8SvfiPXuEZwrRmDOu3UeS0OamYBhooNQVwS3vEaEu9M4UDi+T0v/Hgx8IASfsn9znhCqPnBQwkei7/dYDx2sH1RxDdTSRL/RahmCwnwH6lVVYLnmJ8uZOdHvkNRJry1pGsojbPj7PSu9dkDk2oQr4rRfGKf0/sNhgxsXQyCR9YuCSR0G2lh3R6lv7PEAf2Q4qpe0BmPvilOy5PTW0qRhbQK2GTgrtmg+g+QohUOjx4e7g2aW5a7NOlTP0YcEalj1Bjp9ycdB0HkTYR2GoVHzdz05chiqDiVr2J0SqR4dpTr8fRbmIFDLkvisdUu/KoRQRQgPlws0s62odVpgxgKn3SuDNahJgdCLPOtMM38YRQ4HkIfK6WIT/XXetHQIJxAC99lraI3XpeYrpbVZ9m4/XLaN2uY25rd5rBdxjyN6gJzfV X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b0aebff-61de-48b7-2bed-08da8b8da204 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:05.2115 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sWpav4EqHAWnT0V5D4FnMYayaBqlyGEFQvwj22DizWJ3DUxl3aVtTtJ6cn4pfDv9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This only returns 0 or -ERRNO, it should return int like all the other ioctl dispatch functions. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/pci/vfio_pci_priv.h | 4 ++-- drivers/vfio/pci/vfio_pci_rdwr.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_priv.h b/drivers/vfio/pci/vfio_pci_priv.h index 4830fb01a1caa2..58b8d34c162cd6 100644 --- a/drivers/vfio/pci/vfio_pci_priv.h +++ b/drivers/vfio/pci/vfio_pci_priv.h @@ -48,8 +48,8 @@ static inline ssize_t vfio_pci_vga_rw(struct vfio_pci_core_device *vdev, } #endif -long vfio_pci_ioeventfd(struct vfio_pci_core_device *vdev, loff_t offset, - uint64_t data, int count, int fd); +int vfio_pci_ioeventfd(struct vfio_pci_core_device *vdev, loff_t offset, + uint64_t data, int count, int fd); int vfio_pci_init_perm_bits(void); void vfio_pci_uninit_perm_bits(void); diff --git a/drivers/vfio/pci/vfio_pci_rdwr.c b/drivers/vfio/pci/vfio_pci_rdwr.c index d5e9883c1eee10..e352a033b4aef7 100644 --- a/drivers/vfio/pci/vfio_pci_rdwr.c +++ b/drivers/vfio/pci/vfio_pci_rdwr.c @@ -412,8 +412,8 @@ static void vfio_pci_ioeventfd_thread(void *opaque, void *unused) vfio_pci_ioeventfd_do_write(ioeventfd, ioeventfd->test_mem); } -long vfio_pci_ioeventfd(struct vfio_pci_core_device *vdev, loff_t offset, - uint64_t data, int count, int fd) +int vfio_pci_ioeventfd(struct vfio_pci_core_device *vdev, loff_t offset, + uint64_t data, int count, int fd) { struct pci_dev *pdev = vdev->pdev; loff_t pos = offset & VFIO_PCI_OFFSET_MASK; From patchwork Wed Aug 31 20:15:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961396 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14AE8ECAAD1 for ; Wed, 31 Aug 2022 20:16:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232286AbiHaUQS (ORCPT ); Wed, 31 Aug 2022 16:16:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232185AbiHaUQO (ORCPT ); Wed, 31 Aug 2022 16:16:14 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2053.outbound.protection.outlook.com [40.107.101.53]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 378E8DF644 for ; Wed, 31 Aug 2022 13:16:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OdaYmx1aaZb8rnFC8ZbWvzWbPZ1fa0pV8Crk0MNi72is6e9FcC7Mg2EyzpmbTXPMi/Y9GWBFc9mcUXb61Pwhh/8nwub1rxIVsH5+6IaXl/xcJOob3PzZIcVkbNsUXYEyHHwJHJu9Shi/kbwAZd3vqxY1v3VO5wpAPR1qRwr67v2t2lBirV/lNwQCu8xpdScaKExJyMmJJ+J+/dmTlatn42cieSUPievC6xfdU+z1b049/nxGzjhvlYxXkVQBh0pdcYxYWzcvlRrzSQX9XR3IyqL/KcwD0K/LWLF7zYwtal+j62+7SeeXt0rx2TLQnmh6/F5Y5s4Pi2qXxKstNNfqHg== 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=cAXRTta4yu96SV53XsXWJo5tW6VYfzxGUdSfkRYNUXc=; b=nCK6x/NhmEQpz1x5j1qgfJMnc4BTdNMdO0E+RO62h4W/iDPttym/x7Sy13G2iQv6goIAXYKdKrE8e6XS8q94QOiTFDzEE7yStJ7WYnGFrRoarDQbkyH/Rgl4ux+RKyhocGdqeeBlUZhEAsUj5ZmkZVHJDsa7eNmNyDZuna0tcU1ddnKZnGJkk917sXsQnCIw4BOVCyvo+x0mExM5qTPcTKjcAlLNvdpYSSqhAFD+NaI7e58+F3EuGn6ivhxA8jLlQcUGQQ5+f7hOetGHViuEPshRvz6irGGsOL3ugUc1nbD4skrc9RM30IjkRfUNJSKl66pOIN9gpCV7LVgyikI3WA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=cAXRTta4yu96SV53XsXWJo5tW6VYfzxGUdSfkRYNUXc=; b=o4u/4GvQ3qDngXS9lt0MZX/H/KIkdUcpQo/lu6QajHQyXovZg7CwUJnU8JWrkySqULgjCNZyanB4BhwJcgUmf6EkIly2EEW0LNNHiurBhoJMO9/zZZdJon2t9cYWRD7RV1UbqHSv6VTxJOXKbQBej8ZNgluyarofZ5WbvO544V4yNb+9reelorDLn8bVeG0MtZoYqGCyfzuKCjFODMvp10ujFywNzY2+nYxADX3elG58JByLTw/H5ZTwWr05UJYOeynQ7C+3Qlx7XvqGwF93LiANL/N+w1ZKbMo0JkNTlPNGwPlSbUYd+NVo7J0d1plRr1Go1OKw+6zdRwmX42bn3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:09 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:09 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 2/8] vfio-pci: Break up vfio_pci_core_ioctl() into one function per ioctl Date: Wed, 31 Aug 2022 17:15:57 -0300 Message-Id: <2-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: SN4PR0501CA0103.namprd05.prod.outlook.com (2603:10b6:803:42::20) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3d3946b2-df96-4658-3c52-08da8b8da26d X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XccnJn2UIA7mYLm+WO6aMOxi6DeVpilaAWJX92MY98lDibB8tNYxGRpQ9PK9OA8fVFAFQpnWw8iXFpKo4nANjBWmPF9opdwezu3ZnZD2w2lP1HeJ9QM0FpzeEYW7CkK5nK5E4BrEOPXk7UD6BoF1Gtd7LVfSlgLvfvgEUSI4oMIk+npUDK7ILuG78NRL3NqN7KLHfCIeeYl+69gtDBvoEu73tkOK6z41u6S5wOdmo24lfKaTbXqwo5IRb1Nu++IyW1xzl2UjJr0VH/JMM0dW9H4d3QfJiQN5wt3Uf+O17wQLqvyXcjLSOeYBGWpFCsalo4j8TvcLGSpQg2fs8rmjMz9E9+I8FX+v1VBtsmnN0rhmXN6Fq5N33XBuEHZ3ujnik8Qx46UVIyLFYKE8uwbeLC8pS89O6a5Tq/rcefC6RdU09lVlq1bQ6EbkdrM2owCyIuk6FY+m+tCPT8eFVIsbGrMNoif9S4A0CS5fuoi3dGS0NFLetZFx9QhznOYrY8F6WABrl+/nqRTce0sHBEvmdWbUe4s0HvUDM5WxGP4oxvywQywYUoarAQcFxCttd97dYo+3yqXXKX6wC1Py8OOl9JV1b0AZzCsYXoVHIHzMokJb2g14YRBHiysVb/9oPxWEWaJHlZzTV1VnXfRR7nH3DscODLzA4DXqMkYxlOUM2y4QufR6maC8NFiAiIaJcI3PMcGNpcyWQ125ZOPOk1tIqAT4zOVY/N4KLYrlAgl4iYe4vm6hswxYh2FI3nxyfSzI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: gJVn3u1q3Wkv6GMV9advlASYA5b7fTB/Gc1FufWl5B1TggVaEoJMDvkkG4zrwPBzRz1McDUl5NSHKfsWu7GyFUrZGdDWk1JlIEwaEOQJ0gJeoqYRwzSG3lWjIb0URctsd2tCwjcRZKUBZXnFTrRZDmOxZxa7yWU7RmiFSRh4jFVN6QWxvUU5Y/dhHrXL1FIspzKM+hHX2QTMOv6d/+JtyDu9buV24MmXgGK/aLNO7zTsbcj/VqMPA7Jys/KTL8OaMdT8cqgfoVLkGuuYLnSSMRxhgRUrrcs/UhkRtPse/J3D/Nj1lE2wZUcG998h7SWBy44Vc4OvzyF77CSw2bOC5DOQWMYJhPiBCmKs3P1Ib+VKOWw2ItAhy/pXSxGfZuSt1SRZgZ1vNfyONJVUaKu3pTMtWoVG3TYaeWG+K2wf0YOAUHmFKtzGjoO5LJT3tFVdFRd5ngskMAbZiwOqTvgV9UBSshZgQiY52JD5s3NiX/c/UYfs4cI0/GWuQw9SQDLIU0B0WYV20qWB1r96ZzIVPUXZ2SOzDJjIibw4GCPQJKVs3KApUJdvV8TLShufbbPtwOjClyGwU4V5JzxuBoNT6kcVl/FCbrHo2Z77MgHrdGfWjSdwfauHViEgONh2G0iLgZoWUyhqUDnscEWN3MezyRWq8Gh19NVptPsN5CIp+4IQVHQLbRXz106Fz5YQBZcfRtsvWyf6DVxMGGlA7v9e+9+NgonWzDc1A5FjK61WAp/8PzHv2Tf4p0IxCPerafX2mxGSWFN8XLPm72qocTyJGsPwdd6Puz7lFFmUscMI6KBiqAG5SyJLpoj/+J+4QTPDyW0ipju/EuKEeDrGdaqpwgMze8BEOEQlA+whLlMqDfhuj16d4fvyTEC7cSag66QRZjGsvaw0OZpO1OvQewOhanFO0Kjc/VD4ggLQvT5gPvnvNDOeEy0dN0bSLG4WCj8pN9U2IDERyEzVYEpTKdConfa2/8HVsIkUQFwopu1TDK5wdurJ4uq5Yd65RWI/W+Z7YwEuvhy3sIndtEPPZUsLMfAxyvOA5SqfJIoVJZZDbAfqnz/ogBJGYgCYV4Fb4orI81WTa5mJsltbAaK4oN63Jf38d4RRSgHF/uV1t+w/Ou/HTeWt17JqEsuM0TCZZtG9OAk1rGqOpjKqimMC6YihOG+4Ut6+cZM3K75pNLWsTEHTfw5mrxLWcCg83sceoRuih1rv6MY/+JJFbL3ba6iI2EdSFCREHJtHE6LkDl55yCEQuwx0P9hgqFoyPp7kYDUFPGTq4t1ZYygLYkZlXK+8+WPkb3TLXw93u2eU5lfYG2YnGWkl4fGvaLc1Jd145sNcJWz3SiyRwInuYtGl8IyVLPpBD1OZ9EeRnf2PCKNs9rX+kQVm2qDw5YZQ30WpBIKj16LJ2ucnFSfUtgVajZlKkr6c4NTUFIoNwHH1UfxN8S9c8Pys1+DDZKftoe3eEaIu9rc0vtrNFz9EB07CczgTGl1J49zFBNpgK52hc66WdP4k4lEYXp43MwvxwCfKmMVA3cyCHyHLXNLMNeySGTthXMZAyIbEF7d1fApJ7KddeaQR5U3c8nFJLvt039AyeUiV X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d3946b2-df96-4658-3c52-08da8b8da26d X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:06.0251 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KiH+W44ecXDNpH5M9i8V0ww6TmLBniRxk52hajtYXlEw8yGSxBG6pUrHLS45SAFN X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org 500 lines is a bit long for a single function, move the bodies of each ioctl into separate functions and leave behind a switch statement to dispatch them. This patch just adds the function declarations and does not fix the indenting. The next patch will restore the indenting. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/pci/vfio_pci_core.c | 97 ++++++++++++++++++++++---------- 1 file changed, 68 insertions(+), 29 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index 84279b6941bc2a..85b9720e77d284 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -689,21 +689,15 @@ int vfio_pci_core_register_dev_region(struct vfio_pci_core_device *vdev, } EXPORT_SYMBOL_GPL(vfio_pci_core_register_dev_region); -long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, - unsigned long arg) +static int vfio_pci_ioctl_get_info(struct vfio_pci_core_device *vdev, + void __user *arg) { - struct vfio_pci_core_device *vdev = - container_of(core_vdev, struct vfio_pci_core_device, vdev); - unsigned long minsz; - - if (cmd == VFIO_DEVICE_GET_INFO) { + unsigned long minsz = offsetofend(struct vfio_device_info, num_irqs); struct vfio_device_info info; struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; unsigned long capsz; int ret; - minsz = offsetofend(struct vfio_device_info, num_irqs); - /* For backward compatibility, cannot require this */ capsz = offsetofend(struct vfio_iommu_type1_info, cap_offset); @@ -752,15 +746,17 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; +} - } else if (cmd == VFIO_DEVICE_GET_REGION_INFO) { +static int vfio_pci_ioctl_get_region_info(struct vfio_pci_core_device *vdev, + void __user *arg) +{ + unsigned long minsz = offsetofend(struct vfio_region_info, offset); struct pci_dev *pdev = vdev->pdev; struct vfio_region_info info; struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; int i, ret; - minsz = offsetofend(struct vfio_region_info, offset); - if (copy_from_user(&info, (void __user *)arg, minsz)) return -EFAULT; @@ -897,12 +893,14 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; +} - } else if (cmd == VFIO_DEVICE_GET_IRQ_INFO) { +static int vfio_pci_ioctl_get_irq_info(struct vfio_pci_core_device *vdev, + void __user *arg) +{ + unsigned long minsz = offsetofend(struct vfio_irq_info, count); struct vfio_irq_info info; - minsz = offsetofend(struct vfio_irq_info, count); - if (copy_from_user(&info, (void __user *)arg, minsz)) return -EFAULT; @@ -933,15 +931,17 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; +} - } else if (cmd == VFIO_DEVICE_SET_IRQS) { +static int vfio_pci_ioctl_set_irqs(struct vfio_pci_core_device *vdev, + void __user *arg) +{ + unsigned long minsz = offsetofend(struct vfio_irq_set, count); struct vfio_irq_set hdr; u8 *data = NULL; int max, ret = 0; size_t data_size = 0; - minsz = offsetofend(struct vfio_irq_set, count); - if (copy_from_user(&hdr, (void __user *)arg, minsz)) return -EFAULT; @@ -968,8 +968,11 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, kfree(data); return ret; +} - } else if (cmd == VFIO_DEVICE_RESET) { +static int vfio_pci_ioctl_reset(struct vfio_pci_core_device *vdev, + void __user *arg) +{ int ret; if (!vdev->reset_works) @@ -993,16 +996,20 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, up_write(&vdev->memory_lock); return ret; +} - } else if (cmd == VFIO_DEVICE_GET_PCI_HOT_RESET_INFO) { +static int +vfio_pci_ioctl_get_pci_hot_reset_info(struct vfio_pci_core_device *vdev, + void __user *arg) +{ + unsigned long minsz = + offsetofend(struct vfio_pci_hot_reset_info, count); struct vfio_pci_hot_reset_info hdr; struct vfio_pci_fill_info fill = { 0 }; struct vfio_pci_dependent_device *devices = NULL; bool slot = false; int ret = 0; - minsz = offsetofend(struct vfio_pci_hot_reset_info, count); - if (copy_from_user(&hdr, (void __user *)arg, minsz)) return -EFAULT; @@ -1066,8 +1073,12 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, kfree(devices); return ret; +} - } else if (cmd == VFIO_DEVICE_PCI_HOT_RESET) { +static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev, + void __user *arg) +{ + unsigned long minsz = offsetofend(struct vfio_pci_hot_reset, count); struct vfio_pci_hot_reset hdr; int32_t *group_fds; struct file **files; @@ -1075,8 +1086,6 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, bool slot = false; int file_idx, count = 0, ret = 0; - minsz = offsetofend(struct vfio_pci_hot_reset, count); - if (copy_from_user(&hdr, (void __user *)arg, minsz)) return -EFAULT; @@ -1160,12 +1169,15 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, kfree(files); return ret; - } else if (cmd == VFIO_DEVICE_IOEVENTFD) { +} + +static int vfio_pci_ioctl_ioeventfd(struct vfio_pci_core_device *vdev, + void __user *arg) +{ + unsigned long minsz = offsetofend(struct vfio_device_ioeventfd, fd); struct vfio_device_ioeventfd ioeventfd; int count; - minsz = offsetofend(struct vfio_device_ioeventfd, fd); - if (copy_from_user(&ioeventfd, (void __user *)arg, minsz)) return -EFAULT; @@ -1182,8 +1194,35 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, return vfio_pci_ioeventfd(vdev, ioeventfd.offset, ioeventfd.data, count, ioeventfd.fd); +} + +long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, + unsigned long arg) +{ + struct vfio_pci_core_device *vdev = + container_of(core_vdev, struct vfio_pci_core_device, vdev); + void __user *uarg = (void __user *)arg; + + switch (cmd) { + case VFIO_DEVICE_GET_INFO: + return vfio_pci_ioctl_get_info(vdev, uarg); + case VFIO_DEVICE_GET_IRQ_INFO: + return vfio_pci_ioctl_get_irq_info(vdev, uarg); + case VFIO_DEVICE_GET_PCI_HOT_RESET_INFO: + return vfio_pci_ioctl_get_pci_hot_reset_info(vdev, uarg); + case VFIO_DEVICE_GET_REGION_INFO: + return vfio_pci_ioctl_get_region_info(vdev, uarg); + case VFIO_DEVICE_IOEVENTFD: + return vfio_pci_ioctl_ioeventfd(vdev, uarg); + case VFIO_DEVICE_PCI_HOT_RESET: + return vfio_pci_ioctl_pci_hot_reset(vdev, uarg); + case VFIO_DEVICE_RESET: + return vfio_pci_ioctl_reset(vdev, uarg); + case VFIO_DEVICE_SET_IRQS: + return vfio_pci_ioctl_set_irqs(vdev, uarg); + default: + return -ENOTTY; } - return -ENOTTY; } EXPORT_SYMBOL_GPL(vfio_pci_core_ioctl); From patchwork Wed Aug 31 20:15:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961397 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34080ECAAD5 for ; Wed, 31 Aug 2022 20:16:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232289AbiHaUQV (ORCPT ); Wed, 31 Aug 2022 16:16:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232199AbiHaUQO (ORCPT ); Wed, 31 Aug 2022 16:16:14 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2088.outbound.protection.outlook.com [40.107.101.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5BEB4E58A2 for ; Wed, 31 Aug 2022 13:16:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XzMMLdX3CqffnsqAn7nGQgcsvcCSuUmkzI8JsuCkvZXZzBoUBwN/VxlY5vgry3SHKNpyreLfJJc6uM0ossKV1zlSdDDNZw3/1fxFSlmmxjEhROr3Ua3oZVHAQLsXvGhKsB04TlZ3u/74w7nw3glTKI2CKxeT/704VIY9M3t1mOSm3Ciqb3wU16+w6YNqC4F9HL/K89BBe3ww+jOWH0f21C2SegbDfubhFaA4qoeVzdgSxNxwofkkscqBTtiZV4TAqKqDVMKwvBAIEjGabBOYZTeVRmAyOsMSV/D6et/2wrBE4AER6SNPa08vQUIYR+pH8uI4CflptJ/HLl4kCHdimw== 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=POhumK55o3vMgyYg0MsAGYQmQ6zvj9SwZ21F85jpYN4=; b=R4fat12zC8vCK/6aJK600EVCLhzxSFkxpfI846ZGcNarBCyhFeswCkC+ONNVLzl6SOVjNflVzrhfbuiPknJXDTXU12zN1vLwSD56vzgVixP3mLlGCoRWD7aapn1Y1yYy3+TkMW8Fao1gvynUzBeXmdOHNj6b13kxpSSMYUNg9EyXiLbwb11Rm+WelXbJUTfsuQsdznYr2CgNgfdT2EQfOfRZo/UGw/jKjjjUU7x3FCkX6oYqS3tmEFwtRYswauytvu4YaAwCos58xINFY+sxEFBjmlUwHQ9LPsyCm7uFMzzn5ssuiIHb2kfnFU/gpjVxfbqtEw3EIy/K1lBJ5CwK4Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=POhumK55o3vMgyYg0MsAGYQmQ6zvj9SwZ21F85jpYN4=; b=CIldpUJAhVDUE5y54KjXQ53hXxX6/kR15VJIEc6iLJIorliH+bYFVYed245oJBsjohDq4FCIMfvQ9iPgZyFGYjXl2EUALkmYxbU6Kk3RBjao9GfzkiEauRzKfyqOV6941qlDpYAy7gRXRjHizIetO35ugUcp7UNgE7T1KoZd1ix7N24GJ7fvmOsiikrOa/AueGLqROZoFhxQeUCJogJjoW9+fMO5Kb2Cuex6xlnyOXSx7sujI4aQfOYs3oAHNX/SZzNX6xjcRat5Xc4QwutaWrMOQAblblPUSYY60dqcBjPfbrjz/z4zksN2JcdRy54+Q6X+cknfWZV8A60rdURoUw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:08 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:08 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 3/8] vfio-pci: Re-indent what was vfio_pci_core_ioctl() Date: Wed, 31 Aug 2022 17:15:58 -0300 Message-Id: <3-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BN9PR03CA0205.namprd03.prod.outlook.com (2603:10b6:408:f9::30) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c44dbd4b-e9c8-4321-2914-08da8b8da223 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2gJ8Yv0OlnqLocwSKN4CVtHuUbUHSI/lYXh1Zbq2Fx4OSuM6eyBhB4XZIbrTZ/3rQYcFXscGCiHhfn9cYDypOzq/OyA7BxS8ZcTx8j7SWrQwBOPByZJ8JGixDzuRSBTR89zzyfc/jMhNRATbE7NojwfrPTN2XXYiQ2aq9b92yxf3el/na++zgHmWfOBuVsGffxOFhGk66DSvAdEAn+xacNNeHjd9Tl8M32Wih+n7+PEBQT3Ol9YDNoS9RJ4tuWV0RhKnelm/5k8799LF0aBCJUAnM92NFH/HD9wtc7p/LCUAnx1OQcRYTnfVegHnpE3Op9eng+kqYmMk1OQEefL8O306vaNqGRI+gchJcPyCdGwSZF3MinU/58R0BNcmS4PQCiVT4BrZ5t55xwsxH0WtLWJjlDJwYdDb7a+qsh+RCxTpmriEYsNURKfS1I0mr69ElaYlOkWhlUviF3g5gYuD4T+RY7hv76O7wGGpyasmANztcJGXqnIviz+zU0QI2P5WjrNhVxcoAP0Iq+IV0x+fCUR3OV6Dm+1v2tvW/VsOMpoWJVaX8aeiKMdOBl24NM/ZY8EidvDXlpcEFCk2NSWZ5fuaTJ5chbxmVpJTvjqsq3+8R37qz3tn2UAZ97agoan9a5gJJx7df1jvqvig4MpZPiaaisy0w6Ijaf4e3hFqAZQAuUyD8usVCxqcvxOzXAh+Pf14YtYilz9P3HG38lvE75nHvi2g73vUdih2cxLFNkqwrt6ZmtJRcWaxLYC0CMdn X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(30864003)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 4Pdbi3BN33ZEcHL/irfWcRdPYJzru50oGyXZPZUM1+MnWaxVVdFeV0EwKA5brL8mokgqHlyqzppPhVM14CmKpG1rizJl+zRVJLmaVhbugTNx5yaOpiOuJ42dVtREM0qQZG1MXYhywkCfBoanVzFSnpBC9xa5Dtf3tfu6QAYv7V3U8dZ6z1PJkXHB96C+gqonlbz/rRyIVQZtuZmqKJQluV4mdyJ+8HTcU7ESE2N77yCYXDI9DAEoddZ0LMBxGnINsXCv01csUDsHyJeufDaI7nfhY94nV3wx+Va+TDOfUL6XFreFQHtZcgbW5e4MHU6Byrf1Bl9LYnqIb4ZUry/Ny64+g0JS8+0yBnNo+aby0xxGVcwuviko6QbgnVGmiKFG/6Cmrq/7NWDi6hyEoCEYckGtriAD1jECSe+VVzmoDf6rF9pHGIy+THtypkndD4FYeZ+qBDBQjm71liN7aaCG1p5UZeehGenDRjZ6mjw4IZDcXV6RnM9VxCAgq87PpZpVsKj794AbkUDSqJ4n9edO7lGaj37wKEsJXkwXv4esb1ceEZxNqbV2d9h/DXP1ZYsepuH/WhPLIDYpDBLtcb5i9LxJdnJrd/nly1Rmno4TPdOaJcd82sKkQcg9InZoCetxkUQ+POFAFdglTp0H+WQdjJBQdp6G4rtLLdUDCCfN29T9KqfzS8lnJH60taqgdWVA+W2TJnj3asHcVbGO5yInY0rJvH64r81zJh4Dwr8qdw2wNRr/cYLQKHC0+wSuFlJJ+EVMVB0TDgWj/E+nALTldDF2wPJ2FcdI2FGkZKUQLy8MNnLgWd6VD+HnfwI4GQS9iS5O2CnusXyDk0X0zORxQ5Jpss6PzyzKZJNYil7AvpTwKPItdYWrvdFHzL5mZquDG9zmOXcPGvARn755xrgcJWgp4FGOtxZGu8nuT8b57QjIaxaN36Iuec+sGMWmWDxflXOjK7u2TgJa1Wec4q7KpReyjtKL9V8Z+aenQY5VUOU2yAYIwohedjUorG89VlyLfXK14ujjm+4A2oLA2CDOFX5IDbRXsWZT8SAHtRXuhnEQhMgUf7Na0Zbq8C7S2imNeLlzIIpXVt+kRyZnI8JQ4hMy8u5ctMsgtSzM49T/1KpTLMklPTHnZgNbbx7RuCQdpXSwV82GQIRTe9v15lZtwxOfCTE9pRZpTv5OG52E08d4MWXeh8In3QLXODL+TN7dl8oJYQI6y9MpG++LsT6jbhQQKuW8L7T6lHKDfHOHcC3kXXAIGjdZWD7uhiXRYx04te5Rw2ZB3rnI1eoE5qVWri+LPSm2qH96Rw89LK0PeOhjie1W081b952A15BYwnrDTnhes/RfQ1G0fO33QyDo0EfPIvhWSnFE8CL0/2KwgfCfFrNrxZkZejan/jB9opkoI5ljg807E3xYgFFg9yGRtqleISl+k3GVQXmelby5+Zmv4fHBYk59UTrbbQGeLY47hpnahNBhC8S+P/tcAXWCK9IWdpozOIhO9fNs3p/ZnhyQ8ST58gbHLCpa7d86AEAAMTFaxvxVZ1g9aMuZGnxOEl5aQdyi9O4qbBnU+ZQO3X3BJDpQHBm3WDDN2kVeIiiZ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c44dbd4b-e9c8-4321-2914-08da8b8da223 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:05.5564 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Ps4TyN4amIsWqopNovLRseTFuTaifuOXMVEoG/wzRPXaWz5/T/m0g4gbps2Bv5Q5 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Done mechanically with: $ git clang-format-14 -i --lines 675:1210 drivers/vfio/pci/vfio_pci_core.c And manually reflow the multi-line comments clang-format doesn't fix. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/pci/vfio_pci_core.c | 711 +++++++++++++++---------------- 1 file changed, 349 insertions(+), 362 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index 85b9720e77d284..8bff8ab5e807b9 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -693,309 +693,300 @@ static int vfio_pci_ioctl_get_info(struct vfio_pci_core_device *vdev, void __user *arg) { unsigned long minsz = offsetofend(struct vfio_device_info, num_irqs); - struct vfio_device_info info; - struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; - unsigned long capsz; - int ret; + struct vfio_device_info info; + struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; + unsigned long capsz; + int ret; - /* For backward compatibility, cannot require this */ - capsz = offsetofend(struct vfio_iommu_type1_info, cap_offset); + /* For backward compatibility, cannot require this */ + capsz = offsetofend(struct vfio_iommu_type1_info, cap_offset); - if (copy_from_user(&info, (void __user *)arg, minsz)) - return -EFAULT; + if (copy_from_user(&info, (void __user *)arg, minsz)) + return -EFAULT; - if (info.argsz < minsz) - return -EINVAL; + if (info.argsz < minsz) + return -EINVAL; - if (info.argsz >= capsz) { - minsz = capsz; - info.cap_offset = 0; - } + if (info.argsz >= capsz) { + minsz = capsz; + info.cap_offset = 0; + } - info.flags = VFIO_DEVICE_FLAGS_PCI; + info.flags = VFIO_DEVICE_FLAGS_PCI; - if (vdev->reset_works) - info.flags |= VFIO_DEVICE_FLAGS_RESET; + if (vdev->reset_works) + info.flags |= VFIO_DEVICE_FLAGS_RESET; - info.num_regions = VFIO_PCI_NUM_REGIONS + vdev->num_regions; - info.num_irqs = VFIO_PCI_NUM_IRQS; + info.num_regions = VFIO_PCI_NUM_REGIONS + vdev->num_regions; + info.num_irqs = VFIO_PCI_NUM_IRQS; - ret = vfio_pci_info_zdev_add_caps(vdev, &caps); - if (ret && ret != -ENODEV) { - pci_warn(vdev->pdev, "Failed to setup zPCI info capabilities\n"); - return ret; - } + ret = vfio_pci_info_zdev_add_caps(vdev, &caps); + if (ret && ret != -ENODEV) { + pci_warn(vdev->pdev, + "Failed to setup zPCI info capabilities\n"); + return ret; + } - if (caps.size) { - info.flags |= VFIO_DEVICE_FLAGS_CAPS; - if (info.argsz < sizeof(info) + caps.size) { - info.argsz = sizeof(info) + caps.size; - } else { - vfio_info_cap_shift(&caps, sizeof(info)); - if (copy_to_user((void __user *)arg + - sizeof(info), caps.buf, - caps.size)) { - kfree(caps.buf); - return -EFAULT; - } - info.cap_offset = sizeof(info); + if (caps.size) { + info.flags |= VFIO_DEVICE_FLAGS_CAPS; + if (info.argsz < sizeof(info) + caps.size) { + info.argsz = sizeof(info) + caps.size; + } else { + vfio_info_cap_shift(&caps, sizeof(info)); + if (copy_to_user((void __user *)arg + sizeof(info), + caps.buf, caps.size)) { + kfree(caps.buf); + return -EFAULT; } - - kfree(caps.buf); + info.cap_offset = sizeof(info); } - return copy_to_user((void __user *)arg, &info, minsz) ? - -EFAULT : 0; + kfree(caps.buf); + } + + return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; } static int vfio_pci_ioctl_get_region_info(struct vfio_pci_core_device *vdev, void __user *arg) { unsigned long minsz = offsetofend(struct vfio_region_info, offset); - struct pci_dev *pdev = vdev->pdev; - struct vfio_region_info info; - struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; - int i, ret; + struct pci_dev *pdev = vdev->pdev; + struct vfio_region_info info; + struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; + int i, ret; - if (copy_from_user(&info, (void __user *)arg, minsz)) - return -EFAULT; + if (copy_from_user(&info, (void __user *)arg, minsz)) + return -EFAULT; - if (info.argsz < minsz) - return -EINVAL; + if (info.argsz < minsz) + return -EINVAL; - switch (info.index) { - case VFIO_PCI_CONFIG_REGION_INDEX: - info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); - info.size = pdev->cfg_size; - info.flags = VFIO_REGION_INFO_FLAG_READ | - VFIO_REGION_INFO_FLAG_WRITE; + switch (info.index) { + case VFIO_PCI_CONFIG_REGION_INDEX: + info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); + info.size = pdev->cfg_size; + info.flags = VFIO_REGION_INFO_FLAG_READ | + VFIO_REGION_INFO_FLAG_WRITE; + break; + case VFIO_PCI_BAR0_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX: + info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); + info.size = pci_resource_len(pdev, info.index); + if (!info.size) { + info.flags = 0; break; - case VFIO_PCI_BAR0_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX: - info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); - info.size = pci_resource_len(pdev, info.index); - if (!info.size) { - info.flags = 0; - break; - } + } - info.flags = VFIO_REGION_INFO_FLAG_READ | - VFIO_REGION_INFO_FLAG_WRITE; - if (vdev->bar_mmap_supported[info.index]) { - info.flags |= VFIO_REGION_INFO_FLAG_MMAP; - if (info.index == vdev->msix_bar) { - ret = msix_mmappable_cap(vdev, &caps); - if (ret) - return ret; - } + info.flags = VFIO_REGION_INFO_FLAG_READ | + VFIO_REGION_INFO_FLAG_WRITE; + if (vdev->bar_mmap_supported[info.index]) { + info.flags |= VFIO_REGION_INFO_FLAG_MMAP; + if (info.index == vdev->msix_bar) { + ret = msix_mmappable_cap(vdev, &caps); + if (ret) + return ret; } + } - break; - case VFIO_PCI_ROM_REGION_INDEX: - { - void __iomem *io; - size_t size; - u16 cmd; + break; + case VFIO_PCI_ROM_REGION_INDEX: { + void __iomem *io; + size_t size; + u16 cmd; + + info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); + info.flags = 0; + + /* Report the BAR size, not the ROM size */ + info.size = pci_resource_len(pdev, info.index); + if (!info.size) { + /* Shadow ROMs appear as PCI option ROMs */ + if (pdev->resource[PCI_ROM_RESOURCE].flags & + IORESOURCE_ROM_SHADOW) + info.size = 0x20000; + else + break; + } - info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); - info.flags = 0; + /* + * Is it really there? Enable memory decode for implicit access + * in pci_map_rom(). + */ + cmd = vfio_pci_memory_lock_and_enable(vdev); + io = pci_map_rom(pdev, &size); + if (io) { + info.flags = VFIO_REGION_INFO_FLAG_READ; + pci_unmap_rom(pdev, io); + } else { + info.size = 0; + } + vfio_pci_memory_unlock_and_restore(vdev, cmd); - /* Report the BAR size, not the ROM size */ - info.size = pci_resource_len(pdev, info.index); - if (!info.size) { - /* Shadow ROMs appear as PCI option ROMs */ - if (pdev->resource[PCI_ROM_RESOURCE].flags & - IORESOURCE_ROM_SHADOW) - info.size = 0x20000; - else - break; - } + break; + } + case VFIO_PCI_VGA_REGION_INDEX: + if (!vdev->has_vga) + return -EINVAL; - /* - * Is it really there? Enable memory decode for - * implicit access in pci_map_rom(). - */ - cmd = vfio_pci_memory_lock_and_enable(vdev); - io = pci_map_rom(pdev, &size); - if (io) { - info.flags = VFIO_REGION_INFO_FLAG_READ; - pci_unmap_rom(pdev, io); - } else { - info.size = 0; - } - vfio_pci_memory_unlock_and_restore(vdev, cmd); + info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); + info.size = 0xc0000; + info.flags = VFIO_REGION_INFO_FLAG_READ | + VFIO_REGION_INFO_FLAG_WRITE; - break; - } - case VFIO_PCI_VGA_REGION_INDEX: - if (!vdev->has_vga) - return -EINVAL; + break; + default: { + struct vfio_region_info_cap_type cap_type = { + .header.id = VFIO_REGION_INFO_CAP_TYPE, + .header.version = 1 + }; - info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); - info.size = 0xc0000; - info.flags = VFIO_REGION_INFO_FLAG_READ | - VFIO_REGION_INFO_FLAG_WRITE; - - break; - default: - { - struct vfio_region_info_cap_type cap_type = { - .header.id = VFIO_REGION_INFO_CAP_TYPE, - .header.version = 1 }; + if (info.index >= VFIO_PCI_NUM_REGIONS + vdev->num_regions) + return -EINVAL; + info.index = array_index_nospec( + info.index, VFIO_PCI_NUM_REGIONS + vdev->num_regions); - if (info.index >= - VFIO_PCI_NUM_REGIONS + vdev->num_regions) - return -EINVAL; - info.index = array_index_nospec(info.index, - VFIO_PCI_NUM_REGIONS + - vdev->num_regions); + i = info.index - VFIO_PCI_NUM_REGIONS; - i = info.index - VFIO_PCI_NUM_REGIONS; + info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); + info.size = vdev->region[i].size; + info.flags = vdev->region[i].flags; - info.offset = VFIO_PCI_INDEX_TO_OFFSET(info.index); - info.size = vdev->region[i].size; - info.flags = vdev->region[i].flags; + cap_type.type = vdev->region[i].type; + cap_type.subtype = vdev->region[i].subtype; - cap_type.type = vdev->region[i].type; - cap_type.subtype = vdev->region[i].subtype; + ret = vfio_info_add_capability(&caps, &cap_type.header, + sizeof(cap_type)); + if (ret) + return ret; - ret = vfio_info_add_capability(&caps, &cap_type.header, - sizeof(cap_type)); + if (vdev->region[i].ops->add_capability) { + ret = vdev->region[i].ops->add_capability( + vdev, &vdev->region[i], &caps); if (ret) return ret; - - if (vdev->region[i].ops->add_capability) { - ret = vdev->region[i].ops->add_capability(vdev, - &vdev->region[i], &caps); - if (ret) - return ret; - } - } } + } + } - if (caps.size) { - info.flags |= VFIO_REGION_INFO_FLAG_CAPS; - if (info.argsz < sizeof(info) + caps.size) { - info.argsz = sizeof(info) + caps.size; - info.cap_offset = 0; - } else { - vfio_info_cap_shift(&caps, sizeof(info)); - if (copy_to_user((void __user *)arg + - sizeof(info), caps.buf, - caps.size)) { - kfree(caps.buf); - return -EFAULT; - } - info.cap_offset = sizeof(info); + if (caps.size) { + info.flags |= VFIO_REGION_INFO_FLAG_CAPS; + if (info.argsz < sizeof(info) + caps.size) { + info.argsz = sizeof(info) + caps.size; + info.cap_offset = 0; + } else { + vfio_info_cap_shift(&caps, sizeof(info)); + if (copy_to_user((void __user *)arg + sizeof(info), + caps.buf, caps.size)) { + kfree(caps.buf); + return -EFAULT; } - - kfree(caps.buf); + info.cap_offset = sizeof(info); } - return copy_to_user((void __user *)arg, &info, minsz) ? - -EFAULT : 0; + kfree(caps.buf); + } + + return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; } static int vfio_pci_ioctl_get_irq_info(struct vfio_pci_core_device *vdev, void __user *arg) { unsigned long minsz = offsetofend(struct vfio_irq_info, count); - struct vfio_irq_info info; + struct vfio_irq_info info; - if (copy_from_user(&info, (void __user *)arg, minsz)) - return -EFAULT; + if (copy_from_user(&info, (void __user *)arg, minsz)) + return -EFAULT; - if (info.argsz < minsz || info.index >= VFIO_PCI_NUM_IRQS) - return -EINVAL; + if (info.argsz < minsz || info.index >= VFIO_PCI_NUM_IRQS) + return -EINVAL; - switch (info.index) { - case VFIO_PCI_INTX_IRQ_INDEX ... VFIO_PCI_MSIX_IRQ_INDEX: - case VFIO_PCI_REQ_IRQ_INDEX: + switch (info.index) { + case VFIO_PCI_INTX_IRQ_INDEX ... VFIO_PCI_MSIX_IRQ_INDEX: + case VFIO_PCI_REQ_IRQ_INDEX: + break; + case VFIO_PCI_ERR_IRQ_INDEX: + if (pci_is_pcie(vdev->pdev)) break; - case VFIO_PCI_ERR_IRQ_INDEX: - if (pci_is_pcie(vdev->pdev)) - break; - fallthrough; - default: - return -EINVAL; - } + fallthrough; + default: + return -EINVAL; + } - info.flags = VFIO_IRQ_INFO_EVENTFD; + info.flags = VFIO_IRQ_INFO_EVENTFD; - info.count = vfio_pci_get_irq_count(vdev, info.index); + info.count = vfio_pci_get_irq_count(vdev, info.index); - if (info.index == VFIO_PCI_INTX_IRQ_INDEX) - info.flags |= (VFIO_IRQ_INFO_MASKABLE | - VFIO_IRQ_INFO_AUTOMASKED); - else - info.flags |= VFIO_IRQ_INFO_NORESIZE; + if (info.index == VFIO_PCI_INTX_IRQ_INDEX) + info.flags |= + (VFIO_IRQ_INFO_MASKABLE | VFIO_IRQ_INFO_AUTOMASKED); + else + info.flags |= VFIO_IRQ_INFO_NORESIZE; - return copy_to_user((void __user *)arg, &info, minsz) ? - -EFAULT : 0; + return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; } static int vfio_pci_ioctl_set_irqs(struct vfio_pci_core_device *vdev, void __user *arg) { unsigned long minsz = offsetofend(struct vfio_irq_set, count); - struct vfio_irq_set hdr; - u8 *data = NULL; - int max, ret = 0; - size_t data_size = 0; + struct vfio_irq_set hdr; + u8 *data = NULL; + int max, ret = 0; + size_t data_size = 0; - if (copy_from_user(&hdr, (void __user *)arg, minsz)) - return -EFAULT; + if (copy_from_user(&hdr, (void __user *)arg, minsz)) + return -EFAULT; - max = vfio_pci_get_irq_count(vdev, hdr.index); + max = vfio_pci_get_irq_count(vdev, hdr.index); - ret = vfio_set_irqs_validate_and_prepare(&hdr, max, - VFIO_PCI_NUM_IRQS, &data_size); - if (ret) - return ret; + ret = vfio_set_irqs_validate_and_prepare(&hdr, max, VFIO_PCI_NUM_IRQS, + &data_size); + if (ret) + return ret; - if (data_size) { - data = memdup_user((void __user *)(arg + minsz), - data_size); - if (IS_ERR(data)) - return PTR_ERR(data); - } + if (data_size) { + data = memdup_user((void __user *)(arg + minsz), data_size); + if (IS_ERR(data)) + return PTR_ERR(data); + } - mutex_lock(&vdev->igate); + mutex_lock(&vdev->igate); - ret = vfio_pci_set_irqs_ioctl(vdev, hdr.flags, hdr.index, - hdr.start, hdr.count, data); + ret = vfio_pci_set_irqs_ioctl(vdev, hdr.flags, hdr.index, hdr.start, + hdr.count, data); - mutex_unlock(&vdev->igate); - kfree(data); + mutex_unlock(&vdev->igate); + kfree(data); - return ret; + return ret; } static int vfio_pci_ioctl_reset(struct vfio_pci_core_device *vdev, void __user *arg) { - int ret; + int ret; - if (!vdev->reset_works) - return -EINVAL; + if (!vdev->reset_works) + return -EINVAL; - vfio_pci_zap_and_down_write_memory_lock(vdev); + vfio_pci_zap_and_down_write_memory_lock(vdev); - /* - * This function can be invoked while the power state is non-D0. - * If pci_try_reset_function() has been called while the power - * state is non-D0, then pci_try_reset_function() will - * internally set the power state to D0 without vfio driver - * involvement. For the devices which have NoSoftRst-, the - * reset function can cause the PCI config space reset without - * restoring the original state (saved locally in - * 'vdev->pm_save'). - */ - vfio_pci_set_power_state(vdev, PCI_D0); + /* + * This function can be invoked while the power state is non-D0. If + * pci_try_reset_function() has been called while the power state is + * non-D0, then pci_try_reset_function() will internally set the power + * state to D0 without vfio driver involvement. For the devices which + * have NoSoftRst-, the reset function can cause the PCI config space + * reset without restoring the original state (saved locally in + * 'vdev->pm_save'). + */ + vfio_pci_set_power_state(vdev, PCI_D0); - ret = pci_try_reset_function(vdev->pdev); - up_write(&vdev->memory_lock); + ret = pci_try_reset_function(vdev->pdev); + up_write(&vdev->memory_lock); - return ret; + return ret; } static int @@ -1004,196 +995,192 @@ vfio_pci_ioctl_get_pci_hot_reset_info(struct vfio_pci_core_device *vdev, { unsigned long minsz = offsetofend(struct vfio_pci_hot_reset_info, count); - struct vfio_pci_hot_reset_info hdr; - struct vfio_pci_fill_info fill = { 0 }; - struct vfio_pci_dependent_device *devices = NULL; - bool slot = false; - int ret = 0; + struct vfio_pci_hot_reset_info hdr; + struct vfio_pci_fill_info fill = { 0 }; + struct vfio_pci_dependent_device *devices = NULL; + bool slot = false; + int ret = 0; - if (copy_from_user(&hdr, (void __user *)arg, minsz)) - return -EFAULT; + if (copy_from_user(&hdr, (void __user *)arg, minsz)) + return -EFAULT; - if (hdr.argsz < minsz) - return -EINVAL; + if (hdr.argsz < minsz) + return -EINVAL; - hdr.flags = 0; + hdr.flags = 0; - /* Can we do a slot or bus reset or neither? */ - if (!pci_probe_reset_slot(vdev->pdev->slot)) - slot = true; - else if (pci_probe_reset_bus(vdev->pdev->bus)) - return -ENODEV; + /* Can we do a slot or bus reset or neither? */ + if (!pci_probe_reset_slot(vdev->pdev->slot)) + slot = true; + else if (pci_probe_reset_bus(vdev->pdev->bus)) + return -ENODEV; - /* How many devices are affected? */ - ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, - vfio_pci_count_devs, - &fill.max, slot); - if (ret) - return ret; + /* How many devices are affected? */ + ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs, + &fill.max, slot); + if (ret) + return ret; - WARN_ON(!fill.max); /* Should always be at least one */ + WARN_ON(!fill.max); /* Should always be at least one */ - /* - * If there's enough space, fill it now, otherwise return - * -ENOSPC and the number of devices affected. - */ - if (hdr.argsz < sizeof(hdr) + (fill.max * sizeof(*devices))) { - ret = -ENOSPC; - hdr.count = fill.max; - goto reset_info_exit; - } + /* + * If there's enough space, fill it now, otherwise return -ENOSPC and + * the number of devices affected. + */ + if (hdr.argsz < sizeof(hdr) + (fill.max * sizeof(*devices))) { + ret = -ENOSPC; + hdr.count = fill.max; + goto reset_info_exit; + } - devices = kcalloc(fill.max, sizeof(*devices), GFP_KERNEL); - if (!devices) - return -ENOMEM; + devices = kcalloc(fill.max, sizeof(*devices), GFP_KERNEL); + if (!devices) + return -ENOMEM; - fill.devices = devices; + fill.devices = devices; - ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, - vfio_pci_fill_devs, - &fill, slot); + ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_fill_devs, + &fill, slot); - /* - * If a device was removed between counting and filling, - * we may come up short of fill.max. If a device was - * added, we'll have a return of -EAGAIN above. - */ - if (!ret) - hdr.count = fill.cur; + /* + * If a device was removed between counting and filling, we may come up + * short of fill.max. If a device was added, we'll have a return of + * -EAGAIN above. + */ + if (!ret) + hdr.count = fill.cur; reset_info_exit: - if (copy_to_user((void __user *)arg, &hdr, minsz)) - ret = -EFAULT; + if (copy_to_user((void __user *)arg, &hdr, minsz)) + ret = -EFAULT; - if (!ret) { - if (copy_to_user((void __user *)(arg + minsz), devices, - hdr.count * sizeof(*devices))) - ret = -EFAULT; - } + if (!ret) { + if (copy_to_user((void __user *)(arg + minsz), devices, + hdr.count * sizeof(*devices))) + ret = -EFAULT; + } - kfree(devices); - return ret; + kfree(devices); + return ret; } static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev, void __user *arg) { unsigned long minsz = offsetofend(struct vfio_pci_hot_reset, count); - struct vfio_pci_hot_reset hdr; - int32_t *group_fds; - struct file **files; - struct vfio_pci_group_info info; - bool slot = false; - int file_idx, count = 0, ret = 0; - - if (copy_from_user(&hdr, (void __user *)arg, minsz)) - return -EFAULT; + struct vfio_pci_hot_reset hdr; + int32_t *group_fds; + struct file **files; + struct vfio_pci_group_info info; + bool slot = false; + int file_idx, count = 0, ret = 0; - if (hdr.argsz < minsz || hdr.flags) - return -EINVAL; + if (copy_from_user(&hdr, (void __user *)arg, minsz)) + return -EFAULT; - /* Can we do a slot or bus reset or neither? */ - if (!pci_probe_reset_slot(vdev->pdev->slot)) - slot = true; - else if (pci_probe_reset_bus(vdev->pdev->bus)) - return -ENODEV; + if (hdr.argsz < minsz || hdr.flags) + return -EINVAL; - /* - * We can't let userspace give us an arbitrarily large - * buffer to copy, so verify how many we think there - * could be. Note groups can have multiple devices so - * one group per device is the max. - */ - ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, - vfio_pci_count_devs, - &count, slot); - if (ret) - return ret; + /* Can we do a slot or bus reset or neither? */ + if (!pci_probe_reset_slot(vdev->pdev->slot)) + slot = true; + else if (pci_probe_reset_bus(vdev->pdev->bus)) + return -ENODEV; - /* Somewhere between 1 and count is OK */ - if (!hdr.count || hdr.count > count) - return -EINVAL; + /* + * We can't let userspace give us an arbitrarily large buffer to copy, + * so verify how many we think there could be. Note groups can have + * multiple devices so one group per device is the max. + */ + ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs, + &count, slot); + if (ret) + return ret; - group_fds = kcalloc(hdr.count, sizeof(*group_fds), GFP_KERNEL); - files = kcalloc(hdr.count, sizeof(*files), GFP_KERNEL); - if (!group_fds || !files) { - kfree(group_fds); - kfree(files); - return -ENOMEM; - } + /* Somewhere between 1 and count is OK */ + if (!hdr.count || hdr.count > count) + return -EINVAL; - if (copy_from_user(group_fds, (void __user *)(arg + minsz), - hdr.count * sizeof(*group_fds))) { - kfree(group_fds); - kfree(files); - return -EFAULT; - } + group_fds = kcalloc(hdr.count, sizeof(*group_fds), GFP_KERNEL); + files = kcalloc(hdr.count, sizeof(*files), GFP_KERNEL); + if (!group_fds || !files) { + kfree(group_fds); + kfree(files); + return -ENOMEM; + } - /* - * For each group_fd, get the group through the vfio external - * user interface and store the group and iommu ID. This - * ensures the group is held across the reset. - */ - for (file_idx = 0; file_idx < hdr.count; file_idx++) { - struct file *file = fget(group_fds[file_idx]); + if (copy_from_user(group_fds, (void __user *)(arg + minsz), + hdr.count * sizeof(*group_fds))) { + kfree(group_fds); + kfree(files); + return -EFAULT; + } - if (!file) { - ret = -EBADF; - break; - } + /* + * For each group_fd, get the group through the vfio external user + * interface and store the group and iommu ID. This ensures the group + * is held across the reset. + */ + for (file_idx = 0; file_idx < hdr.count; file_idx++) { + struct file *file = fget(group_fds[file_idx]); - /* Ensure the FD is a vfio group FD.*/ - if (!vfio_file_iommu_group(file)) { - fput(file); - ret = -EINVAL; - break; - } + if (!file) { + ret = -EBADF; + break; + } - files[file_idx] = file; + /* Ensure the FD is a vfio group FD.*/ + if (!vfio_file_iommu_group(file)) { + fput(file); + ret = -EINVAL; + break; } - kfree(group_fds); + files[file_idx] = file; + } - /* release reference to groups on error */ - if (ret) - goto hot_reset_release; + kfree(group_fds); + + /* release reference to groups on error */ + if (ret) + goto hot_reset_release; - info.count = hdr.count; - info.files = files; + info.count = hdr.count; + info.files = files; - ret = vfio_pci_dev_set_hot_reset(vdev->vdev.dev_set, &info); + ret = vfio_pci_dev_set_hot_reset(vdev->vdev.dev_set, &info); hot_reset_release: - for (file_idx--; file_idx >= 0; file_idx--) - fput(files[file_idx]); + for (file_idx--; file_idx >= 0; file_idx--) + fput(files[file_idx]); - kfree(files); - return ret; + kfree(files); + return ret; } static int vfio_pci_ioctl_ioeventfd(struct vfio_pci_core_device *vdev, void __user *arg) { unsigned long minsz = offsetofend(struct vfio_device_ioeventfd, fd); - struct vfio_device_ioeventfd ioeventfd; - int count; + struct vfio_device_ioeventfd ioeventfd; + int count; - if (copy_from_user(&ioeventfd, (void __user *)arg, minsz)) - return -EFAULT; + if (copy_from_user(&ioeventfd, (void __user *)arg, minsz)) + return -EFAULT; - if (ioeventfd.argsz < minsz) - return -EINVAL; + if (ioeventfd.argsz < minsz) + return -EINVAL; - if (ioeventfd.flags & ~VFIO_DEVICE_IOEVENTFD_SIZE_MASK) - return -EINVAL; + if (ioeventfd.flags & ~VFIO_DEVICE_IOEVENTFD_SIZE_MASK) + return -EINVAL; - count = ioeventfd.flags & VFIO_DEVICE_IOEVENTFD_SIZE_MASK; + count = ioeventfd.flags & VFIO_DEVICE_IOEVENTFD_SIZE_MASK; - if (hweight8(count) != 1 || ioeventfd.fd < -1) - return -EINVAL; + if (hweight8(count) != 1 || ioeventfd.fd < -1) + return -EINVAL; - return vfio_pci_ioeventfd(vdev, ioeventfd.offset, - ioeventfd.data, count, ioeventfd.fd); + return vfio_pci_ioeventfd(vdev, ioeventfd.offset, ioeventfd.data, count, + ioeventfd.fd); } long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, From patchwork Wed Aug 31 20:15:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961395 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 708DCECAAD4 for ; Wed, 31 Aug 2022 20:16:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231436AbiHaUQR (ORCPT ); Wed, 31 Aug 2022 16:16:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231215AbiHaUQN (ORCPT ); Wed, 31 Aug 2022 16:16:13 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2053.outbound.protection.outlook.com [40.107.101.53]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46977E5894 for ; Wed, 31 Aug 2022 13:16:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q3FPN/ADbR2pIyX54Dd0uPQulyw7g/C0HybH+hNh1V9d+641QH3kU3VLnklsIP7k4utLUUY0EuzifpxGPx2ocw0Vv2MwRgndRVrFtUuKnBW9+gNBcVMndUhYWmfHb58p/9ex5yh29OAU4EG0RpD3+RB9AI4z2emiCz5DuA8oyqp60O3N9E2uhN1Gax++cxMIjh6i3PFIz6fioSFi+CpdQpW97qhNj6IoquYl1Q5otGYNBrvSqOoFQdPwkd/JnHh5W4QtdF6YgUL5iqlQ83QzB0K1E8xipzrbQJWnEOiQuzJSyfFnr9cNa5Gl922t50JEhWGrJxUGcBl8O4rt1W/ihg== 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=Xd2vWpZnyDMR+JH5YqO5OQ13owuQ5Cf/cfAib4sIdEg=; b=Yk07tkjYQdbQNPiTKGKL/N6yVjetBdJUrhe1n9XRkfoD6DluQB9qlyPsdI37wX7Nz8IPCGmpXmNCuTvrtxmW/fvS0CHHVmXyr1gIzi3g3/rNr2mK4RzgIprNqaKR+jMkkTyNQv8tBGeAP1rbk4Pdk573JV31tOHdWvt1qz9OIVKr9VtRUXxQXulOtFsOjoIegMZjCt+V0I7YdLIlPFPC7kQPktzbc1m5gSRb7rrLWTg63KwMsbWPsS/Xf4t6/Gu08o3KxrqP5iLA1fDQZncc72yFPRBXMpBR3sySRdXZQukn/Jyg9cJLnFrEvMO8WenPi7x5Usp9HcBpgJsebWVpZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=Xd2vWpZnyDMR+JH5YqO5OQ13owuQ5Cf/cfAib4sIdEg=; b=DoLTB1JKMkOaccLI/L09rlAYPgsr7BuUUNSmcGC20gb5adgheUzWCMhHk8fHLmGLSlWqD0vwOTzAgsBKHGqlM0Fi8gSk+RfdeprOxFUE37dhwdoXL1CRN3umtca0ortuA0GUfmeo0jUcYxdfhUrfr0NaqY6wu1NCQrrnVJOnwZczd2CgBO+jjuuGrXesj3V4V2bBnic6Kf76kbQZftvctpKOKHUznJN9PuLUvah+sacdvCP1eM3yKaADLyyp8zzFiABSuQ6FXcSSI6k0azCxxquTCvfSzKWe2e3RABpSthYcIKjttL/SZ0VhUvhUkOpA0Fx5Cd7qpf2vM0IEBrr6sA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:07 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:07 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 4/8] vfio-pci: Replace 'void __user *' with proper types in the ioctl functions Date: Wed, 31 Aug 2022 17:15:59 -0300 Message-Id: <4-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: DM6PR03CA0071.namprd03.prod.outlook.com (2603:10b6:5:100::48) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a9d540ee-6ae5-4f9d-a019-08da8b8da219 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eqDCqPky9VfO9fRoReeESUta477wXeXjYIRUp3XMJaYEIpORwVw80gkujgZT+QXSho7p2jWEj5BRAScel5CUns8uS/D8v1WV1hyid9rrjOsWUWhlAuhtnW3n5AEQvDrY1Ft7Q4iNxeEF9FKhdc/dEtyrgCjd/Zc7K1NEGdRbVwDPbIjIJFKpjuEGD7ETzMeDOGV0IFouXygg+6SwIcyHI0n+NoD/fbWB2msi7d0GUU0ZW5zRDPCsfkg5m0+m8btvPHDkBdvpFfIOoyYZsOsq3ijpiqb31xSZNXds0dalAjYWypiZHtiPWEyw03QVYlWG8TIZJ3TtfydUzI7fFobWELjIslXRhYyknycanOTrLBCh+kGfTrGJ2k1f1nok+rM0RDjvpNEcV3x+HgRg0qy5IzAoXKdsvNhh5EFWuRUGRxMbkovxjn8cO1zUmLOpGTyByrtHBOQGZkh7wSCxoXUZ4Rq1rxRNWKGJ79pfgBh/YyBfXHhlCH1IwjNaN88ERy552BIv6jPAFP+CjF0jYcp0Lk84g653+r49MNIdAybCnO+Q/Qz1nCNehoNV59gbITwaIDkni2PTWk9wplHLZpiRBhsRDlHFW0r75XYDIbcim3KLahN0Rru2SLrrvDXr5vnJ9OhPmu6xghlntkMxkkLlvquFRCPoANjOZUajQNjHbAQBXZEI5RRXsH76o95PvyWr6ujK6kxVq5b1Uu/f3Tir2m8qeLEv6oU7IXv3m0vpsZYTdkqQ5A1tHALVUqXJLoD3 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KEAFQnhZYqnXAjmokXJ701GuAkUVhAupNOKW2CGL93SRDIiTqTFVbLfCVQ1cdJ0zrFb4m+8PgXTtP6WrCZcStNl0z8XWXuOIvJZsC0qMhHbt2eor/vWKZ8/SJBkMqJpRfFBdCff3RJL0n2kefQdsIgdmfRVSIyv2mC3rc2nztro2BJv9tY6QdAURPCbJYtuGBcqNFEGkJdSxKtsv6gAP4XUrzxnae1tVnEzyskni9YXFTTk1orpuguvP5BexX4NgA0c7yXub70jF5Jzbmn8x1XSt6Mexwcc7NCAW2bZtW3Gt6U1/hPbjsz/TbYmng/GXn5yjthapY4Myz6FBnu0TgaBn24SxkIIZrsJyuySNT+pXiC2WcyiZ9y+xHlyxYxmQb5KKCY9obNwOSWLwOjx8FN8K3ok7KCb7003/9Z9C7Zts0/k0Z9cMgCb70Oy1cNoa3waX0EFdKzXLyLJUyT72kHA3pP2QAO9LtA4zujNFkTmq31EudVjeZu6hQfZKD44yUndFJJwx6sOIlQOYA4Dj/BZT5et0D+ajOfcGCqJYrAhwtSczn0Od/O6jVDq8QhD4QaoaQxYQ5Na2K4huL96DSySKkRNEmiO0LNuFDVcPbo6LyBFNMMFA7/zAN7bUdd+fpRb0zcRqbE5VPoN1M9Txz5y8svK5hYTdzy6Au6AvRFF3FxbCtFR337lnlPksc4VO5oMZi+JbZWwrVE5l8ED5PhxpVMi6cDvjXJmASRueDBK8MpODX6w8aMGpb4ZdShEYaLVewqWiK3ohzEawkPFMUDk3GMhF/waV/CRmvb+9t8r13GhM27OXfvdvLq+spdOzV/USglil7gnxcgAXXWxodiJRnlRZpAVOneesAlUJHGw2gRpt2zn6EQz8Mwfp2pdqJP8GefS5Hz9aoZuC0N9XQC950h/L1CuU6GRyk8aG6xyTff3KFxcN3ZpC/faQIRcT9NokN18kdRvup1W23a6yNVOqhsmaPF7sMMRa1hrSEOY+CdgqHWzmsywx21tl9WGBLiHrlqj5/cQ/uljp0kYitNkgwlYT6Q8MTDH0coBvsrsIfb5zaCspcAXCwr1PRobkFlTPeCv41tLUDWNN0tzh7RzS2KTTKOr/1mKWIU3Sg7SfR8+qKB0ssgWdholO25l0bSQalyLLBL3KLFxwlARxDkcmqLiG4uEuTxi8i4ukz2epSrxfKm8Ku1XcmZNITwqrXrD3Bj2MT32WyOYKcv/TGX02+20x8J+59Z/z0Ox/A032FThNKlUj/G1rxwkq3hcy3z/AVlOtMfRxERpG1vSVfKcUvimidvXjsdnQCrH+LfUmz6/YAulFkApBv2adKoIrZZpGvkaq018bjqY6AQ2h4ZSsvIvHtlWbpDuz+F3xqQgdDqTHC7k63l/O08Ztp4lJlfrs3XPYW6r5JhlCysF6S7bwKT/VOAObKhokYhUjFqHa+SnxVoY5ISQkkXm4tW3cXhoUHX89i5CnsnnoH40WH17XBH5ctJfKR33+ghDOmXjkog09IA2KW2oUnkOu5fIRz/g0VfQC7uyZ/w1Q076EwOvz4E6eUfw9RGng6sINPheXqlfRHt2hTLixZw+H5qFe X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9d540ee-6ae5-4f9d-a019-08da8b8da219 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:05.4927 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2WsWLU8gf0xhVdMc6jPwTy6BBcQEVB4swT92N0ZOKyG8+Y343IuvxFqkYsUO7FrP X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This makes the code clearer and replaces a few places trying to access a flex array with an actual flex array. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/pci/vfio_pci_core.c | 58 +++++++++++++++----------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index 8bff8ab5e807b9..9273f1ffd0ddd0 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -690,7 +690,7 @@ int vfio_pci_core_register_dev_region(struct vfio_pci_core_device *vdev, EXPORT_SYMBOL_GPL(vfio_pci_core_register_dev_region); static int vfio_pci_ioctl_get_info(struct vfio_pci_core_device *vdev, - void __user *arg) + struct vfio_device_info __user *arg) { unsigned long minsz = offsetofend(struct vfio_device_info, num_irqs); struct vfio_device_info info; @@ -701,7 +701,7 @@ static int vfio_pci_ioctl_get_info(struct vfio_pci_core_device *vdev, /* For backward compatibility, cannot require this */ capsz = offsetofend(struct vfio_iommu_type1_info, cap_offset); - if (copy_from_user(&info, (void __user *)arg, minsz)) + if (copy_from_user(&info, arg, minsz)) return -EFAULT; if (info.argsz < minsz) @@ -733,22 +733,21 @@ static int vfio_pci_ioctl_get_info(struct vfio_pci_core_device *vdev, info.argsz = sizeof(info) + caps.size; } else { vfio_info_cap_shift(&caps, sizeof(info)); - if (copy_to_user((void __user *)arg + sizeof(info), - caps.buf, caps.size)) { + if (copy_to_user(arg + 1, caps.buf, caps.size)) { kfree(caps.buf); return -EFAULT; } - info.cap_offset = sizeof(info); + info.cap_offset = sizeof(*arg); } kfree(caps.buf); } - return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; + return copy_to_user(arg, &info, minsz) ? -EFAULT : 0; } static int vfio_pci_ioctl_get_region_info(struct vfio_pci_core_device *vdev, - void __user *arg) + struct vfio_region_info __user *arg) { unsigned long minsz = offsetofend(struct vfio_region_info, offset); struct pci_dev *pdev = vdev->pdev; @@ -756,7 +755,7 @@ static int vfio_pci_ioctl_get_region_info(struct vfio_pci_core_device *vdev, struct vfio_info_cap caps = { .buf = NULL, .size = 0 }; int i, ret; - if (copy_from_user(&info, (void __user *)arg, minsz)) + if (copy_from_user(&info, arg, minsz)) return -EFAULT; if (info.argsz < minsz) @@ -875,27 +874,26 @@ static int vfio_pci_ioctl_get_region_info(struct vfio_pci_core_device *vdev, info.cap_offset = 0; } else { vfio_info_cap_shift(&caps, sizeof(info)); - if (copy_to_user((void __user *)arg + sizeof(info), - caps.buf, caps.size)) { + if (copy_to_user(arg + 1, caps.buf, caps.size)) { kfree(caps.buf); return -EFAULT; } - info.cap_offset = sizeof(info); + info.cap_offset = sizeof(*arg); } kfree(caps.buf); } - return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; + return copy_to_user(arg, &info, minsz) ? -EFAULT : 0; } static int vfio_pci_ioctl_get_irq_info(struct vfio_pci_core_device *vdev, - void __user *arg) + struct vfio_irq_info __user *arg) { unsigned long minsz = offsetofend(struct vfio_irq_info, count); struct vfio_irq_info info; - if (copy_from_user(&info, (void __user *)arg, minsz)) + if (copy_from_user(&info, arg, minsz)) return -EFAULT; if (info.argsz < minsz || info.index >= VFIO_PCI_NUM_IRQS) @@ -923,11 +921,11 @@ static int vfio_pci_ioctl_get_irq_info(struct vfio_pci_core_device *vdev, else info.flags |= VFIO_IRQ_INFO_NORESIZE; - return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0; + return copy_to_user(arg, &info, minsz) ? -EFAULT : 0; } static int vfio_pci_ioctl_set_irqs(struct vfio_pci_core_device *vdev, - void __user *arg) + struct vfio_irq_set __user *arg) { unsigned long minsz = offsetofend(struct vfio_irq_set, count); struct vfio_irq_set hdr; @@ -935,7 +933,7 @@ static int vfio_pci_ioctl_set_irqs(struct vfio_pci_core_device *vdev, int max, ret = 0; size_t data_size = 0; - if (copy_from_user(&hdr, (void __user *)arg, minsz)) + if (copy_from_user(&hdr, arg, minsz)) return -EFAULT; max = vfio_pci_get_irq_count(vdev, hdr.index); @@ -946,7 +944,7 @@ static int vfio_pci_ioctl_set_irqs(struct vfio_pci_core_device *vdev, return ret; if (data_size) { - data = memdup_user((void __user *)(arg + minsz), data_size); + data = memdup_user(&arg->data, data_size); if (IS_ERR(data)) return PTR_ERR(data); } @@ -989,9 +987,9 @@ static int vfio_pci_ioctl_reset(struct vfio_pci_core_device *vdev, return ret; } -static int -vfio_pci_ioctl_get_pci_hot_reset_info(struct vfio_pci_core_device *vdev, - void __user *arg) +static int vfio_pci_ioctl_get_pci_hot_reset_info( + struct vfio_pci_core_device *vdev, + struct vfio_pci_hot_reset_info __user *arg) { unsigned long minsz = offsetofend(struct vfio_pci_hot_reset_info, count); @@ -1001,7 +999,7 @@ vfio_pci_ioctl_get_pci_hot_reset_info(struct vfio_pci_core_device *vdev, bool slot = false; int ret = 0; - if (copy_from_user(&hdr, (void __user *)arg, minsz)) + if (copy_from_user(&hdr, arg, minsz)) return -EFAULT; if (hdr.argsz < minsz) @@ -1051,11 +1049,11 @@ vfio_pci_ioctl_get_pci_hot_reset_info(struct vfio_pci_core_device *vdev, hdr.count = fill.cur; reset_info_exit: - if (copy_to_user((void __user *)arg, &hdr, minsz)) + if (copy_to_user(arg, &hdr, minsz)) ret = -EFAULT; if (!ret) { - if (copy_to_user((void __user *)(arg + minsz), devices, + if (copy_to_user(&arg->devices, devices, hdr.count * sizeof(*devices))) ret = -EFAULT; } @@ -1065,7 +1063,7 @@ vfio_pci_ioctl_get_pci_hot_reset_info(struct vfio_pci_core_device *vdev, } static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev, - void __user *arg) + struct vfio_pci_hot_reset __user *arg) { unsigned long minsz = offsetofend(struct vfio_pci_hot_reset, count); struct vfio_pci_hot_reset hdr; @@ -1075,7 +1073,7 @@ static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev, bool slot = false; int file_idx, count = 0, ret = 0; - if (copy_from_user(&hdr, (void __user *)arg, minsz)) + if (copy_from_user(&hdr, arg, minsz)) return -EFAULT; if (hdr.argsz < minsz || hdr.flags) @@ -1109,7 +1107,7 @@ static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev, return -ENOMEM; } - if (copy_from_user(group_fds, (void __user *)(arg + minsz), + if (copy_from_user(group_fds, arg->group_fds, hdr.count * sizeof(*group_fds))) { kfree(group_fds); kfree(files); @@ -1159,13 +1157,13 @@ static int vfio_pci_ioctl_pci_hot_reset(struct vfio_pci_core_device *vdev, } static int vfio_pci_ioctl_ioeventfd(struct vfio_pci_core_device *vdev, - void __user *arg) + struct vfio_device_ioeventfd __user *arg) { unsigned long minsz = offsetofend(struct vfio_device_ioeventfd, fd); struct vfio_device_ioeventfd ioeventfd; int count; - if (copy_from_user(&ioeventfd, (void __user *)arg, minsz)) + if (copy_from_user(&ioeventfd, arg, minsz)) return -EFAULT; if (ioeventfd.argsz < minsz) @@ -1214,7 +1212,7 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, EXPORT_SYMBOL_GPL(vfio_pci_core_ioctl); static int vfio_pci_core_feature_token(struct vfio_device *device, u32 flags, - void __user *arg, size_t argsz) + uuid_t __user *arg, size_t argsz) { struct vfio_pci_core_device *vdev = container_of(device, struct vfio_pci_core_device, vdev); From patchwork Wed Aug 31 20:16:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961393 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B7E6ECAAD5 for ; Wed, 31 Aug 2022 20:16:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232212AbiHaUQO (ORCPT ); Wed, 31 Aug 2022 16:16:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232114AbiHaUQM (ORCPT ); Wed, 31 Aug 2022 16:16:12 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2053.outbound.protection.outlook.com [40.107.101.53]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9FC72E096B for ; Wed, 31 Aug 2022 13:16:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WLTx/EIzRZHxfZwq6QsDHXsNoNpUP184INxgtntZ3DM4HR4IXQhIAqVmc60nGHeKBmdLO/D2k22gwF+THy+bDijakyO+zjBlNYEo0gW67W8ZPKqT9+MO+BmObODdQ/pOKDMEoTYfn1WLCA5dMamyyEghXkO/fatA8grkaZnX2Ys4u73pGRecokQT2yqzLHweoTti9VRRc0u116tiwgBmgCLM++b5AXFV/F8aTCJ35khlwQDxzbMJnskJpO0QI/AoaCxlbN4b/Xq0DIEz3KqAXjtaxS1jfIh8t3k/BUuyTPkWmSBKfpSHCuBJpOfqmuXqmSxHidFdi0UJrO7D8MIB2g== 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=RVG7gBqvuKdVEVjQCoSCi2ggSEtiRLRRR4hW4PMVIP0=; b=Iib5cGSR6jipKdFhyx6u8KPUuooRdbl2EZgA+W7lYyRrwiMQQbOLseIj/InZFYrvhgk0f5XknOy/3R3lgeqrva0xSsWbIwYZsp1YMd2DVvt5vDUY8bMIRMSVcug+xNiLNduUjqTAwRL1VbjXuaoBudULGLhlJe45jIHjKOnCCwJnSnBi4CzCa+22opIlaH5evbB6Kz1sMtsQgwoeLikl+9a4Ij0jravvGp2PDud1Zdk/CVncELE7oJ1hcDClt66IlqQI+J6wyEmQHRvEao8u/3RrASU0YkiGH2ALU/ia+FpFnkGuMkrh2kqBsiujb1bxHwuRska2Gr2zSf4X7H6nig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=RVG7gBqvuKdVEVjQCoSCi2ggSEtiRLRRR4hW4PMVIP0=; b=bTskiwxTbAKVT7HkcIbo/6zbf3TlZOdOiZ49vy4f/yLYqTa62K/MpzQKKkX204eB/7PxjyV4UZojSFi765j+nUaP1Y61t1AiTI2ZeFnSXAX6AMDJ86qBlmgcePRgFVUFbmF6hQoOfSCUbLVfRBQGj6/0z8BTd9dc5nf703/jzYrRDoB9D/qPobJsvVJjTcwxDkpiBI4U08XOSZUr/CmWTebOGq/o3Uq7r1VdlAFtY6/R0ccTiIrRTeWakpd8bbAmnRCM66xVLZR3km+/wdglCzfeP7SUYNKVz9uU/I8d7W9NKWl9v6Iv5r70Z4j/QC3j/nbT2VTWcHXovtOpptxrmA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:07 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:07 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 5/8] vfio: Fold VFIO_GROUP_GET_DEVICE_FD into vfio_group_get_device_fd() Date: Wed, 31 Aug 2022 17:16:00 -0300 Message-Id: <5-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: DM6PR03CA0066.namprd03.prod.outlook.com (2603:10b6:5:100::43) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 136ab6ed-d833-4ec5-a019-08da8b8da219 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LZIgQZBZdGkb/tRhKcs3s1tHBdUcjTBDry+VQImWzjPmjKUifhaaDGeblCOf/RbKsG639Z3dvag9muxtktwQpomzk08w9eYVgXXkRAFepFakNgILdUPcsl3CynzhHNWMzTWMt/Ep/ADHDvFBDTYHYHnzG8GRGSV/5Q9neb4GmoT6EcrZ3tWbj3g+q6BBnJ14L3OJ12NaOJTRgo+lxa70HtUgJv4PibyLyWhp6R7bSUc4NI3CUmuudT6me3r7rd4QURqqhJkD6eTl8x81G9bQkfP7I+dyFR05km6SSxHI66kpjMGT4IPIgRNIB7EG26rh3bxUr4KB/yL2UfCOZUajSvJ/0lOerWKZT0kjABQThynKsvTEMEuoTNaLHvb3jSV94AKHFDhtMAJK9z3FhItRlFaxBCjHw9ssKJlNsH+cWLJnmbw9ZYhmDFjb/ocHZLLN/V8Tf/ePCrG2XwpZNx88Onbm6bydYXRfy83XlgLZ14lLmC2AXaIoxk2j1nb6IAUx20fWzJ/vDSJbsSFZ1//EORA9TwZq/Ipn31LfPjvFgp6PTt2CAEfe+U1As7W5iUtiBxP1j/se6Ljgcgayz4aQV20kCWwR/VAJQ1IMw/VJ9Z5+ah6tm97tIPicj7HwNPpNtXjACT6SRwWF2ZtN9r1mXh/7acM853WjPyAdIJsd4Xxe5avHbSJeolZCui8Qq1O/W9JjVJKyTLIN0cWWpJMHT4zk7DDo7oKyzNXzLFKO04xH7hxhFEtj2j7j2MefDvb1 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KvlXlYwhkum6W2WEq0SkHNjET/kbn+H36giLvA4BCzezCptuS7VxP4iugQdemGTxkenEozotUguaSplyVcykuhHHmLe4dmbVi/y2uFZIChtWTC17GMrXgBPlJ3sdSDbg2z2p5ebKUchf7vobf9ZYFB/mzG0+cuDifAxSrc6LLrJVLbX76jNFdB0au/PdECRdUPYf34pyLLxQDA5Ddq82znKRA8yE6p7FnhWM9VFz90oeX5nRvJ8jt2SOzx/p8tGxjiGFaPIXsEpF8+iZYhZj2mQWp22lulNw9dW0TgvFzCv3j3x4yyGmiLot4AHTcc8jYiPlh70sCGH2exUm9BAHZ11v8I5Txrj2CGZmWH/QM9+6Ahq7bXVraGRuC4FjVLfBQmLofxkJT99mVAPh02efWBcj+SFBzL3Ww+2Ogs7NA3XBBIrNMbctMFSvz+yvzFJkN8uhsZQlST3aCTPBl3Qc3DUPw41H7Oz8BQTAIkYJ1kCADVHoqbTZpKZTLvz1xQZabfnzzyCwe2TYNzSFrTI4WPzZvWlcJuncZ43nZHaHNmSRcsuNIiVoHGDncNdu6VyY6kKgA/DEWgvKaiEU9o+gDtaIOYZeOz3k1O+lLpinXhJ0eoOR8dHQhEH/lsSFUcAsdGU6bGicu8Gw+XJlRNQnfxLTHi2w67qyzyJvlAdB6Dg2033KkUlxGwAQ5hVu0TLbQHHeOttDHL3Td2ou1WollCD83mZ7iBN14ghOokPVrq7PguGt7LuyDlbIdpDhgGSc0JwKTJ43A7CumZHWtrGZ3Ov1Dw0bVfDY5aS9SrnghX9i+994AdOMVl++/asBWNIdgNU8e7AsJb5NH0+YQnaLI0OQZyqNyT5+eiHCGjyR/vNRnHllfimKF+2NZou+5NKLth8mDEh+SAybLtixcwWxyiT41F8s3WsSAwB6sdk5ovyV+hzjxkjUeGjpMgMEkXYnZjqy1jk6T8ck2WfDa5oakWYX06SE4aEcjwmBl8LVFoRbuTCriHbQAsggoD0GrwkHV2T2GseFoXJfjW/LuI/v1ZlFK/GgDMmNgv8KKFOtjYF4IvKdN3rYV44y4W4lSxooxuDB1QRJ/xQm1Kz9TiuW2jfZRiroATJ1bD/CzYmIijcO3uOTu0OZGllEF6juHPQcN/eSjTpG+cnkRymmjM/tXvw2qkXYfIhuBqoO+sIyEvIjmDLsmXGdD3DYnDiuUjs+C4x73VDfG6CCdBLGZqfJ3mKipS/GcX9Kul2PwswotlZ5FwcxIfU+SfpRVKsSocy8Yyg7DVaJDzghB+PkcAlDJxftSjnQ77tK9wX9147iltuMzGiuQAZ1MOuKxblb491AdQzoOac4uGlkWQMdhjYphvbHP7kZ4Uwp0VCQPHMTOZgNDerErmOLL51KblcuU53ZsN7IdwRvZnxKPdTd2xI4UnpITsom8OcRwzG8YiwIamGntm2F3TyOgq1XNK+Wnu+2FFlMdy9C+sy2SE6OC2HOV+9VT0aUQwMTSteR7SQ9FbUerAJCvpbjyvoqlNFfvWZUU6ve25Kz3JWMTJ1ieI1jd0cLdtdUj3bNERdROG2NBfAXfAw+VCUimM7HHgZvNF+G X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 136ab6ed-d833-4ec5-a019-08da8b8da219 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:05.3678 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: n9+wnEqFowRwLBP1aqqhyoSX+p7NXnUxu1iCX+YArzvmLu3yLEBAP1c4CL29jMVK X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org No reason to split it up like this, just have one function to process the ioctl. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/vfio_main.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 7cb56c382c97a2..3afef45b8d1a26 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -1178,14 +1178,21 @@ static struct file *vfio_device_open(struct vfio_device *device) return ERR_PTR(ret); } -static int vfio_group_get_device_fd(struct vfio_group *group, char *buf) +static int vfio_group_ioctl_get_device_fd(struct vfio_group *group, + char __user *arg) { struct vfio_device *device; struct file *filep; + char *buf; int fdno; int ret; + buf = strndup_user(arg, PAGE_SIZE); + if (IS_ERR(buf)) + return PTR_ERR(buf); + device = vfio_device_get_from_name(group, buf); + kfree(buf); if (IS_ERR(device)) return PTR_ERR(device); @@ -1215,9 +1222,12 @@ static long vfio_group_fops_unl_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) { struct vfio_group *group = filep->private_data; + void __user *uarg = (void __user *)arg; long ret = -ENOTTY; switch (cmd) { + case VFIO_GROUP_GET_DEVICE_FD: + return vfio_group_ioctl_get_device_fd(group, uarg); case VFIO_GROUP_GET_STATUS: { struct vfio_group_status status; @@ -1267,18 +1277,6 @@ static long vfio_group_fops_unl_ioctl(struct file *filep, ret = vfio_group_unset_container(group); up_write(&group->group_rwsem); break; - case VFIO_GROUP_GET_DEVICE_FD: - { - char *buf; - - buf = strndup_user((const char __user *)arg, PAGE_SIZE); - if (IS_ERR(buf)) - return PTR_ERR(buf); - - ret = vfio_group_get_device_fd(group, buf); - kfree(buf); - break; - } } return ret; From patchwork Wed Aug 31 20:16:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961394 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D334CECAAD1 for ; Wed, 31 Aug 2022 20:16:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231588AbiHaUQQ (ORCPT ); Wed, 31 Aug 2022 16:16:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45174 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232086AbiHaUQM (ORCPT ); Wed, 31 Aug 2022 16:16:12 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2088.outbound.protection.outlook.com [40.107.101.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E972DF644 for ; Wed, 31 Aug 2022 13:16:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lUmrduJLZ5tThghzSJIFvGh91uEZRi9PN1UdaqzNWLbK134/w+qGd7x4Yq+RHDFH5TF+ByvgkhRyrvqNbBgZjZzkvH2JjG144FS/Yrw4rcOeLvd/VSUUmSL2Ch9C3D+8eVxKb+ECGevwWkrEr2PKR2MgoNcI9fQvOWC8DYxpKTEUSxAk816rlwLqI1PtOqjEWEGG6nScO19BpXEJC+E3DGDPHgeqIeN7RnXW61BtyULffnDGnTld6nmp7n3Sl7ipQqUJb/iwUpAZD+O1ieW7mJ8mTbHpg5mmkVeZMF7eMYTPblNbBMn66J52KV+6WfveOFWI6GmxfdcNt10R+eyZkg== 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=WZhagPHWbCDsJlUHwhlYyi/fYTL+PJ19JzNNsd50eRI=; b=SPf+aJgnKbNWpTdTKho7RI2lHnmZlycEjCCj4e7TD4F7iKgV8s7WUzp3Hy7bp4cuHVVgsRs0gWOncnkwMK/LVJbcsncxQvBZvBRB1aaIFduPWSFdWk9M8WFsyOyXMuNH7W6tfmhEBeq/70X5MKHJkTENONQdzSECPKLeO+sjzzsH/6mvG50HljT0S3pRhBnC10NkuvfiC0IC27YP5hsItHb5LBQKfIXmfFLv1AhDunIwphLMp8I/XY/lXAoObieTlgs/ylockKaAgI2bLf5zSyGnfk58eZzXA0KcNmuIY8+qtkciTL2ggoPycoyBxc37/QtPp50zlO2jm5cBgfwYaQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=WZhagPHWbCDsJlUHwhlYyi/fYTL+PJ19JzNNsd50eRI=; b=tj88xiof/akG1ULdO5RE/3HV7bXy6aeLYPHCC3shnhBkhrpBi8btlPoqgN1uvMq8SN1I1tHsP5u69w+J7cLRCUAjkimDCPgwpfLe82botm6a5BjtlVzLn6gYf1EhDO3P97nAjfz2cG3dyPuOwt6DLJuA6YWkDygU5kpJ7QD/jkzJawF5BDYoLtupf09jUy0xGW4YabO1iJ21bVov7/B+GrgogQo9IwsmAXrmIiv6eLVzypZrOOPO3830Ths1p2CyxzMsSaq2VopywYQjf0Q524/qgKF/2DB0EpcyhpsfQionUaTRFGKUgO5WwewBwEggEVy73PV1V6qj1qh1qXJeRg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:06 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:05 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 6/8] vfio: Fold VFIO_GROUP_SET_CONTAINER into vfio_group_set_container() Date: Wed, 31 Aug 2022 17:16:01 -0300 Message-Id: <6-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BL1PR13CA0257.namprd13.prod.outlook.com (2603:10b6:208:2ba::22) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3f5c2c14-4d39-4d98-7c3d-08da8b8da1f3 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: B5b+a/vG1DMFJsoEamoc39FbYnk71eNj9mIR2YViG/WvgabsxZBarW1FBJPtkYN5c48xmcrDWU3csRnmazgyjX4/gOKmpyHTMCQlb6+oZoc7a0eoa/hex8ix2ZGjBrU0wM48zrJpQ41c6zj+wdaZ2KdrhAa2JYI0pvymePeyvHFgpG4yHepV/9dVTdXo3x04RRj7ArYs/Wo7vqfERfGqi/kpaHhhrtlGCV7o16n9VqDIp9RPjU0oSn5/p/zJavsCTfIjxx1ksQbcGcLOW6NqeXO78uOEh7TyPqa6CsmtL4ivF4A9eIcTmbfQVK18WgmbKQetUKKhQDUl6OLhusdpCFTlu8IIcM4iIBiA46WOOCeInnzcwRpAlUIUGWShD8DesXJ5mswKpTDLknQPotQR/47bZ+rIjp6QNEXoPCDpQFoscFIYB8Qn1YtOMIaB2tnnoCr2BtnqyMmdIGClmOTrOypm6FQsLaGYXw73ZKQGBhOkPqxo6NDOy+wQY1C/Gz7VLNkI0/mLPYA/okz+JIMyReNKHpDCgS1ZIWFum8HmhPM7+sN1w1oel+W4MGNtbWhKKY9TzQVKhsOq8S2O4vhyfDYM6+mylKzs7XsR64YXbpO63+tJDifDVfet8fVYCyOIGLGY7GAZcU+CT7/kAFBBXEpyYSqwU5egeFKfXpiFcaNmbThORv+0Y9DvZ+JXNnoa8KwzkhIUj5cvXhYWai0PEmJsSeItnUy+MkzoAe9oj26XVvXZpJtlcjB0BkVykRzD X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XgkZk996nYZEumR0q/d91gE6KQFoHPrpBVNzM3Myd2hZbEU5eu2sdz8ezZHOLCYu+0JyggnqxvIV5npf096o4WEaGovuOfA6sgL47sh8KmnJxwhu5r/LlYz3h2pJkwaoMnSzUlmxZA5oN3iX198luziJ/FBK3G9TiJh8QhKHdiMySKWxVWTgYQvfnfabgPE9Jxu5jFaDQzk0TiRQM9YBiYsLgx5ukU2MZ0CV6jig2+UmLW9YpOrauj9QUyoNNRz45wDAFQyIHzg1CDDncHOOViHsIrMIC2kjQ6mo7y1QRzV2fu0LMKzoId7hXL+wYOcZeqaoSvfs9JsXcJ7zSDF4ueTkbyxqkhIGZShW19sSICsUmAv28pFCz4AvdrYQcEKujy+bukYRcsMpsD6qJZkYHJ8ep4LSAzXeU/m8MbQK01WY7ml4z6YUIp32yHY5DmQPVfjOe9GuQZgk4FYiZ9Hi3hDBo7gfyUP9XxkNVCsLtpLHsNguW7zi26yzC8wUncVUMxNKGU2TfuFD/S7A7IHnzR3sgGCGsglOPNeA/4DYz9I8zpUMtwlo9t1OWHlvviANHp2SO2rGDO6t34Hw7de4tPkLv5Grc6GjS9ai1++lkhE4fT1pRPMD3cHaC0qqD7DZvo6ocGJibDVy5FwQtxyvjw0bibAerD0FVtXYjd35b3tPyiOpYgzwGSNfvcnBefyCsDwuphN3/JOIBi/IBTR6QIXDLHAIO5N6fCH92vModKhhmB02DEgXTdciOpqgdr312EaNL24DdZqxtFyyRPrWpZ6fWcleXcAUM6qnwnZnqYsG1o9QiPpdYXUV8/2MELzQDe7w5EpvFlsOm4nZz+a8Eh+q/kw6x2UMK71twMgpDIsLmofypTMTdsrc2XZ3vD5xfC/wBPACYUPjXKeHLy7l2WeDOS7AaLGfgPJa215bOksnwd1aE5h2rcLnxnQV7/P+fGzpx3hIkmd8BxQOcV846t3iha7nvP1wYLtZGhtyX2QZrDgAJphdL4OdG6246pZREKjbS9cGeQsvWD7DOTPVft8djqDcYAod23w/Ce2ixX6D2zfsDZqMZKcNAUNyGYgPuIZ8fVbpmaU+RZHv0O77TddqdZOlF+tmKWRT/4kfavYhy1aIqaSLjAJic47r6yeS3TzIKLrkJpnjbCe4gUUvbX7gEmlIVi4thcwnSl0gjSSKfjSW7mw2TGR3OhxdXdGQ9joS2LAwlnioGkqsLoBlcXZEcQ0zJpmuyMJ4VEFaaxE5iWKQ+L6eR6B7noGecfr7lNtKZMYvqc+Ki50YmK4cckWlz7Nmw40tsQYpIp2Grcxmi6GnIJIU22triSZVK/Bdlg4KeO0xkukAuJZdU6UZUp7blnj8+/vbHqbKCDF8PPwTZC9bZm10lVK4ZZOWK5u6Sfy9g5706CIOC6wkw+DyU3Bp2LA9OrP4agokReZarzj1CAtwzLNsjIS1DKvn1T2ylv9nL2vFwRoN5/CsVodlYCkQ6O0pbuZ9FIOBZjzxVkBCzHlHErrZStVUbLszp33HRCZ1J0Ut6hiC3+dEIY1mt9psrxWldPQDUXlFFPdlp7VR5wrLcUsvL/MVksyYAEJg X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f5c2c14-4d39-4d98-7c3d-08da8b8da1f3 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:05.1178 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /A7x6P5v6CV4CUWgc28a9dfXM8v1puYwdPJsyfnKnEDW2gK9fmQqXT7XoQIa/k0d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org No reason to split it up like this, just have one function to process the ioctl. Move the lock into the function as well to avoid having a lockdep annotation. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/vfio_main.c | 51 +++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 3afef45b8d1a26..17c44ee81f9fea 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -980,47 +980,54 @@ static int vfio_group_unset_container(struct vfio_group *group) return 0; } -static int vfio_group_set_container(struct vfio_group *group, int container_fd) +static int vfio_group_ioctl_set_container(struct vfio_group *group, + int __user *arg) { struct fd f; struct vfio_container *container; struct vfio_iommu_driver *driver; + int container_fd; int ret = 0; - lockdep_assert_held_write(&group->group_rwsem); - - if (group->container || WARN_ON(group->container_users)) - return -EINVAL; - if (group->type == VFIO_NO_IOMMU && !capable(CAP_SYS_RAWIO)) return -EPERM; + if (get_user(container_fd, arg)) + return -EFAULT; + if (container_fd < 0) + return -EINVAL; f = fdget(container_fd); if (!f.file) return -EBADF; /* Sanity check, is this really our fd? */ if (f.file->f_op != &vfio_fops) { - fdput(f); - return -EINVAL; + ret = -EINVAL; + goto out_fdput; } - container = f.file->private_data; WARN_ON(!container); /* fget ensures we don't race vfio_release */ + down_write(&group->group_rwsem); + + if (group->container || WARN_ON(group->container_users)) { + ret = -EINVAL; + goto out_unlock_group; + } + down_write(&container->group_lock); /* Real groups and fake groups cannot mix */ if (!list_empty(&container->group_list) && container->noiommu != (group->type == VFIO_NO_IOMMU)) { ret = -EPERM; - goto unlock_out; + goto out_unlock_container; } if (group->type == VFIO_IOMMU) { ret = iommu_group_claim_dma_owner(group->iommu_group, f.file); if (ret) - goto unlock_out; + goto out_unlock_container; } driver = container->iommu_driver; @@ -1032,7 +1039,7 @@ static int vfio_group_set_container(struct vfio_group *group, int container_fd) if (group->type == VFIO_IOMMU) iommu_group_release_dma_owner( group->iommu_group); - goto unlock_out; + goto out_unlock_container; } } @@ -1044,8 +1051,11 @@ static int vfio_group_set_container(struct vfio_group *group, int container_fd) /* Get a reference on the container and mark a user within the group */ vfio_container_get(container); -unlock_out: +out_unlock_container: up_write(&container->group_lock); +out_unlock_group: + up_write(&group->group_rwsem); +out_fdput: fdput(f); return ret; } @@ -1258,20 +1268,7 @@ static long vfio_group_fops_unl_ioctl(struct file *filep, break; } case VFIO_GROUP_SET_CONTAINER: - { - int fd; - - if (get_user(fd, (int __user *)arg)) - return -EFAULT; - - if (fd < 0) - return -EINVAL; - - down_write(&group->group_rwsem); - ret = vfio_group_set_container(group, fd); - up_write(&group->group_rwsem); - break; - } + return vfio_group_ioctl_set_container(group, uarg); case VFIO_GROUP_UNSET_CONTAINER: down_write(&group->group_rwsem); ret = vfio_group_unset_container(group); From patchwork Wed Aug 31 20:16:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961400 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4A260ECAAD1 for ; Wed, 31 Aug 2022 20:16:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232199AbiHaUQZ (ORCPT ); Wed, 31 Aug 2022 16:16:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232278AbiHaUQP (ORCPT ); Wed, 31 Aug 2022 16:16:15 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2088.outbound.protection.outlook.com [40.107.101.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C9C2EE58A2 for ; Wed, 31 Aug 2022 13:16:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oR3mgeIQB4797QqH/1JQPbxv+Qd7JC0yntCFBBFkTW90Hxb3RvIgTdi7QBk86W4Cr9eL9guxpvHO6cwbXQIEoMNwT9g26CKBlT2MTVSL0P8IPuC1ROouuBIPTx0HFvcXUJGbbANEEO4qyEMT6WTKSjSjyIFjlyxP6wo1ggNPx/h/x8mI4HOiqauv6i4X/W8eTdPhN2gfvrgiRvrwljOJCpyDrvElZxXbTNmxrhiLlvy7pu8IqL+mM4Ytlt4KavTilCm41wiMrDeDuCr/q7XgRj/g1YoA8lCI8mM5WpOMWicdq2TG1YTdsIcPXN/etH87AxjT4ObSq9B8iPbH9a5twQ== 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=Rlll6OwItxvD0r89bgE202OEJkhIDpnfvA55EAac5+M=; b=PSF03c0FBgtEmqMptPp3GsVzc5BuTnzjxWakbk9iyAjzQFqIApqNit9JhboZefmsskDQke8aompUy83sdeK4S9qPXvkxGibEEJ08GUucBqIguMZxJ26uvCH+yppHuYs/R64UBzFErFydYzy0fRUkvIszoYt3U+781E8uZAznAs9/sz3+8wNbR51jRctF9EwK5aN68TU8pXnxoTQcLRSoWi+fx0ri3TPrhmU1f4zgy8NOSHG144rQVohoWIXkBg9+I0tD57DvDGcfwRu/kMF/17+h+S7811IzeOWUV4EZArVuN5jY55A20Q7jBLfVVaC8BERz1lCMFvshkGgS0M3sZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=Rlll6OwItxvD0r89bgE202OEJkhIDpnfvA55EAac5+M=; b=IcLeJqAFG5oETw6+Oap76+tOQNwbHnit/jEO/h6BsK8dJPNbsdy2JXoZSBDvqHDr7zDJr6/9OUHrvPrJwYTxluPjLnDWNz8PN4sgzNB1v6XdUWgTzgYwg+fk/YHP0Tg23F3rbstLLiUvQZgyQgxDD9YJxeAvZAODwoYgIGzY+W6c6tC9Ou7rNSLtJSMddat5JyLV6q0AhCCY5irL550D0TejIUjEF/4m1EfKVYNi+RYUuuPa/0sngGODYFCJY75F2Fb3TSDhMYkQdRPzuwLsjnK2akjP9sF97Dg/mSSXQnP5UDL/n/cZprczC2kRUf8JwIZXQ+YRpnz314358vXODw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:10 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:10 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 7/8] vfio: Follow the naming pattern for vfio_group_ioctl_unset_container() Date: Wed, 31 Aug 2022 17:16:02 -0300 Message-Id: <7-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: CH0PR03CA0052.namprd03.prod.outlook.com (2603:10b6:610:b3::27) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ec5c1888-8d84-46d3-aad2-08da8b8da2c0 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: n9f7888p1Y/ntNoNloHfGlJqNQoTCLwFZxxZmI31J85QRwheynSkiCX/y7DdKu8rNjtq0Mn3SkccbHyuiGGoXtwls1yq3UNmaNadiUAu+uYnaqFCbbf4G1MOkWGDniPV8a6dyFbf1Agn2hZjtprABYXLRUhNuhCS5fzPUvvkNtZ3BzbWJ+fny7DzJdQ3LdvJE39nVqqkLDA7b/fXa7AuYfp8KlmhX0pDjskzZOAByKpPJMZCpprEu+A8SOG8GN2XkCyWZhs+tLl4nlwcuYXTsOBNsqL2tugY06//OG6QJ0lTDfwX+90UkJZq53m+zU+S/ExEu5SKoe9eSzR2JfiwdJEyHZvnUDGwqrqfe0z6dIWQdnHXsCeI6sgtuY/fGBXxCQbFbMeR05ueRjBYuTERc97NfboLThtRJkTeTBXAaVK0xYQn26r1x4LM3g7RcnjQ9eBwTl8F4Ls/W2adJmFA4yZ3OVD6jKevh74yrW0P8y0axzEB/Pk+bHWyIXt0qKqWN6C9yyJV2JZ1bP4+sD+vI2i58pQhVqAiGVEQeSu9ALMTj5OzXDU5jxjXIiENg48sYt3YkVm3g1KToPfyCX4p3WTBEGvxEx00FvI8B1fhKjPOhgH9RJdJtToyKCFjejPYhBdkPRxOp6T5TkcRYmFajmTNQqrWtweiOJVYB/41yYb+hq6VbSUoKWacXdn/VuU3q/KGUk/7gWDfrpBu4GVFyyC+x6a0d1FBttDAWIA4QigdWdV6mP2gFd3tJAGjju6c X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GUqVxpNzgy9om3QMMsdYGVGYBz8b2JapozPNKmqOYa69WHwfS2t+6RnicKpexyRSAznns8oarGMdO9t4bz8HeAGeoA+V953plC4WD8sFv3TT9ws4UXIxa7LNQ0/9XuQCxkvB2Aa7eSnKQiELj4vRpEglXOggLgaDVJAsmfXRncKEjfzxL861mnA+A6ZpRG6TJKwsFy1xh8ABjzBg0TXM/8j9Wfqvw0u2pOhwIcEF2dXEfOMcYYQt869IImZw6W/dJTvjq4QZDBZFIpLbg5fQ6gmRTXwQ4mPRH5LdecdoZqnzlvMQxDNoEIauN53JSjr1z9qm0GAaX0G9j+Kmx3HAWbqoN/5DWAhuUfZ6fQ0Hw50suk/h56POBcUyBRaDDQlqwI602BvxHj23/RIeDu89bUQinHgtqL0G0nszzkV0wbEfukQvk6Q6lmmzJfUKzLKUm15IwAPKOVLbD1OKRJH77jvXg5MoVqua25Aebpd8rqUA4Gdjpn+rD3GhtcT6fLQdl3qDzP+YbzPbFNjLWTiQHGgbo2desu+F43imlpBbNbYlVdwyJWNOApO9Z4zHMB5o0bPQdLJUazb6Oqh0J4mrxmiwEJNJ46bDopjwXE+L8uDil4zztphr2DF7b32zzqhk3/OCpuYYBNXwhDOYnAJAUZTcCn4OGnn6FNLp4pwwrVLReQmaXTleBCTHtALR9Vpqw/WRPIb/x2ina5Sh5FQ41a6GpWsTrys1qd+L4Z4qKbM6+tQwlVGOSQAkKlLZC1l62M2n+9vbhQpsvVFnJZoHgDO7jk3GLHfw6KPz+JIxVqgbbVxq4VCj4N71qHStLwU+koWSGxORIshbCaBu8eHt02D3rSimhu5/L7DfT8Lx1B7lxupla9N7LfeWuQuOQj+rD4HU7gSreO1Iq2dkqwsYS/rlSE5d13hg379i8HV2TMZ19xF+AIK1lH3oel4Y1ge9uC2XRpsQT/Kkz+37YMQV0TAuuCr/btxxqeOEwLurtxuNbxwNIpw2ll+buJcSC+oiqP/y1aUCGnjVA8tyqIrN8UPICvAR3lvzq5moM1VEOVYm5BBQ2LS1+ZjN0SdpEQ4CimoFacBBVacNIVp1fsvrwRPiz+RK1lA/btzQKpejS/fR/jLSHB+2JW1YCFVxS+PWYq6OdwLPPmaff1L+6iy0EpF1Rw0wElcxC6NJZZ+8EqWt1PaR0vkOiYzsRunY95qpkZph1hSMAtaVj4YNVnzR22A+84Rrio+mWkCRDFtK7mybPcV7I+b3baqtK3VUFK5NFZgP583O8qdFEx8hpJuEWyWqu6IMbQbcm73YYufRRhdW+oLWNJAVLZkghB8Rp1AxQKKxlcVIrzuoqVM0E9Odf/Dt0DFJqgcGkJLjy0ippO53NjetNbWNIxgCm38C7FJjDKanjZ+Bpk5dY8l0IDY3AFI1M6koUAUYjbAsH9By3Ywl5pbWymxUMUvuxLPVVCD6t1yT/DrlLZ09EuV29ifu8VXG6wDh8OOCQIUQD1hZ2NJEIWEl/Z4RBtWsK0rpBEVvPr8kF1dolwpNPiRuT5fv/1qBvkJMq69tCEsEORAc5Yvle978hun2iC0hriTZEJp6 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec5c1888-8d84-46d3-aad2-08da8b8da2c0 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:06.4625 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: V5ILCNcU8bRcQ/bvlXscOx+D3rXFg4FhgMUFpHnh9gOQAt8/cyaVZVzcjAp8jzAM X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Make it clear that this is the body of the ioctl. Fold the locking into the function so it is self contained like the other ioctls. Signed-off-by: Jason Gunthorpe Reviewed-by: Kevin Tian --- drivers/vfio/vfio_main.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 17c44ee81f9fea..0bb75416acfc49 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -968,16 +968,24 @@ static void __vfio_group_unset_container(struct vfio_group *group) * the group, we know that still exists, therefore the only valid * transition here is 1->0. */ -static int vfio_group_unset_container(struct vfio_group *group) +static int vfio_group_ioctl_unset_container(struct vfio_group *group) { - lockdep_assert_held_write(&group->group_rwsem); + int ret = 0; - if (!group->container) - return -EINVAL; - if (group->container_users != 1) - return -EBUSY; + down_write(&group->group_rwsem); + if (!group->container) { + ret = -EINVAL; + goto out_unlock; + } + if (group->container_users != 1) { + ret = -EBUSY; + goto out_unlock; + } __vfio_group_unset_container(group); - return 0; + +out_unlock: + up_write(&group->group_rwsem); + return ret; } static int vfio_group_ioctl_set_container(struct vfio_group *group, @@ -1270,10 +1278,7 @@ static long vfio_group_fops_unl_ioctl(struct file *filep, case VFIO_GROUP_SET_CONTAINER: return vfio_group_ioctl_set_container(group, uarg); case VFIO_GROUP_UNSET_CONTAINER: - down_write(&group->group_rwsem); - ret = vfio_group_unset_container(group); - up_write(&group->group_rwsem); - break; + return vfio_group_ioctl_unset_container(group); } return ret; From patchwork Wed Aug 31 20:16:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12961398 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35BDDECAAD4 for ; Wed, 31 Aug 2022 20:16:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231835AbiHaUQW (ORCPT ); Wed, 31 Aug 2022 16:16:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232114AbiHaUQP (ORCPT ); Wed, 31 Aug 2022 16:16:15 -0400 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2088.outbound.protection.outlook.com [40.107.101.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37744E5894 for ; Wed, 31 Aug 2022 13:16:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UGwFzVy0Af6pWKHeQktT4f71bB27v8zX1CIClrDV9ESPUVRuISMb0EokZwJZTlUdxQ6eP3ECTXwiyJn2eEv4ff/ZOEHIEflUtD93o5ESGMrrVgTgZWJp1jynxxWZj9nso8KDJJ6inl1U0eFcptra5LCZMj8FLS+crdPVG5novagjGOmNje0DAFIt+jDsxAIL6a7JC6Wh/jHLNJG9oyXx0dlNSpV1it7+LQjJMOxPUV+1e/v0p2UtgqzMSUOSwxPIav7/SoBYAZf70LFn56YiWI0Q9u77pMIXQ0Lzzhccoxdg41DETc/B0F903PBUP3y8e/gu8AebjDBkkQDzzr4hgg== 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=ioqmLK2L3TktQDTIxeQejNK4mrAkPBKGr/XsJ48vgH0=; b=D6HVQEPlG0cqNB9ClKPFohWG+mcQlSmXBnwg3ahqabwKm8NsPSqtfhG/q0PqSUJpAQW+78uf7WYcY8SJL1nw1JnaS0u0pNVrlmslISe5bMs0suH7GKF7IzBJiJU+/n/mrF/+2twGm66WYj6NZxd0QCuQYKdP1zdMItWn1YVtBnwd3nC/6e63YQ22KzGdZbDb5B/N4fAz+3xit1peX/uoLPbRUUNqJj4k3y9TDyu2r+/wBaqjgBges92F/c634FUrf0W75uWx/SuVimw71E8UCpQ/ANp7j78d3vYTFIW80IzEt6vaem2sMnEQBzjuvq4MQHzfT2pV/lbc46gU8vtzHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=ioqmLK2L3TktQDTIxeQejNK4mrAkPBKGr/XsJ48vgH0=; b=BSDjA+8CCdtNNILWi70d3n0//WurLq5fK/7iZLSZck1Alj5YrICNK2Lcy4fQkccoesg2qBPIdKGNensentV+OGiO/dDIiiEIABm0Ew1v9xINE772t+jMxRs+E9WdmG7uZqhVmtrJ0PNlwaVP8aKMTN721e0bkR5CqO+4OKrCVR4e6MmrPyeGY1EpspDMaDTKr+1NJA+gucfA7mk6RK5o1AIQ7rc6GzHlqpgt7/YZWr0JiD29j3SlInbQ/wZnM0+NOZ6EQpwkSVu8cbDyM1oQLBMAnp4U64FVBZbLqNtzf8qWAGzxKcoW6lC2/slOaxPx+DInlpgDOD4JT7DhacYIBA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.21; Wed, 31 Aug 2022 20:16:09 +0000 Received: from CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46]) by CH2PR12MB4181.namprd12.prod.outlook.com ([fe80::3d9f:c18a:7310:ae46%8]) with mapi id 15.20.5588.010; Wed, 31 Aug 2022 20:16:09 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Cc: Kevin Tian Subject: [PATCH v2 8/8] vfio: Split VFIO_GROUP_GET_STATUS into a function Date: Wed, 31 Aug 2022 17:16:03 -0300 Message-Id: <8-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v2-0f9e632d54fb+d6-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: SJ0PR13CA0147.namprd13.prod.outlook.com (2603:10b6:a03:2c6::32) To CH2PR12MB4181.namprd12.prod.outlook.com (2603:10b6:610:a8::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4713b2da-577e-4c0c-b089-08da8b8da282 X-MS-TrafficTypeDiagnostic: SJ1PR12MB6316:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aBjoJQTRa1Lj2FWDEYK/YDxV81xb7twqe7CheswQMbF5Mbxce7GJnkAl3Xs3biPPUzxTguVNTcIMWEsdqKAL4zSm9uz3QmCoqHpEebiv3wA87R+xK+z5iAhIB9w9uFFwUVfxzIwm/jxDBi7nx3CGKhtt34IRd8jGuDlnXYaDHlAiarWM8WpVcWrw32CUY1R2nLKmH9AhR5U9z1qX1FYbIjvIM7udWRTTzMGkhcMIzyGHK1a9dIrLkjKGU0RA9076pKb6E/dWzwwliwoCuZTzcKNTo90T1DMn+gwJvXverTsH+F3qFe1b7oGIHBtgWWvJiYboiRAl8b1Sun63nxgRILmDvrpMt4RutIMpvr1QqihXwq/QM3Zl41ZVqzj6lc5JYtJScSJrEF+NvMVR+rHBQ7WSFEFD656eJzzk5DSL5M18DYYoGqRebAonAjHVooByHcmQQjp/76v/J1rNVP7usGVtZpwHERq0QxUIrOWUcHPgWmaYFO3dkdsZtUoTlIsrRjPoUFhq+vurGF+uLfXtaJ3JWUDcptR8AUOp57HrnA3p9MDPSEbxfKChKJj4r/eDkQZM3exeNN6sbeDxhYvUQeCL5am79+bh5zX31zNLp2O3TtvWf4Eo49ZFfyV0EL4NCOx+MiBnwfCIyS/1VXRJgTqu2r5JmOniChQGyIgC1TlgqBSy9Edtf2BRle35MAXo3cCHJ12obm22G18BhHektwAHLUlPqQcEQP0mdUEt7306+8VXuDO5Ny/m6lGBetS7 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB4181.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(186003)(5660300002)(110136005)(478600001)(66946007)(66556008)(4326008)(66476007)(8676002)(316002)(6486002)(86362001)(36756003)(8936002)(41300700001)(2616005)(6666004)(38100700002)(2906002)(6506007)(83380400001)(6512007)(26005)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7yckVvzJhzmnhOLf3qTgxEOrqknr8CJTcdBI9vCdK0Rzq/Sxjt2Mdv8vZAxXb4bzWUEk5k6b514kWg+9kWW7mNkMcws2hRLbUBeeEy8yN0SbxzlZ12hvrusKRfj7sAKFTGA9qKDh/JhdgHZPY7oM+ixTI54q5zeshIuMk3shOBqvBP3M+vpNqkhnxFVJWKa/z9J3RpDb8Lqzg2US4rXyhzkq4uwaSKIIu7OAHc5BYxJI3FbdOEq1X7ivBtXPUU6iVy8V4gBvKfyWU/QM1u/vEcoY4wzGBnDYIkOmiotrd0Ej5ebTh3StPLfsAM56n6iWduHW2uJU0ZFye03BTKhXPJQ4xM9tYB9rBh8WKm0Gqby1PfTyFCWbCUbQJ0m1MUFrvQvsFRzwsBlCXLTBnxMFrVTSpxGVpn7QOUtBbPQXoYeaINAExn1w80obDx8Fv0j6pzcjKq1Z3CZg/3Ug3v1ybtOZsS1KFh9/x3jeJDrFitAhLb1OxSQcgxfQTphCm6OwYaXXApamfX9N4QPa25oZ84TxLjkP85CPMgKMHTPXn1MpAZDn42keKqLaXY+F0qrlM3urweOj6PDLxFv3fghQjSyFY3JwUhkyYmR9E/t9czAdXL7P8mDbfpN10nMv+iJXafqelRpR/op3kkyfenUm0eE1jPCc2NA9Vqq/pf7Wn3JQwNtQk/PIk5ebyXnL8BprMIjvf/SHh2kq77qjF3b25mD0g0x4jhOVlGOs+42sGpx/tbbZ4WJ4Etn/f1+HADcs3O8lz64jlFc1NLqghPQSgMBLQ5oYUvuQieetrDNOXzZ636Sf2hARPUj16Ei1wxgvLiQG01pZA2G7YhSdCpqPxWytwh3oBgUWdIyxRdSjKN0L90fOUumGILAl9yuweCIrp/Aqe1ESpVfDnL6R7vHAfIRPN2nfoh1o39Pbk+sDxxc+5IPUemvHOeRQe8DO7RJLa4wUsiLikaM0RfK4DBAOH8CK03yHu8+OwVQbpDL+8gZixlLWKduR0TD6zX/+ePoTqzIYcRkJp3Y7+RqgoDODEQFjstrCq7zpTE/tnlixwd+XHePW1+Tn3r6jgINIgBeTKV7cLkTHNVr2JDDgJHPbL4dokh/7obK95ruQATVQ+ezrnBf/pUdSSpRBoYaaBPZCjaaowIrzftXLV4VQenzOkPbsTrAVR6C7xrKWTnuLlX0rt7UhxUGx55JDLjuGIQvmyOjpBnV19KUjbXPUG9wLq/3C5ggoyk9o8NvXLGWBqObfJIQ+q3Uvtp+lqna7x1JxK3RYL4Qt8yLw49J6nTQT/4Oj6PawKAwOpyu9bej0MNRCwFOASLHiO8a9Rx1hQa54fHOZzpNBElhdkDQ++lbTkAtlkc44uWnbnoZvjhnjmqukxT4VZMBt4KY0epzvHIAXT7rS5M5nDZJmVbO0IJeafBuV/WUOMAXclYDCzbE1oeC3+oNarTPloFJbdlDYiJM2wT7G99Yh5DfTinZR6j8NKO/2fhgv7LbkZ9iOEFHF0KDSCP2s4R/FcUYWhrH4jXhZk3B9iSxcs77uWe8chgPkfEpsZxgPP/aKpwhAORVNlV6Tpl4kVE1nK+NdcqqH1ESP X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4713b2da-577e-4c0c-b089-08da8b8da282 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4181.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2022 20:16:06.1969 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Ahuvy41TGWaKMRivcQjMWk++nG1wekt9cjTjSYRwKdS8oIKxp6cNGll4236Sj6t6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This is the last sizable implementation in vfio_group_fops_unl_ioctl(), move it to a function so vfio_group_fops_unl_ioctl() is emptied out. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe --- drivers/vfio/vfio_main.c | 61 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 0bb75416acfc49..eb714a484662fc 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -1236,52 +1236,51 @@ static int vfio_group_ioctl_get_device_fd(struct vfio_group *group, return ret; } +static int vfio_group_ioctl_get_status(struct vfio_group *group, + struct vfio_group_status __user *arg) +{ + unsigned long minsz = offsetofend(struct vfio_group_status, flags); + struct vfio_group_status status; + + if (copy_from_user(&status, arg, minsz)) + return -EFAULT; + + if (status.argsz < minsz) + return -EINVAL; + + status.flags = 0; + + down_read(&group->group_rwsem); + if (group->container) + status.flags |= VFIO_GROUP_FLAGS_CONTAINER_SET | + VFIO_GROUP_FLAGS_VIABLE; + else if (!iommu_group_dma_owner_claimed(group->iommu_group)) + status.flags |= VFIO_GROUP_FLAGS_VIABLE; + up_read(&group->group_rwsem); + + if (copy_to_user(arg, &status, minsz)) + return -EFAULT; + return 0; +} + static long vfio_group_fops_unl_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) { struct vfio_group *group = filep->private_data; void __user *uarg = (void __user *)arg; - long ret = -ENOTTY; switch (cmd) { case VFIO_GROUP_GET_DEVICE_FD: return vfio_group_ioctl_get_device_fd(group, uarg); case VFIO_GROUP_GET_STATUS: - { - struct vfio_group_status status; - unsigned long minsz; - - minsz = offsetofend(struct vfio_group_status, flags); - - if (copy_from_user(&status, (void __user *)arg, minsz)) - return -EFAULT; - - if (status.argsz < minsz) - return -EINVAL; - - status.flags = 0; - - down_read(&group->group_rwsem); - if (group->container) - status.flags |= VFIO_GROUP_FLAGS_CONTAINER_SET | - VFIO_GROUP_FLAGS_VIABLE; - else if (!iommu_group_dma_owner_claimed(group->iommu_group)) - status.flags |= VFIO_GROUP_FLAGS_VIABLE; - up_read(&group->group_rwsem); - - if (copy_to_user((void __user *)arg, &status, minsz)) - return -EFAULT; - - ret = 0; - break; - } + return vfio_group_ioctl_get_status(group, uarg); case VFIO_GROUP_SET_CONTAINER: return vfio_group_ioctl_set_container(group, uarg); case VFIO_GROUP_UNSET_CONTAINER: return vfio_group_ioctl_unset_container(group); + default: + return -ENOTTY; } - - return ret; } static int vfio_group_fops_open(struct inode *inode, struct file *filep)