Thread (89 messages) 89 messages, 11 authors, 2020-05-13

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help