xen/pci: add flag for PCI passthrough being possible
authorJuergen Gross <jgross@suse.com>
Mon, 12 Jun 2023 07:57:18 +0000 (09:57 +0200)
committerChristoph Hellwig <hch@lst.de>
Mon, 31 Jul 2023 15:54:27 +0000 (17:54 +0200)
When running as a Xen PV guests passed through PCI devices only have a
chance to work if the Xen supplied memory map has some PCI space
reserved.

Add a flag xen_pv_pci_possible which will be set in early boot in case
the memory map has at least one area with the type E820_TYPE_RESERVED.

Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
arch/x86/xen/setup.c
include/xen/xen.h

index 8b5cf7bb1f47f802eb2da44fb76771b73d9049c3..e6c796a9d499e13667294fc3296f4d345d749897 100644 (file)
@@ -44,6 +44,9 @@ struct xen_memory_region xen_extra_mem[XEN_EXTRA_MEM_MAX_REGIONS] __initdata;
 /* Number of pages released from the initial allocation. */
 unsigned long xen_released_pages;
 
+/* Memory map would allow PCI passthrough. */
+bool xen_pv_pci_possible;
+
 /* E820 map used during setting up memory. */
 static struct e820_table xen_e820_table __initdata;
 
@@ -814,6 +817,9 @@ char * __init xen_memory_setup(void)
                chunk_size = size;
                type = xen_e820_table.entries[i].type;
 
+               if (type == E820_TYPE_RESERVED)
+                       xen_pv_pci_possible = true;
+
                if (type == E820_TYPE_RAM) {
                        if (addr < mem_end) {
                                chunk_size = min(size, mem_end - addr);
index f989162983c34c33ccf6afef63b81cef6e60a36c..a1e5b3f18d69f9d75ca5cc44bbbe462b54200907 100644 (file)
@@ -29,6 +29,12 @@ extern bool xen_pvh;
 
 extern uint32_t xen_start_flags;
 
+#ifdef CONFIG_XEN_PV
+extern bool xen_pv_pci_possible;
+#else
+#define xen_pv_pci_possible    0
+#endif
+
 #include <xen/interface/hvm/start_info.h>
 extern struct hvm_start_info pvh_start_info;
 void xen_prepare_pvh(void);