xen/x86: Remove PVH support
We are replacing existing PVH guests with new implementation. We are keeping xen_pvh_domain() macro (for now set to zero) because when we introduce new PVH implementation later in this series we will reuse current PVH-specific code (xen_pvh_gnttab_setup()), and that code is conditioned by 'if (xen_pvh_domain())'. (We will also need a noop xen_pvh_domain() for !CONFIG_XEN_PVH). Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reviewed-by: Juergen Gross <jgross@suse.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
@@ -99,18 +99,8 @@ static void cpu_bringup(void)
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: cpu parameter is only relevant for PVH. The reason for passing it
|
||||
* is we can't do smp_processor_id until the percpu segments are loaded, for
|
||||
* which we need the cpu number! So we pass it in rdi as first parameter.
|
||||
*/
|
||||
asmlinkage __visible void cpu_bringup_and_idle(int cpu)
|
||||
asmlinkage __visible void cpu_bringup_and_idle(void)
|
||||
{
|
||||
#ifdef CONFIG_XEN_PVH
|
||||
if (xen_feature(XENFEAT_auto_translated_physmap) &&
|
||||
xen_feature(XENFEAT_supervisor_mode_kernel))
|
||||
xen_pvh_secondary_vcpu_init(cpu);
|
||||
#endif
|
||||
cpu_bringup();
|
||||
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
|
||||
}
|
||||
@@ -404,61 +394,47 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
|
||||
gdt = get_cpu_gdt_table(cpu);
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
/* Note: PVH is not yet supported on x86_32. */
|
||||
ctxt->user_regs.fs = __KERNEL_PERCPU;
|
||||
ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
|
||||
#endif
|
||||
memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
|
||||
|
||||
if (!xen_feature(XENFEAT_auto_translated_physmap)) {
|
||||
ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
|
||||
ctxt->flags = VGCF_IN_KERNEL;
|
||||
ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */
|
||||
ctxt->user_regs.ds = __USER_DS;
|
||||
ctxt->user_regs.es = __USER_DS;
|
||||
ctxt->user_regs.ss = __KERNEL_DS;
|
||||
ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
|
||||
ctxt->flags = VGCF_IN_KERNEL;
|
||||
ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */
|
||||
ctxt->user_regs.ds = __USER_DS;
|
||||
ctxt->user_regs.es = __USER_DS;
|
||||
ctxt->user_regs.ss = __KERNEL_DS;
|
||||
|
||||
xen_copy_trap_info(ctxt->trap_ctxt);
|
||||
xen_copy_trap_info(ctxt->trap_ctxt);
|
||||
|
||||
ctxt->ldt_ents = 0;
|
||||
ctxt->ldt_ents = 0;
|
||||
|
||||
BUG_ON((unsigned long)gdt & ~PAGE_MASK);
|
||||
BUG_ON((unsigned long)gdt & ~PAGE_MASK);
|
||||
|
||||
gdt_mfn = arbitrary_virt_to_mfn(gdt);
|
||||
make_lowmem_page_readonly(gdt);
|
||||
make_lowmem_page_readonly(mfn_to_virt(gdt_mfn));
|
||||
gdt_mfn = arbitrary_virt_to_mfn(gdt);
|
||||
make_lowmem_page_readonly(gdt);
|
||||
make_lowmem_page_readonly(mfn_to_virt(gdt_mfn));
|
||||
|
||||
ctxt->gdt_frames[0] = gdt_mfn;
|
||||
ctxt->gdt_ents = GDT_ENTRIES;
|
||||
ctxt->gdt_frames[0] = gdt_mfn;
|
||||
ctxt->gdt_ents = GDT_ENTRIES;
|
||||
|
||||
ctxt->kernel_ss = __KERNEL_DS;
|
||||
ctxt->kernel_sp = idle->thread.sp0;
|
||||
ctxt->kernel_ss = __KERNEL_DS;
|
||||
ctxt->kernel_sp = idle->thread.sp0;
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
ctxt->event_callback_cs = __KERNEL_CS;
|
||||
ctxt->failsafe_callback_cs = __KERNEL_CS;
|
||||
ctxt->event_callback_cs = __KERNEL_CS;
|
||||
ctxt->failsafe_callback_cs = __KERNEL_CS;
|
||||
#else
|
||||
ctxt->gs_base_kernel = per_cpu_offset(cpu);
|
||||
#endif
|
||||
ctxt->event_callback_eip =
|
||||
(unsigned long)xen_hypervisor_callback;
|
||||
ctxt->failsafe_callback_eip =
|
||||
(unsigned long)xen_failsafe_callback;
|
||||
ctxt->user_regs.cs = __KERNEL_CS;
|
||||
per_cpu(xen_cr3, cpu) = __pa(swapper_pg_dir);
|
||||
}
|
||||
#ifdef CONFIG_XEN_PVH
|
||||
else {
|
||||
/*
|
||||
* The vcpu comes on kernel page tables which have the NX pte
|
||||
* bit set. This means before DS/SS is touched, NX in
|
||||
* EFER must be set. Hence the following assembly glue code.
|
||||
*/
|
||||
ctxt->user_regs.eip = (unsigned long)xen_pvh_early_cpu_init;
|
||||
ctxt->user_regs.rdi = cpu;
|
||||
ctxt->user_regs.rsi = true; /* entry == true */
|
||||
}
|
||||
ctxt->gs_base_kernel = per_cpu_offset(cpu);
|
||||
#endif
|
||||
ctxt->event_callback_eip =
|
||||
(unsigned long)xen_hypervisor_callback;
|
||||
ctxt->failsafe_callback_eip =
|
||||
(unsigned long)xen_failsafe_callback;
|
||||
ctxt->user_regs.cs = __KERNEL_CS;
|
||||
per_cpu(xen_cr3, cpu) = __pa(swapper_pg_dir);
|
||||
|
||||
ctxt->user_regs.esp = idle->thread.sp0 - sizeof(struct pt_regs);
|
||||
ctxt->ctrlreg[3] = xen_pfn_to_cr3(virt_to_gfn(swapper_pg_dir));
|
||||
if (HYPERVISOR_vcpu_op(VCPUOP_initialise, xen_vcpu_nr(cpu), ctxt))
|
||||
|
Reference in New Issue
Block a user