Sfoglia il codice sorgente

xen: balloon: allow PVMMU interfaces to be compiled out

The ARM platform has no concept of PVMMU and therefor no
HYPERVISOR_update_va_mapping et al. Allow this code to be compiled out
when not required.

In some similar situations (e.g. P2M) we have defined dummy functions
to avoid this, however I think we can/should draw the line at dummying
out actual hypercalls.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Ian Campbell 13 anni fa
parent
commit
c2374bf57e
3 ha cambiato i file con 8 aggiunte e 1 eliminazioni
  1. 1 0
      arch/x86/xen/Kconfig
  2. 3 0
      drivers/xen/Kconfig
  3. 4 1
      drivers/xen/balloon.c

+ 1 - 0
arch/x86/xen/Kconfig

@@ -6,6 +6,7 @@ config XEN
 	bool "Xen guest support"
 	bool "Xen guest support"
 	select PARAVIRT
 	select PARAVIRT
 	select PARAVIRT_CLOCK
 	select PARAVIRT_CLOCK
+	select XEN_HAVE_PVMMU
 	depends on X86_64 || (X86_32 && X86_PAE && !X86_VISWS)
 	depends on X86_64 || (X86_32 && X86_PAE && !X86_VISWS)
 	depends on X86_CMPXCHG && X86_TSC
 	depends on X86_CMPXCHG && X86_TSC
 	help
 	help

+ 3 - 0
drivers/xen/Kconfig

@@ -206,4 +206,7 @@ config XEN_MCE_LOG
 	  Allow kernel fetching MCE error from Xen platform and
 	  Allow kernel fetching MCE error from Xen platform and
 	  converting it into Linux mcelog format for mcelog tools
 	  converting it into Linux mcelog format for mcelog tools
 
 
+config XEN_HAVE_PVMMU
+       bool
+
 endmenu
 endmenu

+ 4 - 1
drivers/xen/balloon.c

@@ -359,6 +359,7 @@ static enum bp_state increase_reservation(unsigned long nr_pages)
 
 
 		set_phys_to_machine(pfn, frame_list[i]);
 		set_phys_to_machine(pfn, frame_list[i]);
 
 
+#ifdef CONFIG_XEN_HAVE_PVMMU
 		/* Link back into the page tables if not highmem. */
 		/* Link back into the page tables if not highmem. */
 		if (xen_pv_domain() && !PageHighMem(page)) {
 		if (xen_pv_domain() && !PageHighMem(page)) {
 			int ret;
 			int ret;
@@ -368,6 +369,7 @@ static enum bp_state increase_reservation(unsigned long nr_pages)
 				0);
 				0);
 			BUG_ON(ret);
 			BUG_ON(ret);
 		}
 		}
+#endif
 
 
 		/* Relinquish the page back to the allocator. */
 		/* Relinquish the page back to the allocator. */
 		ClearPageReserved(page);
 		ClearPageReserved(page);
@@ -416,13 +418,14 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
 
 
 		scrub_page(page);
 		scrub_page(page);
 
 
+#ifdef CONFIG_XEN_HAVE_PVMMU
 		if (xen_pv_domain() && !PageHighMem(page)) {
 		if (xen_pv_domain() && !PageHighMem(page)) {
 			ret = HYPERVISOR_update_va_mapping(
 			ret = HYPERVISOR_update_va_mapping(
 				(unsigned long)__va(pfn << PAGE_SHIFT),
 				(unsigned long)__va(pfn << PAGE_SHIFT),
 				__pte_ma(0), 0);
 				__pte_ma(0), 0);
 			BUG_ON(ret);
 			BUG_ON(ret);
 		}
 		}
-
+#endif
 	}
 	}
 
 
 	/* Ensure that ballooned highmem pages don't have kmaps. */
 	/* Ensure that ballooned highmem pages don't have kmaps. */