[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg
# HG changeset patch # User Isaku Yamahata <yamahata@xxxxxxxxxxxxx> # Date 1218420357 -32400 # Node ID cdd156cb645bc1ea1dce7b1b4ed42e2b4928383d # Parent a18df47f671b66e0d0fe68c28a882a69303a9a55 # Parent 56902bb0ce6dc021e291992543b86c4c81f36b83 merge with linux-2.6.18-xen.hg --- arch/i386/Kconfig | 4 ++-- arch/i386/kernel/setup-xen.c | 21 ++++++++++++++------- arch/i386/kernel/time-xen.c | 11 +++++++++-- arch/x86_64/kernel/e820-xen.c | 21 +++++++++++++++++++++ arch/x86_64/kernel/setup-xen.c | 25 ++++++++++++++++++------- arch/x86_64/mm/init-xen.c | 7 +++++++ drivers/acpi/processor_core.c | 2 ++ drivers/acpi/processor_extcntl.c | 6 ++++++ drivers/char/Kconfig | 2 +- drivers/video/Kconfig | 2 +- drivers/xen/core/machine_reboot.c | 13 ++++--------- drivers/xen/core/pci.c | 10 +++++++--- drivers/xen/pciback/pci_stub.c | 7 +++---- include/asm-x86_64/mach-xen/asm/pgtable.h | 4 ++-- 14 files changed, 97 insertions(+), 38 deletions(-) diff -r a18df47f671b -r cdd156cb645b arch/i386/Kconfig --- a/arch/i386/Kconfig Fri Aug 08 11:39:35 2008 +0900 +++ b/arch/i386/Kconfig Mon Aug 11 11:05:57 2008 +0900 @@ -397,7 +397,7 @@ config I8K config X86_REBOOTFIXUPS bool "Enable X86 board specific fixups for reboot" - depends on X86 + depends on !X86_XEN default n ---help--- This enables chipset and/or board specific fixups to be done @@ -661,7 +661,6 @@ config MTRR config MTRR bool "MTRR (Memory Type Range Register) support" depends on !XEN_UNPRIVILEGED_GUEST - default y if X86_XEN ---help--- On Intel P6 family processors (Pentium Pro, Pentium II and later) the Memory Type Range Registers (MTRRs) may be used to control @@ -781,6 +780,7 @@ config CRASH_DUMP bool "kernel crash dumps (EXPERIMENTAL)" depends on EXPERIMENTAL depends on HIGHMEM + depends on !XEN help Generate crash dump after being started by kexec. diff -r a18df47f671b -r cdd156cb645b arch/i386/kernel/setup-xen.c --- a/arch/i386/kernel/setup-xen.c Fri Aug 08 11:39:35 2008 +0900 +++ b/arch/i386/kernel/setup-xen.c Mon Aug 11 11:05:57 2008 +0900 @@ -405,7 +405,7 @@ EXPORT_SYMBOL(HYPERVISOR_shared_info); EXPORT_SYMBOL(HYPERVISOR_shared_info); unsigned long *phys_to_machine_mapping; -unsigned long *pfn_to_mfn_frame_list_list, *pfn_to_mfn_frame_list[16]; +unsigned long *pfn_to_mfn_frame_list_list, **pfn_to_mfn_frame_list; EXPORT_SYMBOL(phys_to_machine_mapping); /* Raw start-of-day parameters from the hypervisor. */ @@ -831,6 +831,7 @@ static void __init parse_cmdline_early ( } } +#ifndef CONFIG_XEN else if (!memcmp(from, "memmap=", 7)) { if (to != command_line) to--; @@ -872,6 +873,7 @@ static void __init parse_cmdline_early ( } } } +#endif else if (!memcmp(from, "noexec=", 7)) noexec_setup(from + 7); @@ -1617,7 +1619,7 @@ void __init setup_arch(char **cmdline_p) int i, j, k, fpp; struct physdev_set_iopl set_iopl; unsigned long max_low_pfn; - unsigned long p2m_pages; + unsigned long p2m_pages, size; /* Force a quick death if the kernel panics (not domain 0). */ extern int panic_timeout; @@ -1779,11 +1781,11 @@ void __init setup_arch(char **cmdline_p) if (!xen_feature(XENFEAT_auto_translated_physmap)) { phys_to_machine_mapping = alloc_bootmem_low_pages( max_pfn * sizeof(unsigned long)); - memset(phys_to_machine_mapping, ~0, - max_pfn * sizeof(unsigned long)); memcpy(phys_to_machine_mapping, (unsigned long *)xen_start_info->mfn_list, p2m_pages * sizeof(unsigned long)); + memset(phys_to_machine_mapping + p2m_pages, ~0, + (max_pfn - p2m_pages) * sizeof(unsigned long)); free_bootmem( __pa(xen_start_info->mfn_list), PFN_PHYS(PFN_UP(xen_start_info->nr_pages * @@ -1793,13 +1795,18 @@ void __init setup_arch(char **cmdline_p) * Initialise the list of the frames that specify the list of * frames that make up the p2m table. Used by save/restore */ - pfn_to_mfn_frame_list_list = alloc_bootmem_low_pages(PAGE_SIZE); - fpp = PAGE_SIZE/sizeof(unsigned long); + size = (max_pfn + fpp - 1) / fpp; + size = (size + fpp - 1) / fpp; + size *= sizeof(unsigned long); + BUG_ON(size > PAGE_SIZE); + pfn_to_mfn_frame_list_list = alloc_bootmem_low_pages(size); + pfn_to_mfn_frame_list = alloc_bootmem_low(size); + for (i=0, j=0, k=-1; i< max_pfn; i+=fpp, j++) { if ((j % fpp) == 0) { k++; - BUG_ON(k>=16); + BUG_ON(k * sizeof(unsigned long) >= size); pfn_to_mfn_frame_list[k] = alloc_bootmem_low_pages(PAGE_SIZE); pfn_to_mfn_frame_list_list[k] = diff -r a18df47f671b -r cdd156cb645b arch/i386/kernel/time-xen.c --- a/arch/i386/kernel/time-xen.c Fri Aug 08 11:39:35 2008 +0900 +++ b/arch/i386/kernel/time-xen.c Mon Aug 11 11:05:57 2008 +0900 @@ -314,21 +314,28 @@ static void get_time_values_from_xen(uns { struct vcpu_time_info *src; struct shadow_time_info *dst; + unsigned long flags; + u32 pre_version, post_version; src = &vcpu_info(cpu)->time; dst = &per_cpu(shadow_time, cpu); + local_irq_save(flags); + do { - dst->version = src->version; + pre_version = dst->version = src->version; rmb(); dst->tsc_timestamp = src->tsc_timestamp; dst->system_timestamp = src->system_time; dst->tsc_to_nsec_mul = src->tsc_to_system_mul; dst->tsc_shift = src->tsc_shift; rmb(); - } while ((src->version & 1) | (dst->version ^ src->version)); + post_version = src->version; + } while ((pre_version & 1) | (pre_version ^ post_version)); dst->tsc_to_usec_mul = dst->tsc_to_nsec_mul / 1000; + + local_irq_restore(flags); } static inline int time_values_up_to_date(unsigned int cpu) diff -r a18df47f671b -r cdd156cb645b arch/x86_64/kernel/e820-xen.c --- a/arch/x86_64/kernel/e820-xen.c Fri Aug 08 11:39:35 2008 +0900 +++ b/arch/x86_64/kernel/e820-xen.c Mon Aug 11 11:05:57 2008 +0900 @@ -16,6 +16,7 @@ #include <linux/string.h> #include <linux/kexec.h> #include <linux/module.h> +#include <linux/mm.h> #include <asm/pgtable.h> #include <asm/page.h> @@ -703,6 +704,24 @@ void __init parse_memopt(char *p, char * i = e820.nr_map-1; current_end = e820.map[i].addr + e820.map[i].size; + /* + * A little less than 2% of available memory are needed for page + * tables, p2m map, and mem_map. Hence the maximum amount of memory + * we can potentially balloon up to cannot exceed about 50 times + * what we've been given initially. + */ +#define PAGE_OVERHEAD (PAGE_SIZE \ + / (sizeof(pte_t) + sizeof(long) + sizeof(struct page))) + if (end_user_pfn / (PAGE_OVERHEAD - 1) > xen_start_info->nr_pages) { + end = (xen_start_info->nr_pages * (PAGE_OVERHEAD - 1)) + << PAGE_SHIFT; + printk(KERN_WARNING "mem=%lu is invalid for an initial" + " allocation of %lu, using %lu\n", + end_user_pfn << PAGE_SHIFT, + xen_start_info->nr_pages << PAGE_SHIFT, end); + end_user_pfn = end >> PAGE_SHIFT; + } + if (current_end < end) { /* * The e820 map ends before our requested size so @@ -715,6 +734,7 @@ void __init parse_memopt(char *p, char * } } +#ifndef CONFIG_XEN void __init parse_memmapopt(char *p, char **from) { unsigned long long start_at, mem_size; @@ -735,6 +755,7 @@ void __init parse_memmapopt(char *p, cha } p = *from; } +#endif unsigned long pci_mem_start = 0xaeedbabe; EXPORT_SYMBOL(pci_mem_start); diff -r a18df47f671b -r cdd156cb645b arch/x86_64/kernel/setup-xen.c --- a/arch/x86_64/kernel/setup-xen.c Fri Aug 08 11:39:35 2008 +0900 +++ b/arch/x86_64/kernel/setup-xen.c Mon Aug 11 11:05:57 2008 +0900 @@ -97,7 +97,7 @@ static struct notifier_block xen_panic_b }; unsigned long *phys_to_machine_mapping; -unsigned long *pfn_to_mfn_frame_list_list, *pfn_to_mfn_frame_list[512]; +unsigned long *pfn_to_mfn_frame_list_list, **pfn_to_mfn_frame_list; EXPORT_SYMBOL(phys_to_machine_mapping); @@ -419,6 +419,7 @@ static __init void parse_cmdline_early ( if (!memcmp(from, "mem=", 4)) parse_memopt(from+4, &from); +#ifndef CONFIG_XEN if (!memcmp(from, "memmap=", 7)) { /* exactmap option is for used defined memory */ if (!memcmp(from+7, "exactmap", 8)) { @@ -440,6 +441,7 @@ static __init void parse_cmdline_early ( userdef = 1; } } +#endif #ifdef CONFIG_NUMA if (!memcmp(from, "numa=", 5)) @@ -776,7 +778,7 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_XEN { int i, j, k, fpp; - unsigned long p2m_pages; + unsigned long p2m_pages, size; p2m_pages = end_pfn; if (xen_start_info->nr_pages > end_pfn) { @@ -808,11 +810,11 @@ void __init setup_arch(char **cmdline_p) /* Make sure we have a large enough P->M table. */ phys_to_machine_mapping = alloc_bootmem_pages( end_pfn * sizeof(unsigned long)); - memset(phys_to_machine_mapping, ~0, - end_pfn * sizeof(unsigned long)); memcpy(phys_to_machine_mapping, (unsigned long *)xen_start_info->mfn_list, p2m_pages * sizeof(unsigned long)); + memset(phys_to_machine_mapping + p2m_pages, ~0, + (end_pfn - p2m_pages) * sizeof(unsigned long)); free_bootmem( __pa(xen_start_info->mfn_list), PFN_PHYS(PFN_UP(xen_start_info->nr_pages * @@ -823,13 +825,22 @@ void __init setup_arch(char **cmdline_p) * list of frames that make up the p2m table. Used by * save/restore. */ - pfn_to_mfn_frame_list_list = alloc_bootmem_pages(PAGE_SIZE); - fpp = PAGE_SIZE/sizeof(unsigned long); + size = (max_pfn + fpp - 1) / fpp; + size = (size + fpp - 1) / fpp; + size *= sizeof(unsigned long); + pfn_to_mfn_frame_list_list = alloc_bootmem_pages(size); + if (size > PAGE_SIZE + && xen_create_contiguous_region((unsigned long) + pfn_to_mfn_frame_list_list, + get_order(size), 0)) + BUG(); + pfn_to_mfn_frame_list = alloc_bootmem(size); + for (i=0, j=0, k=-1; i< end_pfn; i+=fpp, j++) { if ((j % fpp) == 0) { k++; - BUG_ON(k>=fpp); + BUG_ON(k * sizeof(unsigned long) >= size); pfn_to_mfn_frame_list[k] = alloc_bootmem_pages(PAGE_SIZE); pfn_to_mfn_frame_list_list[k] = diff -r a18df47f671b -r cdd156cb645b arch/x86_64/mm/init-xen.c --- a/arch/x86_64/mm/init-xen.c Fri Aug 08 11:39:35 2008 +0900 +++ b/arch/x86_64/mm/init-xen.c Mon Aug 11 11:05:57 2008 +0900 @@ -610,6 +610,13 @@ static void __init extend_init_mapping(u while (va < (__START_KERNEL_map + (start_pfn << PAGE_SHIFT) + tables_space)) { + if (!pmd_index(va) && !pte_index(va)) { + page = (unsigned long *)init_level4_pgt; + addr = page[pgd_index(va)]; + addr_to_page(addr, page); + addr = page[pud_index(va)]; + addr_to_page(addr, page); + } pmd = (pmd_t *)&page[pmd_index(va)]; if (pmd_none(*pmd)) { pte_page = alloc_static_page(&phys); diff -r a18df47f671b -r cdd156cb645b drivers/acpi/processor_core.c --- a/drivers/acpi/processor_core.c Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/acpi/processor_core.c Mon Aug 11 11:05:57 2008 +0900 @@ -509,7 +509,9 @@ static int acpi_processor_get_info(struc request_region(pr->throttling.address, 6, "ACPI CPU throttle"); } +#if defined(CONFIG_CPU_FREQ) || defined(CONFIG_PROCESSOR_EXTERNAL_CONTROL) acpi_processor_ppc_has_changed(pr); +#endif acpi_processor_get_throttling_info(pr); acpi_processor_get_limit_info(pr); diff -r a18df47f671b -r cdd156cb645b drivers/acpi/processor_extcntl.c --- a/drivers/acpi/processor_extcntl.c Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/acpi/processor_extcntl.c Mon Aug 11 11:05:57 2008 +0900 @@ -29,6 +29,12 @@ #include <linux/cpu.h> #include <acpi/processor.h> + +#define ACPI_PROCESSOR_COMPONENT 0x01000000 +#define ACPI_PROCESSOR_CLASS "processor" +#define ACPI_PROCESSOR_DRIVER_NAME "ACPI Processor Driver" +#define _COMPONENT ACPI_PROCESSOR_COMPONENT +ACPI_MODULE_NAME("acpi_processor") static int processor_extcntl_parse_csd(struct acpi_processor *pr); static int processor_extcntl_get_performance(struct acpi_processor *pr); diff -r a18df47f671b -r cdd156cb645b drivers/char/Kconfig --- a/drivers/char/Kconfig Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/char/Kconfig Mon Aug 11 11:05:57 2008 +0900 @@ -1005,7 +1005,7 @@ config HPET config HPET bool "HPET - High Precision Event Timer" if (X86 || IA64) default n - depends on ACPI + depends on ACPI && !XEN help If you say Y here, you will have a miscdevice named "/dev/hpet/". Each open selects one of the timers supported by the HPET. The timers are diff -r a18df47f671b -r cdd156cb645b drivers/video/Kconfig --- a/drivers/video/Kconfig Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/video/Kconfig Mon Aug 11 11:05:57 2008 +0900 @@ -1254,7 +1254,7 @@ config FB_CYBLA tristate "Cyberblade/i1 support" depends on FB && PCI && X86_32 && !64BIT select FB_CFB_IMAGEBLIT - select VIDEO_SELECT + select VIDEO_SELECT if !XEN ---help--- This driver is supposed to support the Trident Cyberblade/i1 graphics core integrated in the VIA VT8601A North Bridge, diff -r a18df47f671b -r cdd156cb645b drivers/xen/core/machine_reboot.c --- a/drivers/xen/core/machine_reboot.c Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/xen/core/machine_reboot.c Mon Aug 11 11:05:57 2008 +0900 @@ -74,7 +74,7 @@ static void post_suspend(int suspend_can unsigned long shinfo_mfn; extern unsigned long max_pfn; extern unsigned long *pfn_to_mfn_frame_list_list; - extern unsigned long *pfn_to_mfn_frame_list[]; + extern unsigned long **pfn_to_mfn_frame_list; if (suspend_cancelled) { xen_start_info->store_mfn = @@ -184,14 +184,9 @@ static int take_machine_down(void *_susp * We do it here just in case, but there's no need if we are * in fast-suspend mode as that implies a new enough Xen. */ - if (!suspend->fast_suspend) { - struct mmuext_op op; - op.cmd = MMUEXT_NEW_USER_BASEPTR; - op.arg1.mfn = pfn_to_mfn(__pa(__user_pgd( - current->active_mm->pgd)) >> PAGE_SHIFT); - if (HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF)) - BUG(); - } + if (!suspend->fast_suspend) + xen_new_user_pt(__pa(__user_pgd( + current->active_mm->pgd))); #endif } time_resume(); diff -r a18df47f671b -r cdd156cb645b drivers/xen/core/pci.c --- a/drivers/xen/core/pci.c Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/xen/core/pci.c Mon Aug 11 11:05:57 2008 +0900 @@ -23,9 +23,13 @@ static int pci_bus_probe_wrapper(struct return r; r = pci_bus_probe(dev); - if (r) - WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, - &manage_pci)); + if (r) { + int ret; + + ret = HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, + &manage_pci); + WARN_ON(ret && ret != -ENOSYS); + } return r; } diff -r a18df47f671b -r cdd156cb645b drivers/xen/pciback/pci_stub.c --- a/drivers/xen/pciback/pci_stub.c Fri Aug 08 11:39:35 2008 +0900 +++ b/drivers/xen/pciback/pci_stub.c Mon Aug 11 11:05:57 2008 +0900 @@ -813,11 +813,10 @@ int pciback_get_owner(struct pci_dev *de psdev = pcistub_device_find(pci_domain_nr(dev->bus), dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); - /* XXX will other domain has pciback support ??? */ - if (!psdev || !psdev->pdev) { - printk(KERN_WARNING "no ownder\n"); + + if (!psdev || !psdev->pdev) return -1; - } + return psdev->pdev->xdev->otherend_id; } #endif diff -r a18df47f671b -r cdd156cb645b include/asm-x86_64/mach-xen/asm/pgtable.h --- a/include/asm-x86_64/mach-xen/asm/pgtable.h Fri Aug 08 11:39:35 2008 +0900 +++ b/include/asm-x86_64/mach-xen/asm/pgtable.h Mon Aug 11 11:05:57 2008 +0900 @@ -135,11 +135,11 @@ static inline void pgd_clear (pgd_t * pg #define FIRST_USER_ADDRESS 0 #ifndef __ASSEMBLY__ -#define MAXMEM 0x3fffffffffffUL +#define MAXMEM 0xdfffffffffUL #define VMALLOC_START 0xffffc20000000000UL #define VMALLOC_END 0xffffe1ffffffffffUL #define MODULES_VADDR 0xffffffff88000000UL -#define MODULES_END 0xfffffffffff00000UL +#define MODULES_END 0xffffffffff000000UL #define MODULES_LEN (MODULES_END - MODULES_VADDR) #define _PAGE_BIT_PRESENT 0 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |