Re: [PATCH RFC 04/15] drivers/base: Add support for a new IMS irq domain
From: Dey, Megha <hidden>
Date: 2020-05-04 00:25:32
Also in:
kvm, linux-pci, lkml
On 5/3/2020 3:46 PM, Jason Gunthorpe wrote:
On Sun, May 03, 2020 at 03:40:44PM -0700, Dey, Megha wrote:quoted
On 5/3/2020 3:25 PM, Jason Gunthorpe wrote:quoted
On Fri, May 01, 2020 at 03:30:02PM -0700, Dey, Megha wrote:quoted
Hi Jason, On 4/23/2020 1:11 PM, Jason Gunthorpe wrote:quoted
On Tue, Apr 21, 2020 at 04:34:11PM -0700, Dave Jiang wrote:quoted
diff --git a/drivers/base/ims-msi.c b/drivers/base/ims-msi.c new file mode 100644 index 000000000000..738f6d153155 +++ b/drivers/base/ims-msi.c@@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Support for Device Specific IMS interrupts. + * + * Copyright © 2019 Intel Corporation. + * + * Author: Megha Dey <megha.dey@intel.com> + */ + +#include <linux/dmar.h> +#include <linux/irq.h> +#include <linux/mdev.h> +#include <linux/pci.h> + +/* + * Determine if a dev is mdev or not. Return NULL if not mdev device. + * Return mdev's parent dev if success. + */ +static inline struct device *mdev_to_parent(struct device *dev) +{ + struct device *ret = NULL; + struct device *(*fn)(struct device *dev); + struct bus_type *bus = symbol_get(mdev_bus_type); + + if (bus && dev->bus == bus) { + fn = symbol_get(mdev_dev_to_parent_dev); + ret = fn(dev); + symbol_put(mdev_dev_to_parent_dev); + symbol_put(mdev_bus_type);No, things like this are not OK in the drivers/base Whatever this is doing needs to be properly architected in some generic way.Basically what I am trying to do here is to determine if the device is an mdev device or not.Why? mdev devices are virtual they don't have HW elements.Hmm yeah exactly, since they are virtual, they do not have an associated IRQ domain right? So they use the irq domain of the parent device..quoted
The caller should use the concrete pci_device to allocate platform_msi? What is preventing this?hmmm do you mean to say all platform-msi adhere to the rules of a PCI device?I mean where a platform-msi can work should be defined by the arch, and probably is related to things like having an irq_domain attached So, like pci, drivers must only try to do platfor_msi stuff on particular devices. eg on pci_device and platform_device types. Even so it may not even work, but I can't think of any reason why it should be made to work on a virtual device like mdev.quoted
The use case if when we have a device assigned to a guest and we want to allocate IMS(platform-msi) interrupts for that guest-assigned device. Currently, this is abstracted through a mdev interface.And the mdev has the pci_device internally, so it should simply pass that pci_device to the platform_msi machinery.
hmm i am not sure I follow this. mdev has a pci_device internally? which struct are you referring to here? mdev is merely a micropartitioned PCI device right, which no real PCI resource backing. I am not how else we can find the IRQ domain associated with an mdev..
This is no different from something like pci_iomap() which must be used with the pci_device. Jason