diff options
Diffstat (limited to 'drivers/xen')
| -rw-r--r-- | drivers/xen/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/xen/balloon.c | 3 | ||||
| -rw-r--r-- | drivers/xen/dbgp.c | 2 | ||||
| -rw-r--r-- | drivers/xen/events.c | 4 | ||||
| -rw-r--r-- | drivers/xen/gntdev.c | 36 | ||||
| -rw-r--r-- | drivers/xen/grant-table.c | 8 | ||||
| -rw-r--r-- | drivers/xen/sys-hypervisor.c | 4 | ||||
| -rw-r--r-- | drivers/xen/xen-pciback/vpci.c | 14 | ||||
| -rw-r--r-- | drivers/xen/xenbus/xenbus_dev_frontend.c | 2 | ||||
| -rw-r--r-- | drivers/xen/xenbus/xenbus_xs.c | 2 | 
10 files changed, 48 insertions, 29 deletions
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index d4dffcd5287..126d8ce591c 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig @@ -3,6 +3,7 @@ menu "Xen driver support"  config XEN_BALLOON  	bool "Xen memory balloon driver" +	depends on !ARM  	default y  	help  	  The balloon driver allows the Xen domain to request more memory from @@ -145,6 +146,7 @@ config SWIOTLB_XEN  config XEN_TMEM  	bool +	depends on !ARM  	default y if (CLEANCACHE || FRONTSWAP)  	help  	  Shim to interface in-kernel Transcendent Memory hooks diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index 31ab82fda38..d6886d90ccf 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c @@ -55,7 +55,6 @@  #include <asm/pgalloc.h>  #include <asm/pgtable.h>  #include <asm/tlb.h> -#include <asm/e820.h>  #include <asm/xen/hypervisor.h>  #include <asm/xen/hypercall.h> @@ -88,7 +87,7 @@ struct balloon_stats balloon_stats;  EXPORT_SYMBOL_GPL(balloon_stats);  /* We increase/decrease in batches which fit in a page */ -static unsigned long frame_list[PAGE_SIZE / sizeof(unsigned long)]; +static xen_pfn_t frame_list[PAGE_SIZE / sizeof(unsigned long)];  #ifdef CONFIG_HIGHMEM  #define inc_totalhigh_pages() (totalhigh_pages++) diff --git a/drivers/xen/dbgp.c b/drivers/xen/dbgp.c index 42569c77ccc..f3ccc80a455 100644 --- a/drivers/xen/dbgp.c +++ b/drivers/xen/dbgp.c @@ -8,7 +8,9 @@  static int xen_dbgp_op(struct usb_hcd *hcd, int op)  { +#ifdef CONFIG_PCI  	const struct device *ctrlr = hcd_to_bus(hcd)->controller; +#endif  	struct physdev_dbgp_op dbgp;  	if (!xen_initial_domain()) diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 59e10a1286d..912ac81b6db 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c @@ -115,7 +115,9 @@ struct irq_info {  #define PIRQ_SHAREABLE	(1 << 1)  static int *evtchn_to_irq; +#ifdef CONFIG_X86  static unsigned long *pirq_eoi_map; +#endif  static bool (*pirq_needs_eoi)(unsigned irq);  static DEFINE_PER_CPU(unsigned long [NR_EVENT_CHANNELS/BITS_PER_LONG], @@ -277,10 +279,12 @@ static unsigned int cpu_from_evtchn(unsigned int evtchn)  	return ret;  } +#ifdef CONFIG_X86  static bool pirq_check_eoi_map(unsigned irq)  {  	return test_bit(pirq_from_irq(irq), pirq_eoi_map);  } +#endif  static bool pirq_needs_eoi_flag(unsigned irq)  { diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c index 610bfc6be17..2e22df2f7a3 100644 --- a/drivers/xen/gntdev.c +++ b/drivers/xen/gntdev.c @@ -105,6 +105,21 @@ static void gntdev_print_maps(struct gntdev_priv *priv,  #endif  } +static void gntdev_free_map(struct grant_map *map) +{ +	if (map == NULL) +		return; + +	if (map->pages) +		free_xenballooned_pages(map->count, map->pages); +	kfree(map->pages); +	kfree(map->grants); +	kfree(map->map_ops); +	kfree(map->unmap_ops); +	kfree(map->kmap_ops); +	kfree(map); +} +  static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count)  {  	struct grant_map *add; @@ -142,12 +157,7 @@ static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count)  	return add;  err: -	kfree(add->pages); -	kfree(add->grants); -	kfree(add->map_ops); -	kfree(add->unmap_ops); -	kfree(add->kmap_ops); -	kfree(add); +	gntdev_free_map(add);  	return NULL;  } @@ -198,17 +208,9 @@ static void gntdev_put_map(struct grant_map *map)  		evtchn_put(map->notify.event);  	} -	if (map->pages) { -		if (!use_ptemod) -			unmap_grant_pages(map, 0, map->count); - -		free_xenballooned_pages(map->count, map->pages); -	} -	kfree(map->pages); -	kfree(map->grants); -	kfree(map->map_ops); -	kfree(map->unmap_ops); -	kfree(map); +	if (map->pages && !use_ptemod) +		unmap_grant_pages(map, 0, map->count); +	gntdev_free_map(map);  }  /* ------------------------------------------------------------------ */ diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c index b2b0a375b34..b91f14e8316 100644 --- a/drivers/xen/grant-table.c +++ b/drivers/xen/grant-table.c @@ -84,7 +84,7 @@ struct gnttab_ops {  	 * nr_gframes is the number of frames to map grant table. Returning  	 * GNTST_okay means success and negative value means failure.  	 */ -	int (*map_frames)(unsigned long *frames, unsigned int nr_gframes); +	int (*map_frames)(xen_pfn_t *frames, unsigned int nr_gframes);  	/*  	 * Release a list of frames which are mapped in map_frames for grant  	 * entry status. @@ -960,7 +960,7 @@ static unsigned nr_status_frames(unsigned nr_grant_frames)  	return (nr_grant_frames * GREFS_PER_GRANT_FRAME + SPP - 1) / SPP;  } -static int gnttab_map_frames_v1(unsigned long *frames, unsigned int nr_gframes) +static int gnttab_map_frames_v1(xen_pfn_t *frames, unsigned int nr_gframes)  {  	int rc; @@ -977,7 +977,7 @@ static void gnttab_unmap_frames_v1(void)  	arch_gnttab_unmap(gnttab_shared.addr, nr_grant_frames);  } -static int gnttab_map_frames_v2(unsigned long *frames, unsigned int nr_gframes) +static int gnttab_map_frames_v2(xen_pfn_t *frames, unsigned int nr_gframes)  {  	uint64_t *sframes;  	unsigned int nr_sframes; @@ -1029,7 +1029,7 @@ static void gnttab_unmap_frames_v2(void)  static int gnttab_map(unsigned int start_idx, unsigned int end_idx)  {  	struct gnttab_setup_table setup; -	unsigned long *frames; +	xen_pfn_t *frames;  	unsigned int nr_gframes = end_idx + 1;  	int rc; diff --git a/drivers/xen/sys-hypervisor.c b/drivers/xen/sys-hypervisor.c index 5e5ad7e2885..96453f8a85c 100644 --- a/drivers/xen/sys-hypervisor.c +++ b/drivers/xen/sys-hypervisor.c @@ -11,6 +11,7 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/kobject.h> +#include <linux/err.h>  #include <asm/xen/hypervisor.h>  #include <asm/xen/hypercall.h> @@ -284,7 +285,8 @@ static ssize_t virtual_start_show(struct hyp_sysfs_attr *attr, char *buffer)  		ret = HYPERVISOR_xen_version(XENVER_platform_parameters,  					     parms);  		if (!ret) -			ret = sprintf(buffer, "%lx\n", parms->virt_start); +			ret = sprintf(buffer, "%"PRI_xen_ulong"\n", +				      parms->virt_start);  		kfree(parms);  	} diff --git a/drivers/xen/xen-pciback/vpci.c b/drivers/xen/xen-pciback/vpci.c index 46d140baebd..0f478ac483c 100644 --- a/drivers/xen/xen-pciback/vpci.c +++ b/drivers/xen/xen-pciback/vpci.c @@ -89,9 +89,15 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,  	mutex_lock(&vpci_dev->lock); -	/* Keep multi-function devices together on the virtual PCI bus */ -	for (slot = 0; slot < PCI_SLOT_MAX; slot++) { -		if (!list_empty(&vpci_dev->dev_list[slot])) { +	/* +	 * Keep multi-function devices together on the virtual PCI bus, except +	 * virtual functions. +	 */ +	if (!dev->is_virtfn) { +		for (slot = 0; slot < PCI_SLOT_MAX; slot++) { +			if (list_empty(&vpci_dev->dev_list[slot])) +				continue; +  			t = list_entry(list_first(&vpci_dev->dev_list[slot]),  				       struct pci_dev_entry, list); @@ -116,7 +122,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,  			       pci_name(dev), slot);  			list_add_tail(&dev_entry->list,  				      &vpci_dev->dev_list[slot]); -			func = PCI_FUNC(dev->devfn); +			func = dev->is_virtfn ? 0 : PCI_FUNC(dev->devfn);  			goto unlock;  		}  	} diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c index 89f76252a16..ac727028e65 100644 --- a/drivers/xen/xenbus/xenbus_dev_frontend.c +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c @@ -458,7 +458,7 @@ static ssize_t xenbus_file_write(struct file *filp,  		goto out;  	/* Can't write a xenbus message larger we can buffer */ -	if ((len + u->len) > sizeof(u->u.buffer)) { +	if (len > sizeof(u->u.buffer) - u->len) {  		/* On error, dump existing buffer */  		u->len = 0;  		rc = -EINVAL; diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c index f5dda83ad7a..acedeabe589 100644 --- a/drivers/xen/xenbus/xenbus_xs.c +++ b/drivers/xen/xenbus/xenbus_xs.c @@ -627,6 +627,7 @@ static struct xenbus_watch *find_watch(const char *token)   */  static bool xen_strict_xenbus_quirk(void)  { +#ifdef CONFIG_X86  	uint32_t eax, ebx, ecx, edx, base;  	base = xen_cpuid_base(); @@ -634,6 +635,7 @@ static bool xen_strict_xenbus_quirk(void)  	if ((eax >> 16) < 4)  		return true; +#endif  	return false;  }  |