static void __init xen_pv_smp_prepare_boot_cpu(void) { BUG_ON(smp_processor_id() != 0); native_smp_prepare_boot_cpu(); if (!xen_feature(XENFEAT_writable_page_tables)) /* We've switched to the "real" per-cpu gdt, so make * sure the old memory can be recycled. */ make_lowmem_page_readwrite(xen_initial_gdt); #ifdef CONFIG_X86_32 /* * Xen starts us with XEN_FLAT_RING1_DS, but linux code * expects __USER_DS */ loadsegment(ds, __USER_DS); loadsegment(es, __USER_DS); #endif xen_filter_cpu_maps(); xen_setup_vcpu_info_placement(); /* * The alternative logic (which patches the unlock/lock) runs before * the smp bootup up code is activated. Hence we need to set this up * the core kernel is being patched. Otherwise we will have only * modules patched but not core code. */ xen_init_spinlocks(); }
static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus) { native_smp_prepare_cpus(max_cpus); WARN_ON(xen_smp_intr_init(0)); xen_init_lock_cpu(0); xen_init_spinlocks(); }
static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus) { native_smp_prepare_cpus(max_cpus); WARN_ON(xen_smp_intr_init(0)); if (!xen_have_vector_callback) return; xen_init_lock_cpu(0); xen_init_spinlocks(); }
void __init xen_smp_init(void) { smp_ops = xen_smp_ops; xen_fill_possible_map(); xen_init_spinlocks(); }
void __init xen_smp_init(void) { memcpy((void *)&smp_ops, &xen_smp_ops, sizeof smp_ops); xen_fill_possible_map(); xen_init_spinlocks(); }