At 12:58 +0200 on 14 May (1431608313), Roger Pau Monné wrote:
> El 14/05/15 a les 11.53, Tim Deegan ha escrit:
> > At 16:25 +0200 on 11 May (1431361528), Roger Pau Monne wrote:
> >> When the caller of paging_log_dirty_op is a hvm guest Xen would choke when
> >> trying to copy the dirty bitmap to the guest because the paging lock is
> >> already held.
> >>
> >> Fix this by independently mapping each page of the guest bitmap as needed
> >> without the paging lock held.
> >>
> >> Signed-off-by: Roger Pau Monné <roger....@citrix.com>
> >
> > This looks mostly correct, but OTOH we now seem to have two nested
> > stop-and-retry mechsnisms in one function.  I think this would be
> > cleaner if here:
> >
> >> +                    if ( pages >> (3 + PAGE_SHIFT) !=
> >> +                         index_mapped >> (3 + PAGE_SHIFT) )
> >>                      {
> >> -                        rv = -EFAULT;
> >> -                        goto out;
> >> +                        /* We need to map next page */
> >> +                        d->arch.paging.preempt.log_dirty.i4 = i4;
> >> +                        d->arch.paging.preempt.log_dirty.i3 = i3;
> >> +                        d->arch.paging.preempt.log_dirty.i2 = i2;
> >> +                        d->arch.paging.preempt.log_dirty.done = pages;
> >> +                        paging_unlock(d);
> >> +                        unmap_dirty_bitmap(dirty_bitmap, page);
> >
> > we set the rest of the preempt state, like so:
> >
> >         d->arch.paging.preempt.dom = current->domain;
> >         d->arch.paging.preempt.op = sc->op;
> >     resuming = 1;
> >
> > and bailed to the very top of the function.  I think we might also
> > need a hypercall_preempt_check() here as well, so that this restart
> > path doesn't stop us ever reaching the preempt_checks below.
> 
> OK, I don't mind adding a preempt check here, although I think we would
> hit the ones below anyway as we go scanning the dirty bitmap even if we
> have to restart.

Oh, so we do.  No need for the extra check here, then.  But I'd still
prefer restarting the whole function to having a second restart point.

Cheers,

Tim.

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

Reply via email to