sles10. Patch pygrub to get the kernel and initrd from the image. pygrub-boot-legacy-sles.patch - bnc#842515 - VUL-0: CVE-2013-4375: XSA-71: xen: qemu disk backend (qdisk) resource leak CVE-2013-4375-xsa71.patch - Upstream patches from Jan 52496bea-x86-properly-handle-hvm_copy_from_guest_-phys-virt-errors.patch (Replaces CVE-2013-4355-xsa63.patch) 52496c11-x86-mm-shadow-Fix-initialization-of-PV-shadow-L4-tables.patch (Replaces CVE-2013-4356-xsa64.patch) 52496c32-x86-properly-set-up-fbld-emulation-operand-address.patch (Replaces CVE-2013-4361-xsa66.patch) 52497c6c-x86-don-t-blindly-create-L3-tables-for-the-direct-map.patch 524e971b-x86-idle-Fix-get_cpu_idle_time-s-interaction-with-offline-pcpus.patch 524e9762-x86-percpu-Force-INVALID_PERCPU_AREA-to-non-canonical.patch 524e983e-Nested-VMX-check-VMX-capability-before-read-VMX-related-MSRs.patch 524e98b1-Nested-VMX-fix-IA32_VMX_CR4_FIXED1-msr-emulation.patch 524e9dc0-xsm-forbid-PV-guest-console-reads.patch 5256a979-x86-check-segment-descriptor-read-result-in-64-bit-OUTS-emulation.patch 5256be57-libxl-fix-vif-rate-parsing.patch 5256be84-tools-ocaml-fix-erroneous-free-of-cpumap-in-stub_xc_vcpu_getaffinity.patch 5256be92-libxl-fix-out-of-memory-error-handling-in-libxl_list_cpupool.patch 5257a89a-x86-correct-LDT-checks.patch 5257a8e7-x86-add-address-validity-check-to-guest_map_l1e.patch 5257a944-x86-check-for-canonical-address-before-doing-page-walks.patch 525b95f4-scheduler-adjust-internal-locking-interface.patch 525b9617-sched-fix-race-between-sched_move_domain-and-vcpu_wake.patch 525e69e8-credit-unpause-parked-vcpu-before-destroying-it.patch 525faf5e-x86-print-relevant-tail-part-of-filename-for-warnings-and-crashes.patch - bnc#840196 - L3: MTU size on Dom0 gets reset when booting DomU OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=276
117 lines
4.0 KiB
Diff
117 lines
4.0 KiB
Diff
# Commit ca145fe70bad3a25ad54c6ded1ef237e45a2311e
|
|
# Date 2013-09-30 15:28:12 +0200
|
|
# Author Jan Beulich <jbeulich@suse.com>
|
|
# Committer Jan Beulich <jbeulich@suse.com>
|
|
x86: don't blindly create L3 tables for the direct map
|
|
|
|
Now that the direct map area can extend all the way up to almost the
|
|
end of address space, this is wasteful.
|
|
|
|
Also fold two almost redundant messages in SRAT parsing into one.
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
Tested-by: Malcolm Crossley <malcolm.crossley@citrix.com>
|
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|
Acked-by: Keir Fraser <keir@xen.org>
|
|
|
|
--- a/xen/arch/x86/mm.c
|
|
+++ b/xen/arch/x86/mm.c
|
|
@@ -137,7 +137,7 @@ l1_pgentry_t __attribute__ ((__section__
|
|
#define PTE_UPDATE_WITH_CMPXCHG
|
|
#endif
|
|
|
|
-bool_t __read_mostly mem_hotplug = 0;
|
|
+paddr_t __read_mostly mem_hotplug;
|
|
|
|
/* Private domain structs for DOMID_XEN and DOMID_IO. */
|
|
struct domain *dom_xen, *dom_io, *dom_cow;
|
|
--- a/xen/arch/x86/srat.c
|
|
+++ b/xen/arch/x86/srat.c
|
|
@@ -113,6 +113,7 @@ static __init void bad_srat(void)
|
|
apicid_to_node[i] = NUMA_NO_NODE;
|
|
for (i = 0; i < ARRAY_SIZE(pxm2node); i++)
|
|
pxm2node[i] = NUMA_NO_NODE;
|
|
+ mem_hotplug = 0;
|
|
}
|
|
|
|
/*
|
|
@@ -257,13 +258,6 @@ acpi_numa_memory_affinity_init(struct ac
|
|
return;
|
|
}
|
|
/* It is fine to add this area to the nodes data it will be used later*/
|
|
- if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)
|
|
- {
|
|
- printk(KERN_INFO "SRAT: hot plug zone found %"PRIx64" - %"PRIx64" \n",
|
|
- start, end);
|
|
- mem_hotplug = 1;
|
|
- }
|
|
-
|
|
i = conflicting_memblks(start, end);
|
|
if (i == node) {
|
|
printk(KERN_WARNING
|
|
@@ -287,8 +281,11 @@ acpi_numa_memory_affinity_init(struct ac
|
|
if (nd->end < end)
|
|
nd->end = end;
|
|
}
|
|
- printk(KERN_INFO "SRAT: Node %u PXM %u %"PRIx64"-%"PRIx64"\n", node, pxm,
|
|
- start, end);
|
|
+ if ((ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) && end > mem_hotplug)
|
|
+ mem_hotplug = end;
|
|
+ printk(KERN_INFO "SRAT: Node %u PXM %u %"PRIx64"-%"PRIx64"%s\n",
|
|
+ node, pxm, start, end,
|
|
+ ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE ? " (hotplug)" : "");
|
|
|
|
node_memblk_range[num_node_memblks].start = start;
|
|
node_memblk_range[num_node_memblks].end = end;
|
|
--- a/xen/arch/x86/x86_64/mm.c
|
|
+++ b/xen/arch/x86/x86_64/mm.c
|
|
@@ -621,25 +621,20 @@ void __init paging_init(void)
|
|
* We setup the L3s for 1:1 mapping if host support memory hotplug
|
|
* to avoid sync the 1:1 mapping on page fault handler
|
|
*/
|
|
- if ( mem_hotplug )
|
|
+ for ( va = DIRECTMAP_VIRT_START;
|
|
+ va < DIRECTMAP_VIRT_END && (void *)va < __va(mem_hotplug);
|
|
+ va += (1UL << L4_PAGETABLE_SHIFT) )
|
|
{
|
|
- unsigned long va;
|
|
-
|
|
- for ( va = DIRECTMAP_VIRT_START;
|
|
- va < DIRECTMAP_VIRT_END;
|
|
- va += (1UL << L4_PAGETABLE_SHIFT) )
|
|
+ if ( !(l4e_get_flags(idle_pg_table[l4_table_offset(va)]) &
|
|
+ _PAGE_PRESENT) )
|
|
{
|
|
- if ( !(l4e_get_flags(idle_pg_table[l4_table_offset(va)]) &
|
|
- _PAGE_PRESENT) )
|
|
- {
|
|
- l3_pg = alloc_domheap_page(NULL, 0);
|
|
- if ( !l3_pg )
|
|
- goto nomem;
|
|
- l3_ro_mpt = page_to_virt(l3_pg);
|
|
- clear_page(l3_ro_mpt);
|
|
- l4e_write(&idle_pg_table[l4_table_offset(va)],
|
|
- l4e_from_page(l3_pg, __PAGE_HYPERVISOR));
|
|
- }
|
|
+ l3_pg = alloc_domheap_page(NULL, 0);
|
|
+ if ( !l3_pg )
|
|
+ goto nomem;
|
|
+ l3_ro_mpt = page_to_virt(l3_pg);
|
|
+ clear_page(l3_ro_mpt);
|
|
+ l4e_write(&idle_pg_table[l4_table_offset(va)],
|
|
+ l4e_from_page(l3_pg, __PAGE_HYPERVISOR));
|
|
}
|
|
}
|
|
|
|
--- a/xen/include/asm-x86/mm.h
|
|
+++ b/xen/include/asm-x86/mm.h
|
|
@@ -399,7 +399,7 @@ static inline int get_page_and_type(stru
|
|
int check_descriptor(const struct domain *, struct desc_struct *d);
|
|
|
|
extern bool_t opt_allow_superpage;
|
|
-extern bool_t mem_hotplug;
|
|
+extern paddr_t mem_hotplug;
|
|
|
|
/******************************************************************************
|
|
* With shadow pagetables, the different kinds of address start
|