Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 3160499aacb81f6735941eb4c372d87a > files > 234

kvm-83-164.el5_5.30.src.rpm

From 569386365754757ca526f36634c89f1584b7586a Mon Sep 17 00:00:00 2001
From: Weidong Han <weidong.han@intel.com>
Date: Thu, 19 Feb 2009 17:24:20 +0800
Subject: [PATCH 1/3] kvm: bios: make MMIO address page aligned in guest

MMIO of some devices are not page aligned, such as some EHCI
controllers and virtual Realtek NIC in guest. Current guest
bios doesn't guarantee the start address of MMIO page aligned.
This may result in failure of device assignment, because KVM
only allow to register page aligned memory slots. For example,
it fails to assign EHCI controller (its MMIO size is 1KB) with
virtual Realtek NIC (its MMIO size is 256Bytes), because MMIO
of virtual Realtek NIC in guest starts from 0xf2001000, MMIO of
the EHCI controller will starts from 0xf2001400.

MMIO addresses in guest are allocated in guest bios. This patch
makes MMIO address page aligned in bios, then fixes the issue.

Signed-off-by: Weidong Han <weidong.han@intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
RH-Upstream-status: applied(kvm/master)
Bugzilla: 488732
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
Acked-by: Andrea Arcangeli <aarcange@redhat.com>
---
 bios/rombios32.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/bios/rombios32.c b/bios/rombios32.c
index 45c8616..3bab298 100755
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -990,6 +990,9 @@ static void pci_bios_init_device(PCIDevice *d)
                 *paddr = (*paddr + size - 1) & ~(size - 1);
                 pci_set_io_region_addr(d, i, *paddr);
                 *paddr += size;
+                /* make memory address page aligned */
+                if (!(val & PCI_ADDRESS_SPACE_IO))
+                    *paddr = (*paddr + 0xfff) & 0xfffff000;
             }
         }
         break;
-- 
1.6.1