lkml.org 
[lkml]   [2022]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v3 3/4] PCI: Extend isolated function probing to s390
Date
Like the jailhouse hypervisor s390's PCI architecture allows passing
isolated PCI functions to an OS instance. As of now this is was not
utilized even with multi-function support as the s390 PCI code makes
sure that only virtual PCI busses including a function with devfn 0 are
presented to the PCI subsystem. A subsequent change will remove this
restriction.

Allow probing such functions by replacing the existing check for
jailhouse_paravirt() with a new hypervisor_isolated_pci_functions()
helper.

Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
---
drivers/pci/probe.c | 8 ++++----
include/linux/hypervisor.h | 9 +++++++++
2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index a1e8f1e14c3d..09b46746d48e 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2602,11 +2602,11 @@ static int next_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
if (dev && !dev->multifunction)
return -ENODEV;
/*
- * Usually a function 0 is required but the jailhouse hypervisor may
- * pass individual functions. For non-contiguous multifunction devices
- * some functions may also be missing.
+ * Usually a function 0 is required but some hypervisors may pass
+ * individual functions. For non-contiguous multifunction devices some
+ * functions may also be missing.
*/
- if (!fn && !dev && !jailhouse_paravirt())
+ if (!fn && !dev && !hypervisor_isolated_pci_functions())
return -ENODEV;
return (fn <= 6) ? fn + 1 : -ENODEV;
}
diff --git a/include/linux/hypervisor.h b/include/linux/hypervisor.h
index fc08b433c856..52abd459f9a3 100644
--- a/include/linux/hypervisor.h
+++ b/include/linux/hypervisor.h
@@ -32,4 +32,13 @@ static inline bool jailhouse_paravirt(void)

#endif /* !CONFIG_X86 */

+static inline bool hypervisor_isolated_pci_functions(void)
+{
+ if (IS_ENABLED(CONFIG_S390))
+ return true;
+ else
+ return jailhouse_paravirt();
+}
+
+
#endif /* __LINUX_HYPEVISOR_H */
--
2.32.0
\
 
 \ /
  Last update: 2022-04-19 12:30    [W:0.383 / U:0.040 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site