|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.4] x86: restore reserving of IO-APIC pages in XENMEM_machine_memory_map output
commit d1cb4abdfb53e471bd019757c6e683e444bf7dd9
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri Oct 17 15:55:27 2014 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Oct 17 15:55:27 2014 +0200
x86: restore reserving of IO-APIC pages in XENMEM_machine_memory_map output
Commit d1222afda4 ("x86: allow Dom0 read-only access to IO-APICs") had
an unintended side effect: By no longer adding IO-APIC pages to Dom0's
iomem_caps these also no longer get reported as reserved in the machine
memory map presented to it (which got added there intentionally by
commit b8a456caed ["x86: improve reporting through
XENMEM_machine_memory_map"] because many BIOSes fail to add these).
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Tim Deegan <tim@xxxxxxx>
master commit: 9d8edc5a8b4a0937193f80da72abdb44c5aeaec6
master date: 2014-10-06 11:13:19 +0200
---
xen/arch/x86/mm.c | 33 +++++++++++++++++++++++++++++----
1 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index fdc5ed3..486e520 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -121,6 +121,7 @@
#include <xen/trace.h>
#include <asm/setup.h>
#include <asm/fixmap.h>
+#include <asm/io_apic.h>
#include <asm/pci.h>
/* Mapping of the fixmap space needed early. */
@@ -4494,10 +4495,9 @@ struct memory_map_context
struct xen_memory_map map;
};
-static int handle_iomem_range(unsigned long s, unsigned long e, void *p)
+static int _handle_iomem_range(unsigned long s, unsigned long e,
+ struct memory_map_context *ctxt)
{
- struct memory_map_context *ctxt = p;
-
if ( s > ctxt->s )
{
e820entry_t ent;
@@ -4520,6 +4520,31 @@ static int handle_iomem_range(unsigned long s, unsigned
long e, void *p)
return 0;
}
+static int handle_iomem_range(unsigned long s, unsigned long e, void *p)
+{
+ int err = 0;
+
+ do {
+ unsigned long low = -1UL;
+ unsigned int i;
+
+ for ( i = 0; i < nr_ioapics; ++i )
+ {
+ unsigned long mfn = paddr_to_pfn(mp_ioapics[i].mpc_apicaddr);
+
+ if ( mfn >= s && mfn <= e && mfn < low )
+ low = mfn;
+ }
+ if ( !(low + 1) )
+ break;
+ if ( s < low )
+ err = _handle_iomem_range(s, low - 1, p);
+ s = low + 1;
+ } while ( !err );
+
+ return err || s > e ? err : _handle_iomem_range(s, e, p);
+}
+
int xenmem_add_to_physmap_one(
struct domain *d,
unsigned int space,
@@ -4744,7 +4769,7 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void)
arg)
{
unsigned long s = PFN_DOWN(e820.map[i].addr);
- if ( s )
+ if ( s > ctxt.s )
{
rc = rangeset_report_ranges(current->domain->iomem_caps,
ctxt.s, s - 1,
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.4
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |