[Nouveau] Nouveau failing during probe followed by GPF on 3.13-rc2

Bruno Prémont bonbons at linux-vserver.org
Wed Dec 4 06:45:00 PST 2013


Hi Ilia,

On Wed, 4 Dec 2013 06:15:30 -0500 Ilia Mirkin wrote:
> On Wed, Dec 4, 2013 at 6:01 AM, Bruno Prémont wrote:
> > With 3.13-rc1 and 3.13-rc2 kernel crashes/BUGs while loading nouveau:
> > [  657.654915] ACPI Warning: \_SB_.PCI0.IXVE.IGPU._DSM: Argument #4 type mismatch - Found [Integer], ACPI requires [Package] (20131115/nsarguments-95)
> > [  657.655099] ACPI Warning: \_SB_.PCI0.IXVE.IGPU._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20131115/nsarguments-95)
> > [  657.655270] checking generic (80010000 640000) vs hw (80000000 10000000)
> > [  657.655273] fb: conflicting fb hw usage nouveaufb vs simple - removing generic driver
> > [  657.655383] Console: switching to colour dummy device 80x25
> > [  657.655632] nouveau 0000:02:00.0: enabling device (0006 -> 0007)
> > [  657.657149] ACPI: PCI Interrupt Link [LGPU] enabled at IRQ 16
> > [  657.657456] [drm] hdmi device  not found 2 0 1
> > [  657.657954] nouveau  [  DEVICE][0000:02:00.0] BOOT0  : 0x0ac800b1
> > [  657.657958] nouveau  [  DEVICE][0000:02:00.0] Chipset: MCP79/MCP7A (NVAC)
> > [  657.657960] nouveau  [  DEVICE][0000:02:00.0] Family : NV50
> > [  657.665274] nouveau  [   VBIOS][0000:02:00.0] checking PRAMIN for image...
> > [  657.722478] nouveau  [   VBIOS][0000:02:00.0] ... appears to be valid
> > [  657.722481] nouveau  [   VBIOS][0000:02:00.0] using image from PRAMIN
> > [  657.722624] nouveau  [   VBIOS][0000:02:00.0] BIT signature found
> > [  657.722627] nouveau  [   VBIOS][0000:02:00.0] version 62.79.47.00.01
> > [  657.745324] nouveau 0000:02:00.0: irq 42 for MSI/MSI-X
> > [  657.745360] nouveau  [     PMC][0000:02:00.0] MSI interrupts enabled
> > [  657.745437] nouveau  [     PFB][0000:02:00.0] RAM type: stolen system memory
> > [  657.745441] nouveau  [     PFB][0000:02:00.0] RAM size: 256 MiB
> > [  657.745444] nouveau  [     PFB][0000:02:00.0]    ZCOMP: 0 tags
> > [  657.800072] nouveau  [  PTHERM][0000:02:00.0] FAN control: none / external
> > [  657.800083] nouveau  [  PTHERM][0000:02:00.0] fan management: automatic
> > [  657.800086] nouveau  [  PTHERM][0000:02:00.0] internal sensor: yes
> > [  657.800105] nouveau  [     CLK][0000:02:00.0] 03: core 100 MHz shader 200 MHz
> > [  657.800111] nouveau  [     CLK][0000:02:00.0] 05: core 150 MHz shader 300 MHz
> > [  657.800116] nouveau  [     CLK][0000:02:00.0] 0e: core 300 MHz shader 600 MHz
> > [  657.800121] nouveau  [     CLK][0000:02:00.0] 0f: core 350 MHz shader 800 MHz
> > [  657.800135] nouveau E[     CLK][0000:02:00.0] 17 freq unknown
> > [  657.800137] nouveau E[     CLK][0000:02:00.0] init failed, -22
> 
> There are some patches in
> http://cgit.freedesktop.org/nouveau/linux-2.6/log/?h=drm-nouveau-next
> that should help with that, specifically:
> 
> http://cgit.freedesktop.org/nouveau/linux-2.6/commit/?h=drm-nouveau-next&id=a7e4201f0f7d47e03b851f06f8987856e8d33083

Yes, that one prevents the "freq unknown" error!
It should probably be pushed to dave/linus for rc3.

With it applied nouveau loads successfully.

