|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 RFC 2/4] x86/PV: support data breakpoint extension registers
>>> On 27.03.14 at 17:23, <Ian.Campbell@xxxxxxxxxx> wrote:
> On Thu, 2014-03-27 at 16:03 +0000, Jan Beulich wrote:
>> >>> On 27.03.14 at 16:28, <Ian.Campbell@xxxxxxxxxx> wrote:
>> > Do the protocol docs in xg_save_restore need updating due to this
>> > change?
>>
>> Not sure about that - this doesn't seem to talk about what's inside
>> the "bodies".
>
> Is this extending the "VCPU context data"? or one of the XC_SAVE_ID_*
> things? I think it would be worth extending that to indicate the new
> "optional" data, where and what it is etc.
Yeah, I could probably add a note to the "extv" thing, even if it
doesn't really fit.
>> > How does N->N+1 migration work out?
>>
>> Since the structure size grows, and that size is embedded in the
>> structure, input coming from N will be treated as not having any
>> MSRs.
>
> This is the size of the "extv" block in the header phase?
No, the "size" member of struct xen_domctl_ext_vcpucontext.
>> >> @@ -2130,9 +2162,25 @@ int xc_domain_restore(xc_interface *xch,
>> >> goto vcpu_ext_state_restore;
>> >> memcpy(&domctl.u.ext_vcpucontext, vcpup, 128);
>> >> vcpup += 128;
>> >> + if ( domctl.u.ext_vcpucontext.msr_count )
>> >> + {
>> >> + size_t sz = domctl.u.ext_vcpucontext.msr_count *
>> >> sizeof(*msrs);
>> >> +
>> >> + msrs = xc_hypercall_buffer_alloc(xch, msrs, sz);
>> >> + if ( !msrs )
>> >> + {
>> >> + PERROR("No memory for vcpu%d MSRs", i);
>> >> + goto out;
>> >> + }
>> >> + memcpy(msrs, vcpup, sz);
>> >
>> > This seems to be opencoding the hypercall bounce buffer stuff to some
>> > extent.
>>
>> Just like in the xstate logic. Aiui there's no way currently for
>> do_domctl() to know that in some cases embedded handles need
>> following. Or at least I didn't spot it, so if there is a mechanism to
>> avoid this open coding, please point me at it.
>
> I didn't mean that do_domctl could do the bouncing, but rather than this
> code could itself use the bounce buffer stuff to bounce from vcpup into
> msrs automatically, i.e. avoiding the open coded memcpy.
>
> Something like:
> if ( domctl.u.ext_vcpucontext.msr_count )
> {
> /*const?*/size_t sz = domctl.u.ext_vcpucontext.msr_count *
> sizeof(*msrs);
> DECLARE_HYPERCALL_BOUNCE(vcpup, sz,
> XC_HYPERCALL_BUFFER_BOUNCE_IN);
>
> if ( xc_hypercall_bounce_pre(xch, vcpup) )
> badness
>
> domclt.cmd = ...;
> domctl.domain = ...; etc
> set_xen_guest_handle(domctl.u.ext_vcpucontext.msrs, vcpup);
>
> frc = do_domctl(xch, &domctl)
>
> xc_hypercall_boucne_post(xch, vcpup)
> }
>
> Or it might be clearer to use
> DECLARE_NAMED_HYPERCALL_BOUNCE(msrs, vcpup, sz, ..._BOUNCE_IN)
> so you can use "msrs" for the remainder.
>
> Lastly you can pass size as 0 in the declaration and use
> HYPERCALL_BOUNCE_SET_SIZE, if that works better.
I'll see if I can make this build (for testing I have to rely on AMD
anyway).
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |