|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] [PATCH 4/5][RFC] lwp: adding support for AMD lightweight
>>> On 11.02.11 at 17:29, Wei Huang <wei.huang2@xxxxxxx> wrote:
>--- a/xen/arch/x86/i387.c Thu Feb 10 16:25:09 2011 -0600
>+++ b/xen/arch/x86/i387.c Thu Feb 10 16:55:27 2011 -0600
>@@ -65,6 +65,55 @@
> static void init_fpu(void);
> static void restore_fpu(struct vcpu *v);
>
>+/* Save AMD LWP */
>+void xsave_lwp(struct vcpu *v)
>+{
>+ uint64_t lwpcb;
>+ bool_t ts;
>+ struct xsave_struct *xsave_area = v->arch.xsave_area;
>+
>+ if ( cpu_has_lwp )
>+ {
>+ /* Has LWP been used? */
>+ rdmsrl(MSR_AMD_LWP_CBADDR, lwpcb);
There's no way to track LWP-using state for a vCPU, is there?
rdmsr seems pretty expensive for being used in the context
switch unconditionally (on CPUs supporting LWP)...
>+ if ( !lwpcb ) {
>+ /* Guest might have turned off LWP. So clean the bit here. */
>+ xsave_area->xsave_hdr.xstate_bv &= ~XSTATE_LWP;
>+ return;
>+ }
>+
>+ /* Disable TS temporarily to avoid recursion. */
>+ ts = read_cr0() & X86_CR0_TS;
>+ clts();
>+ xsave(v, XSTATE_LWP);
>+ if ( ts )
>+ stts();
Together with the xrstor_lwp() ones, quite a few manipulations of
CR0, and hence making context switch between two LWP-using
vcpus pretty expensive. I'm sure some of this redundancy can be
eliminated.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|