From patchwork Tue Jan 26 13:12:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Auger Eric X-Patchwork-Id: 60457 Delivered-To: patches@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp1949157lbb; Tue, 26 Jan 2016 05:13:45 -0800 (PST) X-Received: by 10.194.104.38 with SMTP id gb6mr26677792wjb.22.1453814020726; Tue, 26 Jan 2016 05:13:40 -0800 (PST) Return-Path: Received: from mail-wm0-x232.google.com (mail-wm0-x232.google.com. [2a00:1450:400c:c09::232]) by mx.google.com with ESMTPS id kc6si1766473wjb.84.2016.01.26.05.13.39 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Jan 2016 05:13:40 -0800 (PST) Received-SPF: pass (google.com: domain of eric.auger@linaro.org designates 2a00:1450:400c:c09::232 as permitted sender) client-ip=2a00:1450:400c:c09::232; Authentication-Results: mx.google.com; spf=pass (google.com: domain of eric.auger@linaro.org designates 2a00:1450:400c:c09::232 as permitted sender) smtp.mailfrom=eric.auger@linaro.org; dkim=pass header.i=@linaro.org Received: by mail-wm0-x232.google.com with SMTP id b14so129664959wmb.1 for ; Tue, 26 Jan 2016 05:13:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=df2qfvoPiG1QMRD2EnJ4P7XYhF24Rpht/SAlzJm5Nq4=; b=Xb53UEaIvJARiDr41r3v2X9nT0wYoLap3JqYptYWstKSUussp4bfAAW8ECxY9cNOho d1TQofb3KNBxfjpQx9v6YtbKtyMZPFP2EFHSnRbTkiZmw1yfm0D6gcohbSDGNfyjOJ3+ I4+8mYL2iB30VbthlVC2aKu8tDQKShz3gx8VY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=df2qfvoPiG1QMRD2EnJ4P7XYhF24Rpht/SAlzJm5Nq4=; b=H7qVq7/3x0IxtvKzClmF/H0xsXQQS5l7aHVcjankuajWjgcZx0WiOw0VJ00sRS2nbh SbNCnMZOW3mw+w2Vei/zmUTHKQVUCf00SO7TOPtSczGQl0ke54FSBQiGESIHF/gqx04/ yh8KQ+SnkoXSnWOC7xZCAylqlyGQJEIP2GtPXH5j3aiGREmG4Xd0BCPJyolMFUnqryFL ICWRfO1FUa61Z5ni7idlU473x4xdgDX5+GLEpkrakG1ki5C8fF4WGWJyAbkApiKX6yxJ xTzjX7HJVhvtaDsDqJsyiqBdje1KtpOPIhGNsdDWWgCOzv77vja1jhTGvxDiZD1eOk2a 1wIw== X-Gm-Message-State: AG10YORf9M5iwD3qci6N1wKBEKivdODTjsoPBdYlKc3+SpLW2Dn4AP2xd/p5Gta4wscl/YQ/qTE= X-Received: by 10.194.161.166 with SMTP id xt6mr25162538wjb.98.1453814019768; Tue, 26 Jan 2016 05:13:39 -0800 (PST) Return-Path: Received: from localhost.localdomain (LMontsouris-657-1-37-90.w80-11.abo.wanadoo.fr. [80.11.198.90]) by smtp.gmail.com with ESMTPSA id ct2sm1388885wjb.46.2016.01.26.05.13.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 26 Jan 2016 05:13:38 -0800 (PST) From: Eric Auger To: eric.auger@st.com, eric.auger@linaro.org, alex.williamson@redhat.com, will.deacon@arm.com, christoffer.dall@linaro.org, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org Cc: Bharat.Bhushan@freescale.com, pranav.sawargaonkar@gmail.com, p.fedin@samsung.com, suravee.suthikulpanit@amd.com, linux-kernel@vger.kernel.org, patches@linaro.org, iommu@lists.linux-foundation.org Subject: [PATCH 07/10] vfio: pci: cache the vfio_group in vfio_pci_device Date: Tue, 26 Jan 2016 13:12:45 +0000 Message-Id: <1453813968-2024-8-git-send-email-eric.auger@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1453813968-2024-1-git-send-email-eric.auger@linaro.org> References: <1453813968-2024-1-git-send-email-eric.auger@linaro.org> Add a new set_group operation which allows to cache the vfio_group handle within the vfio_pci_device struct. This is useful to do iommu operations from the vfio_pci device. Signed-off-by: Eric Auger --- drivers/vfio/pci/vfio_pci.c | 8 ++++++++ drivers/vfio/pci/vfio_pci_private.h | 1 + drivers/vfio/vfio.c | 3 +++ include/linux/vfio.h | 3 +++ 4 files changed, 15 insertions(+) -- 1.9.1 diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c index 2760a7b..2a32856 100644 --- a/drivers/vfio/pci/vfio_pci.c +++ b/drivers/vfio/pci/vfio_pci.c @@ -920,6 +920,13 @@ static void vfio_pci_request(void *device_data, unsigned int count) mutex_unlock(&vdev->igate); } +static void vfio_pci_set_group(void *device_data, struct vfio_group *group) +{ + struct vfio_pci_device *vdev = device_data; + + vdev->vfio_group = group; +} + static const struct vfio_device_ops vfio_pci_ops = { .name = "vfio-pci", .open = vfio_pci_open, @@ -929,6 +936,7 @@ static const struct vfio_device_ops vfio_pci_ops = { .write = vfio_pci_write, .mmap = vfio_pci_mmap, .request = vfio_pci_request, + .set_group = vfio_pci_set_group, }; static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h index 0e7394f..2893b10 100644 --- a/drivers/vfio/pci/vfio_pci_private.h +++ b/drivers/vfio/pci/vfio_pci_private.h @@ -35,6 +35,7 @@ struct vfio_pci_irq_ctx { struct vfio_pci_device { struct pci_dev *pdev; + struct vfio_group *vfio_group; void __iomem *barmap[PCI_STD_RESOURCE_END + 1]; u8 *pci_config_map; u8 *vconfig; diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c index 3d9de00..2760d4c 100644 --- a/drivers/vfio/vfio.c +++ b/drivers/vfio/vfio.c @@ -548,6 +548,9 @@ struct vfio_device *vfio_group_create_device(struct vfio_group *group, /* No need to get group_lock, caller has group reference */ vfio_group_get(group); + if (device->ops->set_group) + device->ops->set_group(device_data, group); + mutex_lock(&group->device_lock); list_add(&device->group_next, &group->device_list); mutex_unlock(&group->device_lock); diff --git a/include/linux/vfio.h b/include/linux/vfio.h index 0020f81..f7eaf30 100644 --- a/include/linux/vfio.h +++ b/include/linux/vfio.h @@ -18,6 +18,8 @@ #include #include +struct vfio_group; + /** * struct vfio_device_ops - VFIO bus driver device callbacks * @@ -42,6 +44,7 @@ struct vfio_device_ops { unsigned long arg); int (*mmap)(void *device_data, struct vm_area_struct *vma); void (*request)(void *device_data, unsigned int count); + void (*set_group)(void *device_data, struct vfio_group *group); }; extern struct iommu_group *vfio_iommu_group_get(struct device *dev);