All of lore.kernel.org
 help / color / mirror / Atom feed
From: Keir Fraser <keir.xen@gmail.com>
To: Cutter 409 <cutter409@gmail.com>, xen-devel@lists.xensource.com
Subject: Re: Foreign VCPU register change?
Date: Thu, 23 Aug 2012 18:54:54 +0100	[thread overview]
Message-ID: <CC5C2CFE.3CC0D%keir.xen@gmail.com> (raw)
In-Reply-To: <CC5C2BCA.3CC08%keir.xen@gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 2907 bytes --]

So, for example, one possibly-valid scheme would be:

 - vcpu_pause_nosync() from the vmexit handler

 - vcpu_sleep_sync() at the start of the domctl
 - vcpu_unpause() at the end of the domctl

HTH,
 Keir


On 23/08/2012 18:49, "Keir Fraser" <keir.xen@gmail.com> wrote:

> FWIW I would expect your approach to basically work.
> 
> Except... Does your domctl do a vcpu_pause()/vcpu_unpause() on the vcpu? This
> will ensure that the vcpu is both fully de-scheduled, and all of its register
> state is synced back into its vcpu structure.
> 
> Otherwise you race the vcpu_sleep_nosync() -- and that¹s assuming you also
> have a reason for that vcpu to sleep (e.g., non-zero pause counter), else
> vcpu_sleep_*() operations do nothing!
> 
> In short, your problems are almost certainly something to do with the
> subtleties of actually putting a vcpu properly to sleep.
> 
>  -- Keir
> 
> 
> On 23/08/2012 18:37, "Cutter 409" <cutter409@gmail.com> wrote:
> 
>> I'm making the register change directly from the hypervisor, inside of the
>> domctl code. 
>> 
>> It's a custom domctl that I've added. I'll look into what setcontext does
>> after it modifies the register values, though.
>> 
>> Thank you!
>> 
>> On Thu, Aug 23, 2012 at 1:34 PM, Keir Fraser <keir.xen@gmail.com> wrote:
>>> On 23/08/2012 18:25, "Cutter 409" <cutter409@gmail.com> wrote:
>>> 
>>>> > With Xen-4.1.2:
>>>> >
>>>> > I'm trying to change a register value in a paused vmx vcpu. The general
>>>> > process looks like this:
>>>> >
>>>> > 1. Some vmexit calls vcpu_sleep_nosync(v) on the vcpu
>>>> > 2. From dom0, I issue a domctl to change a register via
>>>> > v->arch.guest_context.user_reg, then vcpu_wake(v)
>>> 
>>> Which domctl? From dom0 userspace you can use the libxc functions
>>> xc_vcpu_getcontext() and xc_vcpu_setcontext() to read/modify register state.
>>> 
>>> You can read the libxc sources to see what hypercall these map to, if you
>>> don't want to use libxc for any reason.
>>> 
>>>  -- Keir
>>> 
>>>> > However, the guest register does not seem to be changed when I do it this
>>>> way.
>>>> > Is there something I need to do to mark the registers as "dirty" ? Is
>>>> there a
>>>> > way to force the foreign vcpu to update the changed registers? Or maybe I
>>>> just
>>>> > have to change the registers somewhere else?
>>>> >
>>>> > I've tried directly using vmcs_enter(v), __vmwrite(), vmcs_exit(v) also,
>>>> but
>>>> > that doesn't seem to make a change either.
>>>> >
>>>> > Thanks!
>>>> >
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > Xen-devel mailing list
>>>> > Xen-devel@lists.xen.org
>>>> > http://lists.xen.org/xen-devel
>>> 
>>> 
>> 
>> 
>> 
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xen.org
>> http://lists.xen.org/xen-devel
> 


[-- Attachment #1.2: Type: text/html, Size: 4278 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2012-08-23 17:54 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-23 17:25 Foreign VCPU register change? Cutter 409
2012-08-23 17:34 ` Keir Fraser
2012-08-23 17:37   ` Cutter 409
2012-08-23 17:49     ` Keir Fraser
2012-08-23 17:54       ` Keir Fraser [this message]
2012-08-23 18:11         ` Cutter 409
2012-08-23 18:55           ` Keir Fraser
2012-08-23 21:59             ` Cutter 409

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CC5C2CFE.3CC0D%keir.xen@gmail.com \
    --to=keir.xen@gmail.com \
    --cc=cutter409@gmail.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.