From mboxrd@z Thu Jan 1 00:00:00 1970 From: Akio Takebe Subject: [Patch] fix xenfb_update_screen bogus rect Date: Tue, 27 Jan 2009 11:58:19 +0900 Message-ID: <497E784B.7060003@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070204040400090704080108" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------070204040400090704080108 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 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: [] xenfb_thread+0x19b/0x2be [] try_to_wake_up+0x33b/0x34c [] __wake_up_common+0x3e/0x68 [] autoremove_wake_function+0x0/0x2e [] keventd_create_kthread+0x0/0x61 [] xenfb_thread+0x0/0x2be [] keventd_create_kthread+0x0/0x61 [] kthread+0xd4/0x109 [] child_rip+0xa/0x12 [] keventd_create_kthread+0x0/0x61 [] xen_send_IPI_mask+0x0/0xf5 [] kthread+0x0/0x109 [] 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 Best Regards, Akio Takebe --------------070204040400090704080108 Content-Type: text/x-diff; name="fix_pvfb_dirty_lock.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fix_pvfb_dirty_lock.patch" 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; --------------070204040400090704080108 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------070204040400090704080108--