[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 1218077890 -32400 # Node ID 324a5c041301d42b662e20f6175cba6c9b26f262 # Parent 678ad99920c897f247c37d3de14827c547e664c5 # Parent 2866e6af503ea0b33e1c1fb2340ab8ed81925e97 merge with linux-2.6.18-xen.hg --- arch/i386/Kconfig | 1 arch/i386/kernel/acpi/Makefile | 2 arch/i386/kernel/acpi/processor_extcntl_xen.c | 20 ++------ arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 11 ---- arch/i386/kernel/cpu/cpufreq/powernow-k8.c | 10 ---- arch/i386/kernel/setup-xen.c | 7 ++ arch/i386/kernel/setup.c | 7 ++ arch/x86_64/kernel/acpi/Makefile | 5 +- arch/x86_64/kernel/process-xen.c | 6 -- arch/x86_64/kernel/setup-xen.c | 4 + arch/x86_64/kernel/setup.c | 4 + arch/x86_64/mm/init-xen.c | 8 +++ drivers/acpi/Kconfig | 1 drivers/acpi/Makefile | 2 drivers/acpi/processor_core.c | 33 ++----------- drivers/acpi/processor_extcntl.c | 37 ++------------- drivers/acpi/processor_idle.c | 29 ----------- drivers/acpi/processor_perflib.c | 30 +++++++----- drivers/cpufreq/Kconfig | 1 drivers/pci/msi-xen.c | 25 ++++------ drivers/pci/msi.h | 5 -- drivers/xen/blkfront/blkfront.c | 9 +++ drivers/xen/blkfront/block.h | 15 ++++++ drivers/xen/blkfront/vbd.c | 45 ++++++++++++++++++ drivers/xen/core/machine_reboot.c | 9 +-- drivers/xen/core/pci.c | 6 +- drivers/xen/core/reboot.c | 63 ++++++++++++++++++-------- drivers/xen/netfront/accel.c | 5 +- drivers/xen/pciback/pci_stub.c | 6 -- drivers/xen/scsiback/emulate.c | 23 +++++++-- include/acpi/processor.h | 35 ++++++++------ include/linux/pci.h | 8 +++ include/xen/interface/xen.h | 1 33 files changed, 256 insertions(+), 217 deletions(-) diff -r 678ad99920c8 -r 324a5c041301 arch/i386/Kconfig --- a/arch/i386/Kconfig Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/Kconfig Thu Aug 07 11:58:10 2008 +0900 @@ -107,6 +107,7 @@ config X86_XEN config X86_XEN bool "Xen-compatible" select XEN + select X86_PAE select X86_UP_APIC if !SMP && XEN_PRIVILEGED_GUEST select X86_UP_IOAPIC if !SMP && XEN_PRIVILEGED_GUEST select SWIOTLB diff -r 678ad99920c8 -r 324a5c041301 arch/i386/kernel/acpi/Makefile --- a/arch/i386/kernel/acpi/Makefile Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/kernel/acpi/Makefile Thu Aug 07 11:58:10 2008 +0900 @@ -4,7 +4,9 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wake ifneq ($(CONFIG_ACPI_PROCESSOR),) obj-y += cstate.o processor.o +ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),) obj-$(CONFIG_XEN) += processor_extcntl_xen.o +endif endif disabled-obj-$(CONFIG_XEN) := cstate.o wakeup.o diff -r 678ad99920c8 -r 324a5c041301 arch/i386/kernel/acpi/processor_extcntl_xen.c --- a/arch/i386/kernel/acpi/processor_extcntl_xen.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/kernel/acpi/processor_extcntl_xen.c Thu Aug 07 11:58:10 2008 +0900 @@ -33,14 +33,6 @@ #include <asm/hypercall.h> static int xen_processor_pmbits; -static int __init set_xen_processor_pmbits(char *str) -{ - get_option(&str, &xen_processor_pmbits); - - return 1; -} -__setup("xen_processor_pmbits=", set_xen_processor_pmbits); -EXPORT_SYMBOL(xen_processor_pmbits); static int xen_cx_notifier(struct acpi_processor *pr, int action) { @@ -221,8 +213,10 @@ static struct processor_extcntl_ops xen_ .hotplug = xen_hotplug_notifier, }; -static int __cpuinit xen_init_processor_extcntl(void) -{ +void arch_acpi_processor_init_extcntl(const struct processor_extcntl_ops **ops) +{ + xen_processor_pmbits = (xen_start_info->flags & SIF_PM_MASK) >> 8; + if (xen_processor_pmbits & XEN_PROCESSOR_PM_CX) xen_extcntl_ops.pm_ops[PM_TYPE_IDLE] = xen_cx_notifier; if (xen_processor_pmbits & XEN_PROCESSOR_PM_PX) @@ -230,6 +224,6 @@ static int __cpuinit xen_init_processor_ if (xen_processor_pmbits & XEN_PROCESSOR_PM_TX) xen_extcntl_ops.pm_ops[PM_TYPE_THR] = xen_tx_notifier; - return processor_register_extcntl(&xen_extcntl_ops); -} -core_initcall(xen_init_processor_extcntl); + *ops = &xen_extcntl_ops; +} +EXPORT_SYMBOL(arch_acpi_processor_init_extcntl); diff -r 678ad99920c8 -r 324a5c041301 arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c Thu Aug 07 11:58:10 2008 +0900 @@ -568,17 +568,6 @@ acpi_cpufreq_init (void) { dprintk("acpi_cpufreq_init\n"); -#ifdef CONFIG_XEN - /* - * This effectively blocks in-kernel cpufreq driver to interfere - * external control logic - */ - if (processor_pmperf_external()) { - printk("CPUFREQ is controllerd externally...exit then!\n"); - return -1; - } -#endif /* CONFIG_XEN */ - acpi_cpufreq_early_init_acpi(); return cpufreq_register_driver(&acpi_cpufreq_driver); diff -r 678ad99920c8 -r 324a5c041301 arch/i386/kernel/cpu/cpufreq/powernow-k8.c --- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c Thu Aug 07 11:58:10 2008 +0900 @@ -1312,16 +1312,6 @@ static int __cpuinit powernowk8_init(voi { unsigned int i, supported_cpus = 0; -#ifdef CONFIG_XEN - /* - * This effectively blocks in-kernel cpufreq driver to interfere - * external control logic - */ - if (processor_pmperf_external()) { - return -ENODEV; - } -#endif /* CONFIG_XEN */ - for_each_online_cpu(i) { if (check_supported_cpu(i)) supported_cpus++; diff -r 678ad99920c8 -r 324a5c041301 arch/i386/kernel/setup-xen.c --- a/arch/i386/kernel/setup-xen.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/kernel/setup-xen.c Thu Aug 07 11:58:10 2008 +0900 @@ -283,7 +283,12 @@ static struct resource standard_io_resou }, { .name = "keyboard", .start = 0x0060, - .end = 0x006f, + .end = 0x0060, + .flags = IORESOURCE_BUSY | IORESOURCE_IO +}, { + .name = "keyboard", + .start = 0x0064, + .end = 0x0064, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, { .name = "dma page reg", diff -r 678ad99920c8 -r 324a5c041301 arch/i386/kernel/setup.c --- a/arch/i386/kernel/setup.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/i386/kernel/setup.c Thu Aug 07 11:58:10 2008 +0900 @@ -261,7 +261,12 @@ static struct resource standard_io_resou }, { .name = "keyboard", .start = 0x0060, - .end = 0x006f, + .end = 0x0060, + .flags = IORESOURCE_BUSY | IORESOURCE_IO +}, { + .name = "keyboard", + .start = 0x0064, + .end = 0x0064, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, { .name = "dma page reg", diff -r 678ad99920c8 -r 324a5c041301 arch/x86_64/kernel/acpi/Makefile --- a/arch/x86_64/kernel/acpi/Makefile Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/x86_64/kernel/acpi/Makefile Thu Aug 07 11:58:10 2008 +0900 @@ -6,8 +6,9 @@ obj-y += processor.o obj-y += processor.o processor-y := ../../../i386/kernel/acpi/processor.o ../../../i386/kernel/acpi/cstate.o processor-$(CONFIG_XEN) := ../../../i386/kernel/acpi/processor.o +ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),) +processor-$(CONFIG_XEN) += ../../../i386/kernel/acpi/processor_extcntl_xen.o +endif endif -obj-$(CONFIG_XEN) += processor_extcnt_xen.o -processor_extcnt_xen-$(CONFIG_XEN) := ../../../i386/kernel/acpi/processor_extcntl_xen.o disabled-obj-$(CONFIG_XEN) := wakeup.o diff -r 678ad99920c8 -r 324a5c041301 arch/x86_64/kernel/process-xen.c --- a/arch/x86_64/kernel/process-xen.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/x86_64/kernel/process-xen.c Thu Aug 07 11:58:10 2008 +0900 @@ -846,9 +846,3 @@ unsigned long arch_align_stack(unsigned sp -= get_random_int() % 8192; return sp & ~0xf; } - -#ifndef CONFIG_SMP -void _restore_vcpu(void) -{ -} -#endif diff -r 678ad99920c8 -r 324a5c041301 arch/x86_64/kernel/setup-xen.c --- a/arch/x86_64/kernel/setup-xen.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/x86_64/kernel/setup-xen.c Thu Aug 07 11:58:10 2008 +0900 @@ -169,7 +169,9 @@ struct resource standard_io_resources[] .flags = IORESOURCE_BUSY | IORESOURCE_IO }, { .name = "timer1", .start = 0x50, .end = 0x53, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, - { .name = "keyboard", .start = 0x60, .end = 0x6f, + { .name = "keyboard", .start = 0x60, .end = 0x60, + .flags = IORESOURCE_BUSY | IORESOURCE_IO }, + { .name = "keyboard", .start = 0x64, .end = 0x64, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, { .name = "dma page reg", .start = 0x80, .end = 0x8f, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, diff -r 678ad99920c8 -r 324a5c041301 arch/x86_64/kernel/setup.c --- a/arch/x86_64/kernel/setup.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/x86_64/kernel/setup.c Thu Aug 07 11:58:10 2008 +0900 @@ -122,7 +122,9 @@ struct resource standard_io_resources[] .flags = IORESOURCE_BUSY | IORESOURCE_IO }, { .name = "timer1", .start = 0x50, .end = 0x53, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, - { .name = "keyboard", .start = 0x60, .end = 0x6f, + { .name = "keyboard", .start = 0x60, .end = 0x60, + .flags = IORESOURCE_BUSY | IORESOURCE_IO }, + { .name = "keyboard", .start = 0x64, .end = 0x64, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, { .name = "dma page reg", .start = 0x80, .end = 0x8f, .flags = IORESOURCE_BUSY | IORESOURCE_IO }, diff -r 678ad99920c8 -r 324a5c041301 arch/x86_64/mm/init-xen.c --- a/arch/x86_64/mm/init-xen.c Tue Aug 05 12:19:38 2008 +0900 +++ b/arch/x86_64/mm/init-xen.c Thu Aug 07 11:58:10 2008 +0900 @@ -325,6 +325,14 @@ static __init void set_pte_phys_ma(unsig new_pte = pfn_pte_ma(phys >> PAGE_SHIFT, prot); pte = pte_offset_kernel(pmd, vaddr); + if (!pte_none(*pte) && +#ifdef CONFIG_ACPI + /* __acpi_map_table() fails to properly call clear_fixmap() */ + (vaddr < __fix_to_virt(FIX_ACPI_END) || + vaddr > __fix_to_virt(FIX_ACPI_BEGIN)) && +#endif + __pte_val(*pte) != (__pte_val(new_pte) & __supported_pte_mask)) + pte_ERROR(*pte); set_pte(pte, new_pte); /* diff -r 678ad99920c8 -r 324a5c041301 drivers/acpi/Kconfig --- a/drivers/acpi/Kconfig Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/acpi/Kconfig Thu Aug 07 11:58:10 2008 +0900 @@ -371,7 +371,6 @@ config PROCESSOR_EXTERNAL_CONTROL config PROCESSOR_EXTERNAL_CONTROL bool depends on X86 && XEN - select ACPI_PROCESSOR default y endif # ACPI diff -r 678ad99920c8 -r 324a5c041301 drivers/acpi/Makefile --- a/drivers/acpi/Makefile Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/acpi/Makefile Thu Aug 07 11:58:10 2008 +0900 @@ -35,7 +35,7 @@ processor-objs += processor_perflib.o processor-objs += processor_perflib.o endif ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL -processor-objs += processor_extcntl.o +processor-objs += processor_perflib.o processor_extcntl.o endif obj-y += sleep/ diff -r 678ad99920c8 -r 324a5c041301 drivers/acpi/processor_core.c --- a/drivers/acpi/processor_core.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/acpi/processor_core.c Thu Aug 07 11:58:10 2008 +0900 @@ -474,14 +474,9 @@ static int acpi_processor_get_info(struc * they are physically not present. */ if (cpu_index == -1) { -#ifdef CONFIG_XEN if (ACPI_FAILURE (acpi_processor_hotadd_init(pr->handle, &pr->id)) && !processor_cntl_external()) { -#else - if (ACPI_FAILURE - (acpi_processor_hotadd_init(pr->handle, &pr->id))) { -#endif /* CONFIG_XEN */ printk(KERN_ERR PREFIX "Getting cpuindex for acpiid 0x%x\n", pr->acpi_id); @@ -514,20 +509,14 @@ static int acpi_processor_get_info(struc request_region(pr->throttling.address, 6, "ACPI CPU throttle"); } -#ifdef CONFIG_CPU_FREQ acpi_processor_ppc_has_changed(pr); -#endif acpi_processor_get_throttling_info(pr); acpi_processor_get_limit_info(pr); return 0; } -#ifdef CONFIG_XEN static void *processor_device_array[NR_ACPI_CPUS]; -#else -static void *processor_device_array[NR_CPUS]; -#endif /* CONFIG_XEN */ static int acpi_processor_start(struct acpi_device *device) { @@ -535,26 +524,19 @@ static int acpi_processor_start(struct a acpi_status status = AE_OK; struct acpi_processor *pr; + processor_extcntl_init(); pr = acpi_driver_data(device); result = acpi_processor_get_info(pr); -#ifdef CONFIG_XEN if (result || ((pr->id == -1) && !processor_cntl_external())) { -#else - if (result) { -#endif /* CONFIG_XEN */ /* Processor is physically not present */ return 0; } -#ifdef CONFIG_XEN BUG_ON(!processor_cntl_external() && ((pr->id >= NR_CPUS) || (pr->id < 0))); -#else - BUG_ON((pr->id >= NR_CPUS) || (pr->id < 0)); -#endif /* CONFIG_XEN */ /* * Buggy BIOS check @@ -562,6 +544,7 @@ static int acpi_processor_start(struct a * Don't trust it blindly */ #ifdef CONFIG_XEN + BUG_ON(pr->acpi_id >= NR_ACPI_CPUS); if (processor_device_array[pr->acpi_id] != NULL && processor_device_array[pr->acpi_id] != (void *)device) { #else @@ -595,9 +578,9 @@ static int acpi_processor_start(struct a acpi_processor_power_init(pr, device); -#ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL - processor_extcntl_init(pr); -#endif + result = processor_extcntl_prepare(pr); + if (result) + goto end; if (pr->flags.throttling) { printk(KERN_INFO PREFIX "%s [%s] (supports", @@ -751,11 +734,9 @@ int acpi_processor_device_add(acpi_handl if (!pr) return -ENODEV; -#ifdef CONFIG_XEN if (processor_cntl_external()) processor_notify_external(pr, PROCESSOR_HOTPLUG, HOTPLUG_TYPE_ADD); -#endif /* CONFIG_XEN */ if ((pr->id >= 0) && (pr->id < NR_CPUS)) { kobject_uevent(&(*device)->kobj, KOBJ_ONLINE); @@ -795,11 +776,9 @@ acpi_processor_hotplug_notify(acpi_handl break; } -#ifdef CONFIG_XEN if (processor_cntl_external()) processor_notify_external(pr, PROCESSOR_HOTPLUG, HOTPLUG_TYPE_ADD); -#endif /* CONFIG_XEN */ if (pr->id >= 0 && (pr->id < NR_CPUS)) { kobject_uevent(&device->kobj, KOBJ_OFFLINE); @@ -838,11 +817,9 @@ acpi_processor_hotplug_notify(acpi_handl #endif /* CONFIG_XEN */ kobject_uevent(&device->kobj, KOBJ_OFFLINE); -#ifdef CONFIG_XEN if (processor_cntl_external()) processor_notify_external(pr, PROCESSOR_HOTPLUG, HOTPLUG_TYPE_REMOVE); -#endif /* CONFIG_XEN */ break; default: diff -r 678ad99920c8 -r 324a5c041301 drivers/acpi/processor_extcntl.c --- a/drivers/acpi/processor_extcntl.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/acpi/processor_extcntl.c Thu Aug 07 11:58:10 2008 +0900 @@ -36,7 +36,7 @@ static int processor_extcntl_get_perform * External processor control logic may register with its own set of * ops to get ACPI related notification. One example is like VMM. */ -struct processor_extcntl_ops *processor_extcntl_ops; +const struct processor_extcntl_ops *processor_extcntl_ops; EXPORT_SYMBOL(processor_extcntl_ops); static int processor_notify_smm(void) @@ -112,30 +112,11 @@ int processor_notify_external(struct acp * state which is also necessarily controlled by VMM. But for other * control bits like performance/throttle states, VMM may choose to * control or not upon its own policy. - * - * Such ownership is unlikely to be switched in the fly, and thus - * not sure unregister interface is required or not. Being same reason, - * lock is not forced now. - */ -int processor_register_extcntl(struct processor_extcntl_ops *ops) -{ - if (!ops) - return -EINVAL; - - if (processor_extcntl_ops && - (processor_extcntl_ops != ops)) - return -EBUSY; - - processor_extcntl_ops = ops; - return 0; -} - -int processor_unregister_extcntl(struct processor_extcntl_ops *ops) -{ - if (processor_extcntl_ops == ops) - processor_extcntl_ops = NULL; - - return 0; + */ +void processor_extcntl_init(void) +{ + if (!processor_extcntl_ops) + arch_acpi_processor_init_extcntl(&processor_extcntl_ops); } /* @@ -145,7 +126,7 @@ int processor_unregister_extcntl(struct * and performance state. Those information may be not available * if splitting from dom0 control logic like cpufreq driver. */ -int processor_extcntl_init(struct acpi_processor *pr) +int processor_extcntl_prepare(struct acpi_processor *pr) { /* parse cstate dependency information */ if (processor_pm_external()) @@ -187,7 +168,6 @@ static int processor_extcntl_parse_csd(s * logic. So we have to collect raw performance information here * when ACPI processor object is found and started. */ -#ifdef CONFIG_CPU_FREQ static int processor_extcntl_get_performance(struct acpi_processor *pr) { int ret; @@ -244,6 +224,3 @@ err_out: kfree(perf); return ret; } -#else -static int processor_extcntl_get_performance(struct acpi_processor *pr) { return 0; } -#endif diff -r 678ad99920c8 -r 324a5c041301 drivers/acpi/processor_idle.c --- a/drivers/acpi/processor_idle.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/acpi/processor_idle.c Thu Aug 07 11:58:10 2008 +0900 @@ -714,17 +714,12 @@ static int acpi_processor_get_power_info (reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) continue; -#ifdef CONFIG_XEN if (!processor_pm_external()) cx.address = (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) ? 0 : reg->address; else cx.address = reg->address; -#else - cx.address = (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) ? - 0 : reg->address; -#endif /* CONFIG_XEN */ /* There should be an easy way to extract an integer... */ obj = (union acpi_object *)&(element->package.elements[1]); @@ -733,17 +728,11 @@ static int acpi_processor_get_power_info cx.type = obj->integer.value; -#ifdef CONFIG_XEN /* Following check doesn't apply to external control case */ - if (!processor_pm_external()) - if ((cx.type != ACPI_STATE_C1) && - (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO)) - continue; -#else - if ((cx.type != ACPI_STATE_C1) && + if (!processor_pm_external() && + (cx.type != ACPI_STATE_C1) && (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO)) continue; -#endif /* CONFIG_XEN */ if ((cx.type < ACPI_STATE_C2) || (cx.type > ACPI_STATE_C3)) continue; @@ -1008,24 +997,16 @@ int acpi_processor_cst_has_changed(struc return -ENODEV; /* Fall back to the default idle loop */ -#ifdef CONFIG_XEN if (!processor_pm_external()) pm_idle = pm_idle_save; -#else - pm_idle = pm_idle_save; -#endif /* CONFIG_XEN */ synchronize_sched(); /* Relies on interrupts forcing exit from idle. */ pr->flags.power = 0; result = acpi_processor_get_power_info(pr); -#ifdef CONFIG_XEN if (processor_pm_external()) processor_notify_external(pr, PROCESSOR_PM_CHANGE, PM_TYPE_IDLE); else if ((pr->flags.power == 1) && (pr->flags.power_setup_done)) -#else - if ((pr->flags.power == 1) && (pr->flags.power_setup_done)) -#endif /* CONFIG_XEN */ pm_idle = acpi_processor_idle; return result; @@ -1157,11 +1138,7 @@ int acpi_processor_power_init(struct acp pr->power.states[i].type); printk(")\n"); -#ifdef CONFIG_XEN if (!processor_pm_external() && (pr->id == 0)) { -#else - if (pr->id == 0) { -#endif /* CONFIG_XEN */ pm_idle_save = pm_idle; pm_idle = acpi_processor_idle; } @@ -1180,11 +1157,9 @@ int acpi_processor_power_init(struct acp pr->flags.power_setup_done = 1; -#ifdef CONFIG_XEN if (processor_pm_external()) processor_notify_external(pr, PROCESSOR_PM_INIT, PM_TYPE_IDLE); -#endif /* CONFIG_XEN */ return 0; } diff -r 678ad99920c8 -r 324a5c041301 drivers/acpi/processor_perflib.c --- a/drivers/acpi/processor_perflib.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/acpi/processor_perflib.c Thu Aug 07 11:58:10 2008 +0900 @@ -66,6 +66,7 @@ static DEFINE_MUTEX(performance_mutex); static int acpi_processor_ppc_status = 0; +#ifdef CONFIG_CPU_FREQ static int acpi_processor_ppc_notifier(struct notifier_block *nb, unsigned long event, void *data) { @@ -102,6 +103,7 @@ static struct notifier_block acpi_ppc_no static struct notifier_block acpi_ppc_notifier_block = { .notifier_call = acpi_processor_ppc_notifier, }; +#endif /* CONFIG_CPU_FREQ */ static int acpi_processor_get_platform_limit(struct acpi_processor *pr) { @@ -136,15 +138,16 @@ int acpi_processor_ppc_has_changed(struc int ret = acpi_processor_get_platform_limit(pr); if (ret < 0) return (ret); -#ifdef CONFIG_XEN - else if (processor_pmperf_external()) + else +#ifdef CONFIG_CPU_FREQ + return cpufreq_update_policy(pr->id); +#elif CONFIG_PROCESSOR_EXTERNAL_CONTROL return processor_notify_external(pr, PROCESSOR_PM_CHANGE, PM_TYPE_PERF); -#endif /* CONFIG_XEN */ - else - return cpufreq_update_policy(pr->id); -} - +#endif +} + +#ifdef CONFIG_CPU_FREQ void acpi_processor_ppc_init(void) { if (!cpufreq_register_notifier @@ -163,6 +166,7 @@ void acpi_processor_ppc_exit(void) acpi_processor_ppc_status &= ~PPC_REGISTERED; } +#endif /* CONFIG_CPU_FREQ */ static int acpi_processor_get_performance_control(struct acpi_processor *pr) { @@ -305,10 +309,9 @@ static int acpi_processor_get_performanc } #ifndef CONFIG_PROCESSOR_EXTERNAL_CONTROL -static int acpi_processor_get_performance_info(struct acpi_processor *pr) -#else +static +#endif int acpi_processor_get_performance_info(struct acpi_processor *pr) -#endif { int result = 0; acpi_status status = AE_OK; @@ -340,6 +343,7 @@ int acpi_processor_get_performance_info( return 0; } +#ifdef CONFIG_CPU_FREQ int acpi_processor_notify_smm(struct module *calling_module) { acpi_status status; @@ -407,6 +411,7 @@ int acpi_processor_notify_smm(struct mod } EXPORT_SYMBOL(acpi_processor_notify_smm); +#endif /* CONFIG_CPU_FREQ */ #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF /* /proc/acpi/processor/../performance interface (DEPRECATED) */ @@ -548,10 +553,9 @@ static void acpi_cpufreq_remove_file(str #endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */ #ifndef CONFIG_PROCESSOR_EXTERNAL_CONTROL -static int acpi_processor_get_psd(struct acpi_processor *pr) -#else +static +#endif int acpi_processor_get_psd(struct acpi_processor *pr) -#endif { int result = 0; acpi_status status = AE_OK; diff -r 678ad99920c8 -r 324a5c041301 drivers/cpufreq/Kconfig --- a/drivers/cpufreq/Kconfig Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/cpufreq/Kconfig Thu Aug 07 11:58:10 2008 +0900 @@ -1,5 +1,6 @@ config CPU_FREQ config CPU_FREQ bool "CPU Frequency scaling" + depends on !PROCESSOR_EXTERNAL_CONTROL help CPU Frequency scaling allows you to change the clock speed of CPUs on the fly. This is a nice method to save power, because diff -r 678ad99920c8 -r 324a5c041301 drivers/pci/msi-xen.c --- a/drivers/pci/msi-xen.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/pci/msi-xen.c Thu Aug 07 11:58:10 2008 +0900 @@ -116,7 +116,7 @@ static void detach_pirq_entry(int entry_ /* * pciback will provide device's owner */ -int (*get_owner)(struct pci_dev *dev); +static int (*get_owner)(struct pci_dev *dev); int register_msi_get_owner(int (*func)(struct pci_dev *dev)) { @@ -130,33 +130,32 @@ int register_msi_get_owner(int (*func)(s int unregister_msi_get_owner(int (*func)(struct pci_dev *dev)) { - if (get_owner == func) - get_owner = NULL; + if (get_owner != func) + return -EINVAL; + get_owner = NULL; return 0; } static int msi_get_dev_owner(struct pci_dev *dev) { - int owner = DOMID_SELF; + int owner; BUG_ON(!is_initial_xendomain()); - if (get_owner && (owner = get_owner(dev)) >=0 ) { + if (get_owner && (owner = get_owner(dev)) >= 0) { printk(KERN_INFO "get owner for dev %x get %x \n", - dev->devfn, owner); + dev->devfn, owner); return owner; } - else - return DOMID_SELF; + + return DOMID_SELF; } static int msi_unmap_pirq(struct pci_dev *dev, int pirq) { struct physdev_unmap_pirq unmap; int rc; - domid_t domid = DOMID_SELF; - - domid = msi_get_dev_owner(dev); - unmap.domid = domid; + + unmap.domid = msi_get_dev_owner(dev); unmap.pirq = pirq; if ((rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap))) @@ -164,7 +163,7 @@ static int msi_unmap_pirq(struct pci_dev if (rc < 0) return rc; - return 0; + return 0; } /* diff -r 678ad99920c8 -r 324a5c041301 drivers/pci/msi.h --- a/drivers/pci/msi.h Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/pci/msi.h Thu Aug 07 11:58:10 2008 +0900 @@ -84,11 +84,6 @@ extern void (*interrupt[NR_IRQS])(void); extern void (*interrupt[NR_IRQS])(void); extern int pci_vector_resources(int last, int nr_released); -#ifdef CONFIG_XEN -extern int unregister_msi_get_owner(int (*func)(struct pci_dev *dev)); -extern int register_msi_get_owner(int (*func)(struct pci_dev *dev)); -#endif - /* * MSI-X Address Register */ diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/blkfront/blkfront.c --- a/drivers/xen/blkfront/blkfront.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/blkfront/blkfront.c Thu Aug 07 11:58:10 2008 +0900 @@ -352,6 +352,13 @@ static void connect(struct blkfront_info return; } + err = xlvbd_sysfs_addif(info); + if (err) { + xenbus_dev_fatal(info->xbdev, err, "xlvbd_sysfs_addif at %s", + info->xbdev->otherend); + return; + } + (void)xenbus_switch_state(info->xbdev, XenbusStateConnected); /* Kick pending requests. */ @@ -390,6 +397,8 @@ static void blkfront_closing(struct xenb /* Flush gnttab callback work. Must be done with no locks held. */ flush_scheduled_work(); + + xlvbd_sysfs_delif(info); xlvbd_del(info); diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/blkfront/block.h --- a/drivers/xen/blkfront/block.h Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/blkfront/block.h Thu Aug 07 11:58:10 2008 +0900 @@ -140,4 +140,19 @@ void xlvbd_del(struct blkfront_info *inf void xlvbd_del(struct blkfront_info *info); int xlvbd_barrier(struct blkfront_info *info); +#ifdef CONFIG_SYSFS +int xlvbd_sysfs_addif(struct blkfront_info *info); +void xlvbd_sysfs_delif(struct blkfront_info *info); +#else +static inline int xlvbd_sysfs_addif(struct blkfront_info *info) +{ + return 0; +} + +static inline void xlvbd_sysfs_delif(struct blkfront_info *info) +{ + ; +} +#endif + #endif /* __XEN_DRIVERS_BLOCK_H__ */ diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/blkfront/vbd.c --- a/drivers/xen/blkfront/vbd.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/blkfront/vbd.c Thu Aug 07 11:58:10 2008 +0900 @@ -413,3 +413,48 @@ xlvbd_barrier(struct blkfront_info *info return -ENOSYS; } #endif + +#ifdef CONFIG_SYSFS +static ssize_t show_media(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct xenbus_device *xendev = to_xenbus_device(dev); + struct blkfront_info *info = xendev->dev.driver_data; + + if (info->gd->flags & GENHD_FL_CD) + return sprintf(buf, "cdrom\n"); + return sprintf(buf, "disk\n"); +} + +static struct device_attribute xlvbd_attrs[] = { + __ATTR(media, S_IRUGO, show_media, NULL), +}; + +int xlvbd_sysfs_addif(struct blkfront_info *info) +{ + int i; + int error = 0; + + for (i = 0; i < ARRAY_SIZE(xlvbd_attrs); i++) { + error = device_create_file(info->gd->driverfs_dev, + &xlvbd_attrs[i]); + if (error) + goto fail; + } + return 0; + +fail: + while (--i >= 0) + device_remove_file(info->gd->driverfs_dev, &xlvbd_attrs[i]); + return error; +} + +void xlvbd_sysfs_delif(struct blkfront_info *info) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(xlvbd_attrs); i++) + device_remove_file(info->gd->driverfs_dev, &xlvbd_attrs[i]); +} + +#endif /* CONFIG_SYSFS */ diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/core/machine_reboot.c --- a/drivers/xen/core/machine_reboot.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/core/machine_reboot.c Thu Aug 07 11:58:10 2008 +0900 @@ -26,8 +26,6 @@ void (*pm_power_off)(void); void (*pm_power_off)(void); EXPORT_SYMBOL(pm_power_off); -int setup_suspend_evtchn(void); - void machine_emergency_restart(void) { /* We really want to get pending console data out before we die. */ @@ -133,7 +131,7 @@ static void post_suspend(int suspend_can struct suspend { int fast_suspend; - void (*resume_notifier)(void); + void (*resume_notifier)(int); }; static int take_machine_down(void *_suspend) @@ -175,7 +173,7 @@ static int take_machine_down(void *_susp */ suspend_cancelled = HYPERVISOR_suspend(virt_to_mfn(xen_start_info)); - suspend->resume_notifier(); + suspend->resume_notifier(suspend_cancelled); post_suspend(suspend_cancelled); gnttab_resume(); if (!suspend_cancelled) { @@ -204,7 +202,7 @@ static int take_machine_down(void *_susp return suspend_cancelled; } -int __xen_suspend(int fast_suspend, void (*resume_notifier)(void)) +int __xen_suspend(int fast_suspend, void (*resume_notifier)(int)) { int err, suspend_cancelled; struct suspend suspend; @@ -243,7 +241,6 @@ int __xen_suspend(int fast_suspend, void if (!suspend_cancelled) { xencons_resume(); xenbus_resume(); - setup_suspend_evtchn(); } else { xenbus_suspend_cancel(); } diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/core/pci.c --- a/drivers/xen/core/pci.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/core/pci.c Thu Aug 07 11:58:10 2008 +0900 @@ -24,7 +24,8 @@ static int pci_bus_probe_wrapper(struct r = pci_bus_probe(dev); if (r) - HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, &manage_pci); + WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, + &manage_pci)); return r; } @@ -40,7 +41,8 @@ static int pci_bus_remove_wrapper(struct r = pci_bus_remove(dev); /* dev and pci_dev are no longer valid!! */ - HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, &manage_pci); + WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, + &manage_pci)); return r; } diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/core/reboot.c --- a/drivers/xen/core/reboot.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/core/reboot.c Thu Aug 07 11:58:10 2008 +0900 @@ -27,13 +27,18 @@ MODULE_LICENSE("Dual BSD/GPL"); /* Ignore multiple shutdown requests. */ static int shutting_down = SHUTDOWN_INVALID; +/* Was last suspend request cancelled? */ +static int suspend_cancelled; + /* Can we leave APs online when we suspend? */ static int fast_suspend; static void __shutdown_handler(void *unused); static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL); -int __xen_suspend(int fast_suspend, void (*resume_notifier)(void)); +static int setup_suspend_evtchn(void); + +int __xen_suspend(int fast_suspend, void (*resume_notifier)(int)); static int shutdown_process(void *__unused) { @@ -62,10 +67,11 @@ static int shutdown_process(void *__unus return 0; } -static void xen_resume_notifier(void) +static void xen_resume_notifier(int _suspend_cancelled) { int old_state = xchg(&shutting_down, SHUTDOWN_RESUMING); BUG_ON(old_state != SHUTDOWN_SUSPEND); + suspend_cancelled = _suspend_cancelled; } static int xen_suspend(void *__unused) @@ -85,6 +91,8 @@ static int xen_suspend(void *__unused) printk(KERN_ERR "Xen suspend failed (%d)\n", err); goto fail; } + if (!suspend_cancelled) + setup_suspend_evtchn(); old_state = cmpxchg( &shutting_down, SHUTDOWN_RESUMING, SHUTDOWN_INVALID); } while (old_state == SHUTDOWN_SUSPEND); @@ -108,6 +116,31 @@ static int xen_suspend(void *__unused) return 0; } +static void switch_shutdown_state(int new_state) +{ + int prev_state, old_state = SHUTDOWN_INVALID; + + /* We only drive shutdown_state into an active state. */ + if (new_state == SHUTDOWN_INVALID) + return; + + do { + /* We drop this transition if already in an active state. */ + if ((old_state != SHUTDOWN_INVALID) && + (old_state != SHUTDOWN_RESUMING)) + return; + /* Attempt to transition. */ + prev_state = old_state; + old_state = cmpxchg(&shutting_down, old_state, new_state); + } while (old_state != prev_state); + + /* Either we kick off the work, or we leave it to xen_suspend(). */ + if (old_state == SHUTDOWN_INVALID) + schedule_work(&shutdown_work); + else + BUG_ON(old_state != SHUTDOWN_RESUMING); +} + static void __shutdown_handler(void *unused) { int err; @@ -129,7 +162,7 @@ static void shutdown_handler(struct xenb extern void ctrl_alt_del(void); char *str; struct xenbus_transaction xbt; - int err, old_state, new_state = SHUTDOWN_INVALID; + int err, new_state = SHUTDOWN_INVALID; if ((shutting_down != SHUTDOWN_INVALID) && (shutting_down != SHUTDOWN_RESUMING)) @@ -166,13 +199,7 @@ static void shutdown_handler(struct xenb else printk("Ignoring shutdown request: %s\n", str); - if (new_state != SHUTDOWN_INVALID) { - old_state = xchg(&shutting_down, new_state); - if (old_state == SHUTDOWN_INVALID) - schedule_work(&shutdown_work); - else - BUG_ON(old_state != SHUTDOWN_RESUMING); - } + switch_shutdown_state(new_state); kfree(str); } @@ -220,26 +247,24 @@ static struct xenbus_watch sysrq_watch = static irqreturn_t suspend_int(int irq, void* dev_id, struct pt_regs *ptregs) { - shutting_down = SHUTDOWN_SUSPEND; - schedule_work(&shutdown_work); - + switch_shutdown_state(SHUTDOWN_SUSPEND); return IRQ_HANDLED; } -int setup_suspend_evtchn(void) -{ - static int irq = -1; +static int setup_suspend_evtchn(void) +{ + static int irq; int port; - char portstr[5]; /* 1024 max */ + char portstr[16]; if (irq > 0) unbind_from_irqhandler(irq, NULL); irq = bind_listening_port_to_irqhandler(0, suspend_int, 0, "suspend", NULL); - if (irq <= 0) { + if (irq <= 0) return -1; - } + port = irq_to_evtchn_port(irq); printk(KERN_INFO "suspend: event channel %d\n", port); sprintf(portstr, "%d", port); diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/netfront/accel.c --- a/drivers/xen/netfront/accel.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/netfront/accel.c Thu Aug 07 11:58:10 2008 +0900 @@ -709,8 +709,9 @@ int netfront_accelerator_suspend_cancel( * accelerator, so no need to call accelerator_probe_new_vif() * directly here */ - netfront_accelerator_add_watch(np); - return 0; + if (dev->state == XenbusStateConnected) + netfront_accelerator_add_watch(np); + return 0; } diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/pciback/pci_stub.c --- a/drivers/xen/pciback/pci_stub.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/pciback/pci_stub.c Thu Aug 07 11:58:10 2008 +0900 @@ -832,9 +832,7 @@ static void pcistub_exit(void) driver_remove_file(&pciback_pci_driver.driver, &driver_attr_permissive); pci_unregister_driver(&pciback_pci_driver); -#ifdef CONFIG_PCI_MSI - unregister_msi_get_owner(pciback_get_owner); -#endif + WARN_ON(unregister_msi_get_owner(pciback_get_owner)); } static int __init pcistub_init(void) @@ -892,10 +890,8 @@ static int __init pcistub_init(void) err = driver_create_file(&pciback_pci_driver.driver, &driver_attr_permissive); -#ifdef CONFIG_PCI_MSI if (!err) err = register_msi_get_owner(pciback_get_owner); -#endif if (err) pcistub_exit(); diff -r 678ad99920c8 -r 324a5c041301 drivers/xen/scsiback/emulate.c --- a/drivers/xen/scsiback/emulate.c Tue Aug 05 12:19:38 2008 +0900 +++ b/drivers/xen/scsiback/emulate.c Thu Aug 07 11:58:10 2008 +0900 @@ -73,8 +73,6 @@ #define VSCSI_MAX_SCSI_OP_CODE 256 static unsigned char bitmap[VSCSI_MAX_SCSI_OP_CODE]; -/* REPORT LUNS Header*/ -#define VSCSI_REPORT_LUNS_HEADER 8 /* @@ -200,6 +198,11 @@ static int __nr_luns_under_host(struct v return (lun_cnt); } + + +/* REPORT LUNS Define*/ +#define VSCSI_REPORT_LUNS_HEADER 8 +#define VSCSI_REPORT_LUNS_RETRY 3 /* quoted scsi_debug.c/resp_report_luns() */ static void __report_luns(pending_req_t *pending_req, void *data) @@ -215,6 +218,7 @@ static void __report_luns(pending_req_t unsigned int alloc_luns = 0; unsigned int req_bufflen = 0; unsigned int actual_len = 0; + unsigned int retry_cnt = 0; int select_report = (int)cmd[2]; int i, lun_cnt = 0, lun, upper, err = 0; @@ -231,7 +235,7 @@ static void __report_luns(pending_req_t alloc_luns = __nr_luns_under_host(info); alloc_len = sizeof(struct scsi_lun) * alloc_luns + VSCSI_REPORT_LUNS_HEADER; - +retry: if ((buff = kmalloc(alloc_len, GFP_KERNEL)) == NULL) { printk(KERN_ERR "scsiback:%s kmalloc err\n", __FUNCTION__); goto fail; @@ -246,8 +250,19 @@ static void __report_luns(pending_req_t (entry->v.tgt == target)) { /* check overflow */ - if (lun_cnt >= alloc_luns) + if (lun_cnt >= alloc_luns) { + spin_unlock_irqrestore(&info->v2p_lock, + flags); + + if (retry_cnt < VSCSI_REPORT_LUNS_RETRY) { + retry_cnt++; + if (buff) + kfree(buff); + goto retry; + } + goto fail; + } lun = entry->v.lun; upper = (lun >> 8) & 0x3f; diff -r 678ad99920c8 -r 324a5c041301 include/acpi/processor.h --- a/include/acpi/processor.h Tue Aug 05 12:19:38 2008 +0900 +++ b/include/acpi/processor.h Thu Aug 07 11:58:10 2008 +0900 @@ -22,7 +22,9 @@ #define ACPI_PSD_REV0_ENTRIES 5 #ifdef CONFIG_XEN -#define NR_ACPI_CPUS 256 +#define NR_ACPI_CPUS (NR_CPUS < 256 ? 256 : NR_CPUS) +#else +#define NR_ACPI_CPUS NR_CPUS #endif /* CONFIG_XEN */ /* @@ -252,6 +254,9 @@ static inline void acpi_processor_ppc_ex { return; } +#ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL +int acpi_processor_ppc_has_changed(struct acpi_processor *pr); +#else static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) { static unsigned int printout = 1; @@ -264,6 +269,7 @@ static inline int acpi_processor_ppc_has } return 0; } +#endif /* CONFIG_PROCESSOR_EXTERNAL_CONTROL */ #endif /* CONFIG_CPU_FREQ */ /* in processor_throttling.c */ @@ -296,7 +302,6 @@ static inline void acpi_thermal_cpufreq_ } #endif -#ifdef CONFIG_XEN /* * Following are interfaces geared to external processor PM control * logic like a VMM @@ -306,7 +311,7 @@ static inline void acpi_thermal_cpufreq_ #define PROCESSOR_PM_CHANGE 2 #define PROCESSOR_HOTPLUG 3 -/* Objects for the PM envents */ +/* Objects for the PM events */ #define PM_TYPE_IDLE 0 #define PM_TYPE_PERF 1 #define PM_TYPE_THR 2 @@ -323,7 +328,7 @@ struct processor_extcntl_ops { /* Notify physical processor status to external control logic */ int (*hotplug)(struct acpi_processor *pr, int event); }; -extern struct processor_extcntl_ops *processor_extcntl_ops; +extern const struct processor_extcntl_ops *processor_extcntl_ops; static inline int processor_cntl_external(void) { @@ -350,11 +355,11 @@ static inline int processor_pmthr_extern extern int processor_notify_external(struct acpi_processor *pr, int event, int type); -extern int processor_register_extcntl(struct processor_extcntl_ops *ops); -extern int processor_unregister_extcntl(struct processor_extcntl_ops *ops); -extern int processor_extcntl_init(struct acpi_processor *pr); +extern void processor_extcntl_init(void); +extern int processor_extcntl_prepare(struct acpi_processor *pr); extern int acpi_processor_get_performance_info(struct acpi_processor *pr); extern int acpi_processor_get_psd(struct acpi_processor *pr); +void arch_acpi_processor_init_extcntl(const struct processor_extcntl_ops **); #else static inline int processor_cntl_external(void) {return 0;} static inline int processor_pm_external(void) {return 0;} @@ -363,13 +368,13 @@ static inline int processor_notify_exter static inline int processor_notify_external(struct acpi_processor *pr, int event, int type) { - return -EINVAL; -} -static inline int processor_extcntl_init(struct acpi_processor *pr) -{ - return -EINVAL; + return 0; +} +static inline void processor_extcntl_init(void) {} +static inline int processor_extcntl_prepare(struct acpi_processor *pr) +{ + return 0; } #endif /* CONFIG_PROCESSOR_EXTERNAL_CONTROL */ -#endif /* CONFIG_XEN */ - -#endif + +#endif diff -r 678ad99920c8 -r 324a5c041301 include/linux/pci.h --- a/include/linux/pci.h Tue Aug 05 12:19:38 2008 +0900 +++ b/include/linux/pci.h Thu Aug 07 11:58:10 2008 +0900 @@ -599,6 +599,10 @@ static inline int pci_enable_msix(struct struct msix_entry *entries, int nvec) {return -1;} static inline void pci_disable_msix(struct pci_dev *dev) {} static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev) {} +#ifdef CONFIG_XEN +#define register_msi_get_owner(func) 0 +#define unregister_msi_get_owner(func) 0 +#endif #else extern void pci_scan_msi_device(struct pci_dev *dev); extern int pci_enable_msi(struct pci_dev *dev); @@ -607,6 +611,10 @@ extern int pci_enable_msix(struct pci_de struct msix_entry *entries, int nvec); extern void pci_disable_msix(struct pci_dev *dev); extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); +#ifdef CONFIG_XEN +extern int register_msi_get_owner(int (*func)(struct pci_dev *dev)); +extern int unregister_msi_get_owner(int (*func)(struct pci_dev *dev)); +#endif #endif extern void pci_block_user_cfg_access(struct pci_dev *dev); diff -r 678ad99920c8 -r 324a5c041301 include/xen/interface/xen.h --- a/include/xen/interface/xen.h Tue Aug 05 12:19:38 2008 +0900 +++ b/include/xen/interface/xen.h Thu Aug 07 11:58:10 2008 +0900 @@ -554,6 +554,7 @@ typedef struct start_info start_info_t; /* These flags are passed in the 'flags' field of start_info_t. */ #define SIF_PRIVILEGED (1<<0) /* Is the domain privileged? */ #define SIF_INITDOMAIN (1<<1) /* Is this the initial control domain? */ +#define SIF_PM_MASK (0xFF<<8) /* reserve 1 byte for xen-pm options */ typedef struct dom0_vga_console_info { uint8_t video_type; /* DOM0_VGA_CONSOLE_??? */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |