From patchwork Wed Aug 17 16:07:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946200 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 21F84C28B2B for ; Wed, 17 Aug 2022 16:07:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240775AbiHQQHw (ORCPT ); Wed, 17 Aug 2022 12:07:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240714AbiHQQHm (ORCPT ); Wed, 17 Aug 2022 12:07:42 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2061.outbound.protection.outlook.com [40.107.94.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 506249F76D for ; Wed, 17 Aug 2022 09:07:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iUHp/K3n4I9ZaDwYR4Xz+t8YRLp5Glmd4sFdMR21HYj2OUypmZTupxPhm3LwulQtRZu3bYk4a21zrx/r8R/fHMNdAN24GgHbU2GGVdp3myz3gMpYgFyoFw8XoKBGbJBxOj1YZ/WdE77mAw/nw5TdSB9+u73WxDJ0LY17gRSBJDwzeY/qfuyabK6oP/Q5dYso5Ynf90EAgn0sxoc/N9bT8KaRFCReIMSwcHPCc7uaS+X2lxDodDYKzUsASOooVU+fcq1b372ppvhYcjNo+kV8qmf/VroBsR5XXb19VZYaKgpKM9JgZaAY2R01EEshb0iRBGkHleDB8M47zvXEXviZXw== 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=WXcDNsuQnC0E8qlz26Ds0cOSqpouzQxXfzAuI4qMbPc=; b=l6NEUTIMeL9IxSxGoszx7I51fBGUaJ/fSgqTN3ye4UbK3q0ScpxpmLB7txcWEZc3iRiHbDG8N5V0OA/0YUyG86QBn8sUzuxfB/2TP7p8LYBgZsjtDPnDBmsKup9GqrjU9u0MKN8LpjpxcG5egFAzcW6zdf8IfEBIBFvdIruQz6lIvjqqrWoW4TWd2YASwsRicrFXG7ZiGsa5eBd+3qC5t4Z+aNSs8Uxpm1m5KdnL/1To8fpNiPBAuc8pkfDc2qp3ybwSnqs5mcH5Za0UFfYSsH1ikqzMvIUpzvQYnEwN4s3YKjUsOy8WBBykPjz3xEKleetLvlNP3+dWD7XOAOM9Ig== 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=WXcDNsuQnC0E8qlz26Ds0cOSqpouzQxXfzAuI4qMbPc=; b=mJbvaveIfVYvWCAzNMjmdJIDCmoH12K/u0ho/ooNgCShQKscfPhj/510WmiD55CbKb94nN3AeLI2uEoOBo6vRTd69Sepf6CM1TmmX9E8lvgXlWPnthKG7unDm9OLFX093Xq/29tPRBrGIDdKE5tVc7grjE/3Pmzznp5R3O+Br/i+o46DlWIH7OOwkugYAs08t0GVb+SF9Vad3+6XeDoeWwNHlZgjdaKe3SXAmzaFLYmNDOmWi/91jnKstku1mwYT7bd5B/aTdh2tQ+Pt8O3wC8L6stPWCEjGWqp6xByVQuXlw4//PnajCa+Vs02oAYq3DiKuG/pQagzutw4IeCtEmA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:29 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:29 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 1/8] vfio-pci: Fix vfio_pci_ioeventfd() to return int Date: Wed, 17 Aug 2022 13:07:18 -0300 Message-Id: <1-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BL0PR0102CA0062.prod.exchangelabs.com (2603:10b6:208:25::39) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a7b0b9e-7b26-44b9-17fe-08da806a945a X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tD/tdQiKPC+brCbEBA+/RAupMQ931kmc2hbPFSsch2RJOZWcNdl16iCfydrRY7xcXtfFU14bdGOsu+GVd9OoOEfqq11AXFkpLcI7BJ20JXLoVhB+fteI/82JI1ZKi0sogtkhWtUSb68HliU50X5Ww7MM+s+pZozcuPdDNPfTgAvemb+nDYGr57ZrZ0mbr/veibzzN2lPf0VV3KCxCNVOWl6SFNGdTg3lI41ICze6IITq1R+k7BD5kOnHk9huAMmzPheLzxfySHj+oLywe0XQCJXqJtWUbmG+cSYER1MwL0ArScInnzpyJPcBYWNQeM1azuBtCn6SYbR+XSEQ6wWAbGpqTvWNWQaZ0LXM2VZy2zUKP18TxEloAxwj/nm/TLfs5eau3OgnvMjmQqOXu7y0woV4Xb5Rss4N9dYZncp3NS4MWxgBpkT9ubbOJ79dvCt7PygAs0amvfv+MwR0HZDroytX6ylbOWOwYe1FT+HmYuuAYXBarItsZBWK7shrRkjGhf7uWFQ4xuVt10g5Mf+YT+KHt36a4jGkM1HCCjlkeTrywMZy1mlP/Z7ENIbI3Bkl3vNKBksKVl5zZvjneao2KDf2kiz36Iq5K1uY97HEfEmp0qWoIq3QHMFG60HZ6zX8ItSTfparBkHjJWq5zB8Zu00WNcAZk+pFjxONZ87UFPlSDv0KR0q4PDK4o/xreK/BYFYIskdJOIjUC8EgVY+KoBvrzv8lgeo94BaKiTl9+G2PSNFRgFAn5T1g+9KIVho3rJ2XLnsEJdEoskAwx+4qAEg13RfrUSrbKZewiY8IMzU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6666004)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uXB96kVrFeiPQFSCcte/08pVHsyodelsaoFZ1Jy1IeNoukWsNz3G54XcF/2i2XEOOwFsh+KG6P7NsPuRXZqun9qPCebCgzq2YvH7iaXxw+8iONedh2+TpdccwVY7LT3EITP7CiM9PTk2WnxUw58oN6jtemOYRnjdbW7Wt48Ai2mpwUve8mJQjMr6CMrB2iolqB6yvkWqYFKBSWvqzbBPrNGMtEQx75Yr0aRVtDAkc8lk0jOMatW5yV4PXCi6IRJh9v8fKMNZiLx+zq5NUckJfzo/jRiOAvIZ2VZtrICtf2zKD8MS8WByTn/lv2XZA0juwLA1T8KJgFNfYqQOHH7Yb+s0V1e6ua4wFoamRxjKsI1r0IdxUbET1OkqZhCApAMHiF79wf7w43Oe9CHzXxU/M76yJvKiNHoIwf3EM4xWfDrqozEb6/DzUGlftVWuYIJaKjO2BL6YZyP5rEzFnV8Ap8gpmKx1Hvm8iH6mbTQXZhJVNpR+7ERZ4DwOQHxYMj+VXkykglHbLgWJ/j9JHXfmSQVNlhMiAZOoTEUBvfL30Gd8zY5lk41li6f43/OQAUa1Aqed6/kP5hzolCXelcQpRN/Kmz7qQQQyAJnbpu614G48cTLhsTuDmMfDiucyvgsAP5wgQRYSXFsya416uLp3cysC9XV+TsRCanPIDSGGShpvscTFO2buPsbFcYyFNy0KsLlcGWy07aWunf8F3fx7mqgB+XgHzFzjmfCf1/SGo1gGcVMpqZOr2SJjREBz4r3OLNWs7PgEdKdftidIqURqrVSK84TINKLqk5/RgTNX5oo/N7RRXGGoqOxwAZ6tI/q5l8uQ+IwQWnay0sVT6S/UN84+4Hy54cvNeG+N3jg2rDG7vVsajRi35YuP88153BuLEFqQ98u/nX7UoE6DWVJRxFfJ/Ua1ukx92IkdXGtndp0AsQ4cO0aYoQloE4CDsxBnZ29iyNYfHAc56UjFw/ES4AP1902zbE+EPntiPPFYYqVMR2b2DN/SPDG4Luijuqtjgck129B+qCggXJmgei07ApBXi/BuRyvEIy8f0A7/8ZPr6wOZh7bnL5cP/rIc4INYis4sYObsfWhbp/NtZ2jzk5CdJDTLV4mpJhAZXGspb9rxcr9cbNNPSHEDc0cq8Fh0O5jO1iHXMdvZYzLS2pEafG667/7/A+J+bkbdLN/2E8igDq+Lk9LTlMIfERnYKglVNAV60MHuQ6qV8CKelin3DYx+DtYR4hcCrCvaFrBd9nHP201V6i5V/SviQdC2HM0oP3ZePIRX7OzZFZ5zdAIftkl06NLHZMEIfvnYm9MHKD7g9A9Fm32DJSVVB5m1MHKEBM7mvAh3znWM8NBWCok2xh5MD91baz7AkPtNKTtuOBYllmxoxtBgPSfb/ZEwWmET/xAlqmnmd+U/xud6rstXPGhOlHhzMcXmiOZnaaZdR4DWHZCSQcywHTPDeiW5dKXXYbWtg3RkYaTjQYKnoOG3jdyUwzzGQx8ALbMCtc4wS3MMVBWjbSEXiLrWONfNhEvUT+ZKGiaAVEimhD1DNRU+W+78N0Re0mlsNuJsKNgbITKJ3xTYXlATYBGBqqsM2yGa X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a7b0b9e-7b26-44b9-17fe-08da806a945a X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:27.1104 (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: GU1oYdsk7ojUtUrwEFxAiQL+9QJKsV4aTRDYpclxsFiAAYaG2cnWY1XU4ofA3JOP X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 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. Signed-off-by: Jason Gunthorpe Reviewed-by: Kevin Tian --- 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 17 16:07:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946201 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 C2DC9C25B08 for ; Wed, 17 Aug 2022 16:07:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240819AbiHQQHx (ORCPT ); Wed, 17 Aug 2022 12:07:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240731AbiHQQHn (ORCPT ); Wed, 17 Aug 2022 12:07:43 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2059.outbound.protection.outlook.com [40.107.94.59]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FFE8402C8 for ; Wed, 17 Aug 2022 09:07:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BKk5PqgjaJtVrZU6Eod/AgcharslUJZQdQH71mcTtRCPdx1ArMqRl49LPdSQdo5BI/E1lHV2VgFso7IlpUnuYU1LROqWRK2L1mqAi68DNTZYV9DvMCV/y3m7x2cFn4Dt5F//NzhAbu8/V3iUxJMmqhoN86lCstgpACO7UJ0cFX7i8YFyYvTG5lwgFa8bNuwuQ6euA/t1wsoQ9SSGJ9HW1f6WDHvcTxbvsnmeWpZcROClNUK8ROmGeKM042qI6u9mSTjKq7kyBS1j4aqwL0qE8Yl0fAuKwLDdv1TCYjnp4fVCsWKSr4WZeS77ofeA57SsmTYWei3WakHkrGPGH1mEOQ== 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=no2yqzYJXokMeG131Dho5VFjKDKTSyCHlp6AVKaxGdw=; b=mT1mgjqcjGqSOPFVLGd/f9VfuSIWDCGlekbQt0EcptpUYktG5DqXETZ8umsJwruntQXSP2yUjReGDq70je+CA4Sf8of4VNN3Cuez6a7ZMavrpBwqCemr9Qi/H2+kEZiQTExqao5gg2Hxm5+D+U7zccEBJS26ODXIxsGJ7k/1hZ5XTNTpmqtKYjobDIJAeVWHQnTYguhYZGtSu6O9WS/XYlWY1TaU2bnR4x+N8d+WmTyxRPYpGYGR65kz+blH/POjFG5eQCd7/yHuPfTTwiMOGvm+9wRWc38EuTFshToDHbSGSuoLtJW8KQDRqV4n1/L5whJYdvHZi494TiPT9LVsng== 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=no2yqzYJXokMeG131Dho5VFjKDKTSyCHlp6AVKaxGdw=; b=hEi10DJVB7LWTJLe23JlJsplViM9GjKhbtcAxHbitEU2I+oH53Jq8o1ryrvLQWwUGl/kYdLGW4AkhCrRPx/QqVfM0a40L6CuZDA7//a6FNDZKDelJOOCJaIYT64PKM1p4VNWZ1lYSm6nfCkF6BwEcUfmmceF8qeI6Oj95pRGd1FR2LtBOAGtC7ndTGGlZ63pOiXQZtuK5deu5nYbLO8lae/0u7/QOnK2ep4l5RLeSvvDB7f+2h9DX+2kyQIwSp5cnhfd2xyNYkxzVl6L/PQSf8ksc49paT+kT1PM+RcmY9eJEA/yYyCXzo6u8pad8qJZKZPnWuVnQ1f6Tt4KJ40RSA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:30 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:30 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 2/8] vfio-pci: Break up vfio_pci_core_ioctl() into one function per ioctl Date: Wed, 17 Aug 2022 13:07:19 -0300 Message-Id: <2-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: MN2PR05CA0052.namprd05.prod.outlook.com (2603:10b6:208:236::21) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ca88584e-1621-4045-17fe-08da806a945a X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 77ihcviOVFzTAzHWiWctgGHxT7M8vtJdIddu+1cFiesSjFMFhlySI6L9xX7Tv1uEWunbMWo7J8jjEc330H8Y03p5hYi/t7x6v+CSdI32a84NWlhVP4OxhkRW1zzRhlWgU+xPfwqzz3exr3KAGiXpqY3MRsWfmOz6+79YGECG5hHx62UxMtdf+1KG4vC0pBlzmCjwrpoDLYTH8vnoiDU4iOSaATik8FKiBjinCi/nY80y7rnnmu3sxIrLjtgYv3LrL7q/1u2RR65Xyv0Hl40Is6af70Er0aR7fnGCz6D3T16KQOPid9S16ZSigtaBAad0+2v1CxxVjv+mQdMBT3r/igPzd7V2bmthgsdX+Xx1HuegOqj9ooGqtJqeXphhemDZvPqlwspUmIGD6WbauXSi/NHdyTkEtVN7kvk0qBOH0y471Kj/xf9QnuiBNyPaYYBsGhx/4W6DDzAX+MqLfORMCfITlck7W+HynGkGF1/3/w0nvMDCIogr9DSLIkpy/hS99B08T4qUfoSVOH24aRyF9aSMoOJit5qxKU+1tBGfSETaY0nmcaJ1ExYreij5KRSfxhMrJsEgafiwpBg+jLCRMHQoPZ84iGRO6RINAtBybNrQ8zelzdF015IzAbaRtZpBu3yJzY/LLgWGJ4wof/xrtmtc/DlsxCmCUShKmHmephBmIH6Xc95jwZ/bJOqF13qwWWTrJjTFYj9Vr/EpLscE4R1UWND06Dy+nWacrqYXBn5ci+u1t1mMCA8Py+mZSuyXyMvG02Ky32HJAF/hJQpSoundvMlciBOJs5tCy3QY840= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6666004)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uIAO2sADa7xENCLaDuUYaULlkrsvWiAWCI6WvhfgRBskcW8Fu8pbysVtMwvYM83EAWY1B+Uo7L8Akx2NSdbcyYI+oiWU9qcURg2nLklm4l+O58YD7T0Rk2C/MpLaTvqzovGlwNhRxHj4NG2zc2WKNQrts97RBGn+GgYzRCnEkbZ7NPmzERalPiBYGBA1aH5ee2EmwpWGEq5o3g1rxGb2z4VFQXnpXOzlYL3e6i201O1CISGQFffX0VBqs1ULYEU//43mpLJMiMld19Em8IaF28/QQy+zGKiDtEb326fPRZ+qhy8GgJBqe/MGwbC+V8WxiSRb8eAW2C4GoNe7MNFYlkjA9GkYSzXP4UPDvS5PeBnuXoem+EmozjtkseD0PnlizvHx2MM9T357hAdMjFbQ6syRmfy74snBivVF6tLQr6liTwkXzQ/dss7ZBV5YZ78exSxUp2pGVZYK/54O+zkn9DEyr5PAi9K6jWe2QnzzyCP5TyVUaIMMGnmR86jcRrlHZRrwOIQUor0BziyLxHIQ+wQuRlgW7u5kRmJYtjxCUrsFvsk4vIZvVnakOjI0V/VclPyHLx1bDrUMmajbFuCotnYgjt1A/33v6G4P7NhgdVKuglfVm9DweKNc/6iEqkxfAsn2ZBhceHtGGphreuqzgJnchnhRICv34NmmZDA/8AjjT/HiNCnlMx4Zevp7LrwJEmFKrf8813zl1Q1DAHH/Fqr9vDWUdkGxzF9bDwsU+jO8ZFx7ZdN3T4fj42AiTpcPLf1uocm25xFtxfAirYGt2LnAwaViVz+bSRJOfF4n/ukE3EmI15eCQqE1ReYw2N4TUIP0n/7q1uF4W3BOVYt3/X1nlgbTOX+34WEIKt6dRF2gEFpcBLqEBVDm+e0TW92em9tDcJezpuNcu07VGQKiCWeztY/Ghd7S059iw0woSaMhHy0xl0IMBSIqAIkfZi/ioKWR/L8dc4ojApefxQHjFothLB8zwFm4uNqoh/eOVSDqBWN0D+SmPiYONj5BgQYIVQr/QallhJxQg8a6bcC8Zt6+HL13a3Er6z97aelHAfqWm+82CHi/Tyy7vl7+4QK32JiQDJd/+AFuE7HW3ZnuZHh42eXeb1qHXmCfWQbmoDKEzUdQ9VrZ2b7ujs1LInaZXv8gAu9BxeJH12R11tk+G95sRzLl264ctrmOF2dZvR808OH2ogd9LpYcO3EoAVq0YgkiuAPKNGBa4Y2egiNDIM0yFFK5PqA0UjN/XyMW7SzdB2GBRlawjUDUjWo0w2K7DnDzp2c56u63NERf1HbCrKcI7yHF2U9v5aOIhFvIDAuFb/8OxOTWGEkCyEcC2esC/2OBkMzwmwRqh2+DRubFVgOntSAonSRVbPgDXn38pjzwCfbTNXBxNFtPoCLxHn9e+cENPMHyVOuGlfqFJZlj67eJ2+mCaoQvxk6V1PWWA8DoTAcR3+FxoLFn9QNVZNV5pV+9B6UmQsZqomRfmc/kgTXUM0goLfC5uNeFVq4AHhVn1SXti2TrueI2eOi2APOrI7f9vKBeea3ldzc1rRuLGaSlf4a9+Xs5SRLP33EZaPXPKT3lxrOorRkrI5BmPgc+ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca88584e-1621-4045-17fe-08da806a945a X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:27.1260 (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: dXKmXV79E+7Z+HsnTTkngzO0Ln8rbyGJ0fnrV7ksdEAS7dcuL4C91SH2jRqMZvk6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 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. Signed-off-by: Jason Gunthorpe Signed-off-by: Kevin Tian Reviewed-by: Kevin Tian --- 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 04180a0836cc90..6094f237552b35 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -689,21 +689,15 @@ int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, } EXPORT_SYMBOL_GPL(vfio_pci_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 17 16:07:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946197 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 E5154C25B08 for ; Wed, 17 Aug 2022 16:07:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240720AbiHQQHn (ORCPT ); Wed, 17 Aug 2022 12:07:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240699AbiHQQHf (ORCPT ); Wed, 17 Aug 2022 12:07:35 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2061.outbound.protection.outlook.com [40.107.94.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BD0B9C1CC for ; Wed, 17 Aug 2022 09:07:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UAiC8AsAbQyM4Oq+NNeeudDPdFDXAc1xffap/PRuoVrE50hIyoeni8JOrcpKBZCSb4BCg/GecwKBq+GRbymuSJesJ1EhydqYzUsduD8Xkl0ERRNh8SEtwBXdsxX3TK1iRzRtAxelj2Lo7hThIyLTbfCsrPS52vsLS/fLB/AW7IH9Kvfv2L+k6YQh5HbTemVJwCtG1JhTD/cYytQaY3wNsbOhz1tw5lAg/oDfBMzbYkbPK4sPWn+d2pLSggH5fnLsyeYO9ja7UIvPhuy6UlB8aFy+kDrdDmwx7EmTd7ZfSW0DNP67aSOjgRRgMhmfWewlV5ocz9YI2LWnMJK7ycX1Ig== 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=0kSmOb3QaINiHQhDrGf+qWp0b0WrbLRys6QBYRUQjyc=; b=Nyiqe6PnEi5BVlxQipLYfJFXB0E8gl8eaUpqf+BhuwRKybAvVbtFMOenkUxd6x8JajLaHt6eu/LwDnpP/01oCSWY1+CuLL8i6TZBsENjMMad4rKu4n3GmFUcspXGbVDyYvWyEZ6ykfLAkAZRwAoqgAeKb4RCuPdedhCPyVFnLmEhGLjus9BWUSwApupz2urkxrmEasf26Ac8Y6EaqLrWzHPzP28bBsmy0JBdZl9Y2CeVk541Q+pssdQMig6UgZDRGEwVQIEsEFK5mf45R4cLGn6oAI4MTmzVOLDB6LPba5ai/jN6INd+KZcTWfFulBlcNGr9Gc3dNPqtUr6rJstOyg== 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=0kSmOb3QaINiHQhDrGf+qWp0b0WrbLRys6QBYRUQjyc=; b=TKrtXRnYYmwOKnT6tPiyjyt8oYbhfitrLl5rhPbaxZOI7wZD9PKrEvOA6fXDQHY87WKDERbn63GxDi6JQsMdHG3I4wpJG/As8YcXHGCAQT5vpR9kphfRukOGDGGYeI1KmEvhzMyq8goGI0oB7Mvsg9LqbtLxeyoD/nirQt20d2nl6uMjV9daRJvsGFftDqbbTrXXCsx1NGyH4J49u3MPNA8Cxq+rIhPfLLpQdPaI4OmWbJBFzhyECNMIWGH981TFfynYKoQUpiIYAGRonu/EV9YDwQupEpFmg9239GOSDbIaDn5VaxhWZrKvfW3I2X7JZLBWkCjQ17XQWzMT2J7fTQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:27 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:27 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 3/8] vfio-pci: Re-indent what was vfio_pci_core_ioctl() Date: Wed, 17 Aug 2022 13:07:20 -0300 Message-Id: <3-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BLAP220CA0013.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:32c::18) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f029f784-8db3-43a9-673d-08da806a93d4 X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QF3KS3i6ifAm9VDcwnjXSSMxcRnnHP40w2ZEkxr3Mnw1phGTpdRC0NQhnLfyUXb12W+i4N2KnUUvTkvDh3k07LJC8ZSTBt6XLbiIXcSbOIgUnGAQmIdOE6CXjXUmF2j9fm1/YykV97p/XQmtB9XVUyxk9p4Dyez5Y/i5AErmgw6TTVcHNbvcH9Of3+z2LOFzQlxnnOAri9PRuEDTjd31oRwVaFlmje9GLOAvKbqzyNOINEXvu4OlJEtwaz/J/PvHro/RKdKFgojcYB+XdBb1087lMXzvAXpWPH/NKahKVQr8Ntn9ky/0E+DfxyWpU4HxC+92aFE1kuR+1dKOcrEXoill1k3Cr4GP7iy/7eiAIsPih3nbGFTffZF+FqzdkDCfSNnuXD1GMIPNUlUFOZUFP/9Ih90u7Gukk5exx5J7slQuQVcADoHmaEfbnPJRUILdIBdmPxuTP8gpHWwTPJyKo26m4PyA8UCfbN6IYutjb7LY2RO+wcOyN/A/jVmXTIqa4+z8yICd6KnZNm1+gAV5VS8k2FTzZcr31lCqZtqwxldqiQGtv8+rlykChluUZCiLYVjccUz3ZoJXgj2LqA4zYdnPeNj0FBnXH/ci0YevMKGagGHKkYA5kmgjAwd24UOXh/WYVnoDz7+FQR0X0cdTTQoXT9EdOVO3yjFr5W9e48AQHNHKFveURwspYJ1tkyCzWkvCL7v09KSUxLzCiKNrT/jnp62GMTymEXgiPwETZ4cBDzRW9gFHyRTNBngavUN4ILspbwLScXkvPI69MogcU2oT1nTHqnNNfJ4fQoQd9SE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6666004)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(30864003)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VcLZfbMtd5vNluvxFuEQzngkt2RNvSiPCzrpgHXcXI3Pz05JSAyyySGevCgC1Pc8UfQFuOfuQaXFlPNMzA+1WTc2shNoiqzCiBoEOjWZ9ZlrIBM79mmwhTvu1obvcYc4KL54oXKL/5I+DHJx/EJY+VIEtK3KydtAsZS2MzyUHlQKbbzHOJf5Z1Vf9zlEwlfNRoXm8/3gaFfud4GdyBuYnNyuTYKGQWR11UTuNHNL2yry1LW563+sRVnRA2rBvIyd5Tsy7mf/xPO0KcW6cjYYrtURVaL33L/vMcmcBzTWtINmb82sGflHwKM1ndebJZhCp3F5nh8rEJlF2hZ3tZyYHUQ1NZFr+dyoqgp3M1bKYC4wIF4oVqQ93CXPdx6Jogv8Te0VV2B8NOUaSi5YFrX+pZUTXeircOPLjrIXJgIzDuHOiEJhjkinCaXSC1en3VPRIts/TPM1bO4GaT37Drudsbvo7+l38SoyaCWbFTKOqwGgWqTucTOml4TGwWKvr45VdWmYpopL3fEgqvJmT1f8HV/yAZIjIfcK1seByD7PD4B2pC0owKWwPXxVSLYKUAA3474be9/SJeZmDhm2bw1K3oMAU/R2tFLnaFfd0ewMyjryMk54P326mTdxJkv+pTJ45JWzXCbg8pzh+imvQJEWlNhvBep+Vntj7RXHdgnWjbUreoYvwYBTgbbMJHjtT7fxWm56thdF4Sp00rY2JkvHonvdvsXjaQAitj5CHheKZOIQcqCyBicjz6Elurw2Hg4koQN/qMUz5o5j3lZCDE6fT1aPk6rsMs/loSmxbp2QR/hmiMuPkuYDEtereW5nCzkz+DipNqde3bQBtrq2dmMGNRHf9us6QsprYS1IFlhCkuEr+i4IqTvrbK8wegFTGlsIUgi9/DkFL0RzJjCjLElg9AvZ3x6hujzmOWWIIuSuoBMXEvfqWbadolyci5UeJTJbYD29qV5EZSDtPae9eUBF0NYkrRT+8fSVVnfVcsXZZAitl4v9umhZYe+S4SZKJwMWveLxTXnCJZtyeIU22l6dSg58/SCajdQbrcxylb+iYdcvndWJLAL6JM14ScAxBU6kZed/D6jOy0qqu7+uqMXp+VkyvogO2OwlERYLVHV909TvH3nRQg58/Ajs7K5Hncjba9p5MP5NBx+Zg0m4MfU45mHjRr4vGDf7aMYyVCUtvasJjhBlrtH5CcWAc4Z08JQlvm2COMOktheTQEVrhAPesWJlGbVqoncbR2YQudwSzfcKgXGBqSMvVc92/f7WuuJn6b4vRqdXJF3fBU67yb7n+pr0FErRGT6ihy/lWDld2pnfIN0rDwehZMEGjmULDaPQGa6kbF76OWYyUL32k08JcXMis68RXCiE0Ja6wRqJHRw+LsyBY1+7nv/R+kmDhP0OzaKMMIBJ37+F7fezalW0/VF6H4JjP0MGMRO2Hhf2h6lKtoO1dUFIsUlye6JSfWv47W/z/Mfu4nIsV7VV8i4bKBkXrkl/1zdHIbau3wta9XeKZoap6m//h5EWKwYVLtAEFhmXBfBuj3huI/TFmxdn4oG0FgmyFBLEmOkcCxZK8q4avqzea9iECLTuPqMRTs0X X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f029f784-8db3-43a9-673d-08da806a93d4 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:26.3124 (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: r2U5WzHAoGh/XlLNRWwYeX6kxSZi+sa59xAkCkVBQwy7y44kR1PtJKwgjZOQSAeF X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 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. Signed-off-by: Jason Gunthorpe Signed-off-by: Kevin Tian Reviewed-by: Kevin Tian --- 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 6094f237552b35..a0a855a52bbf1d 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 17 16:07:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946202 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 66A79C32772 for ; Wed, 17 Aug 2022 16:07:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240873AbiHQQHz (ORCPT ); Wed, 17 Aug 2022 12:07:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240807AbiHQQHp (ORCPT ); Wed, 17 Aug 2022 12:07:45 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2061.outbound.protection.outlook.com [40.107.94.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1983760C7 for ; Wed, 17 Aug 2022 09:07:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eK3Q7j0+GcvqNssBJSH04arsoawEZ7Bqz3oyBC9n2THY49tB340pqS8t8/BotIjle/F9+RzqFk5gQdEkV3mrdLY4+DJ7qui7MPbvSDybsMZwjXZbpvWEdYzJE7Dvqh9BttsKZLcohf/8X61M5cqimIYeJyHad7caXxAicvU2YzAl6Q+ax/alnp4ILonIkeQBWvt/e5BlXFC3QXqZhDu6YrbTRRKCo8o37PRL9HMJhKzoQZCwC7F9yNUOmeRxtSEsdlCmPFOGxB8GGcASaQcs6gZWgszTrfa82UpRZdZrTfRL4/tps9wb6BR5kVNaO2IrkV4fE7Eo3xE7/dLIkQsLoQ== 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=BCdpw68nbPkTpQ+ij/Mqjno48+8atd18Y3oCi5+pBHQ=; b=PN5Iy66XOrREj4Vag8OUNBvxYchYsPPRJFKk2KA/na8s9xaS1Kf1F7g1MrzB2sRBk4j0zOJbbZ3swTxgq34XtApMNgIaWtiZibLCDNO00vc1jARgpDoY0Hs3xVmRN2FvX8HX2XgUeKs/wcBkrYQWbpH4cyR3USwXC5heq88CJ1NvyDfUPFMIb6zs3DM2Z3QHQUGcg4e1ox2PMAR+GKNu6wlf++LIpyNKMBIiFeI3XiICWTvA17ESXRJDne7B4rwQJu7/WhbbnIgwDuSrlx/ZDpJr1Us9FdrjGmn3AHkKCHVrYO1T0+noXfkPBkM4sdj27F3cW1HHYFnKIdfadoe0og== 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=BCdpw68nbPkTpQ+ij/Mqjno48+8atd18Y3oCi5+pBHQ=; b=l/blVsTwTJq5vPVoVa6Mv8N04RghCdS2Fl36kbdO4aNAcHAYRoLPh/htnzEUkMmVIi3nzzhfslelkYz2lkP80S0bgRAKzPY+vnaP8xv20vJNoreqAcCGsHkkpDaopeGWP/+hyLXaegn26l0YuM9T+eYKZfu2lnUFFj9bFDgmFFbiTiQNsZhD42jeXMYiq2WQ0KbXfkv1+Ah13mRGQK4Hdg+iDZgi82LzTtY8Kkk+BnDOumdERAOPlivwv+vjPVYGMqvkxYmFADI6qoahPTw3KnkWrVdVbkLRhO9LW/QvUBk7gqVWWR90ugHNrkviO0cvNpykbCyu1diLKtqnRbT8ww== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:30 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:30 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 4/8] vfio-pci: Replace 'void __user *' with proper types in the ioctl functions Date: Wed, 17 Aug 2022 13:07:21 -0300 Message-Id: <4-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: MN2PR05CA0039.namprd05.prod.outlook.com (2603:10b6:208:236::8) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ac7cedd0-c7f8-487b-af8b-08da806a9476 X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kZDylyOz24X5lZxhLwOYO04HhgUVFfNvgweEjlLrQ7GFtcSV1S8oubvmfhcrkrvYHk5K5AjFuT103bUGfpDGcqrXCoCfh4lhas2i+jUllF3wCXf3leWauXe5VA2sLiiX+bxjr1BNPcjKN60txvffMsenNVA+58CbRuriqMmOC0iCYBoDIbss44EFSDY/xfdcDx/s1gDa3rQ3GfKU7XTefTmHTiTic7N/lA//KFC2aJhV/7084igirHYieqIqsmwNZB6YuoEloU1abmFS2WKeRZtclG6GGLShzYtCYcOr79hVj22/x6vPZBkmuiJTuc+view9CaHj99r9SNrtf63FHbCLWv0TlLXGFh3ylEWOSj7lQamqX7adn0Lo0uRmkVeehAyBajvEjuaZg9rSCXdwbxOBoi7SHSdpDOgXzWB1aP4tS881JIFM+tEK/GFffnglZmtwDkHBLLfhw62ysMHSqXLtL63t6wflt0xrWS2YtTec7jU04Tv5WOl1JrB10APJQ+OBW94Dt1PvUlNdnH6xThlMnPlp8SCZpSaHwv+5YvU0l5KZsPQc86/5g5m7jyoJACC500/ibVb6JZF6s+Y8+oPa3Cuq2IfJBKSZstwyAH2gnsBAGZeSgCh6MM7U6MQgwLWZuHXUOVr5cQ5blV9UdjqeAfMi9iRGh24DEEQ0PKwhVQ7h3rodgVtDSXbD7MRfUt/KcjaUN03mD9Q/TqLoTjcg66lL0PZjA+QzAVDslOvPfQvCcwqfa2J2SgxN3Pzl1aVfBVmPso9XrEspmwm8/GoMSS3MDcvOgeWiQt5cWsc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6666004)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cVVDvcQSuQLyoS5227ABIccYYoxaRmJrtbXCUdLUz2T0Hi9m+BaEYkrkFbMDRvw5hEEKtp15a59nsiSa3+SaiO8SetdsYdjUpP1z7qM/H7RvfiDDYnhZhVZVRJlwYstNvlUG3THJResWLY94F+FPmGOBqVjWMjDtZv8fbJrHvMgjtreqfGgv+dWmgRPsybq1MFLSiJsdaktoEfmxpRhg07XXh0swmSa0H3dT2RL8EMsZXniarKGLo79Plt2C4uN2lDYalu6jwXmzGiFX8VqO5AHTHY+Ts4EszF8LdxPbT5yz3Vb3Ir1yeyfVszMTqVTuCgPJa/ElUCb39RyCC5Yx9acG8FBSoEVCFLUtJd6qhsqHDMLAldN/GvxOlr1FCj6djKRU/SZQPLnLR5qGGYsUkkTIpweJ7vgJOj26WdWKP90mrmaHajxlXg/7ckzKtymjnPU0janE+Q9GxO16vcFfpCkHxrdC7VPh7EOvzB+0Kl3pj7YyPv+9Kzn/wd09eyvwjlRGrSKxVuj4ZSiqvVu13bkrqYNc56+pPrseMsL/UYvWa3Ag+RvREp5WZ0cMXZMNzYUljVIQkNzysWzDLHHqYtrN9shMJhqfsCRgZR2uufHFSlvJtW7gAws81JXbyu4wSoklQRTEvdI5jiyxWziviI4RdJb0sY1UH4Gju42e4zyZCxlai0Z413BRLCEHLFqmqWi0szwK596shmBYMTfNrUM8iLDDu0KoNavzw195qlYdogLgEh1xoVh9WEjF+bKuI764KqwFWu8n4xK04zbApm3ZVj/fIRkPAytajGzySAIZsQzMYIBN+wLM1xsg4PGauLpo8bZ97fc4vI+NFm4BvwVw8Zo01Cy2pLNoAWPZaBPlCrQH8+zjLQ9h9YBX6u9lc9C145QlilAm+hFOAijrx4TaeaK38ntm4H9pjpOKilyWF2S4Y4vB8X4qYVUJ2SGOd0T+n6VpjoLQnnzSkYci/MPKXySwu37vh7AaH/4WLLsWXvoSCGAq5g4VEa6buleRMMQWkEQCGXJaBB+1ycSqGyb0pMsq8b7wOcMi+LpLpup3/fZESgZDYdhdKDB5caulJ3ELZDyd7pyVV0cy64/AygZsv7yldfs9075TRvHOeqa18cQQRrf5Ne4D/QZ+k9Hl2uZw4JMFr3/OZ+t4YTzaR3M5y2+R6Ra6XfZlacV67TMKgyhWwqCa/yPc7JWgAFZ/xG+tXBPZrFWIWXiFBbeKV/dWaWKXLINvrGAjEQJ42k4p+vy6/Ms/tarkhDI8Ngg6pxlgS31i5KZzqjh7wT/hm+4BaotPOso4tqcKBGqpGhS3X3DSow5ssBL3PgdhpxXvC49NXBtVTBlaVh3CkZfdG0ODGJ9GVW9hNOQNYM8n8SZXwxCCHTCOovWFMrsSF4X5UjqRrE2CKhVN7PGmeGiGjrppBpV7JC7vZIyebq83TKbQTmEocm42odqp5Qi81z9Hb7rbPZmWEseAfKXOhnCQzCKPfg+d3jOeJkl7eznxlkLioCuZwmBFR8hSM3AkqM7nlqYP+zW6IE0/QHk1EkyZUMjRZ8OcYmkJaC15FYH6GyDVZ0X+jrdSBKfPYhw06cXg X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac7cedd0-c7f8-487b-af8b-08da806a9476 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:27.3916 (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: BsghjnNWF5k+ANrB6k178CrB2r+YJhFCrGNw3/6XQ4y1TaWEMfmxYmmxVC4A3lC3 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 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. Signed-off-by: Jason Gunthorpe Signed-off-by: Kevin Tian Reviewed-by: Kevin Tian --- 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 a0a855a52bbf1d..050b9d4b8c290c 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -690,7 +690,7 @@ int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, EXPORT_SYMBOL_GPL(vfio_pci_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 17 16:07:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946198 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 8D4DCC32771 for ; Wed, 17 Aug 2022 16:07:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240822AbiHQQHq (ORCPT ); Wed, 17 Aug 2022 12:07:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240531AbiHQQHk (ORCPT ); Wed, 17 Aug 2022 12:07:40 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2059.outbound.protection.outlook.com [40.107.94.59]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 144ED357DE for ; Wed, 17 Aug 2022 09:07:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N2L+miPDxfX/G1wft4+A8kXhHFQ4FAWUC6eOmGicfWtE4KnhaOEgdFbqNYE8t3cvlwKfQS394Dd6llLK22zWx75wQmQbufm06lvAJxu2sIiqoQ+kdavb9cY6JA+Es0hTODwlUNamzQYyvLIOHExzd9Pj6zdwyqlE0Kjhu/N0QBemz0QkDxNa/lUkuRhzN9hBm5ZttGkBFUv+DHvkj3d67zPuhTiadRL+x7epeIzhdEO2HU7/K+OCWTW6Q0C++cP94cUGHhmBgWdpfU4VO78S60bJD3cbjvuwtwaCv6zCAnTKzsZDKZaPRGhVvam7HynDhrpVj+w+Y4OmQrtZjf5zBw== 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=UXNHSXwGJ9vXMUNwclsV5xD0CV75iEB+98LrYYpIriA=; b=fr3m1/gygMxM85q9XoutJN42ae53JPqLfH25xM8tYww7NSn1goS3h3XbktocWXQ+oKcVrU6AUbNasj9u/fHTwU7VEkySyZ4gIADB1JM/o4DP1rKG4C33reE5djk3FFmMtxYLhT+XuPFLemRz0LEMOSKKJTjduyb2s/WvcXGNSnnySj3FicEzoEFvT4keKOl3BdgTlXkub7kIkMsdmI4MYEna0qomlg9s7NLt4QHAvi9roWZ58+xkrwHVMikCoxPIqW82Stt1IWMHX2fhQa42qyAB7bZclL8OLBmSoAd9WutoeawnqMa5twQw/wqM1Na6KZHg8+GO/xCK5U95RqZkjg== 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=UXNHSXwGJ9vXMUNwclsV5xD0CV75iEB+98LrYYpIriA=; b=rXUteIti4cCZgr8gJBTcXgzNW5JrhrbizugunvszI65WjjumW3anVU9lyHmfLkeTWWo6aeOa8inbyESeEfQAwgS7d/SONi9DyYfw3CkeFF4wSNszBluECVLgb10C0viph18w5GDkgbCakXMGNxSsP7VOM+IwNz8xF05Cl60vSU5rNvcid4MvecmIMu48+lVsXpEFuMLUSzbdmjGJI9mBNhuFSeVz9zNZl/W/0xaSB7NSL4vxsS9EZg1etHNAc4iWNWdWwcOEJWVvi/JXclSxADBfHaExcNO/m0somCTNmqKLLB7mOEt/9IIhdkNtB26yPwUhZ4HIBRD987qOZkcAIg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:28 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:28 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 5/8] vfio: Fold VFIO_GROUP_GET_DEVICE_FD into vfio_group_get_device_fd() Date: Wed, 17 Aug 2022 13:07:22 -0300 Message-Id: <5-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: MN2PR07CA0020.namprd07.prod.outlook.com (2603:10b6:208:1a0::30) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4de333df-8e2f-438f-8843-08da806a9419 X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MAB71O9sKJtPtBUaKUIk1THhwuCavlAq4jzFdjPLDEZYf41cY5MQEi5XbBmHRLJPpbZlSvzgJIZnj47aE6W04pTvlatvDABP5B3fReqS6YpquNJGO9qFRanTYfvZT13tkujyRZmsKMrb8Ii4z78uxlxrC1dH4NIgS6+Kpxjd2Ngtqw9DR7Uur+mOkLqYNSpqPy/gp0CTWNyuoYrgoXm8iRK9TbtitH/J6Tifl2xRixQ52MP1CQcd6EsC2kUKaeINeC6TAS+eZtJaqekGB5ZMin/Kl3MTGwsnB1PnfTlNZwQfkxPovJq7ZNhipT/YZR8OLJD0xVgyiGvxtEfgB1xyDogERUhJpdR5qjlhbDDoGjouB4jH++qdDKiErNYoD+9e0MylzyOAaMzNJ4AsyopHYJR2Tj9++TsPMgV6H3uKxYaV+NfmhG/XGqBans8ZEyPzV1c34U1tJAspZoQha79l96Okywb2aqei+uEBGYlFFRY5xAEU4MfWbRITTp/M1Wdi5MCt7buWqi7VJ41PqpErm47LlIY1V500n/H5ZnRTKPWYPYLTyjKqbhNGq5PrpsxtVru+KOh0TSpMTcQ2lf3zainy3+hW6dIygXkXwn06sp953rnB64EF1Jfd8k5y2Vj6GSh3sHleDhYh6RpidTcTI47BHUkLuO1BO2szwYG4gBT1RRJdxmEJ1Xy06oD/jZ7SOLtnF/rAG0hYZ6D2xw0SaQVhWtKddO1L4puAC3AVIHw0H6cQGp8xYK/ASjiBH9dZ9rE0jFHJHbsRVYrZ0WTpEkU8eMzLdJZBSwBHkuqUHzI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6666004)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pag0ESmnPRebXbFnUiBS6S0JVb3P0DGn9WV/cizinrDa/RWL44HBIc/B34rlIUQOCFF2aQGekpbKCwZ3CaH99k+Gp5KrbWdB71CPfOtprGdrSl81KswnlJYv+XB/6g/ea7rwRtJYgU5LTaFXPC9cnDDUD0sHDz8cCITzZC5xItbk83IM+POFoYUfGru7gINY+FfG5nqmMZFNoXD0Hc1o1Wi1FcpNVNKI9Ro7Nevha5Xs+cdWYWcjkBb3BV+AeOO6reSO5mHTzUR8DuOzYzmrbJIrhdvz4Pf+i34pX62ucFQoVn351whfThKqUM4+mXJQuZPoZVyBSptzkkfgq8TD/Flcbi/NGbOes7RmbX33EWXcFdmu3h3ZkQJbNubS7GnmolZyu+mje6wqi+7NemzsTX65f8lDAuwdmu6Rzt9zeWjBLojP8CjE6o7t2S5iv4Z2NY24t1iUC+qYh1sEylvKQOLDqi1b1Nw+4LRp6r2HVbEzeDDUy62suO7Xh0SpL1e/9Jr4g7AznQgQi+RFUZ0NdfwxFquKPPtm8CHskR1fyeaFZluLxFbb71ne/Dl0w3EK0O380sKuToY015E1+vx12ukArcHvuZYQla4mfJy4YdfPWNNIh/w2UmJxfRmdKvMSIzGCvyNN+6RDYapLWmIKkI+prH9kXBp5ZC4oqyZXjrFpWyhciO53uIJ5EDzSsqNzt1femOaDeplAkSighvNq+F0z1/7hOKilb4o2fDQYazVX7EuZv8XzMmHCkVGwrwvtNbv4x79A8uvhLegFjGWDvZXWFea3O/7c04/njsAAVkWnDZr3f/TDNtRrWdr5M1TCjcn0PTo18rbL+41XNyufwiHBQLS0H7ue9VnAKG6vmoKVEOS7wkZXu8b//FEJ3cBZ0oHaT0MNHe9yWd/q62jPOhx11td3JP2h4LHVkVxXcV0L5rQhGdIlP01ycPAOmaTFKL7hKyBGi/AwgwD9oXEnglfd3aWUOV2XuBtOxPEjY8NTXz1XxZ9SD4ybrnC21+zIqoEjuc7kZDZSzpR90zPGeLNYYDeYUWp7RH15mqdaPzda/NRhN2ucDm0TeJR9gRRjrsffWUjNtN2uMePiJ328583HizcjounjYcwPOY2N/vNuCG655fPjMCWjE9V2iua69lx9tUX44Djvmj8zU8NhfdJrShLtJpknz/RxL6Bla/wwZX3oG751pjM3O65WeYu+vKkqNFlgs8wmMP3RKGydGNTs/lMMcXVEI6wLSjqKslzJ2bInCxiqOX+wWRWdx0dws/yFqCTCly+8lCL+BoxSxdHOUtsVVtdfSWq6RLUpfR/6uDBSNMP2BNuUDaJ8WizEcRpCoVwtuNS/GAUPitthwWYRU0Zk2h343TFcVj4k8aHx5rzuRnkvk/fKEF0/CQDnVuKWbl5dsKkRmXqes3y3+TtbWrd+78O8FV2p8/pbOTnd3zMCn5dl4i/3s1INlgoISQpF/sew3AWH8ZUZ99sBSgXv7WnR3DzjJ1BHaeQ/tcPTxhfEnXJeTTKQ7CwdIA/AmbgTAfgoCpTAQD/WEzb42rWfQNXALAw2XAAn7uRe9B2t3qnAwUuK/PrnGd0c+lav X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4de333df-8e2f-438f-8843-08da806a9419 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:26.7823 (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: KD18SGh6FZ9ZixILgG5P2JHtx7g0Nzhp/wLJRWDYr+R0q/mz+m93yBC5IOYSl8Ks X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 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. Signed-off-by: Jason Gunthorpe Reviewed-by: Kevin Tian --- 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 17 16:07:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946196 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 66A2CC25B08 for ; Wed, 17 Aug 2022 16:07:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240648AbiHQQHk (ORCPT ); Wed, 17 Aug 2022 12:07:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51660 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240702AbiHQQHc (ORCPT ); Wed, 17 Aug 2022 12:07:32 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2061.outbound.protection.outlook.com [40.107.94.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85B8797D61 for ; Wed, 17 Aug 2022 09:07:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G+Z06SBXYG4ktQ5qWajduzF3mmciAcCSbIc1iYOHRyJMdxcYUgcjEKZ4JWAyZUJnGYiY8vi1u2p6D0U3MgTmZP6HPY12sKDcIOcpaMSi1MhuZTmmyj49rTznLQrXLeeYEBYx39oOXbGoynsXXOFnofWbNf3XLI7qji7GubVTnClEf4O5cCbTct0oQjJF0+Ub6dPaCi41BGzzTk6YigVRSMnWxQPhmc+IhOhZc8vhYn35fItU04MTiYG6EyF+Yt/0FDC+zTlCfFzl0CoDRVQCdBYHihWWumH5p1wnUWDsLlUVqUmM0LbSb1f9fB57p3cQ0O33KGc+ouRY7DA2QeQdpg== 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=GVCRYaIuP2FXiYev7chF2oFskTcwGxY+npXW7PxBJHk=; b=oGBUW/rTEAK2r7sHj06LUo2aZ/6dby83pOpO3hisH45uoaORE5jusvBu2TcISoec8GmPf6k9G31vCz4IZstE2eUMBSISRlhkD/2sQDayfyZGV8QLrnSJK2YIc4p2DTKilEP/7OLoagZ08OKCeuANISEoO1pOROg5yezhP3y/FPEPbFojyEO+PVGC7F3jxtaRr9k+Z1I7UW7cBo3xN5ll82XYti0SJmg2Rtf+YmpU8SHCYemeHdYeqp5hlYnD8SBsDEkGCKvvu85hLk1nl2VbnxHlY7h13jNqFtaniMkrFdvDv9zqHv2kcAV+1MfgyFAD67laiKwBbujPtk2r+hVtEQ== 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=GVCRYaIuP2FXiYev7chF2oFskTcwGxY+npXW7PxBJHk=; b=oTJKpEKK649voDxA9wKYpilkgFtTGDDmvlz3aFeq0+nF0463iw0NPRIXmaAnWannyhZBuC6sxLlFXntokCkkAhKqxgtIwU6SpwO/cum2QpKHCnAEuL36Hz6k4PBkO+Y9J9n4/6QjVKZMlkjwuynyxzv/6YyI+CfhPqWDFOnsM2epZ0HQqhUwxfZ+QanFzftolBkrApPFdJsCR0COkJ2ZEJcGGI2A+GrFJFktpXNKslMLNQNzI6PStmi2ldxCZzykONuFiVu1y/8edRs6oxf2mJP7Rk05OaSg91UD5tbPyh2gIgvzY+FLY6oPvkPNBwUBAqhminSK6GNwNuQDXKzMhg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:27 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:27 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 6/8] vfio: Fold VFIO_GROUP_SET_CONTAINER into vfio_group_set_container() Date: Wed, 17 Aug 2022 13:07:23 -0300 Message-Id: <6-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: MN2PR05CA0065.namprd05.prod.outlook.com (2603:10b6:208:236::34) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 53689b40-f6f2-4ba9-8b31-08da806a93fa X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SfrltqCVZk/P4+j28GHiUviHR0gop3HXLjNWKNWcPJ+yNsgj01CABcPSAo6N57ux42VhvoGcKQTJPk79GI9+ooLoHtyoWP2SOdpAYjlIV0pCXTX0c167wWDC5Mw8hx8v/xvT15ijRUcDmz5XSVfGVSfyyMbgelEboxju8RDNsDSa8h1a6LNEnH9wIc4A750kYsOgaHti+9HPDGCSZo0hvumY4RtOI9zdnUYL1eXFTdJ95++muOxL9PdVBDfwlZTK+HMScsQQmT9up74+iNMNCy/K7r4/CbT8FJN5w17kbn71VW9zhFEPCPrxPO32tmU+3oI8PP2UNwwi3G26CPHlcbkdZYb0UhSTIjwtThXLPLbhvhz3vyjmLv1OjJGLF+ghdZ15CP4NZYE28S50rbAbPWptVlcYWo2/3/r/KIza+gQiuCa0A9UQCUTXPbdh+BtfESzLYi1TW3Zvi+ui2rhGFueAdn8vzZmBw/ZkMqv8fyA6J6WGSMKVT3hI1SPfiOj35/kZ2N+TlYivPCQhomN3Ejqp2yMRdV9OLNHupfqEMtsS3Ki9/pxhmaXt4/ptMJyEr1l3Qja0E37GWzvbaqNbXxbzi9vz0s6IWjwkZMh3gUE2SicWlMWkUc0gDhx/Kubfggr0lnffjorrFxcJ0Xi2KWDT7P6S38TdF8nWXqH3ShQTJHFRWpcShuRydBHGnxw13C2m54QEAeSVAdpFux6zaniFOa8Wn/e13dale/USjfFNok+0wVq0TYcYr0eRYTuv6eQT+F8MTKc5Sn/xaos30A4rFV39aPjHrbPNAEysihY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6666004)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XK/aEaIR9XQLJ0zSxSE9pjkMUe3MPL4VHizfxwMS57gSGVPDBYvziYVR5CEiBGpi6cm6fN68TxvReLyMoS0bKIZvSGUrgOjY+NkiJlXSlohRshpI79sirIgjLOWODUhcZC24AoLChDWTQyDc2k4KMuhcJBYsEE4aGf4RVa6/qcbLiOybDhuiK1sTq1MOVDQp3w4EDS8LLdPE3qGQi9mqpUXC+hYTR53v4SXA7c+Mc0PS616qY9/FYKE7xE7dtnghh+OASo+/BXRimy/z9ax0embwzwOlbPfD8+ZrHsY3GzQCXIbpvCpyUnxZ1Eg0JnVN9K88EFX3xS1JNvgQr/KxaUkBmTorNotIytDxIwFHtyhDTrb8mz5U41DvT/jL746Q/6mBGhmdqtW2QineuXhyUhhW9yt5KxzDqB5HgFTZ1IDzUsZ+flDH+rTBD15HXiTMOtgDd1UHJWVvIyyN8e0kterKKKhHl2Xw/+34WsWsc5hlfvs2bTTQwDiHjgT/zchExEEr72hrPwIt52KGcFs/qf7GuhHP5xd/BtpnXMRyIMos0IS3x/pEogDKNOgxtnN+fFKSqRK1jZXNNEWEfPzHqpy2v81LJ3nWZMe1T2w52xQvbC7Pykv+mt58+EDoI+xhj7nlzrXxLSzHT6k7RyXDjUiMP+OinJBok5YqFHbuWvlbGUR/Fd+yeVRvkewLPdTVLHD99FwVU3hLb+56nxMSt9d6NhRtgVy/8Sn8a6EDqeqRhvahDkUl8KgcBx9GadnpM25J5fG6hpqMa8slGGqhayhXGdckmxM1jcwm/bhF9GmFrUErHcxRevA0yAJcgngmkwDhoomvbpsibMA9CSNnuMGQaEQteUwrlyWsWiBdr+f2e2ES55Jv+3kmfBSGYqYloUZajDQv0QNFr2L8lVPLJuoD+nP+D8IXSgD90CCni8eP1+67x++tUXmEevuFAtFnrLx1dbSlfACnWwHZsLYRSr4WN5diJehGoP3B8FnTxp3nDD1NfI66F71eubSKPnyrOK4pQDePvQeOczxyitUb7IW8eKnAlFHRaADJ+aVcP0J3xlRKURlV5BGzD8ECRfEIb/yiiX+6SudcZKFg9SLQHBFg6WoPSz8Q1BVTisU/SzmlNgM2b4jI7qyLDJsqzRvyR2R7e30U4HSUygsurufBP5pxxDX42+UNdS+G1qRGf9HcdJtFv2omXyN+Mn/0+jSZbWuf6cDUSLf2XgxAUDlDwFExXM14NQ13ukB73m/1DlZPJASKb5St2sXFgEhyu4jNBNzhRkMnwvlSQdzvcb2pFW7Ejdi5vAcE8LtIuXyv46AV/YM6zz5JtG42qweZiY1LCHQgP0uCLZDxoS7jLE5GeVxMJkZ6zlS5040PnuNvUkRTWziOKbhDEVCjOFEp3d/3NOAXsw9xd+l9SH0LmI55x9+s8l3+ECpUubl2328LJmyErk2SPcg3sSy6e+IsiUMgijLRidL3iPO/aOUFIuKnV/QVMEqG38TiGHjxIIC7KB8Sz43drbbZ4Rz0tbXV/nKyZn5fTTdQf0I/+fK7DUgoyDLEdpJ3AefcJyE3MVX0Uq+67SderSdrWapB4M8rSnnu X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53689b40-f6f2-4ba9-8b31-08da806a93fa X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:26.4999 (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: hJ4Sekd42NvHYN9whmfTocO9aKQMzFiVbXiTfc6gQ40craKEjBRd2ghA0qRKNc1L X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 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. Signed-off-by: Jason Gunthorpe Reviewed-by: Kevin Tian --- 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..f7b02d3fd3108b 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 17 16:07:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946195 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 D211DC28B2B for ; Wed, 17 Aug 2022 16:07:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240736AbiHQQHi (ORCPT ); Wed, 17 Aug 2022 12:07:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240688AbiHQQHb (ORCPT ); Wed, 17 Aug 2022 12:07:31 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2061.outbound.protection.outlook.com [40.107.94.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D9816CF45 for ; Wed, 17 Aug 2022 09:07:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y5u2Ln2XmiD+1lammYT9aW+RigeEz0aaksqXfyXmHbY8CHWioy2K/q5PJb1cWmmZ4uB49VTdyYPgIBAUndBilvlLKP0FvlCEQN/7ZgIINuHAMkEJ26/bclx/5lsc9MBqgzeRYMLyZ5gVHOLbkVvKGZjv8VuVqNvPJC6Z+O4Y55G/DUpM/gjYUlt08S6HwemkYsd0hiENbxRDIMOYvlrTZnurjZ3VgN/8zMvfwzyiiBR6+Rg3xhe1yK/0TKJeE/33J6x0aUyRwLVsQ7j74EMJ0JIRuTWMr2IOYUveyls9aO1rqFJDIAMGD/3kLVhpCYXNZJmZOiT6d3/hMqxJ1MlTQw== 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=CSmL/er0JPEPFF0ZoWK5pSvEUZ6hjaxX3gNYA+Y28yI=; b=JTxekmvCyH+X1fstEbrvx8rmKUfdcpJxlmZ/+WyGvSS5WHyKvxF/zwsvPiCNBI3pugSW3MOFVml7A7iCee9LVFDP4Tems+fH5pYV0ZDaDfmhS9gFvfzqHzjrtsEw12osc+ytzf5+/fbZA9v71OM/pGI/FEVMr7ECMzmo4L0L1j+MZ3Hh2DH8zmuezg29LqieSzUAErZcYUqqKs64/ESTUMh/gvdVLAjItWJlvGnrN1PUDqyDRn6zNQE4O2auT9TvJtrDS8EGAwNV6D/G4HTNcXx9N0+Pr5UkU0ceN7sFJ6qeJylRiuGDrCPZsIlrkAO1a7ZmoWguMi6/PosZzVinAg== 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=CSmL/er0JPEPFF0ZoWK5pSvEUZ6hjaxX3gNYA+Y28yI=; b=GrDOwNsulUUhGPoZV7g7q5wTGNMoEXa0HDP7PsWHtofnVPxNFnxybtbx2j3PLptRMThxDzhtYUMmxBJ9k2lYpmED3pxIYYa7k82LlUWrJZp3Zq6jaMpSCEY6GgK9xBza8tO4pRAruiL+yJaA5maJQfyMBJ0os+NPW+eL1cJF9JIHQbQLezlNU+AMDtEKoBPP6oqZocS+L1sJsO0YVt8dSmSagdGHBdctRH3wPaVnGuKMF9/ZrxYix4Yqdae5OiriIsO06sd4YnPQg9Hu5PRg+dwPgWhU/OlvZl+iamQvgZ2pX2cSSf8xu/VJkHE5R2/5YuOPgdYDekMZIObeSZ6bKw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by CY4PR1201MB0216.namprd12.prod.outlook.com (2603:10b6:910:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Wed, 17 Aug 2022 16:07:26 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:26 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 7/8] vfio: Follow the naming pattern for vfio_group_ioctl_unset_container() Date: Wed, 17 Aug 2022 13:07:24 -0300 Message-Id: <7-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BL0PR0102CA0066.prod.exchangelabs.com (2603:10b6:208:25::43) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 19305cfc-49d1-46a8-19cd-08da806a93c6 X-MS-TrafficTypeDiagnostic: CY4PR1201MB0216:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: I3TmGTft0/dhd/9+ixSRMvXUornyKiLRwYfyueyTWp4HAieK4vX1x+BjyZBGeRxj6wMgBm6a2XIiCe2IL6kJJXFgrvrwvUNB6VtO0o7B5LhWzglIVj5P2x5FKRipiKQ/Ym9wngJzTY7nxtW3mcz8AOzHVP/3bMExP8GuivDe3IZI5kb4o9ODxPQ/T/FrJksRiX9yhJRgZmUSJt2aKlrXF96Svo1qznNDHSyXmSF8TcQg4iEHHXlOsGx1xtqMQOsfB/iXz4t5yzPibghglfAfN3GN72UdiFmPB/KI0Qoey8bT4F5nHDAuGeSMC3uokJYf0N3fG4M7BE78Wlo+bx6IJYq8o1q7wdO77hm0/DIz4KMYOAbGjAS4RLt1JyHxQy8U7F4/dLMBcOzZlvRYNqU8/WpbjH7dzk3zcSlfPNeV4u9FA5ll60AFA2OxmruqlWtp094LweFst74mcqrKcqfKrSZz+7rzs4k1qLzDpG2Uop6OPhldeUw8P0FsgaLF1dcbsj3nm+6B5GFrLmhNZjwB/6Z+Ga2U3ePuIzC6EJ4y4Ix6hmwG56F9XiDq+iLbYfigAZ6mbbq+AzX1CcniGQ5fu1t8z0KiJzWpbJITng5AFMnsE9GPKCd9LlIL37SVIqqw54Thx9slXgrYF8RLstgASfp7nx4AWFgdETyopdb9hmQg3T+Tb8kvshf0uqRbHdI5g6FmyJ93szhra4CFYwOaCtf6GCZ4piRPZ3gSRhyzMbWO1VGYpONhpjenMzNo3eET7AVhflBJb8K9tzbHlnoly1A283+h3kQgkmHEwaXrm2o= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(41300700001)(6506007)(6486002)(26005)(66476007)(2906002)(478600001)(8676002)(66556008)(110136005)(36756003)(86362001)(316002)(6512007)(38100700002)(186003)(5660300002)(2616005)(8936002)(66946007)(83380400001)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xm+PsCYn81ExhlAgqr4OWhibHUh3HDQOOkQLf5nXnyhiqqHBtqa3oinbCDhF7Zzx2eOpuMOiMHc3vNWgFcX6DzFnB+7/UjPqP6K/6emyJqZRpM21bq2q05p60z7yvAbDWcvIb7FHeGq8Lxpagcx1vgsC1aS7fKWok/dJnv4jKv2IYWqN7O2+GFGiSIxITqoiW9d2rLxyJYli3ygvZRJ7EwzcwhDVNr+HrMQDqUlSZgBODSGX5t3lW6OBd5LPHIDukAPr1Cq9Y/AkhLqs2BCQtkRe4v8KjHuPulRR6F/Ck2WaHPGb+rVhjsjmKbG8k7gXP4fD7ALHJiWgyrsxKetUzE/Gw0T2u3VfAxD71Aqonit4cM1I+V+xQ4k8BU1qOEP7Ik2IZbYK5DEoM4aMW5sMmcNhyaxT0yQoiDMuLoAcmRt4Emru9oTx0vlwM6znFyllqgtNeBs6PMblRG/y7gr6+ge1uyPnViZt5okzfK/HU8UbIFgCzwsehQboHRiv+hSGgzAOupsrb3q9g3J9kyfsOI4B4LNEhFZ902GMlOlke5nkqHrdV0TaMXQdkEZZoLnSGpthm0pySqO+n+nWnlWsHa731hLt+vGNyoXQ9Frr3gPSE0REpTf6w8IEZsZ1bC0tm+SPzrF93EG5kY1BMZ/kXxIr0ltHG4ntOyGjIwTM7WJaMLAHQdncI5gSP2q1jts9VhQLgAUz3D7Qnl/G14ht8cA5p6tfZfN690nEVmAQEHZ+9PhSLNO57GMbjFCwa/UuoC/74vhUsG73BmlKPbB804/cnnXC4Svz2JmyM04Vs8zW3GKd3ycfyJG97VS8cOG+ELoR7nrkUbq+cGuIqwXT8b0Bmsf7J2b4MQb2NFAPbYjwqLbtbZvMvx2C39vOP9mZGqCf3HHKnNF2zmkzLTea3BuMiwWm0OjXtbH1jBbNcFhwynjQZB4Cqg+Uu8LsB4MJUTXG0b9/Y5tDqSZ6VyzFZKz7PBZW5MPcb5jdZf6qtXeD7d9MnSb5vTpxGEj1WwwoOLu3m+B04bDKVeAIxvuu77CeRJXXy6TTCvUGzwe6u8GuDKWi7gtIGY8ldd1rZAapM64kes59/443YYIPdat2EHH6IfvnQwDp943V0R5qAtbMjSoQhGzI7x5uN5kPGcMv9cP9cJlqi/1x1NgmzpF7XlsVGU5VEmHLamM7ymVlFc9vAdNwo2ahJ8YEgm6H9OaPobPWtVpaTg6JWiCMdPv6Piw0hcDJrW/dPMZ6gHWjc2UwCGIwvmfWjdQXU4ykFC0yUzneL2LR3lsASPCTP48/HBYob321KKvOFxaA+4reD6VnVyFZ40QYOSfgfk1CpjZmMrh+y7OWLODwABUhf13EWjzQmZNitufKYkgAr/Si/jBryi8ND1u/5MnhI/NIjH+3dVSUKXcgaq8YdoWR2qTXP56BD7flcBFN8z3pa66fRPvPREStRm7BjWP/u/QoLB+s5zeH7l2ePeWrFpRsbdGdpDn9QbUZB65yMiGxJcDF+8De90vx2hxoZZU4borxqJ6YyTSu7KdQhWsTt7FYbGs7S5Ui7IQqKBWbJ1OeD5H40QlMfVzwyELVtZXT+0GT54o/ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19305cfc-49d1-46a8-19cd-08da806a93c6 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:26.2968 (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: 8yc3+4FIZTDRCX+hADQTISLuHtsIGGceaqlmNVM68AbgwKc1QN1oz/h0foJ+iz8H X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0216 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Make it clear that this is the body of the ioctl - keep the mutex outside the function since this function doesn't have and wouldn't benefit from error unwind. Signed-off-by: Jason Gunthorpe --- drivers/vfio/vfio_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index f7b02d3fd3108b..78957f45c37a34 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -968,7 +968,7 @@ 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); @@ -1271,7 +1271,7 @@ static long vfio_group_fops_unl_ioctl(struct file *filep, return vfio_group_ioctl_set_container(group, uarg); case VFIO_GROUP_UNSET_CONTAINER: down_write(&group->group_rwsem); - ret = vfio_group_unset_container(group); + ret = vfio_group_ioctl_unset_container(group); up_write(&group->group_rwsem); break; } From patchwork Wed Aug 17 16:07:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12946194 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 B3560C25B08 for ; Wed, 17 Aug 2022 16:07:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240621AbiHQQHh (ORCPT ); Wed, 17 Aug 2022 12:07:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51552 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240680AbiHQQHb (ORCPT ); Wed, 17 Aug 2022 12:07:31 -0400 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2081.outbound.protection.outlook.com [40.107.93.81]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 331C64DF36 for ; Wed, 17 Aug 2022 09:07:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jPnLaiYszc3h82djO1BW/Vq6MPQtvtJXDxZoCGslFyRzfzFb3M/GhqXFFP8EQtTfLwsNoh1n7lcvDtXXesGOADFN89zEzPNUXET6CC+THNyKwI91tkvP+n0EngcvlwN0PO15cVAmce50fQRcUxyrGxcAG45zBBAnbw3IyimLTUkMZFBSAddqJ4Y1O3Sx+DaPYmAtMGgHXZiKdYaYnidaiTP42U1mX7BExKLOAsZkEimYsmQUsYVw9rqyUjHSDapW21Tc+PE+m6UL/Prju4Za8Jn/IPmvLPh+JtH7/J/Fzi0yykvJWwLJnT823Ydwd+mGRAZ3vv1ZWJTJPrGW2BZEIg== 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=PiB42TKK6sjXeV+/WWPIcy7avpfxgoZZr8u8Av2auYU=; b=jg7M1HdLArdD4JrLSCqxbX/i6lh3EhtEz2I7iMYPS4xMToU/TySPE9lI1PshgKj61EogGuo3NhKdTB8R6u7SlM6MzNYY89xucx2tkh4YNghoEz+VC1ll5hZ6+EPpqexsTVEnlwdFoRgrw64bj5ZlP7EjXBuPdzNNe+OTvzRL2XH4IN9rYKDHRtO6vmPjDUKQ4xeM8UOHuXVoBqN7i0eElglPNwJmLWuPtvdaqXvfa1htUbg1RNCG3at4zNZ3eXxhNQQPmQ8x9UT8nUs7ePBpGKwk0Fq34LAdnHGU3DVq5272+wo/UVcRXGg+BPgd+lmwYc8rixWlsLwSlfLJXo+Qzw== 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=PiB42TKK6sjXeV+/WWPIcy7avpfxgoZZr8u8Av2auYU=; b=k2XoYVhX+rjARmiy8P7HUv03EMRyGUaWRgqv2oaJcjqYtlz5GndP96e9XkofUWl7Z3Q/wRzYNdrgX9+Ou9S07oHesZ41t13Ga3mYbBoWDGWHMDjhvkzM8YYQ4RAAb6WvgjHI2lqPKE/ehyeUomeCwASzQhGMjUmeQBhaG5FDLG3a1YBGfvgiPvOxBieOcv9/A+Hm2o7/Tv0Px5sl9zgP9YLIBMh2PUP9hvKemk7rXf4d5+z1T/pG42ZuCdfPYe/EIiYpuy2FMN9qszXYeRyHLb8HSq9HIIffCFVJSmvnfslPa/pUzIsjPcp8WS9JS0ZeZQpBjlRG7gtg12XK53/ntA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) by LV2PR12MB5941.namprd12.prod.outlook.com (2603:10b6:408:172::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.19; Wed, 17 Aug 2022 16:07:26 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%6]) with mapi id 15.20.5525.019; Wed, 17 Aug 2022 16:07:26 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , kvm@vger.kernel.org, llvm@lists.linux.dev, Nathan Chancellor , Nick Desaulniers , Tom Rix Subject: [PATCH 8/8] vfio: Split VFIO_GROUP_GET_STATUS into a function Date: Wed, 17 Aug 2022 13:07:25 -0300 Message-Id: <8-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> In-Reply-To: <0-v1-11d8272dc65a+4bd-vfio_ioctl_split_jgg@nvidia.com> References: X-ClientProxiedBy: BL0PR0102CA0054.prod.exchangelabs.com (2603:10b6:208:25::31) To MN2PR12MB4192.namprd12.prod.outlook.com (2603:10b6:208:1d5::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e070f167-4bba-4c58-8fbd-08da806a93db X-MS-TrafficTypeDiagnostic: LV2PR12MB5941:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3RA+emm/pFVXPVpYY/8kBFO6uf1NxgtjwcDRuFMu1OBKlo3PJvob/bWMCnKBcfWl6teYlE/s0QEbyyU2NZSAymmG3IaOEB7daUQvwPfNnA8toLp8/MmERZfUedzzwdDnodlyGbwLlLIOjkKuEGNawDblLUTrPZyge0fSCd01Sm00yOMf0phyrglEnQWqcGA3IF7F/oXm8mtKOkeRLQDMIlHg3+d/Ro6CV7tTxhsN15K0Yukule2F0Yi/3IJFP0iOOezQy2PC0cGW/GZju+oLTT6lpPWa29O8CyXgEPVwE4rgpSxaz2Qhr9oNp4o+RWUWUGmgyVF2h/pxObsPnQecNt/b8xToZBNaDgzmVP0+TRmwl7NS3KISJ66Oa+vpqTPDzEWJ3tzeJwoSIDL+TsVNh7c4NkawB791SXdwso0YcjVTCCYFrfv+iOQkomIpgjHn7g4U7AJ3w1whi2jhnt0TDbpFFhpvI5akvLVbGWODbkkjd+SO7BOfvWIImUr/zit5hfdiJfnHPweBhFt12x3C51JTi7IZuIK1Mn9Yo98PjmsZs/q5kuoZLio+d/j03Lr+h1SKYrsAZgotMDNgcxqX4FL7+vlS+OAa23K8nFA6Ve5BWv5gJhxCagx4lYx7IYHrVBx/Q+Mz+vwjBtpuDYZRs0tCjhKdT5+WHakT4fqMnpc/SlnbP7/4LdHRhccdSWUAPHFj8gKkAgUeUHrzCRMMzFBhsZEYmk7cbsQ3724RVV8+WIsXkqa0j9EUA9ijobWhHmLxMwAXPlklaleHahdMItlFn3gYrLJUwJNgypUuALQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB4192.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(366004)(376002)(39860400002)(136003)(346002)(2616005)(186003)(38100700002)(83380400001)(8936002)(5660300002)(66946007)(66556008)(66476007)(2906002)(6486002)(478600001)(6512007)(6506007)(26005)(41300700001)(316002)(110136005)(8676002)(86362001)(36756003)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jLldXYd1CJfTeUICyyRNsPDkcfDIPDZzj1NyjoBKnDDVMIDhoeSjoJvBuFqlOEIjTodun+E2y32EZISEJSQgCg1MGd7H9eiR2c5UnDZTsORjFcCbiFz64tKkYsmFLN3DuBYjjoOQ6dms380JbTZ0QB1s5f1B7I5KkHSGcif0oQMqBVRzC94FPLptZdCEFLd2WElthg9pB1Qtc27Z/HNXnN5TKxBMAv5bhKHuWcRF2ETiZQ5utAKnfS2l/wMb8IKXpLzn2WS8Bcfl8HGgcsnjPnZOuun4VnDJaNmufgZ6ht7K5T8PNLIU5e6iHwRgPtBf5rZefgnH9RNUzQAHOyIzYzFXHaw13+Adz0m4p1jJkjl4sBWyYwp3fi1iGzYlev/NSbX6Prc9ZjSYjqXBagQqU6XySQyhzSDAEdQw8pUIouUqX1J6+CrGNOH6zf4AyP0KnlE2ptZeYVYX6I6fwooFR/LnXQBtOiv6UlhckDSdiOoNmaKHqgCW83T/bJWoDJwN+nk30fw75/khl8Hlu8AMjd5uEW1s+c6S81gkSCRo78/9cZ7OWdwuAiXENObkD+t1AihW3tRfB3Uw2FmPXBFY5TC6QgYrGX1AjGO3ZX1oTs7sHBlzC/kTWNgaZh2bESjAit8dHJiLekeQAPaIbo/t2cbiI6qAcK5fIEEdKKhUIhNoSAmGkp/PQvCC57bM+yqEj8okB6rBDwcnU9lflqRp8KX3T19bs+FGZ1iLj8r1mmti599F9Gg8Uuh65BP/FAO6+vYKXHeRUILR71pp/jMrnJ3iKNmNGisA9R9S7A9zMC2MoP6de6KIUdUOFxNJlMMaIrxCvFez3hEqhRIVKiEibyYaRprua69uLz43/S7HSF6lr+zlci0uZJ1J8bBm91d/O/AtKBuNAAXnrfqYsKraDa5oFxTHp1H5CkEvVXNF0t+YRY8XoTJlZfR15+2coohoGNSTidX6eJ5NN9YaHPO3j0PNU3F/QvGGxwPgzjs+BRhivy+5Hh+fdrwFvhiQ6UroKWyTBoW23PWu1i4s3BxudbCPKBiJZcmsllXFYZQynNSdiMa62BjtxsTtBdM1i5T5GT8Yp6zQUcNgaP/sHPYBRY2JsehyFkz5TFywfre18ClVHX5cHl80fFXzZwb9w7230Xj6R2NWKDbknUrydOzFikjp8JvIShwCONeu5nRd7L/pzJK+PBO5MbU6Zco4byWjFogUO+tpnFtEzumFVyRGh/OP4yuPR6eVvxk1WtW4P0qzMlPeqDWUGi+54AEFDU3SU2gtwhpZJY0Y9HglYpeGtrx/OAh1mQJxxV+RTCEGsSP8CbJ9E4vwT03AO3z+tTZrsNoU6Uii2EXfn4Jc8XTvxdgv19jiNoMCOrdDo5PMUxk3hgbtkc9XIgdv/+wAnoZ/sBS5UgNo335RsF5gKBMjmm3SuvsVfT1KnkjWRacnw7CLEEyGJ+W1zzlDvqptCJGqI1rV1pYz7QdX16cFEHpKctAI9nvFUgeSDpoFI6795q9VTMio5zT0AB56/KDeszS6oYb8iG5sYxtqon+l7BQED3mOLNfFVqbc7+Tn5PPCiBmBmjOCSYvFfAMTctKOoal0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e070f167-4bba-4c58-8fbd-08da806a93db X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2022 16:07:26.2812 (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: KzYeFe6/CJRW1VW60Nzdxu32WfIiTV+TLI3IW8K9OY17vUviG6gT8JJFmVKNPqtC X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5941 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. Signed-off-by: Jason Gunthorpe Reviewed-by: Kevin Tian --- drivers/vfio/vfio_main.c | 55 ++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 78957f45c37a34..6f96e6d07a5e98 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -1227,6 +1227,32 @@ static int vfio_group_ioctl_get_device_fd(struct vfio_group *group, vfio_device_put(device); 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) @@ -1239,34 +1265,7 @@ static long vfio_group_fops_unl_ioctl(struct file *filep, 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: