[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4] x86: properly handle MSI-X unmask operation from guests




> -----Original Message-----
> From: Andrew Cooper [mailto:andrew.cooper3@xxxxxxxxxx]
> Sent: Sunday, November 24, 2013 12:20 AM
> To: Wu, Feng
> Cc: Jan Beulich; xen-devel; Auld, Will; Zhang, Xiantao; Nakajima, Jun
> Subject: Re: [Xen-devel] [PATCH v4] x86: properly handle MSI-X unmask
> operation from guests
> 
> On 23/11/13 01:40, Wu, Feng wrote:
> >
> >> -----Original Message-----
> >> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
> >> Sent: Saturday, November 23, 2013 12:19 AM
> >> To: Wu, Feng
> >> Cc: Nakajima, Jun; Auld, Will; Zhang, Xiantao; xen-devel
> >> Subject: Re: [PATCH v4] x86: properly handle MSI-X unmask operation from
> >> guests
> >>
> >>>>> On 22.11.13 at 02:08, "Wu, Feng" <feng.wu@xxxxxxxxx> wrote:
> >>> v1: Initial patch to handle this issue involving changing the hypercall
> interface
> >>> v2:Totally handled inside hypervisor.
> >>> v3:Change some logics of handling msi-x pending unmask operations.
> >>> v4:Some changes related to coding style according to Andrew Cooper's
> >> comments
> >>
> >> So this is _much_ less intrusive than what you did before - good!
> >>
> >>> --- a/xen/arch/x86/hvm/io.c
> >>> +++ b/xen/arch/x86/hvm/io.c
> >>> @@ -297,6 +297,9 @@ void hvm_io_assist(ioreq_t *p)
> >>>          break;
> >>>      }
> >>>
> >>> +    if ( msix_post_handler(curr) )
> >>> +        gdprintk(XENLOG_ERR, "msix_post_handler error\n");
> >>> +
> >>>      if ( p->state == STATE_IOREQ_NONE )
> >>>          vcpu_end_shutdown_deferral(curr);
> >> I think the addition should be moved into the body of this if(),
> >> so that it gets executed only upon completion of I/O, not when
> >> it e.g. need retrying.
> >>
> >> Also, XENLOG_ERR seems to heavy a message. XENLOG_WARN
> >> would be the highest I'd accept.
> >>
> >>> +int msix_post_handler(struct vcpu *v)
> >>> +{
> >>> +    int rc;
> >>> +
> >>> +    if ( v->arch.pending_msix_unmask.valid == 0 )
> >> Iff you keep this (see below), then boolean checks are
> >> conventionally done with ! rather than == 0.
> >>
> >>> +        return 0;
> >>> +
> >>> +    v->arch.pending_msix_unmask.valid = 0;
> >>> +
> >>> +    rc = msixtbl_write(v, v->arch.pending_msix_unmask.ctrl_address, 4,
> 0);
> >>> +    return rc != X86EMUL_OKAY ? -1 : 0;
> >> Make the function return bool_t, and then simply
> >>
> >>    return msixtbl_write(v, v->arch.pending_msix_unmask.ctrl_address, 4,
> 0) ==
> >> X86EMUL_OKAY;
> >>
> >>> +struct pending_msix_unmask_info
> >>> +{
> >>> +    unsigned long ctrl_address;
> >>> +    bool_t valid;
> >>> +};
> >>> +
> >>>  struct arch_vcpu
> >>>  {
> >>>      /*
> >>> @@ -439,6 +445,8 @@ struct arch_vcpu
> >>>
> >>>      /* A secondary copy of the vcpu time info. */
> >>>      XEN_GUEST_HANDLE(vcpu_time_info_t) time_info_guest;
> >>> +
> >>> +    struct pending_msix_unmask_info pending_msix_unmask;
> >> I don't think you need a separate boolean here - for one I don't
> >> think the address can reasonably be zero, and even if you have
> >> the bottom two bits available (as it being 4-byte aligned gets
> >> checked before you consume it).
> >
> > The boolean variant "valid", which is set in msixtbl_write(), means whether
> there is a
> > msix pending unmask, if there is, just clean this flag and unmask the msix 
> > in
> hardware,
> > otherwise we just do nothing. If removing "valid", how can I know whether
> there is a
> > msix pending unmask operation ? Thanks you!
> 
> Address can't reasonably be 0, meaning that an address of 0 indicates
> that an unmask is not pending.

In that case, we should make v->arch.pending_msix_unmask.ctrl_address 0 in
msix_post_handler() after unmasking the msix with this address, right?

> 
> ~Andrew

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.