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

Re: [Xen-devel] [PATCH v6 09/16] x86/hvm: limit reps to avoid the need to handle retry



> -----Original Message-----
> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
> Sent: 09 July 2015 14:38
> To: Paul Durrant
> Cc: Andrew Cooper; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir (Xen.org)
> Subject: RE: [PATCH v6 09/16] x86/hvm: limit reps to avoid the need to
> handle retry
> 
> >>> On 09.07.15 at 14:50, <Paul.Durrant@xxxxxxxxxx> wrote:
> >> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
> >> Sent: 09 July 2015 13:04
> >> >>> On 09.07.15 at 13:11, <Paul.Durrant@xxxxxxxxxx> wrote:
> >> >> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
> >> >> Sent: 09 July 2015 11:05
> >> >> >>> On 03.07.15 at 18:25, <paul.durrant@xxxxxxxxxx> wrote:
> >> >> > @@ -287,17 +271,56 @@ static int hvmemul_do_io_addr(
> >> >> >      bool_t is_mmio, paddr_t addr, unsigned long *reps,
> >> >> >      unsigned int size, uint8_t dir, bool_t df, paddr_t ram_gpa)
> >> >> >  {
> >> >> > -    struct page_info *ram_page;
> >> >> > +    struct vcpu *v = current;
> >> >> > +    unsigned long ram_gmfn = paddr_to_pfn(ram_gpa);
> >> >> > +    unsigned int page_off = ram_gpa & (PAGE_SIZE - 1);
> >> >> > +    struct page_info *ram_page[2];
> >> >> > +    int nr_pages = 0;
> >> >>
> >> >> unsigned int
> >> >
> >> > No, it's intentionally signed because the unwind code at the end of the
> >> > function is:
> >> >
> >> >     while ( --nr_pages >= 0 )
> >> >         hvmemul_release_page(ram_page[nr_pages]);
> >> >
> >> > I.e. the loop terminates when nr_pages gets to -1.
> >>
> >>      while ( nr_pages-- )
> >>          hvmemul_release_page(ram_page[nr_pages]);
> >>
> >
> > But that wouldn't be correct, since the loop would try to release
> > ram_page[1] and ram_page[0] in the case where only ram_page[0] had
> been
> > acquired. It would have to be:
> >
> >       while ( nr_pages )
> >           hvmemul_release_page(ram_page[--nr_pages]);
> 
> Unless you need the value of nr_pages after the loop, I can't see
> the difference between your and my proposal - the decrement in
> both cases happens between determining whether to continue the
> loop and accessing the intended array element.

D'oh. Of course it does.

> 
> > which I'll do, since you so dislike signed ints.
> 
> Sounds like you're not understanding why. Just look at the
> generated code when using signed vs unsigned int as array
> index.

Ok, I'll take a look because I would not have thought it would make a huge 
difference.

  Paul

> 
> Jan


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