[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [Patch] fix xenfb_update_screen bogus rect
Hi, When I tested pvfb, I got the following warnings. It seems to be caused by checking/setting info->dirty without dirty_lock. We need to check/set info->dirty safely. xenfb_update_screen bogus rect 2147483647 0 2147483647 0 BUG: warning at /root/linux-2.6.18-xen.hg/drivers/xen/fbfront/xenfb.c:240/xenfb_update_screen() Call Trace: [<ffffffff8036920e>] xenfb_thread+0x19b/0x2be [<ffffffff8022730a>] try_to_wake_up+0x33b/0x34c [<ffffffff80225c3d>] __wake_up_common+0x3e/0x68 [<ffffffff80241e20>] autoremove_wake_function+0x0/0x2e [<ffffffff80241a75>] keventd_create_kthread+0x0/0x61 [<ffffffff80369073>] xenfb_thread+0x0/0x2be [<ffffffff80241a75>] keventd_create_kthread+0x0/0x61 [<ffffffff80241ceb>] kthread+0xd4/0x109 [<ffffffff8020afe0>] child_rip+0xa/0x12 [<ffffffff80241a75>] keventd_create_kthread+0x0/0x61 [<ffffffff8021477f>] xen_send_IPI_mask+0x0/0xf5 [<ffffffff80241c17>] kthread+0x0/0x109 [<ffffffff8020afd6>] child_rip+0x0/0x12 FYI, when I tested it, I used the following shell scripts on PV guest. The above warnings occurred in /var/log/messages. ======================= #!/bin/bash while true do date done ======================= The attached patch fixed this warnings. 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 Tue Jan 27 20:09:58 2009 +0900 @@ -255,19 +255,36 @@ } spin_unlock_irqrestore(&info->resize_lock, flags); } +static int check_is_dirty(struct xenfb_info *info) +{ + int is_dirty; + unsigned long flags; + spin_lock_irqsave(&info->dirty_lock, flags); + is_dirty = info->dirty; + spin_unlock_irqrestore(&info->dirty_lock, flags); + + return is_dirty; +} static int xenfb_thread(void *data) { struct xenfb_info *info = data; + unsigned long flags; + int is_dirty; while (!kthread_should_stop()) { xenfb_handle_resize_dpy(info); - if (info->dirty) { + spin_lock_irqsave(&info->dirty_lock, flags); + is_dirty = info->dirty; + if (is_dirty) { info->dirty = 0; + spin_unlock_irqrestore(&info->dirty_lock, flags); xenfb_update_screen(info); + } else { + spin_unlock_irqrestore(&info->dirty_lock, flags); } wait_event_interruptible(info->wq, - kthread_should_stop() || info->dirty); + kthread_should_stop() || check_is_dirty(info)); try_to_freeze(); } return 0; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |