[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch] fix xenfb_update_screen bogus rect
Akio Takebe <takebe_akio@xxxxxxxxxxxxxx> writes: > Hi, Jan > > Thank you for your review. > I remade it simpler. > But Just moving check-and-clear dirty flag to xenfb_update_screen(), > a guest with vcpu=1 could not boot. > It is caused by info->update_wanted = 0. Thanks for debugging this! > So I moved kthread_run() into XenbusStateConnected handling. > How about it? > > Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx> > > Best Regards, > > Akio Takebe [...] > diff -r 83b71f4b5cb2 drivers/xen/fbfront/xenfb.c > --- a/drivers/xen/fbfront/xenfb.c Tue Jan 20 13:28:35 2009 +0000 > +++ b/drivers/xen/fbfront/xenfb.c Thu Jan 29 01:24:06 2009 +0900 > @@ -213,17 +213,23 @@ Please use -p with diff. > if (xenfb_queue_full(info)) > return; > > - mutex_lock(&info->mm_lock); > - > spin_lock_irqsave(&info->dirty_lock, flags); > - y1 = info->y1; > - y2 = info->y2; > - x1 = info->x1; > - x2 = info->x2; > - info->x1 = info->y1 = INT_MAX; > - info->x2 = info->y2 = 0; > + if (info->dirty){ > + info->dirty = 0; > + y1 = info->y1; > + y2 = info->y2; > + x1 = info->x1; > + x2 = info->x2; > + info->x1 = info->y1 = INT_MAX; > + info->x2 = info->y2 = 0; > + } else { > + spin_unlock_irqrestore(&info->dirty_lock, flags); > + return; > + } > spin_unlock_irqrestore(&info->dirty_lock, flags); > > + mutex_lock(&info->mm_lock); > + > list_for_each_entry(map, &info->mappings, link) { > if (!map->faults) > continue; Careful, locking is rather delicate here. Please read the big comment "There are three locks:", then explain why moving the locking of mm_lock is safe. [...] _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |