[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


 


Rackspace

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