[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 10/18 V2]: PVH xen: introduce vmx_pvh.c and pvh.c
On Mon, Apr 01, 2013 at 06:26:45PM -0700, Mukesh Rathor wrote: > On Mon, 18 Mar 2013 12:32:06 -0400 > Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> wrote: > > > > > > +} > > > + > > > +typedef unsigned long pvh_hypercall_t( > > > + unsigned long, unsigned long, unsigned long, unsigned long, > > > unsigned long, > > > + unsigned long); > > > > No way to re-use the something standard? I am not sure what is 'PVH' > > specific to it? It looks like a garden variety normal hypercalls. > > It does use standard do_xx calls, PV goes thru it's own table, HVM thru > its own, and PVH thru its own. This was suggested to me early on, and > it's easier this way since HVM and PVH are not same hcalls. I meant the typedef. > > > > + rc = 0; > > > + > > > + dbgp1("msr read c:%lx a:%lx d:%lx RIP:%lx RSP:%lx\n", > > > regs->ecx, regs->eax, > > > + regs->edx, regs->rip, regs->rsp); > > > + return rc; > > > > This function looks to return 0 (or X86EMUL_OKAY) irregardless of the > > MSR? Perhaps just make it return X86EMUL_OKAY without bothering to > > use 'rc'? > > > > > +} > > > + > > > +/* returns : 0 success */ > > > +static int vmxit_msr_write(struct cpu_user_regs *regs) > > > +{ > > > + uint64_t msr_content = (uint32_t)regs->eax | > > > ((uint64_t)regs->edx << 32); > > > + int rc=1; > > > > X86EMUL_UNHANDLEABLE > > > > > + > > > + dbgp1("PVH: msr write:0x%lx. eax:0x%lx edx:0x%lx\n", > > > regs->ecx, > > > + regs->eax,regs->edx); > > > + > > > + if ( hvm_msr_write_intercept(regs->ecx, msr_content) == > > > X86EMUL_OKAY ) { > > > + vmx_update_guest_eip(); > > > + rc = 0; > > > > X86EMUL_OKAY > > No, hide the X96EMUL_* from the caller of this function which deals > with rc or non-zero. In that case please make that part of the comment at the start. It says: 0 success. But nothing about the failure path. > > > > + } else if (vector == TRAP_gp_fault) { > > > + regs->error_code = __vmread(VM_EXIT_INTR_ERROR_CODE); > > > + /* hvm_inject_hw_exception(TRAP_gp_fault, > > > regs->error_code); */ > > > > So how come we don't inject it in? > > Notice the exception bitmap doesn't allow GP vmexits. But it helps > tremendously with debug to have this here. I often have this enabled > for debug. So #ifdef DEBUG ? > > > > + rc = 1; > > > > Huh? Not X86_EMUL_OK? > > No. there's no x86 emulation going on here?? > > > > > + if (regp == NULL) > > > + break; > > > + > > > + /* pl don't embed switch statements */ > > > + if (cr == 0) > > > + rc = access_cr0(regs, acc_typ, regp); > > > + else if (cr == 3) { > > > + printk("PVH: d%d: unexpected cr3 access vmexit. > > > rip:%lx\n", > > > + current->domain->domain_id, regs->rip); > > > + domain_crash_synchronous(); > > > > Uh? Why wouldn't we want to handle it? > > Guest does it natively. Ah, please put that in a comment right above it. > > > > > +} > > > + > > > +/* NOTE: a PVH sets IOPL natively by setting bits in the eflags > > > and not by > > > + * hypercalls used by a PV */ > > > > > > Ahh, so there are now five? PV hypercall families that should not be > > used: > > > > - PHYSDEVOP_set_iopl (which I think in your earlier patch you did > > not check for?) > > - HYPERVISOR_update_va_mapping (for all the MMU stuff) > > - HYPERVISOR_update_descriptor (segments and such) > > - HYPERVISOR_fpu_taskswitch (you are doing it in the above function) > > - HYPERVISOR_set_trap_table (again, LDT and GDT are now done via HVM) > > - HYPERVISOR_set_segment_base > > - HYPERVISOR_set_gdt > > - HYPERVISOR_tmem > > .. and host of other. > > > > This should be documented somewhere in docs? > > Perhaps in docs/misc/pvh.txt and just outline which ones are not to > > be used anymore? > > I am keeping track of all doc stuff, lets document in the end when I > enable PVH. We'll be changing stuff for a short while. Why not make this 'doc stuff' part of the patches? That way when you are done with one item you can have a patch to remove it out the TODO list. Also this way other folks can look at it and if they have time help you on some of the TODOs. > > > Could you use 'cpuid' macro defined in processor.h? > > since we know in this fucntion we are on intel, we can just do cpuid. > the macro has somw quirks for cyrix cpus, and clears rcx. Besides this > is user mode cpuid that will exactly be like this on a pure PV guest. I am not following you. Is the reason you are doing this b/c the macro clears rcx? > > thanks, > mukesh _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |