Bug 98571 - [i915] might_sleep() called from wrong context with GuC submission enabled
Summary: [i915] might_sleep() called from wrong context with GuC submission enabled
Status: CLOSED FIXED
Alias: None
Product: DRI
Classification: Unclassified
Component: DRM/Intel (show other bugs)
Version: DRI git
Hardware: x86-64 (AMD64) Linux (All)
: medium major
Assignee: Intel GFX Bugs mailing list
QA Contact: Intel GFX Bugs mailing list
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-11-03 12:59 UTC by Arek Hiler
Modified: 2016-11-07 13:00 UTC (History)
1 user (show)

See Also:
i915 platform: SKL
i915 features: firmware/guc


Attachments

Description Arek Hiler 2016-11-03 12:59:37 UTC
On 03 Nov 2016 drm-intel-nightly,
with i915.enable_guc_loading=1 i915.enable_guc_submission=1

Every couple dozens of seconds I get the following error:

[  711.256431] BUG: sleeping function called from invalid context at drivers/gpu/drm/i915/i915_gem.c:4991
[  711.256446] in_atomic(): 1, irqs_disabled(): 1, pid: 1041, name: compiz
[  711.256453] INFO: lockdep is turned off.
[  711.256459] irq event stamp: 0
[  711.256466] hardirqs last  enabled at (0): [  711.256472] [<          (null)>]           (null)
[  711.256478] hardirqs last disabled at (0): [  711.256487] [<ffffffff81097cbd>] copy_process.part.6+0x2cd/0x1fd0
[  711.256493] softirqs last  enabled at (0): [  711.256500] [<ffffffff81097cbd>] copy_process.part.6+0x2cd/0x1fd0
[  711.256506] softirqs last disabled at (0): [  711.256512] [<          (null)>]           (null)
[  711.256525] Preemption disabled at:[  711.256557] [<ffffffffa0082961>] __i915_add_request+0x181/0x3e0 [i915]
[  711.256568] CPU: 1 PID: 1041 Comm: compiz Tainted: G     U  W       4.9.0-rc3nightly-031116+ #15
[  711.256574] Hardware name:                  /NUC6i5SYB, BIOS SYSKLi35.86A.0042.2016.0409.1246 04/09/2016
[  711.256581]  ffffc9000634b9a8 ffffffff8147f453 0000000000000000 ffff88082b5a8040
[  711.256614]  ffffc9000634b9e0 ffffffff810c7e94 ffffffffa0150c30 000000000000137f
[  711.256640]  0000000000000000 ffff8808413a8000 ffff880844c93400 ffffc9000634ba08
[  711.256669] Call Trace:
[  711.256684]  [<ffffffff8147f453>] dump_stack+0x86/0xc3
[  711.256691]  [<ffffffff810c7e94>] ___might_sleep+0x174/0x260
[  711.256699]  [<ffffffff810c7fca>] __might_sleep+0x4a/0x80
[  711.256733]  [<ffffffffa007f6e9>] i915_gem_object_get_sg+0x39/0x380 [i915]
[  711.256767]  [<ffffffffa00a0ace>] ? i915_guc_submit+0x3e/0x360 [i915]
[  711.256798]  [<ffffffffa0080292>] i915_gem_object_get_page+0x22/0x60 [i915]
[  711.256829]  [<ffffffffa00a0b71>] i915_guc_submit+0xe1/0x360 [i915]
[  711.256859]  [<ffffffffa0081ee1>] submit_notify+0xfd/0x17c [i915]
[  711.256885]  [<ffffffffa004365a>] __i915_sw_fence_complete+0xda/0x190 [i915]
[  711.256906]  [<ffffffffa0043727>] i915_sw_fence_complete+0x17/0x30 [i915]
[  711.256924]  [<ffffffffa0043aa2>] i915_sw_fence_commit+0x12/0x20 [i915]
[  711.256948]  [<ffffffffa008296d>] __i915_add_request+0x18d/0x3e0 [i915]
[  711.256975]  [<ffffffffa006b37f>] i915_gem_do_execbuffer.isra.15+0xb5f/0x1a00 [i915]
[  711.256985]  [<ffffffff81865c0e>] ? mutex_unlock+0xe/0x10
[  711.256994]  [<ffffffff811dc753>] ? __might_fault+0x43/0xa0
[  711.257025]  [<ffffffffa006c602>] i915_gem_execbuffer2+0xc2/0x250 [i915]
[  711.257035]  [<ffffffff815c9c13>] drm_ioctl+0x203/0x4a0
[  711.257059]  [<ffffffffa006c540>] ? i915_gem_execbuffer+0x320/0x320 [i915]
[  711.257070]  [<ffffffff812498c5>] ? __fget+0x5/0x200
[  711.257079]  [<ffffffff8123c584>] do_vfs_ioctl+0x94/0x6b0
[  711.257086]  [<ffffffff812499cd>] ? __fget+0x10d/0x200
[  711.257093]  [<ffffffff812498c5>] ? __fget+0x5/0x200
[  711.257101]  [<ffffffff8123cbe1>] SyS_ioctl+0x41/0x70
[  711.257110]  [<ffffffff8186a205>] entry_SYSCALL_64_fastpath+0x23/0xc6

Introduced by: 
"drm/i915: Use a radixtree for random access to the object's backing storage"
Comment 1 Chris Wilson 2016-11-03 13:01:47 UTC
Just the guc. Patch already on the list: https://patchwork.freedesktop.org/patch/119728/
Comment 2 Chris Wilson 2016-11-03 20:00:03 UTC
commit 72aa0d899a3ea7e14436ac0b869cf3333277b92e
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Nov 2 17:50:47 2016 +0000

    drm/i915/guc: Cache the client mapping
    
    Use i915_gem_object_pin_map() for the guc client's lifetime to replace
    the peristent kmap + frequent kmap_atomic with a permanent vmapping.
    This avoids taking the obj->mm.lock mutex whilst inside irq context
    later.
Comment 3 yann 2016-11-04 14:12:54 UTC
Arkadiusz can you re-test / verify ?
Comment 4 Arek Hiler 2016-11-07 10:05:36 UTC
I do confirm that this is fixed in newest nightly, which includes Chris' change. Thank you.
Comment 5 yann 2016-11-07 13:00:30 UTC
(In reply to arkadiusz.hiler@intel.com from comment #4)
> I do confirm that this is fixed in newest nightly, which includes Chris'
> change. Thank you.

thanks, then closing it


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.