the following patches apply to KVM-79. however, just now I viewed the code in
KVM-81, and saw the problem remains.

when assigning a pci device to guest os, the qemu can not guarantee the device's
virtual iomem address has the same page offset with the real one.
for example: in native linux, the the starting iomem address for my via-rhine 
nic
is 0x00000000df9fff00, which is not page aligned. But QEMU will emulate this nic
has a page aligned mmio address. This difference will make guest os access the
wrong address when it tries to do mmio.

It seems Han Weidong has disabled QEMU assign this kinds of devices to guest os.
The following patch will remove this constraint.
---
 diff -uNr kvm-79/bios/rombios32.c kvm-79-fixed/bios/rombios32.c
--- kvm-79/bios/rombios32.c 2008-11-12 19:48:01.000000000 +0800
+++ kvm-79-fixed/bios/rombios32.c 2008-12-12 11:38:41.000000000 +0800
@@ -931,7 +931,9 @@
                     paddr = &pci_bios_bigmem_addr;
                 else
                     paddr = &pci_bios_mem_addr;
-                *paddr = (*paddr + size - 1) & ~(size - 1);
+
+   /* To preserve the iomem page offset. --Xiaojian Liu */
+                *paddr = ((*paddr + size - 1) & ~(size - 1)) | (val & 0x0fff);
                 pci_set_io_region_addr(d, i, *paddr);
                 *paddr += size;
             }

Xiaojian Liu


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to