From patchwork Fri Aug 26 19:34:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12956572 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 E9FBAECAAA3 for ; Fri, 26 Aug 2022 19:34:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344374AbiHZTeS (ORCPT ); Fri, 26 Aug 2022 15:34:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245719AbiHZTeR (ORCPT ); Fri, 26 Aug 2022 15:34:17 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2085.outbound.protection.outlook.com [40.107.92.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CDF6E0FC9; Fri, 26 Aug 2022 12:34:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DbNN+NXxc8XNKyYaCJnCIIQMwZmBC6qxBRQxkjTQdBmf479L2dTY0wdPrwTATjTIlmGuz9EAePXKKltKA11uaY8Q66uXcKLJyisVoA8iRY10E8rBWPM29wMs3Ww9z4saagcH7/j+VxbdJTEtCDryaQj+kLjNAkqjpWfrq7XzJuwW8Q7aEFmPmq1Mic0VKrGezFdGg1lg8Ebyr5LnUVzoxHmqLuBNS/KfHWzCrIuwHPhSNFEkrDWagcVx8FKuSrO1e0j//Cw7s87bqq4DTiImr0rNmx7UUkEoeRghgSr991ZDyJfkQrSIjVSEnKqvhfHUSg2U7jw7p0stMmJMSefGrA== 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=E2Ct3sLCpABvsDXEQaSA5siZea3HuQX2ymens2AKRYw=; b=KnbOz4EKVcHfAV3iIUgdobcLLh/TiyJk/jrjwo4PSIvtaXxMldOPNtOnh/KVNlDBiMzc2vZ1GOS5oUinv2IE5j11sWjcp4+hkI9Bokxd4SFUWhZFM1svY/gm3QMUylTPYKlv93QhZJ52tGdFZOF4qnSyPns3kzRtRNPR7Z/0vYToVDGtsYzwH01HyMLrN0hoLrAJIsx9lnSZEW+wLaBaCehvCHL/AL4g6xUDUHr42DgbKFygfmm7y+NXxt/cHgCcpH9wm5HGfqJ2EVFTG6CRdhzt2TMB/eCGQiacULGKQ7zVhap7ATcBZgb9cjFDe9iFDfvTirznKc+Gq4vu1bFp8Q== 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=E2Ct3sLCpABvsDXEQaSA5siZea3HuQX2ymens2AKRYw=; b=JJNsBsNMW+uRpWAs/Ormmk0y+xXzgmyfvWqTW7yzFnhusdBxI/Dg261TugW3jxwcvNzKga9hkFE5ZnLTZd5ZSWlAYDUtKr5tqm5f7WXjfFelVUMog+eeeraug2ZOk1J/FXmLUpBo830BcszfXyAID+hVNqsxxvOGrlFqnO1ZPS8jEMshKPtfbgK8hvIULtuOOhNMqhuB1PBCTk/Co7/UaSONtj8T3Klg6A0a2RyQHdDmCnxTwqVDngEif99lSjGN7dp3GQedACk/TdYkpSQthGdiqrQTmuaHQ9VlUaGxBGayaR1G+hgb06OHaPuNKRIF+Vm+TLv28W43XCV8lTahow== 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 DM5PR12MB1803.namprd12.prod.outlook.com (2603:10b6:3:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.14; Fri, 26 Aug 2022 19:34:05 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%8]) with mapi id 15.20.5566.016; Fri, 26 Aug 2022 19:34:05 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , Eric Farman , kvm@vger.kernel.org, linux-s390@vger.kernel.org, Matthew Rosato Cc: Kevin Tian Subject: [PATCH v2 1/3] vfio/pci: Split linux/vfio_pci_core.h Date: Fri, 26 Aug 2022 16:34:01 -0300 Message-Id: <1-v2-1bd95d72f298+e0e-vfio_pci_priv_jgg@nvidia.com> In-Reply-To: <0-v2-1bd95d72f298+e0e-vfio_pci_priv_jgg@nvidia.com> References: X-ClientProxiedBy: BL0PR02CA0042.namprd02.prod.outlook.com (2603:10b6:207:3d::19) 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: 14358f6a-7edf-4b53-b61c-08da8799efce X-MS-TrafficTypeDiagnostic: DM5PR12MB1803:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uwm9ZKRG0qgFF77tY9/MnFz2YAzqxjijV0Mi0gCmjj5imlv7jcmBQj1hvmhKD3l6uP0I7Bda0An+JI8Q7XnEU1cdCxszfj3IJEU/YgApO5e3pzs8d3glqILu8mamdWXD7PQAOhkN8NiRdMmLGnRQZomnqv1sT+YQPMe0CFW50NQbW6p3+armfCTVfOvgT81I8QHL4RzGZaqFDcdN4OAzjF33yn2bgHRoo6zty8Ag8QRGbpDeCyqi+vfyck66bFPuP5YB4d2IGmEgkB/fdYFTHGLuvm8zx+EVbrLqt6g/klJK30e0cOgJwNM3ESi/rSX7abbBrf0ZUj8/yZ3nMDXrnPHe11GHxSX+FQikPDr+JObCMHantvEt1J/Ipq8yv2xMfVpozdS6hwYzifw5mieF0CfuWaD+cOXQJcGrMMfFO6sK/NYDtN/nQrhpA5Rbz8Zka5pgdPWr/oMzxZoK9Kxs3mFg/8mcoQGznXbDMI9WlC1ysbvIDLJnfnFl0eOPK/iv7rFFdxNPz7yBnb2b/CIGrQ1usjJWUMp2jvK8FT7hwOAlDXHAJitIsRha0PDsLCnInohotFfEu3HMOjEjXdrb1BRvUd1oYwjy7GQlXJ8FgJovRli5wH1o8uEwRLl8JmxReD5t3STlaVP9RSazlxzgfI+CzU+PEENk8KqoBlll72NwvxNfEJi95rzCtxj1bs7BQV/5mjKDzVSE+ukmk/ZNXz8DT0J+px2Qk/2M7m9KjgmjDgYYu/h0pbhrzudnKYRK 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)(346002)(136003)(376002)(366004)(396003)(39860400002)(8936002)(83380400001)(2906002)(478600001)(2616005)(6486002)(30864003)(5660300002)(36756003)(66476007)(316002)(38100700002)(6666004)(8676002)(66556008)(86362001)(110136005)(6512007)(186003)(41300700001)(26005)(66946007)(6506007)(4326008)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ISN/lcLMpy5x1s3WZjRf0N6mU2s/7ZHXlxoaIogjC+Ak5J6jwmLdvsPJNz+otOYxmqKnismLODR3SRPQcPYNUh08xA4riycR0XYL7njPaIykB9XRL6K/TPFkG0t5P4DBS2idRMtdU52pFEyeiyVqxHlck160ggSmVZT9f42hzAMqgYAlki+c5og6qlgpl4wQq84rcPTHS4hnmUWMj78pRW/ULSODMCfS6wUdiRjbUjMH77ufZEkGRlt9kKBtcC0mQ7ODEvYDT6Yda4XeSxwp4WsR8IkgVFFU4vV85s7Gns2SE2lGcSC0nmvxlSM5GblqlTNSEO0SFwA3g2i6fCPmNaQVUq++8lBc64lCC81/4Ql9xk75rwpP0/XxIsp+Ss2vvKl22kLWzgXiEPqVfY18fvV09H0DxTi9wUvXVX18OTbvLWkD7EYQXQGUoRnvNQchlSbEGqkV5fWHC5Oeu4UXwvLcLtirxBmDqWHRQ1REKmlJScVXaCJSkStgTmt5A/NiG500kceQLpsey+91RZiyjETfwVlVtpLcJT1/ksqjZ2DQXRYd70ApMHBwGTqUUunWyFjmaHjzOX1QK35Fp0YIp7XuABPRtFlI5wDtYomFZtcSzWjNhi/ic6t7PJ36BKYqvikvG+MDJpAna89jfZG2BugDIea4w2rNDnrNQuz9xiqlMWUIq0hdkzBPs9qjAheI3tt/diNmnZuo+bZnyV3EEerDk3S8gvZeKx3O5H8JCAuqaDgdtV3MfkoT9iGneiCiewBmHkbuSKL2i6uz07lhBwcJmYENYPkIueFeEP18pAceDTYwpzRHV009Aht4mBFCwMpKc6vij8NyUGaAKl8djUo0v9+gXWZe5p5P5ucy0cp3fjfoDt69EvxILX2rK/wg1dwBZaUkHRoKZfeBRHe6pvFWKLoi6Q1qScR3S6zQwysjsDHhgDg24cfHGNZPvofJvj1A+aH3OyFEHfbsyaTjhzoIX2LCMhxec/k00wtyN+GjEjyBv4/TPqtMY4MhNJ8L4LGaWBM+BZHcv976/x563KtXVL0G69CY1m4lf4SudNzZ6gsyaNjgMYbhgurDpysFoWNJ3gZq5iXjpJKr+awCTU/WyI1hIc2O68xXEkgUOPuQw9eMRWyGNEnkgkPYfeFq+M1QJ3Hu2ucMB4WX78jEz8ncKGe1WbXctXc7vZTp+u9IyBXiBb4vxQvH6kCH04WS0WQd+rD2ea1QWsDmOUulqPU10Y1AHW3G2sY3v5Q4Nv26hWMd8BllId2fjSLUVMMz1o1ioF4MqSt8ypamXlK7vlcmal82iDM+gnKkTlkkkNyqV6i+khWtaTc0PyNd7v4BnYmsDCriJs3caxGu2yMCLJ8OJ0CmkismK1CBR8PI3h8qkh4FEGZWv68nSSI2oYSAE6qtHhNUTKlvIGtj12cXDKHKUwA94JaCp9zWuvddY1W6CD/RgobU1UBPYGoLmArxBU+HkAhhdjGzve36HXmXflwzYXfrpS8oiVCO+V3gf3VGTe8dCmZOXXpei1lKV1wbeWARPLF20fKs8m9OxTbOEdVQKi/2RlrUoM/wPLCMTR5eEX/h2B56v+XU2SLCs+0j X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14358f6a-7edf-4b53-b61c-08da8799efce X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2022 19:34:05.1112 (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: BXT/v2NFu6UUAcaXpX5rFGIyFA0uHCuho5YHqvCeV8CU9OvWFIfj5rAOnc+Sao0n X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1803 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org The header in include/linux should have only the exported interface for other vfio_pci module's to use. Internal definitions for vfio_pci.ko should be in a "priv" header along side the .c files. Move the internal declarations out of vfio_pci_core.h. They either move to vfio_pci_priv.h or to the C file that is the only user. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe Reviewed-by: Cornelia Huck --- drivers/vfio/pci/vfio_pci.c | 2 +- drivers/vfio/pci/vfio_pci_config.c | 2 +- drivers/vfio/pci/vfio_pci_core.c | 19 +++- drivers/vfio/pci/vfio_pci_igd.c | 2 +- drivers/vfio/pci/vfio_pci_intrs.c | 16 +++- drivers/vfio/pci/vfio_pci_priv.h | 106 +++++++++++++++++++++++ drivers/vfio/pci/vfio_pci_rdwr.c | 2 +- drivers/vfio/pci/vfio_pci_zdev.c | 2 +- include/linux/vfio_pci_core.h | 134 +---------------------------- 9 files changed, 145 insertions(+), 140 deletions(-) create mode 100644 drivers/vfio/pci/vfio_pci_priv.h diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c index 4d1a97415a27bf..d9b5c03f8d5b23 100644 --- a/drivers/vfio/pci/vfio_pci.c +++ b/drivers/vfio/pci/vfio_pci.c @@ -25,7 +25,7 @@ #include #include -#include +#include "vfio_pci_priv.h" #define DRIVER_AUTHOR "Alex Williamson " #define DRIVER_DESC "VFIO PCI - User Level meta-driver" diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c index 442d3ba4122b22..5f43b28075eecd 100644 --- a/drivers/vfio/pci/vfio_pci_config.c +++ b/drivers/vfio/pci/vfio_pci_config.c @@ -26,7 +26,7 @@ #include #include -#include +#include "vfio_pci_priv.h" /* Fake capability ID for standard config space */ #define PCI_CAP_ID_BASIC 0 diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index c8d3b0450fb35b..04180a0836cc90 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -28,7 +28,7 @@ #include #include -#include +#include "vfio_pci_priv.h" #define DRIVER_AUTHOR "Alex Williamson " #define DRIVER_DESC "core driver for VFIO based PCI devices" @@ -41,6 +41,23 @@ static bool disable_idle_d3; static DEFINE_MUTEX(vfio_pci_sriov_pfs_mutex); static LIST_HEAD(vfio_pci_sriov_pfs); +struct vfio_pci_dummy_resource { + struct resource resource; + int index; + struct list_head res_next; +}; + +struct vfio_pci_vf_token { + struct mutex lock; + uuid_t uuid; + int users; +}; + +struct vfio_pci_mmap_vma { + struct vm_area_struct *vma; + struct list_head vma_next; +}; + static inline bool vfio_vga_disabled(void) { #ifdef CONFIG_VFIO_PCI_VGA diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c index 352c725ccf1812..8177e9a1da3bfd 100644 --- a/drivers/vfio/pci/vfio_pci_igd.c +++ b/drivers/vfio/pci/vfio_pci_igd.c @@ -15,7 +15,7 @@ #include #include -#include +#include "vfio_pci_priv.h" #define OPREGION_SIGNATURE "IntelGraphicsMem" #define OPREGION_SIZE (8 * 1024) diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c index 6069a11fb51acf..32d014421c1f61 100644 --- a/drivers/vfio/pci/vfio_pci_intrs.c +++ b/drivers/vfio/pci/vfio_pci_intrs.c @@ -20,7 +20,21 @@ #include #include -#include +#include "vfio_pci_priv.h" + +#define is_intx(vdev) (vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX) +#define is_msix(vdev) (vdev->irq_type == VFIO_PCI_MSIX_IRQ_INDEX) +#define is_irq_none(vdev) (!(is_intx(vdev) || is_msi(vdev) || is_msix(vdev))) +#define irq_is(vdev, type) (vdev->irq_type == type) + +struct vfio_pci_irq_ctx { + struct eventfd_ctx *trigger; + struct virqfd *unmask; + struct virqfd *mask; + char *name; + bool masked; + struct irq_bypass_producer producer; +}; /* * INTx diff --git a/drivers/vfio/pci/vfio_pci_priv.h b/drivers/vfio/pci/vfio_pci_priv.h new file mode 100644 index 00000000000000..ac701f05bef022 --- /dev/null +++ b/drivers/vfio/pci/vfio_pci_priv.h @@ -0,0 +1,106 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef VFIO_PCI_PRIV_H +#define VFIO_PCI_PRIV_H + +#include + +/* Special capability IDs predefined access */ +#define PCI_CAP_ID_INVALID 0xFF /* default raw access */ +#define PCI_CAP_ID_INVALID_VIRT 0xFE /* default virt access */ + +/* Cap maximum number of ioeventfds per device (arbitrary) */ +#define VFIO_PCI_IOEVENTFD_MAX 1000 + +struct vfio_pci_ioeventfd { + struct list_head next; + struct vfio_pci_core_device *vdev; + struct virqfd *virqfd; + void __iomem *addr; + uint64_t data; + loff_t pos; + int bar; + int count; + bool test_mem; +}; + +#define is_msi(vdev) (vdev->irq_type == VFIO_PCI_MSI_IRQ_INDEX) + +void vfio_pci_intx_mask(struct vfio_pci_core_device *vdev); +void vfio_pci_intx_unmask(struct vfio_pci_core_device *vdev); + +int vfio_pci_set_irqs_ioctl(struct vfio_pci_core_device *vdev, uint32_t flags, + unsigned index, unsigned start, unsigned count, + void *data); + +ssize_t vfio_pci_config_rw(struct vfio_pci_core_device *vdev, char __user *buf, + size_t count, loff_t *ppos, bool iswrite); + +ssize_t vfio_pci_bar_rw(struct vfio_pci_core_device *vdev, char __user *buf, + size_t count, loff_t *ppos, bool iswrite); + +#ifdef CONFIG_VFIO_PCI_VGA +ssize_t vfio_pci_vga_rw(struct vfio_pci_core_device *vdev, char __user *buf, + size_t count, loff_t *ppos, bool iswrite); +#else +static inline ssize_t vfio_pci_vga_rw(struct vfio_pci_core_device *vdev, + char __user *buf, size_t count, + loff_t *ppos, bool iswrite) +{ + return -EINVAL; +} +#endif + +long 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); + +int vfio_config_init(struct vfio_pci_core_device *vdev); +void vfio_config_free(struct vfio_pci_core_device *vdev); + +int vfio_pci_set_power_state(struct vfio_pci_core_device *vdev, + pci_power_t state); + +bool __vfio_pci_memory_enabled(struct vfio_pci_core_device *vdev); +void vfio_pci_zap_and_down_write_memory_lock(struct vfio_pci_core_device *vdev); +u16 vfio_pci_memory_lock_and_enable(struct vfio_pci_core_device *vdev); +void vfio_pci_memory_unlock_and_restore(struct vfio_pci_core_device *vdev, + u16 cmd); + +#ifdef CONFIG_VFIO_PCI_IGD +int vfio_pci_igd_init(struct vfio_pci_core_device *vdev); +#else +static inline int vfio_pci_igd_init(struct vfio_pci_core_device *vdev) +{ + return -ENODEV; +} +#endif + +#ifdef CONFIG_VFIO_PCI_ZDEV_KVM +int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev, + struct vfio_info_cap *caps); +int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev); +void vfio_pci_zdev_close_device(struct vfio_pci_core_device *vdev); +#else +static inline int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev, + struct vfio_info_cap *caps) +{ + return -ENODEV; +} + +static inline int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev) +{ + return 0; +} + +static inline void vfio_pci_zdev_close_device(struct vfio_pci_core_device *vdev) +{} +#endif + +static inline bool vfio_pci_is_vga(struct pci_dev *pdev) +{ + return (pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA; +} + +#endif diff --git a/drivers/vfio/pci/vfio_pci_rdwr.c b/drivers/vfio/pci/vfio_pci_rdwr.c index 82ac1569deb052..d5e9883c1eee10 100644 --- a/drivers/vfio/pci/vfio_pci_rdwr.c +++ b/drivers/vfio/pci/vfio_pci_rdwr.c @@ -17,7 +17,7 @@ #include #include -#include +#include "vfio_pci_priv.h" #ifdef __LITTLE_ENDIAN #define vfio_ioread64 ioread64 diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_zdev.c index e163aa9f61444f..0bff24f0d4d717 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -15,7 +15,7 @@ #include #include -#include +#include "vfio_pci_priv.h" /* * Add the Base PCI Function information to the device info region. diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h index 5579ece4347bdc..9d18b832e61a0d 100644 --- a/include/linux/vfio_pci_core.h +++ b/include/linux/vfio_pci_core.h @@ -20,39 +20,10 @@ #define VFIO_PCI_CORE_H #define VFIO_PCI_OFFSET_SHIFT 40 - #define VFIO_PCI_OFFSET_TO_INDEX(off) (off >> VFIO_PCI_OFFSET_SHIFT) #define VFIO_PCI_INDEX_TO_OFFSET(index) ((u64)(index) << VFIO_PCI_OFFSET_SHIFT) #define VFIO_PCI_OFFSET_MASK (((u64)(1) << VFIO_PCI_OFFSET_SHIFT) - 1) -/* Special capability IDs predefined access */ -#define PCI_CAP_ID_INVALID 0xFF /* default raw access */ -#define PCI_CAP_ID_INVALID_VIRT 0xFE /* default virt access */ - -/* Cap maximum number of ioeventfds per device (arbitrary) */ -#define VFIO_PCI_IOEVENTFD_MAX 1000 - -struct vfio_pci_ioeventfd { - struct list_head next; - struct vfio_pci_core_device *vdev; - struct virqfd *virqfd; - void __iomem *addr; - uint64_t data; - loff_t pos; - int bar; - int count; - bool test_mem; -}; - -struct vfio_pci_irq_ctx { - struct eventfd_ctx *trigger; - struct virqfd *unmask; - struct virqfd *mask; - char *name; - bool masked; - struct irq_bypass_producer producer; -}; - struct vfio_pci_core_device; struct vfio_pci_region; @@ -78,23 +49,6 @@ struct vfio_pci_region { u32 flags; }; -struct vfio_pci_dummy_resource { - struct resource resource; - int index; - struct list_head res_next; -}; - -struct vfio_pci_vf_token { - struct mutex lock; - uuid_t uuid; - int users; -}; - -struct vfio_pci_mmap_vma { - struct vm_area_struct *vma; - struct list_head vma_next; -}; - struct vfio_pci_core_device { struct vfio_device vdev; struct pci_dev *pdev; @@ -141,92 +95,11 @@ struct vfio_pci_core_device { struct rw_semaphore memory_lock; }; -#define is_intx(vdev) (vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX) -#define is_msi(vdev) (vdev->irq_type == VFIO_PCI_MSI_IRQ_INDEX) -#define is_msix(vdev) (vdev->irq_type == VFIO_PCI_MSIX_IRQ_INDEX) -#define is_irq_none(vdev) (!(is_intx(vdev) || is_msi(vdev) || is_msix(vdev))) -#define irq_is(vdev, type) (vdev->irq_type == type) - -void vfio_pci_intx_mask(struct vfio_pci_core_device *vdev); -void vfio_pci_intx_unmask(struct vfio_pci_core_device *vdev); - -int vfio_pci_set_irqs_ioctl(struct vfio_pci_core_device *vdev, - uint32_t flags, unsigned index, - unsigned start, unsigned count, void *data); - -ssize_t vfio_pci_config_rw(struct vfio_pci_core_device *vdev, - char __user *buf, size_t count, - loff_t *ppos, bool iswrite); - -ssize_t vfio_pci_bar_rw(struct vfio_pci_core_device *vdev, char __user *buf, - size_t count, loff_t *ppos, bool iswrite); - -#ifdef CONFIG_VFIO_PCI_VGA -ssize_t vfio_pci_vga_rw(struct vfio_pci_core_device *vdev, char __user *buf, - size_t count, loff_t *ppos, bool iswrite); -#else -static inline ssize_t vfio_pci_vga_rw(struct vfio_pci_core_device *vdev, - char __user *buf, size_t count, - loff_t *ppos, bool iswrite) -{ - return -EINVAL; -} -#endif - -long 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); - -int vfio_config_init(struct vfio_pci_core_device *vdev); -void vfio_config_free(struct vfio_pci_core_device *vdev); - +/* Will be exported for vfio pci drivers usage */ int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, unsigned int type, unsigned int subtype, const struct vfio_pci_regops *ops, size_t size, u32 flags, void *data); - -int vfio_pci_set_power_state(struct vfio_pci_core_device *vdev, - pci_power_t state); - -bool __vfio_pci_memory_enabled(struct vfio_pci_core_device *vdev); -void vfio_pci_zap_and_down_write_memory_lock(struct vfio_pci_core_device *vdev); -u16 vfio_pci_memory_lock_and_enable(struct vfio_pci_core_device *vdev); -void vfio_pci_memory_unlock_and_restore(struct vfio_pci_core_device *vdev, - u16 cmd); - -#ifdef CONFIG_VFIO_PCI_IGD -int vfio_pci_igd_init(struct vfio_pci_core_device *vdev); -#else -static inline int vfio_pci_igd_init(struct vfio_pci_core_device *vdev) -{ - return -ENODEV; -} -#endif - -#ifdef CONFIG_VFIO_PCI_ZDEV_KVM -int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev, - struct vfio_info_cap *caps); -int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev); -void vfio_pci_zdev_close_device(struct vfio_pci_core_device *vdev); -#else -static inline int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev, - struct vfio_info_cap *caps) -{ - return -ENODEV; -} - -static inline int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev) -{ - return 0; -} - -static inline void vfio_pci_zdev_close_device(struct vfio_pci_core_device *vdev) -{} -#endif - -/* Will be exported for vfio pci drivers usage */ void vfio_pci_core_set_params(bool nointxmask, bool is_disable_vga, bool is_disable_idle_d3); void vfio_pci_core_close_device(struct vfio_device *core_vdev); @@ -256,9 +129,4 @@ void vfio_pci_core_finish_enable(struct vfio_pci_core_device *vdev); pci_ers_result_t vfio_pci_core_aer_err_detected(struct pci_dev *pdev, pci_channel_state_t state); -static inline bool vfio_pci_is_vga(struct pci_dev *pdev) -{ - return (pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA; -} - #endif /* VFIO_PCI_CORE_H */ From patchwork Fri Aug 26 19:34:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12956570 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 EC175ECAAD6 for ; Fri, 26 Aug 2022 19:34:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243808AbiHZTeO (ORCPT ); Fri, 26 Aug 2022 15:34:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36376 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229704AbiHZTeM (ORCPT ); Fri, 26 Aug 2022 15:34:12 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2085.outbound.protection.outlook.com [40.107.92.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77A32E0969; Fri, 26 Aug 2022 12:34:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C+Ya5DOMeCrvMNfkuYcx8e7nKRPnLctMzCGqBsy+atvTO/4D/x7Q2e+XIe9fXv1quw9FwCY9h8GkoTpnaUOZeodFwdfpOErAvmON4ycwNJ/gTLL5Sz78TFPiuwaOiEbZGU+0BwVeulsM5oU+FQ7ezQp4Z3PoNs2+02uIh3CnHJ5rvpWTDta6++ujZgbrb2QiobNWdnWgN5cD4v3ughrLngyShvW9uDOPykhMMsJkU4Q5nnMf38Vsa3yRHla+9PojyxuOcE8RfpAIQ4SYz/wrmQZZWItC47aOu8xKA3XHXokNMtnCQ88UFvvCWmm2jlEH/0ApHujcY93EWebSVXPppg== 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=jUULXkMkkaHiLs140eO40la1EEb6DlV0T639QbuzlsM=; b=DFmGiYMfHE2lge+5u0Xs4kde+H9OE7B6mVsyEdhBXSCIgxomMF46xXr/ESejCBDOERHP7ThXIoHqezahMepSvERXQ24KGCl9Wo4X5FgYMmG+NiCxx3MuGX6AnzDqEIjaVbAD1nIAT9a9j2wE6tgkYcziwqF/tpey9kMj+I/afy7DngJGL7F1AqA6pMTD/dC11Vc0dW/wAfmhjsLcyZXWw0IR0du6pbmtIF2wfHMwrCcJx4gJsq5uY6lFd+ORcw/nAlMVVAiwSCfO+J6f8L/DM8DOm82nOmb8MqvSEqDha9HYuV5jRqwFOnHoIf+nD/lBLOfG1JS30gjwjE5dg2Z9gg== 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=jUULXkMkkaHiLs140eO40la1EEb6DlV0T639QbuzlsM=; b=lZP6eqECXnowk1BxlIyHhWBrgTTXqVDwKGyZs+GjrLizCX8dyp7nxajLg/v8vnI1Ik8Xu5ew8vpBPPuYoIjkyrSeRqbBvgn4Xa1iHF2+FLSWCbEJrGttr4KE1n/L+Jo/qOavPvgkYOTC9QCyThLO9csOmYLOpuqhzpSSRbeuMrzPy0y4tkUPiHVX6+5dfaF+hlb1MV9p+v2MHcpI5pIE1DjVwh/4NTfNk+UvrtXtG2ozVsVJfmnzCo0UQ4X8F1o5Kf33onbSaj2yw12xH9Znb5UBf5iMYDg8/ZnwTZ/vBI3R5qlEwwthCHMBqoL6lg7gEhLAocCvcPBNGPmy0FMqZw== 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 DM5PR12MB1803.namprd12.prod.outlook.com (2603:10b6:3:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.14; Fri, 26 Aug 2022 19:34:04 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%8]) with mapi id 15.20.5566.016; Fri, 26 Aug 2022 19:34:04 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , Eric Farman , kvm@vger.kernel.org, linux-s390@vger.kernel.org, Matthew Rosato Cc: Kevin Tian Subject: [PATCH v2 2/3] vfio/pci: Rename vfio_pci_register_dev_region() Date: Fri, 26 Aug 2022 16:34:02 -0300 Message-Id: <2-v2-1bd95d72f298+e0e-vfio_pci_priv_jgg@nvidia.com> In-Reply-To: <0-v2-1bd95d72f298+e0e-vfio_pci_priv_jgg@nvidia.com> References: X-ClientProxiedBy: BL0PR02CA0040.namprd02.prod.outlook.com (2603:10b6:207:3d::17) 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: 7a8e9436-3876-43f0-bb3a-08da8799ef3a X-MS-TrafficTypeDiagnostic: DM5PR12MB1803:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YoSibgeOPtgvS/4E1kj8pyaXdMjnTfSdtxn0NA14H0rPjrBZNBhsHHG6CANqtKsctz4g6vm5ePLnUW/gbFh5VxFRbKZQp574m1PgF1sicBFqDUF8l7H2qJxYxZ/stV0NWDIbIGXWENuG1A1IwhYBK8upzN+LFTlGdAdH8NOf9McU8iLlgKlz1jmsBNgkRrqNdKg9rra5GowTaV1Ob9YmdjsEtStQFfJC+D4D7HncKQCXmbSDBEJMf9wM/RJ9Dbf1Qdd4Og98xVSCj0Mc2R5DQ71EVkpZc4dvWj9hLYjTV9gPYYsHsqTsw91IrJeWzge7k38LJuQdKp65cZy204lkIguWj4eTx9S1/Hy3NxC3YJbd/CrVbv0BHgberH27L7+DHqGK5Bow35XrWM7KbWQV1EV7ZNizXDPOQSdyZrYl85MkkiKig4bGBAexcgSt1FhQ6H1yxwlgwiwj1cPpvwcEE+AfPTUa6sAuYGVkkSlxrSUunUWQFc3mwscD72UEh2q0IOgVlOBW5vWiX933GmoMik/ayosYgwBjWNQimhgMHopkhUjFDX+z4tVDje4BfMUBJ7okiwbf7xdFCOX9Zi/VRwAa0porVfrzBQpmtmSrXUtPIFBvxr1Ctxk/cH0AGdZg7+7y+kfeZnMQUul4rXoWvIFEPkkHgxJ1HOw67lfhpOtydRBm3XBRzWWMXClhiiVeflTJyuxZ/nZbNae94TnIF+N5MAgBQryrWZlX5LiYlgkwKYoZo/Ew7T1E5ojLbgHd 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)(346002)(136003)(376002)(366004)(396003)(39860400002)(8936002)(83380400001)(2906002)(478600001)(2616005)(6486002)(5660300002)(36756003)(66476007)(316002)(38100700002)(8676002)(66556008)(86362001)(110136005)(6512007)(186003)(41300700001)(26005)(66946007)(6506007)(4326008)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PtmpEnIO1iHUtKmWIXjsFHoqbfdexwWhVg05qYCs7fN2B9H4xlqYz/2c/9NG3JTmE2b7f9nXmfExX4XG/RCcTd2cFMCj7SqMJ+wCCVPDZ03xmimcQNqVT/kKqGBCkNJZoOb9A5pr0p9AkY2lmyT1FPNtFAKLOP+kv82aDLFZMn9NrkPAOnP84iP6uodqxY3Gg3QFKYCEBWNCn9nBRNBOZCKp+WD/1EQCA+rKCVVTHhGsUPOrucA26aS5cveLkPK9DLDMtMs3Px8V+urs44Y49LHjCS3Kzg/wo4gGJ1un7FakV+Q3o/z9xYp11UKrjVWvmFADOUz0RQz56tUQfsvUO+28btrCMc9J6IoDl4NhOUJDP0o/cArQeSrMJoyTysqPy1aTjabz04ntWkqtmEw0t0jKwmJMcGuloipUJ16hFP+9m2rn48W4i16g+1GmTzHLFDv/FbMjK0tbUmwkttoC7zKhWLABtXFMfcoQfTyA5yMpH47ivrtT3x6w8m9RBRu4TIKPSV591iidiYukRRV98DZdHsut4WhQuAaCiGDt4HhS67s497kepeWwgDXTs9dqFGGuSk8KHkGLcfEIaZ4U/yl/EbD5qa/X9XD9OoaTuBas0U1V9gTc1+MdCXW+Cr2UK594peVMVEaTIcJTslprk0PABA/BsYjcQop73aS/7sBgY/IOpzSgE4SKvkIetzmURuZMgLoSj1MdqXoSFJakBngwjuCGg+pD/Tk3wwGXuwclQk6u2fEgUhNXT2wdubYZsOKQHm00QiUKCpQ7PLg5sVgrWbL6ayyAnxW2GQ0djySm8VGqQMvP5ah1dpgHQf9vyRmRxaAzzwhnmaMbv0FwTLvFS2zA8bSsAErcAR3zfS3PKK/dGTNZw4evQk4+2ztCoqYVs0T5FRqJCZYt7Lt0TwQ1EFi7IyrlXKLTlpZ0M16CZPUKO8b8GTLjHPY25LTMA/v51vqXVAAuHAM9Iv3qGR3BOJvHtgMdXHMh8jM0vxMvNyJ+OR7tLmPLXS0pZapK7Sy4AhmWMZNbGg6yv95D2D2OD10eg518mdf05Wkun/vMLg4m963/gCsqIpG7S162P6SYvr6uiFVmqOZ8uO9iuk4gTwufx9nDy/omZ/d+1lPdGFS+PX69T0lyVLXm+XWF8CtV7COSdX4k43IDRlFkDN16OMy2tL/usqgFJKrehP3xyUbRVHZWj0z4FLRv5Ve8gy5VG/oQ4itqA8I4PkQyFqwsB0531z84CKWVzdnnI4lY8jhXRQZiToHvI4oWlcZaEJYa4oAKpL9PGl1W5MGytwYF9UQIGlz5ihdDQ+U8sOUIQ2zwB111yyM6jcJ77fB3mtCKpKEsa/q5/M0v4zaKW2h5mId+UJ2odFy2vDf34rjdWYfpLOJRkj5LoaK50odWWR9Dvt8Z9owslRoVNBxq7dIGY7dHGX1HBw4RdR47NloP7AuHsvdgTUkgKGaTnXpT/+Y0YOss77Vq76q6l4SN+RE3LrQaHtgnsrSsXmBvTWtkibPmGFpdfWe5dGJdUj6dYRXcO8Bc+WreJj5dYu5WJYOnfm6N/Qz3rU7/NyqjKujq2ZbmSKW75MNqOvKJyo0r X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a8e9436-3876-43f0-bb3a-08da8799ef3a X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2022 19:34:04.2364 (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: 3n/dDuM/cnZssilf6ryiKWe2OPhknq7ocl4g1J0k8TrthkFPYo9Rvtwzu1BBZ7YL X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1803 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org As this is part of the vfio_pci_core component it should be called vfio_pci_core_register_dev_region() like everything else exported from this module. Suggested-by: Kevin Tian Signed-off-by: Jason Gunthorpe Reviewed-by: Kevin Tian Reviewed-by: Cornelia Huck --- drivers/vfio/pci/vfio_pci_core.c | 10 +++++----- drivers/vfio/pci/vfio_pci_igd.c | 6 +++--- include/linux/vfio_pci_core.h | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index 04180a0836cc90..84279b6941bc2a 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -662,10 +662,10 @@ static int msix_mmappable_cap(struct vfio_pci_core_device *vdev, return vfio_info_add_capability(caps, &header, sizeof(header)); } -int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, - unsigned int type, unsigned int subtype, - const struct vfio_pci_regops *ops, - size_t size, u32 flags, void *data) +int vfio_pci_core_register_dev_region(struct vfio_pci_core_device *vdev, + unsigned int type, unsigned int subtype, + const struct vfio_pci_regops *ops, + size_t size, u32 flags, void *data) { struct vfio_pci_region *region; @@ -687,7 +687,7 @@ int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, return 0; } -EXPORT_SYMBOL_GPL(vfio_pci_register_dev_region); +EXPORT_SYMBOL_GPL(vfio_pci_core_register_dev_region); long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, unsigned long arg) diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c index 8177e9a1da3bfd..5e6ca592695485 100644 --- a/drivers/vfio/pci/vfio_pci_igd.c +++ b/drivers/vfio/pci/vfio_pci_igd.c @@ -257,7 +257,7 @@ static int vfio_pci_igd_opregion_init(struct vfio_pci_core_device *vdev) } } - ret = vfio_pci_register_dev_region(vdev, + ret = vfio_pci_core_register_dev_region(vdev, PCI_VENDOR_ID_INTEL | VFIO_REGION_TYPE_PCI_VENDOR_TYPE, VFIO_REGION_SUBTYPE_INTEL_IGD_OPREGION, &vfio_pci_igd_regops, size, VFIO_REGION_INFO_FLAG_READ, opregionvbt); @@ -402,7 +402,7 @@ static int vfio_pci_igd_cfg_init(struct vfio_pci_core_device *vdev) return -EINVAL; } - ret = vfio_pci_register_dev_region(vdev, + ret = vfio_pci_core_register_dev_region(vdev, PCI_VENDOR_ID_INTEL | VFIO_REGION_TYPE_PCI_VENDOR_TYPE, VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG, &vfio_pci_igd_cfg_regops, host_bridge->cfg_size, @@ -422,7 +422,7 @@ static int vfio_pci_igd_cfg_init(struct vfio_pci_core_device *vdev) return -EINVAL; } - ret = vfio_pci_register_dev_region(vdev, + ret = vfio_pci_core_register_dev_region(vdev, PCI_VENDOR_ID_INTEL | VFIO_REGION_TYPE_PCI_VENDOR_TYPE, VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG, &vfio_pci_igd_cfg_regops, lpc_bridge->cfg_size, diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h index 9d18b832e61a0d..e5cf0d3313a694 100644 --- a/include/linux/vfio_pci_core.h +++ b/include/linux/vfio_pci_core.h @@ -96,10 +96,10 @@ struct vfio_pci_core_device { }; /* Will be exported for vfio pci drivers usage */ -int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, - unsigned int type, unsigned int subtype, - const struct vfio_pci_regops *ops, - size_t size, u32 flags, void *data); +int vfio_pci_core_register_dev_region(struct vfio_pci_core_device *vdev, + unsigned int type, unsigned int subtype, + const struct vfio_pci_regops *ops, + size_t size, u32 flags, void *data); void vfio_pci_core_set_params(bool nointxmask, bool is_disable_vga, bool is_disable_idle_d3); void vfio_pci_core_close_device(struct vfio_device *core_vdev); From patchwork Fri Aug 26 19:34:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 12956569 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 9C813ECAAD7 for ; Fri, 26 Aug 2022 19:34:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242903AbiHZTeM (ORCPT ); Fri, 26 Aug 2022 15:34:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36366 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229704AbiHZTeL (ORCPT ); Fri, 26 Aug 2022 15:34:11 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2085.outbound.protection.outlook.com [40.107.92.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 777E6E0FCC; Fri, 26 Aug 2022 12:34:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bzjDI7GWdAAuDdQWCvKVLYOLGVqdYl1L0YzUgPN79txC0c65Q7SaHGX5lcKKjtf8NGQB1x2/qh17FpCrrtcHP5QhDOU92hX9t9dY9E6sk9euF5AXS+M3iC/xIXHsjP2TCZ9nxCDdsU17YzR6hDpzTx0xDV9o1vhjDBJ46AWKMDbrtnVmh/QpQO/yxaWB+TjDho4gbncqbRGovaqp0aNr/cfZHQ2PC12pGkCC/teyo7OgybLZroCMWhXvx1mDhwqrwt/CM1BzK+TNQONaunUAtrxHyWoB+iTXyuALo19HBVSZBi8nt235aPpWSOvtiHGPzihwzJb3XYXIyoroNsw21w== 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=IU8HuPyqfzgR7AoVDXAl4Gb7oZdqhbQX6tOkCRoUKao=; b=fmYEhz0Xu4HBhZOxc3rqtIhE0zSJvMgZNON4DNjcgR+1sZ79LlT59cc5l3TEYkasYh4DNdwOSS65QI+/LxKfrzIEHnAOC0AfXe5WfQ+dvLsn6aGOATISNWI397s1coHFTJ2cUqqmbXOPCz8ym0gw18tcqgoTNQQzUbRiOy7yrckRXO+OUtKte4ghFRlcPkSbS2yt2mUv9VS/CSetBloPocWwR1Ra55KsNLkpfseQLRGeZAFOcshc/jzhcNo96Ri+66jODXhBCTZRcNpaJr5PXsjrWkmSzBDWFMho+TAV1s9x4C+ndoJW2ptuzT19NXx2qPUUwXt63sCxF9Ho7P/yIA== 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=IU8HuPyqfzgR7AoVDXAl4Gb7oZdqhbQX6tOkCRoUKao=; b=F3XF9YUjV32OdbwZge460zBw7L8wL71PTbKvGIgM/KX5eehncZUEZ5t3pJeTsjJRuNNvgvuJY6aaPklv9W5BgUS2TROLnv20gyD8uPvmrrR0W1AJKcb35paxRgwBogtWojtoYWWf7q6VPQwDOdDTyJeU3462UflADMNSqklYln5OXgUIBo6dxDe9jaA2fxj1n5qLD9SlNn4hQCjtfdBgUcBgSOlFy5lNN7sXCZgYL3QNaqUOYuxNVAt7HDTv5zFUELfdOGmKX0dkALiOV077vkmLvht20u0QFvqw2TQLtAlfUjBH8ao3ZvS58hVO6PvcnexaFqbNh+YKv0AHCi4kvQ== 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 DM5PR12MB1803.namprd12.prod.outlook.com (2603:10b6:3:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.14; Fri, 26 Aug 2022 19:34:04 +0000 Received: from MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5]) by MN2PR12MB4192.namprd12.prod.outlook.com ([fe80::462:7fe:f04f:d0d5%8]) with mapi id 15.20.5566.016; Fri, 26 Aug 2022 19:34:04 +0000 From: Jason Gunthorpe To: Alex Williamson , Cornelia Huck , Eric Farman , kvm@vger.kernel.org, linux-s390@vger.kernel.org, Matthew Rosato Cc: Kevin Tian Subject: [PATCH v2 3/3] vfio/pci: Simplify the is_intx/msi/msix/etc defines Date: Fri, 26 Aug 2022 16:34:03 -0300 Message-Id: <3-v2-1bd95d72f298+e0e-vfio_pci_priv_jgg@nvidia.com> In-Reply-To: <0-v2-1bd95d72f298+e0e-vfio_pci_priv_jgg@nvidia.com> References: X-ClientProxiedBy: MN2PR16CA0060.namprd16.prod.outlook.com (2603:10b6:208:234::29) 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: d4870a5e-e7a1-4528-1d7c-08da8799ef3d X-MS-TrafficTypeDiagnostic: DM5PR12MB1803:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JVddwLyqytG3oESlP6dN/hOcWoTTTw1SzTMTQD/COTxB6kAX7GvGneu7iUCKOImLmrNVHPN4AFcrayPm1hCBJ9i2SIWCm0BXsxmUZM1dpTusKPaXql8K3TvedpRyKIcbEsQS4YyRwiFo/IXWjEYl0F6theirSwKiquHVVpUHzX66kDeZjqbS48cU1hB9OSRCRnUui35zCtgVIZGkw6KKStWi9ozEK0XquIoPgYHud9qhMkzuvoo1Hq2PsdDeQWSujbdstFRsoXj/YeRmlywXALSKmOlSy5UwR2IqYYiXSUD11xU2qTCPPjldHmsNGfxiAaYFn/Tp8HMHt33dLlV1z6usgpO8YbV7VPmKA2cQkdmj1J+WPodw9I0E1h7lUmE1q9OWEDcXnrlch3OkJ2Rahg/dno/juexfujJ7FmxUf/PhEmNDZPu90WtpzrG3ZfL8OjcM6QGrLwch0A5P4tur7xD0qcgtzyMd7rG6zmO4bgZ1job5cJztiBCW7Asm2oa3r3vAQakjbLmkpiTalv9l7RzMwYA3lfB5ep1oDIHp+30+bzGbUn96zT7EqDRUshnS8WIRqlDXxUOLTokVnYWSHqBgAEKiY95N3pc8xVRTVS4jfpakQdyP3vsrp5pnsjV7VqZNI5ly6l4GEEEWTdSsjjM6+J0qNZa5N2OnbiasqU5CXyCoiqabQZoQYwTZttOeV8AO0qhQEtWO4PPMX18+/ycML5GGHZPYa2e/mAKTghKJ5AUC3d3U5MBWzcjyAlYj 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)(346002)(136003)(376002)(366004)(396003)(39860400002)(8936002)(83380400001)(2906002)(478600001)(2616005)(6486002)(5660300002)(36756003)(66476007)(316002)(38100700002)(8676002)(66556008)(86362001)(110136005)(6512007)(186003)(41300700001)(26005)(66946007)(6506007)(4326008)(4216001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: C/QjM0u0PzO3wDz11U5MfCoFfonV1IQh2IRcWaqAo/qABRIV1nfkpNJWkSsqi47L6jkhiQDvfJ+34FgVLF2Ej+wWEaY8bh2ja/hmpfBn8c66UA9KMl2U/VSyt2H2Sh2jXwyS27PuBivdgR0iU9eZfWhELUoWGkAiyNw492kA3oMHo86v6pgaN3uW3kQC9oKaxjAqqs1RUVmWE/kvoycnejJYoyi1IAXJlPAIH6tehztDEsSUnn3RxQcD/i2HEk735rayt96vzRar+klbFQ9SIp/ztlLFynG77r2pUpVuLP34anbjCQQJn4UUtQtkldrtit/jEEb+sfUPsxQuNi7DAdbrvdNXWQXZ0sO6F83i8VkpgfZcoy0NaCw8RiF0eTZhp0XKrHTBIRlhXh1CZ8JUhljRxF0SBdJ0tHd8CnuoLqtPvsz7T4ZbBYxiIFOrDJ2g/dltBNNxjxsYFEd6lMwiTXmM5+s4Xwx8aNLL+lO2tNzje/swQHbPZZYipN71biei+L/LKR1uoKDvxozDxBINNEal95PdQXsbitJrFETeZfQtkW1PClgBABvJKVYvaCFQ3BKaSK1Xzr/sUDPE+EbfzxyzOm8AjvxB20cF6v2BVj2Uh0AAO8To+XJVB++LqL5Q3nHPEzb7Edz8okpWfpqTqS0m8yUvIWK3KZrLa2vESHvtTAahhPh8F+ywM74vfOLMyMwDCVmMl9DGDF9I6+8MRpcW9mfwTbPaLFiOYpVPePtPe7nYUlP3UvWCu08bNO+PcqmK4EIP9BC7ynm/EVEwQ8XcsCi0r+dJa0zzRWQ0dgKq6X6CCnxg7tCcMDFjcnbZvlASVL4Za7q8UXgNh17FO0SiwgN1SraZN5wjBkNIx/fObT+bw5m88Arb3YXlvP2l5WKsmWZ5Y23jkZfVnq/ahaTe4gBX/xyJtq95VeSVfJJoA5Y73xg7HoP63H85KRxJFT38NlL+KmVlcn4q5CzXTnFsfE1AFTBB4fzKu2DWCrCo7KCWarESVgNGqyayccRcCLlBpg/8iiVyQk/TeUDatsXWc9g9DLqg/RJDi7gfblaRSSBZwgKVdLetuv4oZrFtLZ1MRip7VHWCnXz4w5ysuQgl7Yt8PQRAfe+/tVz1mhji78fF6rOOR3VNg18pJVbkdxZlnfbOSL5OOeDSU1aWnk/FByD5MMwSNFn95c5KN+UlxYfIK88/BwxeiaXwWNGb6oJpwodVFNcXqgyDTTqv3KoR5sNTswgyxUb5rLTOfN7GNIL5CyhehOeuNUjizAs0yP6crxvJmg5aj/TkrYXN3nZ6uaAfkY9oRGwm01y3kEIwL8jYmFXhz8maMY5GC+P12tgfykLWvT01T4T8qU3w3MFaAYFldbqdilLyxNa5k7g2uuQQtnUicY3vFrs4PyMoIzLZaAy9IgAeur0xJlOflGmH+u+iukpMVhQIc4j9BTZx/v3zPiPzP/MR3BhBaFD+33DsbXT13toMgvPmr5yLNog9ZJNd85C+bNh6YGDR9PHu329i5mkA7Wla7jQLuv86vvNduTFtM8SeK2b96ZO75P09t302SfpRBrFcZqHSAy9HKmCNeCVf1oUUh8mucInU X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d4870a5e-e7a1-4528-1d7c-08da8799ef3d X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4192.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2022 19:34:04.1739 (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: t+tBDBYP1Iunb73sYXD8maCmUDc1DScm+4QbuctQ22mgsEoVSfxF5IedbbXd9oHY X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1803 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Only three of these are actually used, simplify to three inline functions, and open code the if statement in vfio_pci_config.c. Reviewed-by: Kevin Tian Signed-off-by: Jason Gunthorpe Reviewed-by: Cornelia Huck --- drivers/vfio/pci/vfio_pci_config.c | 2 +- drivers/vfio/pci/vfio_pci_intrs.c | 22 +++++++++++++++++----- drivers/vfio/pci/vfio_pci_priv.h | 2 -- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c index 5f43b28075eecd..4a350421c5f62a 100644 --- a/drivers/vfio/pci/vfio_pci_config.c +++ b/drivers/vfio/pci/vfio_pci_config.c @@ -1166,7 +1166,7 @@ static int vfio_msi_config_write(struct vfio_pci_core_device *vdev, int pos, flags = le16_to_cpu(*pflags); /* MSI is enabled via ioctl */ - if (!is_msi(vdev)) + if (vdev->irq_type != VFIO_PCI_MSI_IRQ_INDEX) flags &= ~PCI_MSI_FLAGS_ENABLE; /* Check queue size */ diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c index 32d014421c1f61..8cb987ef3c4763 100644 --- a/drivers/vfio/pci/vfio_pci_intrs.c +++ b/drivers/vfio/pci/vfio_pci_intrs.c @@ -22,11 +22,6 @@ #include "vfio_pci_priv.h" -#define is_intx(vdev) (vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX) -#define is_msix(vdev) (vdev->irq_type == VFIO_PCI_MSIX_IRQ_INDEX) -#define is_irq_none(vdev) (!(is_intx(vdev) || is_msi(vdev) || is_msix(vdev))) -#define irq_is(vdev, type) (vdev->irq_type == type) - struct vfio_pci_irq_ctx { struct eventfd_ctx *trigger; struct virqfd *unmask; @@ -36,6 +31,23 @@ struct vfio_pci_irq_ctx { struct irq_bypass_producer producer; }; +static bool irq_is(struct vfio_pci_core_device *vdev, int type) +{ + return vdev->irq_type == type; +} + +static bool is_intx(struct vfio_pci_core_device *vdev) +{ + return vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX; +} + +static bool is_irq_none(struct vfio_pci_core_device *vdev) +{ + return !(vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX || + vdev->irq_type == VFIO_PCI_MSI_IRQ_INDEX || + vdev->irq_type == VFIO_PCI_MSIX_IRQ_INDEX); +} + /* * INTx */ diff --git a/drivers/vfio/pci/vfio_pci_priv.h b/drivers/vfio/pci/vfio_pci_priv.h index ac701f05bef022..4830fb01a1caa2 100644 --- a/drivers/vfio/pci/vfio_pci_priv.h +++ b/drivers/vfio/pci/vfio_pci_priv.h @@ -23,8 +23,6 @@ struct vfio_pci_ioeventfd { bool test_mem; }; -#define is_msi(vdev) (vdev->irq_type == VFIO_PCI_MSI_IRQ_INDEX) - void vfio_pci_intx_mask(struct vfio_pci_core_device *vdev); void vfio_pci_intx_unmask(struct vfio_pci_core_device *vdev);