Merge branches 'pm-cpufreq', 'pm-cpuidle', 'pm-devfreq', 'pm-opp' and 'pm-tools'
[linux-drm-fsl-dcu.git] / drivers / xen / balloon.c
index 3860d02729dcc4909798d778fa28f3c71c6eec8f..0b52d92cb2e52d03899dd410d8a58e7640c8d8d5 100644 (file)
@@ -92,7 +92,6 @@ EXPORT_SYMBOL_GPL(balloon_stats);
 
 /* We increase/decrease in batches which fit in a page */
 static xen_pfn_t frame_list[PAGE_SIZE / sizeof(unsigned long)];
-static DEFINE_PER_CPU(struct page *, balloon_scratch_page);
 
 
 /* List of ballooned pages, threaded through the mem_map array. */
@@ -423,22 +422,12 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
                page = pfn_to_page(pfn);
 
 #ifdef CONFIG_XEN_HAVE_PVMMU
-               /*
-                * Ballooned out frames are effectively replaced with
-                * a scratch frame.  Ensure direct mappings and the
-                * p2m are consistent.
-                */
                if (!xen_feature(XENFEAT_auto_translated_physmap)) {
                        if (!PageHighMem(page)) {
-                               struct page *scratch_page = get_balloon_scratch_page();
-
                                ret = HYPERVISOR_update_va_mapping(
                                                (unsigned long)__va(pfn << PAGE_SHIFT),
-                                               pfn_pte(page_to_pfn(scratch_page),
-                                                       PAGE_KERNEL_RO), 0);
+                                               __pte_ma(0), 0);
                                BUG_ON(ret);
-
-                               put_balloon_scratch_page();
                        }
                        __set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
                }
@@ -500,18 +489,6 @@ static void balloon_process(struct work_struct *work)
        mutex_unlock(&balloon_mutex);
 }
 
-struct page *get_balloon_scratch_page(void)
-{
-       struct page *ret = get_cpu_var(balloon_scratch_page);
-       BUG_ON(ret == NULL);
-       return ret;
-}
-
-void put_balloon_scratch_page(void)
-{
-       put_cpu_var(balloon_scratch_page);
-}
-
 /* Resets the Xen limit, sets new target, and kicks off processing. */
 void balloon_set_new_target(unsigned long target)
 {
@@ -605,61 +582,13 @@ static void __init balloon_add_region(unsigned long start_pfn,
        }
 }
 
-static int alloc_balloon_scratch_page(int cpu)
-{
-       if (per_cpu(balloon_scratch_page, cpu) != NULL)
-               return 0;
-
-       per_cpu(balloon_scratch_page, cpu) = alloc_page(GFP_KERNEL);
-       if (per_cpu(balloon_scratch_page, cpu) == NULL) {
-               pr_warn("Failed to allocate balloon_scratch_page for cpu %d\n", cpu);
-               return -ENOMEM;
-       }
-
-       return 0;
-}
-
-
-static int balloon_cpu_notify(struct notifier_block *self,
-                                   unsigned long action, void *hcpu)
-{
-       int cpu = (long)hcpu;
-       switch (action) {
-       case CPU_UP_PREPARE:
-               if (alloc_balloon_scratch_page(cpu))
-                       return NOTIFY_BAD;
-               break;
-       default:
-               break;
-       }
-       return NOTIFY_OK;
-}
-
-static struct notifier_block balloon_cpu_notifier = {
-       .notifier_call  = balloon_cpu_notify,
-};
-
 static int __init balloon_init(void)
 {
-       int i, cpu;
+       int i;
 
        if (!xen_domain())
                return -ENODEV;
 
-       if (!xen_feature(XENFEAT_auto_translated_physmap)) {
-               register_cpu_notifier(&balloon_cpu_notifier);
-
-               get_online_cpus();
-               for_each_online_cpu(cpu) {
-                       if (alloc_balloon_scratch_page(cpu)) {
-                               put_online_cpus();
-                               unregister_cpu_notifier(&balloon_cpu_notifier);
-                               return -ENOMEM;
-                       }
-               }
-               put_online_cpus();
-       }
-
        pr_info("Initialising balloon driver\n");
 
        balloon_stats.current_pages = xen_pv_domain()
@@ -696,15 +625,4 @@ static int __init balloon_init(void)
 
 subsys_initcall(balloon_init);
 
-static int __init balloon_clear(void)
-{
-       int cpu;
-
-       for_each_possible_cpu(cpu)
-               per_cpu(balloon_scratch_page, cpu) = NULL;
-
-       return 0;
-}
-early_initcall(balloon_clear);
-
 MODULE_LICENSE("GPL");