config SUN_LDOMS
        bool "Sun Logical Domains support"
-       select HOTPLUG_CPU
        help
          Say Y here is you want to support virtual devices via
          Logical Domains.
 
                   irq.o ptrace.o time.o sys_sparc.o signal.o \
                   unaligned.o central.o pci.o starfire.o semaphore.o \
                   power.o sbus.o iommu_common.o sparc64_ksyms.o chmc.o \
-                  visemul.o prom.o of_device.o hvapi.o sstate.o mdesc.o \
-                  hvtramp.o
+                  visemul.o prom.o of_device.o hvapi.o sstate.o mdesc.o
 
 obj-$(CONFIG_STACKTRACE) += stacktrace.o
 obj-$(CONFIG_PCI)       += ebus.o isa.o pci_common.o pci_iommu.o \
                            pci_psycho.o pci_sabre.o pci_schizo.o \
                            pci_sun4v.o pci_sun4v_asm.o pci_fire.o
-obj-$(CONFIG_SMP)       += smp.o trampoline.o
+obj-$(CONFIG_SMP)       += smp.o trampoline.o hvtramp.o
 obj-$(CONFIG_SPARC32_COMPAT) += sys32.o sys_sparc32.o signal32.o
 obj-$(CONFIG_BINFMT_ELF32) += binfmt_elf32.o
 obj-$(CONFIG_BINFMT_AOUT32) += binfmt_aout32.o
 
 static void domain_panic_data(struct ldc_channel *lp,
                              struct ds_cap_state *cp,
                              void *buf, int len);
+#ifdef CONFIG_HOTPLUG_CPU
 static void dr_cpu_data(struct ldc_channel *lp,
                        struct ds_cap_state *cp,
                        void *buf, int len);
+#endif
 static void ds_pri_data(struct ldc_channel *lp,
                        struct ds_cap_state *cp,
                        void *buf, int len);
                .service_id     = "domain-panic",
                .data           = domain_panic_data,
        },
+#ifdef CONFIG_HOTPLUG_CPU
        {
                .service_id     = "dr-cpu",
                .data           = dr_cpu_data,
        },
+#endif
        {
                .service_id     = "pri",
                .data           = ds_pri_data,
        panic("PANIC requested by LDOM manager.");
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
 struct dr_cpu_tag {
        __u64                           req_num;
        __u32                           type;
        return kern_base + (val - KERNBASE);
 }
 
-void ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg)
-{
-       extern unsigned long sparc64_ttable_tl0;
-       extern unsigned long kern_locked_tte_data;
-       extern int bigkernel;
-       struct hvtramp_descr *hdesc;
-       unsigned long trampoline_ra;
-       struct trap_per_cpu *tb;
-       u64 tte_vaddr, tte_data;
-       unsigned long hv_err;
-
-       hdesc = kzalloc(sizeof(*hdesc), GFP_KERNEL);
-       if (!hdesc) {
-               printk(KERN_ERR PFX "ldom_startcpu_cpuid: Cannot allocate "
-                      "hvtramp_descr.\n");
-               return;
-       }
-
-       hdesc->cpu = cpu;
-       hdesc->num_mappings = (bigkernel ? 2 : 1);
-
-       tb = &trap_block[cpu];
-       tb->hdesc = hdesc;
-
-       hdesc->fault_info_va = (unsigned long) &tb->fault_info;
-       hdesc->fault_info_pa = kimage_addr_to_ra(&tb->fault_info);
-
-       hdesc->thread_reg = thread_reg;
-
-       tte_vaddr = (unsigned long) KERNBASE;
-       tte_data = kern_locked_tte_data;
-
-       hdesc->maps[0].vaddr = tte_vaddr;
-       hdesc->maps[0].tte   = tte_data;
-       if (bigkernel) {
-               tte_vaddr += 0x400000;
-               tte_data  += 0x400000;
-               hdesc->maps[1].vaddr = tte_vaddr;
-               hdesc->maps[1].tte   = tte_data;
-       }
-
-       trampoline_ra = kimage_addr_to_ra(hv_cpu_startup);
-
-       hv_err = sun4v_cpu_start(cpu, trampoline_ra,
-                                kimage_addr_to_ra(&sparc64_ttable_tl0),
-                                __pa(hdesc));
-}
-
 /* DR cpu requests get queued onto the work list by the
  * dr_cpu_data() callback.  The list is protected by
  * ds_lock, and processed by dr_cpu_process() in order.
                schedule_work(&dr_cpu_work);
        }
 }
+#endif
 
 struct ds_pri_msg {
        __u64                           req_num;
 
        spin_unlock_irqrestore(&itc_sync_lock, flags);
 }
 
+#if defined(CONFIG_SUN_LDOMS) && defined(CONFIG_HOTPLUG_CPU)
+static void ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg)
+{
+       extern unsigned long sparc64_ttable_tl0;
+       extern unsigned long kern_locked_tte_data;
+       extern int bigkernel;
+       struct hvtramp_descr *hdesc;
+       unsigned long trampoline_ra;
+       struct trap_per_cpu *tb;
+       u64 tte_vaddr, tte_data;
+       unsigned long hv_err;
+
+       hdesc = kzalloc(sizeof(*hdesc), GFP_KERNEL);
+       if (!hdesc) {
+               printk(KERN_ERR PFX "ldom_startcpu_cpuid: Cannot allocate "
+                      "hvtramp_descr.\n");
+               return;
+       }
+
+       hdesc->cpu = cpu;
+       hdesc->num_mappings = (bigkernel ? 2 : 1);
+
+       tb = &trap_block[cpu];
+       tb->hdesc = hdesc;
+
+       hdesc->fault_info_va = (unsigned long) &tb->fault_info;
+       hdesc->fault_info_pa = kimage_addr_to_ra(&tb->fault_info);
+
+       hdesc->thread_reg = thread_reg;
+
+       tte_vaddr = (unsigned long) KERNBASE;
+       tte_data = kern_locked_tte_data;
+
+       hdesc->maps[0].vaddr = tte_vaddr;
+       hdesc->maps[0].tte   = tte_data;
+       if (bigkernel) {
+               tte_vaddr += 0x400000;
+               tte_data  += 0x400000;
+               hdesc->maps[1].vaddr = tte_vaddr;
+               hdesc->maps[1].tte   = tte_data;
+       }
+
+       trampoline_ra = kimage_addr_to_ra(hv_cpu_startup);
+
+       hv_err = sun4v_cpu_start(cpu, trampoline_ra,
+                                kimage_addr_to_ra(&sparc64_ttable_tl0),
+                                __pa(hdesc));
+}
+#endif
+
 extern void sun4v_init_mondo_queues(int use_bootmem, int cpu, int alloc, int load);
 
 extern unsigned long sparc64_cpu_startup;
                /* Alloc the mondo queues, cpu will load them.  */
                sun4v_init_mondo_queues(0, cpu, 1, 0);
 
-#ifdef CONFIG_SUN_LDOMS
+#if defined(CONFIG_SUN_LDOMS) && defined(CONFIG_HOTPLUG_CPU)
                if (ldom_domaining_enabled)
                        ldom_startcpu_cpuid(cpu,
                                            (unsigned long) cpu_new_thread);
 
 extern void ldom_set_var(const char *var, const char *value);
 extern void ldom_reboot(const char *boot_command);
 extern void ldom_power_off(void);
-extern void ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg);
 
 /* The event handler will be evoked when link state changes
  * or data becomes available on the receive side.