return 0;
  }
  postcore_initcall(xen_init_events);
 -/* XXX: only until balloon is properly working */
 -int alloc_xenballooned_pages(int nr_pages, struct page **pages, bool highmem)
 -{
 -      *pages = alloc_pages(highmem ? GFP_HIGHUSER : GFP_KERNEL,
 -                      get_order(nr_pages));
 -      if (*pages == NULL)
 -              return -ENOMEM;
 -      return 0;
 -}
 -EXPORT_SYMBOL_GPL(alloc_xenballooned_pages);
 -
 -void free_xenballooned_pages(int nr_pages, struct page **pages)
 -{
 -      kfree(*pages);
 -      *pages = NULL;
 -}
 -EXPORT_SYMBOL_GPL(free_xenballooned_pages);
+ 
 -EXPORT_SYMBOL_GPL(privcmd_call);
+ 
+ /* In the hypervisor.S file. */
+ EXPORT_SYMBOL_GPL(HYPERVISOR_event_channel_op);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_grant_table_op);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_xen_version);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_console_io);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_sched_op);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_hvm_op);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_memory_op);
+ EXPORT_SYMBOL_GPL(HYPERVISOR_physdev_op);
++EXPORT_SYMBOL_GPL(privcmd_call);
 
  ifneq ($(CONFIG_ARM),y)
 -obj-y += manage.o balloon.o
 +obj-y += manage.o
  obj-$(CONFIG_HOTPLUG_CPU)             += cpu_hotplug.o
  endif
 -obj-y += grant-table.o features.o events.o
+ obj-$(CONFIG_X86)                     += fallback.o
 +obj-y += grant-table.o features.o events.o balloon.o
  obj-y += xenbus/
  
  nostackp := $(call cc-option, -fno-stack-protector)
 
            ((m.addr + (nr_pages << PAGE_SHIFT)) != vma->vm_end) ||
            !privcmd_enforce_singleshot_mapping(vma)) {
                up_write(&mm->mmap_sem);
+               ret = -EINVAL;
                goto out;
        }
 +      if (xen_feature(XENFEAT_auto_translated_physmap)) {
 +              ret = alloc_empty_pages(vma, m.num);
 +              if (ret < 0) {
 +                      up_write(&mm->mmap_sem);
 +                      goto out;
 +              }
 +      }
  
        state.domain        = m.dom;
        state.vma           = vma;