> > [  657.800140] nouveau E[     DRM] failed to create 0x80000080, -22
> > [  657.802123] general protection fault: 0000 [#1] SMP
> > [  657.802130] Modules linked in: nouveau(+) ttm drm_kms_helper
> > [  657.802140] CPU: 0 PID: 2999 Comm: modprobe Not tainted 3.13.0-rc2-air+ #5
> > [  657.802144] Hardware name: Apple Inc. MacBookAir2,1/Mac-F42D88C8, BIOS    MBA21.88Z.0075.B03.0811141325 11/14/08
> > [  657.802150] task: ffff88007f161520 ti: ffff88007defe000 task.ti: ffff88007defe000
> > [  657.802154] RIP: 0010:[<ffffffff813d2af0>]  [<ffffffff813d2af0>] device_del+0x10/0x1b0
> > [  657.802165] RSP: 0018:ffff88007deff9f8  EFLAGS: 00010292
> > [  657.802168] RAX: 0000000000000000 RBX: 6b6b6b6b6b6b6b6b RCX: ffffffff81a6f237
> > [  657.802173] RDX: ffffffff81876dea RSI: ffffffff81a6e811 RDI: 6b6b6b6b6b6b6b6b
> > [  657.802177] RBP: ffff88007deffa18 R08: 000000006b6b6b6b R09: 0000000000000000
> > [  657.802181] R10: ffff880078801d00 R11: 000000000000002e R12: 6b6b6b6b6b6b6b6b
> > [  657.802185] R13: ffff88007f5720f8 R14: ffffffffa010e7a0 R15: 00000000ffffffea
> > [  657.802189] FS:  00007f3c23d75700(0000) GS:ffff88007b000000(0000) knlGS:0000000000000000
> > [  657.802194] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> > [  657.802198] CR2: 00007f27436e40f0 CR3: 000000007db4e000 CR4: 00000000000007f0
> > [  657.802201] Stack:
> > [  657.802204]  ffffffff8134fd0b 6b6b6b6b6b6b6b6b ffff88007f572060 ffff88007f5720f8
> > [  657.802211]  ffff88007deffa38 ffffffff813d2ca1 ffff88007d938058 ffff88007da01ca8
> > [  657.802217]  ffff88007deffa58 ffffffff813bdd6a ffff88007f572060 ffff88007da01ca8
> > [  657.802224] Call Trace:
> > [  657.802231]  [<ffffffff8134fd0b>] ? acpi_pci_irq_disable+0x3c/0x49
> > [  657.802237]  [<ffffffff813d2ca1>] device_unregister+0x11/0x20
> > [  657.802243]  [<ffffffff813bdd6a>] drm_sysfs_device_remove+0x1a/0x30
> > [  657.802249]  [<ffffffff813b9dbd>] drm_unplug_minor+0x1d/0x40
> > [  657.802255]  [<ffffffff813ba0cd>] drm_put_minor+0x3d/0x50
> > [  657.802260]  [<ffffffff813ba0f8>] drm_dev_free+0x18/0x80
> > [  657.802265]  [<ffffffff813bc67f>] drm_get_pci_dev+0xaf/0x150
> > [  657.802272]  [<ffffffff8131d8ce>] ? pcibios_set_master+0x5e/0x90
> > [  657.802315]  [<ffffffffa00a7eba>] nouveau_drm_probe+0x24a/0x290 [nouveau]
> > [  657.802321]  [<ffffffff8131f36c>] pci_device_probe+0x9c/0xf0
> > [  657.802328]  [<ffffffff813d6046>] driver_probe_device+0x76/0x240
> > [  657.802333]  [<ffffffff813d62ab>] __driver_attach+0x9b/0xa0
> > [  657.802339]  [<ffffffff813d6210>] ? driver_probe_device+0x240/0x240
> > [  657.802345]  [<ffffffff813d43b5>] bus_for_each_dev+0x55/0x90
> > [  657.802350]  [<ffffffff813d5b79>] driver_attach+0x19/0x20
> > [  657.802355]  [<ffffffff813d577c>] bus_add_driver+0x10c/0x210
> > [  657.802360]  [<ffffffffa0133000>] ? 0xffffffffa0132fff
> > [  657.802365]  [<ffffffff813d692f>] driver_register+0x5f/0xf0
> > [  657.802370]  [<ffffffffa0133000>] ? 0xffffffffa0132fff
> > [  657.802375]  [<ffffffff8131e697>] __pci_register_driver+0x47/0x50
> > [  657.802381]  [<ffffffff813bc835>] drm_pci_init+0x115/0x130
> > [  657.802386]  [<ffffffffa0133000>] ? 0xffffffffa0132fff
> > [  657.802390]  [<ffffffffa0133000>] ? 0xffffffffa0132fff
> > [  657.802414]  [<ffffffffa0133043>] nouveau_drm_init+0x43/0x1000 [nouveau]
> > [  657.802422]  [<ffffffff8100034a>] do_one_initcall+0x11a/0x170
> > [  657.802429]  [<ffffffff81071e33>] ? set_memory_nx+0x43/0x50
> > [  657.802435]  [<ffffffff8113a132>] ? __vunmap+0xb2/0x100
> > [  657.802441]  [<ffffffff810eeb26>] load_module+0x1966/0x21b0
> > [  657.802446]  [<ffffffff810ec070>] ? show_initstate+0x50/0x50
> > [  657.802453]  [<ffffffff8115bc94>] ? vfs_read+0x114/0x160
> > [  657.802458]  [<ffffffff810ef4a6>] SyS_finit_module+0x86/0x90
> > [  657.802465]  [<ffffffff817235e2>] system_call_fastpath+0x16/0x1b
> > [  657.802469] Code: 74 24 18 48 89 df e8 90 ff ff ff 48 8b 5d e8 4c 8b 65 f0 4c 8b 6d f8 c9 c3 66 90 55 48 89 e5 41 55 41 54 49 89 fc 53 48 83 ec 08 <48> 8b 87 88 00 00 00 4c 8b 2f 48 85 c0 74 1b 48 8b b8 90 00 00
> > [  657.802514] RIP  [<ffffffff813d2af0>] device_del+0x10/0x1b0
> > [  657.802520]  RSP <ffff88007deff9f8>
> > [  657.802524] ---[ end trace 11e780c61d88afaf ]---
> >
> > I'm booting with efi stub and SYSFB=y, FB_SIMPLE=y, DRM_NOUVEAU=m
> > Same config did boot properly with 3.12. Above output contains complete
> > output from the time of calling modprobe nouveau.
> 
> Hrm.... that is a separate bug that we should probably figure out.
> Looks like some use-after-free when nouveau fails to come up (note the
> poison 0x6b values in various registers). But the above patch will
> hopefully prevent that situation.

Yep, I enable SLUB poison on all my kernels with slub_debug=FZP

How much of the trace can be trusted as being real code and not some
remainder of non-overwritten data mis-parsed?

If it can be trusted, the point in nouveau_drm_probe() is within
alloc_apertures() which does not really make sense as efifb has already
been removed, thus we should see code happening after
remove_conflicting_framebuffers().

Probably SyS_finit_module() is the only relevant part of the stack-trace
and some module-assigned data has been double-freed/poisoned.

Thanks,
Bruno


More information about the Nouveau mailing list