ia64/linux-2.6.18-xen.hg

changeset 457:68e78169679e

merge with linux-2.6.18-xen.hg
author Alex Williamson <alex.williamson@hp.com>
date Fri Feb 29 09:20:31 2008 -0700 (2008-02-29)
parents ee7015727bd1 49ffe9ef67d4
children eb906651be99
files
line diff
     1.1 --- a/arch/i386/kernel/machine_kexec.c	Fri Feb 29 09:14:21 2008 -0700
     1.2 +++ b/arch/i386/kernel/machine_kexec.c	Fri Feb 29 09:20:31 2008 -0700
     1.3 @@ -64,6 +64,21 @@ void machine_kexec_setup_load_arg(xen_ke
     1.4  
     1.5  }
     1.6  
     1.7 +int __init machine_kexec_setup_resources(struct resource *hypervisor,
     1.8 +					 struct resource *phys_cpus,
     1.9 +					 int nr_phys_cpus)
    1.10 +{
    1.11 +	int k;
    1.12 +
    1.13 +	/* The per-cpu crash note resources belong to the hypervisor resource */
    1.14 +	for (k = 0; k < nr_phys_cpus; k++)
    1.15 +		request_resource(hypervisor, phys_cpus + k);
    1.16 +
    1.17 +	return 0;
    1.18 +}
    1.19 +
    1.20 +void machine_kexec_register_resources(struct resource *res) { ; }
    1.21 +
    1.22  #endif /* CONFIG_XEN */
    1.23  
    1.24  /*
     2.1 --- a/arch/i386/pci/irq-xen.c	Fri Feb 29 09:14:21 2008 -0700
     2.2 +++ b/arch/i386/pci/irq-xen.c	Fri Feb 29 09:20:31 2008 -0700
     2.3 @@ -259,13 +259,13 @@ static int pirq_via_set(struct pci_dev *
     2.4   */
     2.5  static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
     2.6  {
     2.7 -	static const unsigned int pirqmap[4] = { 3, 2, 5, 1 };
     2.8 +	static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
     2.9  	return read_config_nybble(router, 0x55, pirqmap[pirq-1]);
    2.10  }
    2.11  
    2.12  static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
    2.13  {
    2.14 -	static const unsigned int pirqmap[4] = { 3, 2, 5, 1 };
    2.15 +	static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
    2.16  	write_config_nybble(router, 0x55, pirqmap[pirq-1], irq);
    2.17  	return 1;
    2.18  }
    2.19 @@ -547,6 +547,12 @@ static __init int intel_router_probe(str
    2.20  		case PCI_DEVICE_ID_INTEL_ICH8_2:
    2.21  		case PCI_DEVICE_ID_INTEL_ICH8_3:
    2.22  		case PCI_DEVICE_ID_INTEL_ICH8_4:
    2.23 +		case PCI_DEVICE_ID_INTEL_ICH9_0:
    2.24 +		case PCI_DEVICE_ID_INTEL_ICH9_1:
    2.25 +		case PCI_DEVICE_ID_INTEL_ICH9_2:
    2.26 +		case PCI_DEVICE_ID_INTEL_ICH9_3:
    2.27 +		case PCI_DEVICE_ID_INTEL_ICH9_4:
    2.28 +		case PCI_DEVICE_ID_INTEL_ICH9_5:
    2.29  			r->name = "PIIX/ICH";
    2.30  			r->get = pirq_piix_get;
    2.31  			r->set = pirq_piix_set;
     3.1 --- a/arch/ia64/kernel/machine_kexec.c	Fri Feb 29 09:14:21 2008 -0700
     3.2 +++ b/arch/ia64/kernel/machine_kexec.c	Fri Feb 29 09:20:31 2008 -0700
     3.3 @@ -142,4 +142,63 @@ void machine_kexec_setup_load_arg(xen_ke
     3.4  	xki->reboot_code_buffer =
     3.5  		kexec_page_to_pfn(image->control_code_page) << PAGE_SHIFT;
     3.6  }
     3.7 +
     3.8 +static struct resource xen_hypervisor_heap_res;
     3.9 +
    3.10 +int __init machine_kexec_setup_resources(struct resource *hypervisor,
    3.11 +					 struct resource *phys_cpus,
    3.12 +					 int nr_phys_cpus)
    3.13 +{
    3.14 +	xen_kexec_range_t range;
    3.15 +	int k;
    3.16 +
    3.17 +	/* fill in xen_hypervisor_heap_res with hypervisor heap
    3.18 +	 * machine address range
    3.19 +	 */
    3.20 +
    3.21 +	memset(&range, 0, sizeof(range));
    3.22 +	range.range = KEXEC_RANGE_MA_XENHEAP;
    3.23 +
    3.24 +	if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
    3.25 +		return -1;
    3.26 +
    3.27 +	xen_hypervisor_heap_res.name = "Hypervisor heap";
    3.28 +	xen_hypervisor_heap_res.start = range.start;
    3.29 +	xen_hypervisor_heap_res.end = range.start + range.size - 1;
    3.30 +	xen_hypervisor_heap_res.flags = IORESOURCE_BUSY | IORESOURCE_MEM;
    3.31 +
    3.32 +	/* The per-cpu crash note  resources belong inside the
    3.33 +	 * hypervisor heap resource */
    3.34 +	for (k = 0; k < nr_phys_cpus; k++)
    3.35 +		request_resource(&xen_hypervisor_heap_res, phys_cpus + k);
    3.36 +
    3.37 +	/* fill in efi_memmap_res with EFI memmap machine address range */
    3.38 +
    3.39 +	memset(&range, 0, sizeof(range));
    3.40 +	range.range = KEXEC_RANGE_MA_EFI_MEMMAP;
    3.41 +
    3.42 +	if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
    3.43 +		return -1;
    3.44 +
    3.45 +	efi_memmap_res.start = range.start;
    3.46 +	efi_memmap_res.end = range.start + range.size - 1;
    3.47 +
    3.48 +	/* fill in boot_param_res with boot parameter machine address range */
    3.49 +
    3.50 +	memset(&range, 0, sizeof(range));
    3.51 +	range.range = KEXEC_RANGE_MA_BOOT_PARAM;
    3.52 +
    3.53 +	if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
    3.54 +		return -1;
    3.55 +
    3.56 +	boot_param_res.start = range.start;
    3.57 +	boot_param_res.end = range.start + range.size - 1;
    3.58 +
    3.59 +	return 0;
    3.60 +}
    3.61 +
    3.62 +void machine_kexec_register_resources(struct resource *res)
    3.63 +{
    3.64 +	request_resource(res, &xen_hypervisor_heap_res);
    3.65 +}
    3.66  #endif /* CONFIG_XEN */
     4.1 --- a/arch/ia64/kernel/setup.c	Fri Feb 29 09:14:21 2008 -0700
     4.2 +++ b/arch/ia64/kernel/setup.c	Fri Feb 29 09:20:31 2008 -0700
     4.3 @@ -336,15 +336,15 @@ reserve_memory (void)
     4.4  				}
     4.5  			}
     4.6  		}
     4.7 -#ifdef CONFIG_XEN
     4.8 -		}
     4.9 -#endif
    4.10  		efi_memmap_res.start = ia64_boot_param->efi_memmap;
    4.11                  efi_memmap_res.end = efi_memmap_res.start +
    4.12                          ia64_boot_param->efi_memmap_size;
    4.13                  boot_param_res.start = kexec_virt_to_phys(ia64_boot_param);
    4.14                  boot_param_res.end = boot_param_res.start +
    4.15                          sizeof(*ia64_boot_param);
    4.16 +#ifdef CONFIG_XEN
    4.17 +		}
    4.18 +#endif
    4.19  	}
    4.20  #endif
    4.21  	/* end of memory marker */
     5.1 --- a/arch/x86_64/kernel/machine_kexec.c	Fri Feb 29 09:14:21 2008 -0700
     5.2 +++ b/arch/x86_64/kernel/machine_kexec.c	Fri Feb 29 09:20:31 2008 -0700
     5.3 @@ -104,6 +104,21 @@ void machine_kexec_setup_load_arg(xen_ke
     5.4  	xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
     5.5  }
     5.6  
     5.7 +int __init machine_kexec_setup_resources(struct resource *hypervisor,
     5.8 +					 struct resource *phys_cpus,
     5.9 +					 int nr_phys_cpus)
    5.10 +{
    5.11 +	int k;
    5.12 +
    5.13 +	/* The per-cpu crash note resources belong to the hypervisor resource */
    5.14 +	for (k = 0; k < nr_phys_cpus; k++)
    5.15 +		request_resource(hypervisor, phys_cpus + k);
    5.16 +
    5.17 +	return 0;
    5.18 +}
    5.19 +
    5.20 +void machine_kexec_register_resources(struct resource *res) { ; }
    5.21 +
    5.22  #else /* CONFIG_XEN */
    5.23  
    5.24  #define x__pmd(x) __pmd(x)
     6.1 --- a/drivers/xen/core/machine_kexec.c	Fri Feb 29 09:14:21 2008 -0700
     6.2 +++ b/drivers/xen/core/machine_kexec.c	Fri Feb 29 09:20:31 2008 -0700
     6.3 @@ -10,6 +10,10 @@
     6.4  
     6.5  extern void machine_kexec_setup_load_arg(xen_kexec_image_t *xki, 
     6.6  					 struct kimage *image);
     6.7 +extern int machine_kexec_setup_resources(struct resource *hypervisor,
     6.8 +					 struct resource *phys_cpus,
     6.9 +					 int nr_phys_cpus);
    6.10 +extern void machine_kexec_register_resources(struct resource *res);
    6.11  
    6.12  static int __initdata xen_max_nr_phys_cpus;
    6.13  static struct resource xen_hypervisor_res;
    6.14 @@ -85,13 +89,17 @@ void __init xen_machine_kexec_setup_reso
    6.15  	range.range = KEXEC_RANGE_MA_CRASH;
    6.16  
    6.17  	if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
    6.18 -		return;
    6.19 +		goto err;
    6.20  
    6.21  	if (range.size) {
    6.22  		crashk_res.start = range.start;
    6.23  		crashk_res.end = range.start + range.size - 1;
    6.24  	}
    6.25  
    6.26 +	if (machine_kexec_setup_resources(&xen_hypervisor_res, xen_phys_cpus,
    6.27 +					  xen_max_nr_phys_cpus))
    6.28 +		goto err;
    6.29 +
    6.30  	return;
    6.31  
    6.32   err:
    6.33 @@ -106,13 +114,8 @@ void __init xen_machine_kexec_setup_reso
    6.34  
    6.35  void __init xen_machine_kexec_register_resources(struct resource *res)
    6.36  {
    6.37 -	int k;
    6.38 -
    6.39  	request_resource(res, &xen_hypervisor_res);
    6.40 -
    6.41 -	for (k = 0; k < xen_max_nr_phys_cpus; k++)
    6.42 -		request_resource(&xen_hypervisor_res, xen_phys_cpus + k);
    6.43 -
    6.44 +	machine_kexec_register_resources(res);
    6.45  }
    6.46  
    6.47  static void setup_load_arg(xen_kexec_image_t *xki, struct kimage *image)
     7.1 --- a/drivers/xen/core/machine_reboot.c	Fri Feb 29 09:14:21 2008 -0700
     7.2 +++ b/drivers/xen/core/machine_reboot.c	Fri Feb 29 09:20:31 2008 -0700
     7.3 @@ -129,13 +129,18 @@ static void post_suspend(int suspend_can
     7.4  
     7.5  #endif
     7.6  
     7.7 -static int take_machine_down(void *p_fast_suspend)
     7.8 +struct suspend {
     7.9 +	int fast_suspend;
    7.10 +	void (*resume_notifier)(void);
    7.11 +};
    7.12 +
    7.13 +static int take_machine_down(void *_suspend)
    7.14  {
    7.15 -	int fast_suspend = *(int *)p_fast_suspend;
    7.16 +	struct suspend *suspend = _suspend;
    7.17  	int suspend_cancelled, err;
    7.18  	extern void time_resume(void);
    7.19  
    7.20 -	if (fast_suspend) {
    7.21 +	if (suspend->fast_suspend) {
    7.22  		BUG_ON(!irqs_disabled());
    7.23  	} else {
    7.24  		BUG_ON(irqs_disabled());
    7.25 @@ -168,6 +173,7 @@ static int take_machine_down(void *p_fas
    7.26  	 */
    7.27  	suspend_cancelled = HYPERVISOR_suspend(virt_to_mfn(xen_start_info));
    7.28  
    7.29 +	suspend->resume_notifier();
    7.30  	post_suspend(suspend_cancelled);
    7.31  	gnttab_resume();
    7.32  	if (!suspend_cancelled) {
    7.33 @@ -178,7 +184,7 @@ static int take_machine_down(void *p_fas
    7.34  		 * We do it here just in case, but there's no need if we are
    7.35  		 * in fast-suspend mode as that implies a new enough Xen.
    7.36  		 */
    7.37 -		if (!fast_suspend) {
    7.38 +		if (!suspend->fast_suspend) {
    7.39  			struct mmuext_op op;
    7.40  			op.cmd = MMUEXT_NEW_USER_BASEPTR;
    7.41  			op.arg1.mfn = pfn_to_mfn(__pa(__user_pgd(
    7.42 @@ -190,15 +196,16 @@ static int take_machine_down(void *p_fas
    7.43  	}
    7.44  	time_resume();
    7.45  
    7.46 -	if (!fast_suspend)
    7.47 +	if (!suspend->fast_suspend)
    7.48  		local_irq_enable();
    7.49  
    7.50  	return suspend_cancelled;
    7.51  }
    7.52  
    7.53 -int __xen_suspend(int fast_suspend)
    7.54 +int __xen_suspend(int fast_suspend, void (*resume_notifier)(void))
    7.55  {
    7.56  	int err, suspend_cancelled;
    7.57 +	struct suspend suspend = { fast_suspend, resume_notifier };
    7.58  
    7.59  	BUG_ON(smp_processor_id() != 0);
    7.60  	BUG_ON(in_interrupt());
    7.61 @@ -217,11 +224,11 @@ int __xen_suspend(int fast_suspend)
    7.62  
    7.63  	if (fast_suspend) {
    7.64  		xenbus_suspend();
    7.65 -		err = stop_machine_run(take_machine_down, &fast_suspend, 0);
    7.66 +		err = stop_machine_run(take_machine_down, &suspend, 0);
    7.67  		if (err < 0)
    7.68  			xenbus_suspend_cancel();
    7.69  	} else {
    7.70 -		err = take_machine_down(&fast_suspend);
    7.71 +		err = take_machine_down(&suspend);
    7.72  	}
    7.73  
    7.74  	if (err < 0)
     8.1 --- a/drivers/xen/core/reboot.c	Fri Feb 29 09:14:21 2008 -0700
     8.2 +++ b/drivers/xen/core/reboot.c	Fri Feb 29 09:20:31 2008 -0700
     8.3 @@ -20,11 +20,7 @@ MODULE_LICENSE("Dual BSD/GPL");
     8.4  #define SHUTDOWN_INVALID  -1
     8.5  #define SHUTDOWN_POWEROFF  0
     8.6  #define SHUTDOWN_SUSPEND   2
     8.7 -/* Code 3 is SHUTDOWN_CRASH, which we don't use because the domain can only
     8.8 - * report a crash, not be instructed to crash!
     8.9 - * HALT is the same as POWEROFF, as far as we're concerned.  The tools use
    8.10 - * the distinction when we return the reason code to them.
    8.11 - */
    8.12 +#define SHUTDOWN_RESUMING  3
    8.13  #define SHUTDOWN_HALT      4
    8.14  
    8.15  /* Ignore multiple shutdown requests. */
    8.16 @@ -36,7 +32,7 @@ static int fast_suspend;
    8.17  static void __shutdown_handler(void *unused);
    8.18  static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL);
    8.19  
    8.20 -int __xen_suspend(int fast_suspend);
    8.21 +int __xen_suspend(int fast_suspend, void (*resume_notifier)(void));
    8.22  
    8.23  static int shutdown_process(void *__unused)
    8.24  {
    8.25 @@ -65,23 +61,49 @@ static int shutdown_process(void *__unus
    8.26  	return 0;
    8.27  }
    8.28  
    8.29 +static void xen_resume_notifier(void)
    8.30 +{
    8.31 +	int old_state = xchg(&shutting_down, SHUTDOWN_RESUMING);
    8.32 +	BUG_ON(old_state != SHUTDOWN_SUSPEND);
    8.33 +}
    8.34 +
    8.35  static int xen_suspend(void *__unused)
    8.36  {
    8.37 -	int err;
    8.38 +	int err, old_state;
    8.39  
    8.40  	daemonize("suspend");
    8.41  	err = set_cpus_allowed(current, cpumask_of_cpu(0));
    8.42  	if (err) {
    8.43  		printk(KERN_ERR "Xen suspend can't run on CPU0 (%d)\n", err);
    8.44 -		goto out;
    8.45 +		goto fail;
    8.46  	}
    8.47  
    8.48 -	err = __xen_suspend(fast_suspend);
    8.49 -	if (err)
    8.50 -		printk(KERN_ERR "Xen suspend failed (%d)\n", err);
    8.51 +	do {
    8.52 +		err = __xen_suspend(fast_suspend, xen_resume_notifier);
    8.53 +		if (err) {
    8.54 +			printk(KERN_ERR "Xen suspend failed (%d)\n", err);
    8.55 +			goto fail;
    8.56 +		}
    8.57 +		old_state = cmpxchg(
    8.58 +			&shutting_down, SHUTDOWN_RESUMING, SHUTDOWN_INVALID);
    8.59 +	} while (old_state == SHUTDOWN_SUSPEND);
    8.60  
    8.61 - out:
    8.62 -	shutting_down = SHUTDOWN_INVALID;
    8.63 +	switch (old_state) {
    8.64 +	case SHUTDOWN_INVALID:
    8.65 +	case SHUTDOWN_SUSPEND:
    8.66 +		BUG();
    8.67 +	case SHUTDOWN_RESUMING:
    8.68 +		break;
    8.69 +	default:
    8.70 +		schedule_work(&shutdown_work);
    8.71 +		break;
    8.72 +	}
    8.73 +
    8.74 +	return 0;
    8.75 +
    8.76 + fail:
    8.77 +	old_state = xchg(&shutting_down, SHUTDOWN_INVALID);
    8.78 +	BUG_ON(old_state != SHUTDOWN_SUSPEND);
    8.79  	return 0;
    8.80  }
    8.81  
    8.82 @@ -106,9 +128,10 @@ static void shutdown_handler(struct xenb
    8.83  	extern void ctrl_alt_del(void);
    8.84  	char *str;
    8.85  	struct xenbus_transaction xbt;
    8.86 -	int err;
    8.87 +	int err, old_state, new_state = SHUTDOWN_INVALID;
    8.88  
    8.89 -	if (shutting_down != SHUTDOWN_INVALID)
    8.90 +	if ((shutting_down != SHUTDOWN_INVALID) &&
    8.91 +	    (shutting_down != SHUTDOWN_RESUMING))
    8.92  		return;
    8.93  
    8.94   again:
    8.95 @@ -132,21 +155,24 @@ static void shutdown_handler(struct xenb
    8.96  	}
    8.97  
    8.98  	if (strcmp(str, "poweroff") == 0)
    8.99 -		shutting_down = SHUTDOWN_POWEROFF;
   8.100 +		new_state = SHUTDOWN_POWEROFF;
   8.101  	else if (strcmp(str, "reboot") == 0)
   8.102  		ctrl_alt_del();
   8.103  	else if (strcmp(str, "suspend") == 0)
   8.104 -		shutting_down = SHUTDOWN_SUSPEND;
   8.105 +		new_state = SHUTDOWN_SUSPEND;
   8.106  	else if (strcmp(str, "halt") == 0)
   8.107 -		shutting_down = SHUTDOWN_HALT;
   8.108 -	else {
   8.109 +		new_state = SHUTDOWN_HALT;
   8.110 +	else
   8.111  		printk("Ignoring shutdown request: %s\n", str);
   8.112 -		shutting_down = SHUTDOWN_INVALID;
   8.113 +
   8.114 +	if (new_state != SHUTDOWN_INVALID) {
   8.115 +		old_state = xchg(&shutting_down, new_state);
   8.116 +		if (old_state == SHUTDOWN_INVALID)
   8.117 +			schedule_work(&shutdown_work);
   8.118 +		else
   8.119 +			BUG_ON(old_state != SHUTDOWN_RESUMING);
   8.120  	}
   8.121  
   8.122 -	if (shutting_down != SHUTDOWN_INVALID)
   8.123 -		schedule_work(&shutdown_work);
   8.124 -
   8.125  	kfree(str);
   8.126  }
   8.127  
     9.1 --- a/drivers/xen/fbfront/xenkbd.c	Fri Feb 29 09:14:21 2008 -0700
     9.2 +++ b/drivers/xen/fbfront/xenkbd.c	Fri Feb 29 09:20:31 2008 -0700
     9.3 @@ -66,7 +66,7 @@ static irqreturn_t input_handler(int rq,
     9.4  		case XENKBD_TYPE_MOTION:
     9.5  			if (event->motion.rel_z)
     9.6  				input_report_rel(dev, REL_WHEEL,
     9.7 -						 0 - event->motion.rel_z);
     9.8 +						 -event->motion.rel_z);
     9.9  			input_report_rel(dev, REL_X, event->motion.rel_x);
    9.10  			input_report_rel(dev, REL_Y, event->motion.rel_y);
    9.11  			break;
    9.12 @@ -84,9 +84,9 @@ static irqreturn_t input_handler(int rq,
    9.13  				       event->key.keycode);
    9.14  			break;
    9.15  		case XENKBD_TYPE_POS:
    9.16 -			if (event->pos.abs_z)
    9.17 +			if (event->pos.rel_z)
    9.18  				input_report_rel(dev, REL_WHEEL,
    9.19 -						 0 - event->pos.abs_z);
    9.20 +						 -event->pos.rel_z);
    9.21  			input_report_abs(dev, ABS_X, event->pos.abs_x);
    9.22  			input_report_abs(dev, ABS_Y, event->pos.abs_y);
    9.23  			break;
    10.1 --- a/drivers/xen/netfront/accel.c	Fri Feb 29 09:14:21 2008 -0700
    10.2 +++ b/drivers/xen/netfront/accel.c	Fri Feb 29 09:20:31 2008 -0700
    10.3 @@ -60,6 +60,9 @@ static struct list_head accelerators_lis
    10.4  /* Lock to protect access to accelerators_list */
    10.5  static spinlock_t accelerators_lock;
    10.6  
    10.7 +/* Workqueue to process acceleration configuration changes */
    10.8 +struct workqueue_struct *accel_watch_workqueue;
    10.9 +
   10.10  /* Mutex to prevent concurrent loads and suspends, etc. */
   10.11  DEFINE_MUTEX(accelerator_mutex);
   10.12  
   10.13 @@ -67,6 +70,8 @@ void netif_init_accel(void)
   10.14  {
   10.15  	INIT_LIST_HEAD(&accelerators_list);
   10.16  	spin_lock_init(&accelerators_lock);
   10.17 +
   10.18 +	accel_watch_workqueue = create_workqueue("accel_watch");
   10.19  }
   10.20  
   10.21  void netif_exit_accel(void)
   10.22 @@ -74,6 +79,9 @@ void netif_exit_accel(void)
   10.23  	struct netfront_accelerator *accelerator, *tmp;
   10.24  	unsigned long flags;
   10.25  
   10.26 +	flush_workqueue(accel_watch_workqueue);
   10.27 +	destroy_workqueue(accel_watch_workqueue);
   10.28 +
   10.29  	spin_lock_irqsave(&accelerators_lock, flags);
   10.30  
   10.31  	list_for_each_entry_safe(accelerator, tmp, &accelerators_list, link) {
   10.32 @@ -156,7 +164,7 @@ static void accel_watch_changed(struct x
   10.33  	struct netfront_accel_vif_state *vif_state = 
   10.34  		container_of(watch, struct netfront_accel_vif_state,
   10.35  			     accel_watch);
   10.36 -	schedule_work(&vif_state->accel_work);
   10.37 +	queue_work(accel_watch_workqueue, &vif_state->accel_work);
   10.38  }
   10.39  
   10.40  
   10.41 @@ -191,7 +199,7 @@ void netfront_accelerator_remove_watch(s
   10.42  		kfree(vif_state->accel_watch.node);
   10.43  		vif_state->accel_watch.node = NULL;
   10.44  
   10.45 -		flush_scheduled_work();
   10.46 +		flush_workqueue(accel_watch_workqueue);
   10.47  
   10.48  		/* Clean up any state left from watch */
   10.49  		if (vif_state->accel_frontend != NULL) {
    11.1 --- a/drivers/xen/pcifront/xenbus.c	Fri Feb 29 09:14:21 2008 -0700
    11.2 +++ b/drivers/xen/pcifront/xenbus.c	Fri Feb 29 09:20:31 2008 -0700
    11.3 @@ -17,7 +17,7 @@ static struct pcifront_device *alloc_pde
    11.4  {
    11.5  	struct pcifront_device *pdev;
    11.6  
    11.7 -	pdev = kmalloc(sizeof(struct pcifront_device), GFP_KERNEL);
    11.8 +	pdev = kzalloc(sizeof(struct pcifront_device), GFP_KERNEL);
    11.9  	if (pdev == NULL)
   11.10  		goto out;
   11.11  
    12.1 --- a/drivers/xen/xenbus/xenbus_dev.c	Fri Feb 29 09:14:21 2008 -0700
    12.2 +++ b/drivers/xen/xenbus/xenbus_dev.c	Fri Feb 29 09:20:31 2008 -0700
    12.3 @@ -278,7 +278,7 @@ static ssize_t xenbus_dev_write(struct f
    12.4  		token++;
    12.5  
    12.6  		if (msg_type == XS_WATCH) {
    12.7 -			watch = kmalloc(sizeof(*watch), GFP_KERNEL);
    12.8 +			watch = kzalloc(sizeof(*watch), GFP_KERNEL);
    12.9  			watch->watch.node = kmalloc(strlen(path)+1,
   12.10                                                      GFP_KERNEL);
   12.11  			strcpy((char *)watch->watch.node, path);
    13.1 --- a/include/xen/interface/io/kbdif.h	Fri Feb 29 09:14:21 2008 -0700
    13.2 +++ b/include/xen/interface/io/kbdif.h	Fri Feb 29 09:20:31 2008 -0700
    13.3 @@ -65,7 +65,7 @@ struct xenkbd_position
    13.4      uint8_t type;        /* XENKBD_TYPE_POS */
    13.5      int32_t abs_x;       /* absolute X position (in FB pixels) */
    13.6      int32_t abs_y;       /* absolute Y position (in FB pixels) */
    13.7 -    int32_t abs_z;       /* absolute Z position (wheel) */
    13.8 +    int32_t rel_z;       /* relative Z motion (wheel) */
    13.9  };
   13.10  
   13.11  #define XENKBD_IN_EVENT_SIZE 40
    14.1 --- a/include/xen/interface/kexec.h	Fri Feb 29 09:14:21 2008 -0700
    14.2 +++ b/include/xen/interface/kexec.h	Fri Feb 29 09:20:31 2008 -0700
    14.3 @@ -126,9 +126,18 @@ typedef struct xen_kexec_load {
    14.4      xen_kexec_image_t image;
    14.5  } xen_kexec_load_t;
    14.6  
    14.7 -#define KEXEC_RANGE_MA_CRASH 0   /* machine address and size of crash area */
    14.8 -#define KEXEC_RANGE_MA_XEN   1   /* machine address and size of Xen itself */
    14.9 -#define KEXEC_RANGE_MA_CPU   2   /* machine address and size of a CPU note */
   14.10 +#define KEXEC_RANGE_MA_CRASH      0 /* machine address and size of crash area */
   14.11 +#define KEXEC_RANGE_MA_XEN        1 /* machine address and size of Xen itself */
   14.12 +#define KEXEC_RANGE_MA_CPU        2 /* machine address and size of a CPU note */
   14.13 +#define KEXEC_RANGE_MA_XENHEAP    3 /* machine address and size of xenheap
   14.14 +				     * Note that although this is adjacent
   14.15 +				     * to Xen it exists in a separate EFI
   14.16 +				     * region on ia64, and thus needs to be
   14.17 +				     * inserted into iomem_machine separately */
   14.18 +#define KEXEC_RANGE_MA_BOOT_PARAM 4 /* machine address and size of
   14.19 +                                     * the ia64_boot_param */
   14.20 +#define KEXEC_RANGE_MA_EFI_MEMMAP 5 /* machine address and size of
   14.21 +                                     * of the EFI Memory Map */
   14.22  
   14.23  /*
   14.24   * Find the address and size of certain memory areas