diff mbox

[3.14-rc1] cirrus driver problem (qemu)

Message ID CAPM=9twWniCmKNb1vxjS_PbsTqimX6EWVusA_+GZ7H9fdhQj3A@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Dave Airlie Feb. 4, 2014, 3:20 a.m. UTC
On Tue, Feb 4, 2014 at 1:34 AM, Sabrina Dubroca <sd@queasysnail.net> wrote:
> When I boot 3.14-rc1 in qemu, I get the trace below. The console stops
> updating and I don't get a login prompt. I can login, but I can't see
> what I'm doing. I can login normally via SSH.
>
> If I revert the last commit in drivers/gpu/drm/cirrus:
>
> f4b4718b61d1d5a7442a4fd6863ea80c3a10e508 drm: ast,cirrus,mgag200: use drm_can_sleep
>
> the problem is solved.
>

Hi does the attach patch fix it?

Dave.
diff mbox

Patch

From c6feb881e00c8db9f9f73d099a08e86c5af79d50 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Tue, 4 Feb 2014 13:19:08 +1000
Subject: [PATCH] drm: add in_interrupt to drm_can_sleep list of things

This should stop us taking locks when we shouldn't in the console drivers,

[    1.749341] ------------[ cut here ]------------
[    1.749347] WARNING: CPU: 0 PID: 0 at kernel/locking/mutex.c:856 mutex_trylock+0x1e5/0x250()
[    1.749348] DEBUG_LOCKS_WARN_ON(in_interrupt())
[    1.749360] Modules linked in: ppdev cirrus syscopyarea sysfillrect sysimgblt drm_kms_helper evdev psmouse microcode serio_raw pcspkr ttm e1000 parport_pc parport processor button intel_agp drm intel_gtt i2c_piix4 ipv6 ext4 crc16 mbcache jbd2 sd_mod sr_mod cdrom ata_generic pata_acpi ata_piix 9pnet_virtio 9pnet libata scsi_mod
[    1.749362] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.14.0-rc1-t1 #34
[    1.749364] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[    1.749366]  0000000000000009 ffff88001fc038c8 ffffffff814e8456 ffff88001fc03910
[    1.749367]  ffff88001fc03900 ffffffff8106a0dd ffff88001d3ff990 0000000000000010
[    1.749368]  0000000000000000 00000000000001e0 ffff88001cc3b000 ffff88001fc03960
[    1.749369] Call Trace:
[    1.749372]  <IRQ>  [<ffffffff814e8456>] dump_stack+0x4d/0x6f
[    1.749374]  [<ffffffff8106a0dd>] warn_slowpath_common+0x7d/0xa0
[    1.749375]  [<ffffffff8106a14c>] warn_slowpath_fmt+0x4c/0x50
[    1.749377]  [<ffffffff814ebf45>] mutex_trylock+0x1e5/0x250
[    1.749380]  [<ffffffffa037888c>] cirrus_dirty_update+0x7c/0x2f0 [cirrus]
[    1.749381]  [<ffffffffa0378b2f>] cirrus_imageblit+0x2f/0x40 [cirrus]
[    1.749388]  [<ffffffff813188f4>] soft_cursor+0x1b4/0x250
[    1.749390]  [<ffffffff813181a3>] bit_cursor+0x613/0x650
[    1.749391]  [<ffffffff81313891>] ? get_color.isra.15+0x31/0x140

Reported-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 include/drm/drmP.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 1d4a920..3a98664 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1665,7 +1665,7 @@  extern void drm_platform_exit(struct drm_driver *driver, struct platform_device
 /* returns true if currently okay to sleep */
 static __inline__ bool drm_can_sleep(void)
 {
-	if (in_atomic() || in_dbg_master() || irqs_disabled())
+	if (in_atomic() || in_dbg_master() || in_interrupt() || irqs_disabled())
 		return false;
 	return true;
 }
-- 
1.8.4.2