Hi Marcin et al,
When booting my Macbook Pro into 3.12 and powering off the Nvidia GPU, we
see nouveau try to dequeue an item which isn't present, leading to a
page-not-present fault. 3.11 works just nice.
It looks like I should add some debug, as there aren't event
enqueuing/dequeueing debug flags, or as you suggest?
http://quora.org/2013/dmesg.txt
http://quora.org/2013/config (same as the Ubuntu mainline config)
# echo OFF >/sys/kernel/debug/vgaswitcheroo/switch
hda-intel 0000:01:00.1: Disabling via VGA-switcheroo
hda-intel 0000:01:00.1: Cannot lock devices!
VGA switcheroo: switched nouveau off
nouveau [ DRM] suspending display...
general protection fault: 0000 [#1] SMP
Modules linked in: dm_crypt(F) parport_pc(F) snd_hda_codec_hdmi(F) ppdev(F)
lib80211_crypt_tkip(F) rfcomm(F) bnep(F) joydev(F) x86_pkg_temp_thermal(F)
intel_powerclamp(F) coretemp(F) nfsd(F) applesmc(F) kvm_intel(F)
input_polldev(F) auth_rpcgss(F) nfs_acl(F) kvm(F) crc32_pclmul(F) nfs(F)
aesni_intel(F) aes_x86_64(F) lockd(F) glue_helper(F) binfmt_misc(F) lrw(F)
gf128mul(F) ablk_helper(F) cryptd(F) wl(POF) sunrpc(F) btusb(F) fscache(F)
ax88179_178a(F) usbnet(F) snd_seq_midi(F) mii(F) uvcvideo(F)
snd_seq_midi_event(F) snd_hda_codec_cirrus(F) bluetooth(F) bcm5974(F)
videobuf2_vmalloc(F) videobuf2_memops(F) videobuf2_core(F) snd_rawmidi(F)
videodev(F) snd_hda_intel(F) snd_hda_codec(F) snd_seq(F) lib80211(F)
snd_hwdep(F) snd_seq_device(F) cfg80211(F) lpc_ich(F) snd_pcm(F) mei_me(F)
mei(F) snd_page_alloc(F) snd_timer(F) snd(F) soundcore(F) nls_iso8859_1(F)
apple_gmux(F) mac_hid(F) apple_bl(F) lp(F) parport(F) btrfs(F) xor(F)
raid6_pq(F) libcrc32c(F) hid_generic(F) hid_apple(F) usbhid(F) hid(F)
microcode(F) ahci(F) libahci(F) nouveau(F) i915(F) mxm_wmi(F) wmi(F)
i2c_algo_bit(F) ttm(F) drm_kms_helper(F) drm(F) video(F)
CPU: 2 PID: 2738 Comm: bash Tainted: PF O 3.12.2-ninja+ #3
Hardware name: Apple Inc. MacBookPro10,1/Mac-C3EC7CD22292981F, BIOS
MBP101.88Z.00EE.B02.1208081132 08/08/2012
task: ffff880262bb5d00 ti: ffff88008624e000 task.ti: ffff88008624e000
RIP: 0010:[<ffffffffa0159b81>] [<ffffffffa0159b81>]
nouveau_event_put_locked+0x31/0x60 [nouveau]
RSP: 0018:ffff88008624fd48 EFLAGS: 00010097
RAX: dead000000200200 RBX: ffff88025e8bad88 RCX: 0000000000000010
RDX: dead000000100100 RSI: 0000000000000011 RDI: ffff88025ef36400
RBP: ffff88008624fd50 R08: 0000000000000217 R09: 000000000000052d
R10: 0000000000000000 R11: ffff88008624f98e R12: 0000000000000011
R13: 0000000000000217 R14: ffff88025e8bad88 R15: ffff88025e522bf0
FS: 00007f08445c1740(0000) GS:ffff88026f280000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f7d5452d000 CR3: 00000000889d5000 CR4: 00000000001407e0
Stack:
ffff88025ef36400 ffff88008624fd80 ffffffffa0159be5 ffff88025e8ba800
ffff88025e9e7240 ffff88025e522800 ffff88025e8a2b40 ffff88008624fdb8
ffffffffa01c54be 0000000000000003 ffff880263819000 ffff88025e522800
Call Trace:
[<ffffffffa0159be5>] nouveau_event_put+0x35/0x50 [nouveau]
[<ffffffffa01c54be>] nouveau_display_fini+0x8e/0xc0 [nouveau]
[<ffffffffa01c5afd>] nouveau_display_suspend+0x1d/0xe0 [nouveau]
[<ffffffffa01b3bfd>] nouveau_do_suspend+0x23d/0x2d0 [nouveau]
[<ffffffffa01b3cd6>] nouveau_pmops_suspend+0x46/0xc0 [nouveau]
[<ffffffffa01b7404>] nouveau_switcheroo_set_state+0x64/0xc0 [nouveau]
[<ffffffff8145bb98>] vga_switchoff.part.2+0x18/0x40
[<ffffffff8145c083>] vga_switcheroo_debugfs_write+0x303/0x3c0
[<ffffffff81195a29>] ? __sb_start_write+0x49/0x100
[<ffffffff812c3693>] ? security_file_permission+0x23/0xa0
[<ffffffff81193b9d>] vfs_write+0xbd/0x1e0
[<ffffffff81194279>] SyS_write+0x49/0xa0
[<ffffffff816dd829>] system_call_fastpath+0x16/0x1b
Code: 63 c6 55 48 8d 04 40 48 89 e5 53 48 89 d3 48 8d 54 c7 30 83 6a 08 01
75 0b 48 8b 47 18 48 85 c0 74 02 ff d0 48 8b 43 08 48 8b 13 <48> 89 42 08
48 89 10 48 b8 00 01 10 00 00 00 ad de 48 89 03 48
RIP [<ffffffffa0159b81>] nouveau_event_put_locked+0x31/0x60 [nouveau]
RSP <ffff88008624fd48>
(gdb) list *(nouveau_event_put_locked+0x31)
0xbb1 is in nouveau_event_put_locked (include/linux/list.h:88).
83 * This is only for internal list manipulation where we know
84 * the prev/next entries already!
85 */
86 static inline void __list_del(struct list_head * prev, struct list_head
* next)
87 {
88 next->prev = prev;
89 prev->next = next;
90 }
Thanks,
Daniel
--
Daniel J Blueman
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.freedesktop.org/archives/nouveau/attachments/20131202/efb34700/attachment.html>