<div dir="ltr"><div class="gmail_extra">Hi,<br><br></div><div class="gmail_extra"><div class="gmail_quote">2013/6/26 Hu Tao <span dir="ltr"><<a href="mailto:hutao@cn.fujitsu.com" target="_blank">hutao@cn.fujitsu.com</a>></span><br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Vasilis Liaskovitis <<a href="mailto:vasilis.liaskovitis@profitbricks.com" target="_blank">vasilis.liaskovitis@profitbricks.com</a>><br>



<br>
Initialize the 32-bit and 64-bit pci starting offsets from values passed in by<br>
the qemu paravirt interface QEMU_CFG_PCI_WINDOW. Qemu calculates the starting<br>
offsets based on initial memory and hotplug-able dimms.<br></blockquote><div><br></div><div>We should drop this patch and the corresponding seabios patch since Michael Tsirkin's pci-window patches are merged or will be soon.<br>

See<br>"pc: pass PCI hole ranges to Guests" - already in qemu master<br></div><div>"pci: load memory window setup from host" (should go into seabios)<br></div><div><br></div><div>thanks,<br><br></div>
<div>
- Vasilis<br><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
It's possible to avoid the new paravirt interface, and calculate pci ranges from<br>
srat entries. But the code changes are ugly, see:<br>
<a href="http://lists.gnu.org/archive/html/qemu-devel/2012-09/msg03548.html" target="_blank">http://lists.gnu.org/archive/html/qemu-devel/2012-09/msg03548.html</a><br>
<br>
Signed-off-by: Vasilis Liaskovitis <<a href="mailto:vasilis.liaskovitis@profitbricks.com" target="_blank">vasilis.liaskovitis@profitbricks.com</a>><br>
---<br>
 src/paravirt.c | 7 +++++++<br>
 src/paravirt.h | 1 +<br>
 src/pciinit.c  | 9 +++++++++<br>
 3 files changed, 17 insertions(+)<br>
<br>
diff --git a/src/paravirt.c b/src/paravirt.c<br>
index 5925c63..9c1e511 100644<br>
--- a/src/paravirt.c<br>
+++ b/src/paravirt.c<br>
@@ -134,6 +134,7 @@ qemu_platform_setup(void)<br>
 #define QEMU_CFG_BOOT_MENU              0x0e<br>
 #define QEMU_CFG_MAX_CPUS               0x0f<br>
 #define QEMU_CFG_FILE_DIR               0x19<br>
+#define QEMU_CFG_PCI_WINDOW             0x1a<br>
 #define QEMU_CFG_ARCH_LOCAL             0x8000<br>
 #define QEMU_CFG_ACPI_TABLES            (QEMU_CFG_ARCH_LOCAL + 0)<br>
 #define QEMU_CFG_SMBIOS_ENTRIES         (QEMU_CFG_ARCH_LOCAL + 1)<br>
@@ -339,3 +340,9 @@ void qemu_cfg_init(void)<br>
                          , 0, be32_to_cpu(qfile.size));<br>
     }<br>
 }<br>
+<br>
+void qemu_cfg_get_pci_offsets(u64 *pcimem_start, u64 *pcimem64_start)<br>
+{<br>
+    qemu_cfg_read_entry(pcimem_start, QEMU_CFG_PCI_WINDOW, sizeof(u64));<br>
+    qemu_cfg_read((u8*)(pcimem64_start), sizeof(u64));<br>
+}<br>
diff --git a/src/paravirt.h b/src/paravirt.h<br>
index fce5af9..2c37d0d 100644<br>
--- a/src/paravirt.h<br>
+++ b/src/paravirt.h<br>
@@ -27,5 +27,6 @@ static inline int runningOnKVM(void) {<br>
 void qemu_preinit(void);<br>
 void qemu_platform_setup(void);<br>
 void qemu_cfg_init(void);<br>
+void qemu_cfg_get_pci_offsets(u64 *pcimem_start, u64 *pcimem64_start);<br>
<br>
 #endif<br>
diff --git a/src/pciinit.c b/src/pciinit.c<br>
index 8370b96..7e63c5e 100644<br>
--- a/src/pciinit.c<br>
+++ b/src/pciinit.c<br>
@@ -805,6 +805,7 @@ static void pci_bios_map_devices(struct pci_bus *busses)<br>
 void<br>
 pci_setup(void)<br>
 {<br>
+    u64 pv_pcimem_start, pv_pcimem64_start;<br>
     if (!CONFIG_QEMU)<br>
         return;<br>
<br>
@@ -837,6 +838,14 @@ pci_setup(void)<br>
<br>
     pci_bios_init_devices();<br>
<br>
+    /* if qemu gives us other pci window values, it means there are hotplug-able<br>
+     * dimms. Adjust accordingly */<br>
+    qemu_cfg_get_pci_offsets(&pv_pcimem_start, &pv_pcimem64_start);<br>
+    if (pv_pcimem_start > pcimem_start)<br>
+        pcimem_start = pv_pcimem_start;<br>
+    if (pv_pcimem64_start > pcimem64_start)<br>
+        pcimem64_start = pv_pcimem64_start;<br>
+<br>
     free(busses);<br>
<br>
     pci_enable_default_vga();<br>
<span><font color="#888888">--<br>
1.8.3.1<br>
<br>
</font></span></blockquote></div><br></div></div>