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

Re: [Xen-devel] [RFC PATCH v2 13/22] xen/arm: its: Add virtual ITS command support



On Tue, 28 Apr 2015, Vijay Kilari wrote:
> On Thu, Apr 2, 2015 at 7:17 PM, Julien Grall <julien.grall.oss@xxxxxxxxx> 
> wrote:
> > Hi Ian,
> >
> > On 02/04/2015 12:18, Ian Campbell wrote:
> >>
> >> On Thu, 2015-04-02 at 12:06 +0100, Julien Grall wrote:
> >>
> >>>> Can we just enqueue with the hardware and use the guest vcpu polling
> >>>> loop to trigger us to check for completion?
> >>>
> >>>
> >>> Enqueue may be long. I was thinking about suggesting to use a tasklet
> >>> for processing ITS command.
> >>
> >>
> >> We don't need to enqueue everything the guest gives us at once, we could
> >> only do a subset and pickup the rest later as things complete at the
> >> physical ITS.
> >
> >
> > That would require more tracking. Anyway, I think that would work.
> 
> Sorry for late reply. Could not get time to work on this.
> 
> Approach 1: (Using completion interrupt)
> ----------------
> 1) Create dummy device for each virtual ITS when virtual its is
> created for a domain
>     OR Allocate one interrupt number for each virtual ITS from the one
> single dummy device
> 
> 2) Trap on CWRITER
> 3) Take vits lock
> 4)     Read a Virtual Command from Virtual Command Queue
> 5)     Translate Virtual command to Physical command
> 5)  Release vits lock
> 6) Take physical ITS lock
> 7)      Post physical commands + Append INT command
> 8) Release physical ITS lock
> 9) Return from CWRITER trap and let VCPU poll in EL1 (kernel) for CREADER 
> update
>     which indicates completion of command.
> 10) On receiving interrupt, Update CREADER of this virtual ITS
> 
> Pros:
>     - VCPU polls in EL1.
> 
> Cons:
>     - Complexity in creating & managing dummy device.
> 
> Approach 2:
> ----------------
> I thought of below approach where in we reduce locking time and no need
> of Interrupt.
> 
> 1) Trap on CWRITER
> 2) Take vits lock
> 3)     Read _all_ or 2 Virtual Commands from Virtual Command Queue
> 4)     Translate _all_ or 2 Virtual commands to Physical commands
> 5)  Release vits lock
> 6) Take physical ITS lock
> 7)      Post physical commands
> 8) Release physical ITS lock
> 9) Poll for completion of command and return from CWRITER trap.
> 
> Pros:
>     - Simple approach
> Cons:
>     - VCPU polls in EL2

I think we'll have to go with Approach 1.

The problem with Approach 2 is that we would need to watch out for
sequences of guest ITS commands that could cause Xen to poll for too
long and lock up.



> >
> >> I would expect Xen itself to use the second option at the host level,
> >> which would then drive the completion via the vGITS_CREADR or the
> >> guest's virtualised interrupt.
> >>
> >> That means the pCPU is free during the ITS processing, which is surely
> >> what we want.
> >
> >
> > Right, that would be the best solution for Xen.
> >
> > Although, the would mean diverging from Linux driver (see discussion on
> > patch #6). But I think it's inevitable we can't have the same driver close
> > to Linux.
> >
> >>> A guest would be buggy if it doesn't implement one of this solution. And
> >>> therefore may not run on real h/w.
> >>
> >>
> >> I was more concerned about it wedging the hypervisor somehow with a
> >> large number of completed but not released operations.
> >
> >
> > We don't have to worry about released operations. Once it acknowledge (via
> > the above completion notification) the command can be discard in the ITS
> > driver.
> >
> > Regards,
> >
> > --
> > Julien Grall
> 

_______________________________________________
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®.