|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V11 PATCH 00/21]PVH xen: Phase I, Version 11 patches...
On Tue, 27 Aug 2013 18:05:00 +0100
George Dunlap <George.Dunlap@xxxxxxxxxxxxx> wrote:
> On Sat, Aug 24, 2013 at 1:40 AM, Mukesh Rathor
> <mukesh.rathor@xxxxxxxxxx> wrote:
> > On Fri, 23 Aug 2013 13:05:08 +0100
> > "Jan Beulich" <JBeulich@xxxxxxxx> wrote:
> >
> >> >>> On 23.08.13 at 13:15, George Dunlap
> >> >>> <George.Dunlap@xxxxxxxxxxxxx> wrote:
> >> > On Fri, Aug 23, 2013 at 9:49 AM, Jan Beulich <JBeulich@xxxxxxxx>
> >> > wrote:
> >> >>>>> On 23.08.13 at 03:18, Mukesh Rathor
.......
> >> Fine with me, but perhaps Mukesh won't be that happy...
> >
> > It's OK. I'd like this to be merged in asap so I and others can
> > working on the FIXME's right away...
>
> I'm still waiting on the toolstack changes that are needed to actually
> put it in PVH mode before I can test it.
Also, for V11 you'd need following patch for linux:
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index 7cd47a7..747057e 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -94,8 +94,33 @@ static void __cpuinit cpu_bringup(void)
wmb(); /* make sure everything is out */
}
+static void pvh_set_bringup_context(void)
+{
+ int cpu = smp_processor_id();
+
+ load_percpu_segment(cpu);
+ switch_to_new_gdt(smp_processor_id());
+
+ /* loadsegment(es, 0); */
+
+ __asm__ __volatile__ (
+ "movl %0,%%ds\n"
+ "movl %0,%%ss\n"
+ "pushq %%rax\n"
+ "leaq 1f(%%rip),%%rax\n"
+ "pushq %%rax\n"
+ "retfq\n"
+ "1:\n"
+ : : "r" (__KERNEL_DS), "a" (__KERNEL_CS) : "memory");
+}
+
+
static void __cpuinit cpu_bringup_and_idle(void)
{
+ if (xen_feature(XENFEAT_auto_translated_physmap) &&
+ xen_feature(XENFEAT_supervisor_mode_kernel))
+ pvh_set_bringup_context();
+
cpu_bringup();
cpu_idle();
}
@@ -302,38 +327,23 @@ cpu_initialize_context(unsigned int cpu, struct
task_struct *idle)
gdt = get_cpu_gdt_table(cpu);
- ctxt->flags = VGCF_IN_KERNEL;
- ctxt->user_regs.ss = __KERNEL_DS;
#ifdef CONFIG_X86_32
ctxt->user_regs.fs = __KERNEL_PERCPU;
ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
#else
+ /* Note: PVH is not yet supported on x86_32. */
ctxt->gs_base_kernel = per_cpu_offset(cpu);
#endif
ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
- if (xen_feature(XENFEAT_auto_translated_physmap) &&
- xen_feature(XENFEAT_supervisor_mode_kernel)) {
- /* Note: PVH is not supported on x86_32. */
-#ifdef CONFIG_X86_64
- ctxt->user_regs.ds = __KERNEL_DS;
- ctxt->user_regs.es = 0;
- ctxt->user_regs.gs = 0;
-
- /* GUEST_GDTR_BASE and */
- ctxt->u.pvh.gdtaddr = (unsigned long)gdt;
- /* GUEST_GDTR_LIMIT in the VMCS. */
- ctxt->u.pvh.gdtsz = (unsigned long)(GDT_SIZE - 1);
-
- ctxt->gs_base_user = (unsigned long)
- per_cpu(irq_stack_union.gs_base, cpu);
-#endif
- } else {
+ if (!xen_feature(XENFEAT_auto_translated_physmap)) {
+ 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);
@@ -359,13 +369,12 @@ cpu_initialize_context(unsigned int cpu, struct
task_struct *idle)
(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.cs = __KERNEL_CS;
- ctxt->user_regs.esp = idle->thread.sp0 - sizeof(struct pt_regs);
- 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_mfn(swapper_pg_dir));
-
if (HYPERVISOR_vcpu_op(VCPUOP_initialise, cpu, ctxt))
BUG();
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |