NetBSD Problem Report #57833
From www@netbsd.org Wed Jan 10 09:00:12 2024
Return-Path: <www@netbsd.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))
(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id 034D81A923A
for <gnats-bugs@gnats.NetBSD.org>; Wed, 10 Jan 2024 09:00:12 +0000 (UTC)
Message-Id: <20240110090008.4551C1A923C@mollari.NetBSD.org>
Date: Wed, 10 Jan 2024 09:00:08 +0000 (UTC)
From: ea1abz@gmail.com
Reply-To: ea1abz@gmail.com
To: gnats-bugs@NetBSD.org
Subject: kernel panic on xorg exit
X-Send-Pr-Version: www-1.0
>Number: 57833
>Category: kern
>Synopsis: kernel panic on xorg exit
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: riastradh
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Jan 10 09:05:00 +0000 2024
>Closed-Date: Sat Feb 03 15:12:30 +0000 2024
>Last-Modified: Sat Feb 03 15:12:30 +0000 2024
>Originator: Ramiro Aceves
>Release: NetBSD 10.0_RC2
>Organization:
>Environment:
netbsd-compal# uname -a
NetBSD netbsd-compal.remigio 10.0_RC2 NetBSD 10.0_RC2 (GENERIC) #0: Mon Jan 1 14:04:52 UTC 2024 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/i386/compile/GENERIC i386
netbsd-co
>Description:
Hello,
I start ctwm (or XFCE, same behaviour) with startx command. Everything works fine inside the desktop. But when I exit with "Quit" (or Log out in XFCE) the screen goes dark and computer reboots needed fsck.
Crash dumps where recorded on /var/crash (I have gunziped them):
netbsd-compal# ls -l
total 710596
-rw------- 1 root wheel 2 Jan 10 07:17 bounds
-rw------- 1 root wheel 5 Jan 1 15:04 minfree
-rw------- 1 root wheel 1958710 Jan 9 19:21 netbsd.0
-rw------- 1 root wheel 154079764 Jan 9 19:21 netbsd.0.core
-rw------- 1 root wheel 1958710 Jan 9 19:24 netbsd.1
-rw------- 1 root wheel 117210132 Jan 9 19:24 netbsd.1.core
-rw------- 1 root wheel 1958710 Jan 9 20:14 netbsd.2
-rw------- 1 root wheel 202709524 Jan 9 20:14 netbsd.2.core
-rw------- 1 root wheel 1958710 Jan 10 07:18 netbsd.3
-rw------- 1 root wheel 245231124 Jan 10 07:18 netbsd.3.core
following hubertf's NetBSD Blog:
netbsd-compal# dmesg -M netbsd.3.core -N netbsd.3
...
...
[ 78.355023] wsdisplay0: screen 3 added (default, vt100 emulation)
[ 78.355023] wsdisplay0: screen 4 added (default, vt100 emulation)
[ 2944.322629] uvm_fault(0xc157f960, 0, 1) -> 0xe
[ 2944.322629] fatal page fault in supervisor mode
[ 2944.322629] trap type 6 code 0 eip 0xc0c47b88 cs 0x8 eflags 0x10282 cr2 0x10 ilevel 0 esp 0xdc7e1ee8
[ 2944.322629] curlwp 0xc4341600 pid 0 lid 63 lowest kstack 0xdc7e02c0
[ 2944.322629] panic: trap
[ 2944.322629] cpu0: Begin traceback...
[ 2944.322629] vpanic(c1186ce0,dc7e1dc0,dc7e1e7c,c012fed8,c1186ce0,dc7e1e88,dc7e1e88,3f,dc7e02c0,10282) at netbsd:vpanic+0x196
[ 2944.322629] panic(c1186ce0,dc7e1e88,dc7e1e88,3f,dc7e02c0,10282,10,0,dc7e1ee8,c157f960) at netbsd:panic+0x18
[ 2944.322629] trap() at netbsd:trap+0xd51
[ 2944.332632] --- trap (number 6) ---
[ 2944.332632] uvm_vm_page_to_phys(0,c3dfd004,c937c900,dc7e1efc,0,c937c900,dc7e1efc,c06cd118,0,c937c9b0) at netbsd:uvm_vm_page_to_phys+0x6
[ 2944.332632] pmap_page_remove(0,c937c9b0,c937c900,dc7e1f48,c06cd604,c937c900,1,0,c0c5dbef,0) at netbsd:pmap_page_remove+0x13
[ 2944.332632] i915_gem_object_release_mmap_offset(c937c900,1,0,c0c5dbef,0,0,c3dff878,0,c937c9b0,c937c9ac) at netbsd:i915_gem_object_release_mmap_offset+0x3b
[ 2944.332632] __i915_gem_free_objects(c3dfea1c,c42a2f00,fffffffe,ffffffff,120,c4341600,c42a2f1c,dc7e1f78,c42a2f04,c42a2f1c) at netbsd:__i915_gem_free_objects+0x80
[ 2944.332632] linux_workqueue_thread(c42a2f00,1849000,1854000,0,c01005a8,0,0,0,0,0) at netbsd:linux_workqueue_thread+0xe6
[ 2944.332632] cpu0: End traceback...
[ 2944.332632] dumping to dev 0,1 offset 1023
[ 2944.332632] dump succeeded
[ 2944.390275] rebooting...
[ 1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
[ 1.000000] 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
[ 1.000000] 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023,
[ 1.000000] 2024
[ 1.000000] The NetBSD Foundation, Inc. All rights reserved.
[ 1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[ 1.000000] The Regents of the University of California. All rights reserved.
[ 1.000000] NetBSD 10.0_RC2 (GENERIC) #0: Mon Jan 1 14:04:52 UTC 2024
[ 1.000000] mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/i386/compile/GENERIC
[ 1.000000] total memory = 2039 MB
[ 1.000000] avail memory = 1978 MB
[ 1.000000] timecounter: Timecounters tick every 10.000 msec
[ 1.000000] Kernelized RAIDframe activated
[ 1.000000] timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
[ 1.000004] mainbus0 (root)
[ 1.000004] cpu0 at mainbus0
[ 1.000004] ACPI Error: AE_BAD_PARAMETER, Thread 3242924096 could not acquire Mutex [ACPI_MTX_Tables] (0x2) (20221020/utmutex-326)
[ 1.000004] cpu0: Use lfence to serialize rdtsc
[ 1.000004] cpu0: Intel(R) Pentium(R) M processor 1.86GHz, id 0x6d8
[ 1.000004] cpu0: node 0, package 0, core 0, smt 0
[ 1.000004] pci0 at mainbus0 bus 0: configuration mode 1
[ 1.000004] pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
[ 1.000004] pchb0 at pci0 dev 0 function 0: Intel 82915PM/GM/GMS,82910GML Host Bridge (rev. 0x04)
[ 1.000004] agp0 at pchb0: i915-family chipset
[ 1.000004] agp0: detected 7932k stolen memory
[ 1.000004] agp0: aperture at 0xa0000000, size 0x10000000
[ 1.000004] i915drmkms0 at pci0 dev 2 function 0: Intel 82915GM/GMS,82910GML Integrated Graphics Device (rev. 0x04)
[ 1.000004] Intel 82915GM/GMS IGD Companion (miscellaneous display, revision 0x04) at pci0 dev 2 function 1 not configured
[ 1.000004] uhci0 at pci0 dev 29 function 0: Intel 82801FB/FR USB UHCI Controller (rev. 0x04)
[ 1.000004] uhci0: interrupting at irq 7
[ 1.000004] usb0 at uhci0: USB revision 1.0
[ 1.000004] uhci1 at pci0 dev 29 function 1: Intel 82801FB/FR USB UHCI Controller (rev. 0x04)
[ 1.000004] uhci1: interrupting at irq 3
[ 1.000004] usb1 at uhci1: USB revision 1.0
[ 1.000004] uhci2 at pci0 dev 29 function 2: Intel 82801FB/FR USB UHCI Controller (rev. 0x04)
[ 1.000004] uhci2: interrupting at irq 11
[ 1.000004] usb2 at uhci2: USB revision 1.0
[ 1.000004] uhci3 at pci0 dev 29 function 3: Intel 82801FB/FR USB UHCI Controller (rev. 0x04)
[ 1.000004] uhci3: interrupting at irq 11
[ 1.000004] usb3 at uhci3: USB revision 1.0
[ 1.000004] ehci0 at pci0 dev 29 function 7: Intel 82801FB/FR USB EHCI Controller (rev. 0x04)
[ 1.000004] ehci0: 64-bit DMA - limited
[ 1.000004] ehci0: interrupting at irq 7
[ 1.000004] ehci0: EHCI version 1.0
[ 1.000004] ehci0: 4 companion controllers, 2 ports each: uhci0 uhci1 uhci2 uhci3
[ 1.000004] ehci0: Using DMA subregion for control data structures
[ 1.000004] usb4 at ehci0: USB revision 2.0
[ 1.000004] ppb0 at pci0 dev 30 function 0: Intel 82801BAM Hub-PCI Bridge (rev. 0xd4)
[ 1.000004] pci1 at ppb0 bus 1
[ 1.000004] pci1: i/o space, memory space enabled
[ 1.000004] fwohci0 at pci1 dev 0 function 0: VIA Technologies VT6306 IEEE 1394 Host Controller (rev. 0x80)
[ 1.000004] fwohci0: interrupting at irq 10
[ 1.000004] fwohci0: OHCI version 1.0 (ROM=1)
[ 1.000004] fwohci0: No. of Isochronous channels is 4.
[ 1.000004] fwohci0: EUI64 00:02:3f:59:88:40:01:0f
[ 1.000004] fwohci0: Phy 1394a available S400, 2 ports.
[ 1.000004] fwohci0: Link S400, max_rec 512 bytes.
[ 1.000004] fwohci0: max_rec 512 -> 2048
[ 1.000004] ieee1394if0 at fwohci0: IEEE1394 bus
[ 1.000004] fwip0 at ieee1394if0: IP over IEEE1394
[ 1.000004] fwohci0: Initiate bus reset
[ 1.000004] re0 at pci1 dev 1 function 0: RealTek 8169/8110 Gigabit Ethernet (rev. 0x10)
[ 1.000004] re0: interrupting at irq 11
[ 1.000004] re0: RTL8169/8110SB (0x1000)
[ 1.000004] re0: Ethernet address 00:0f:b0:93:6f:e1
[ 1.000004] re0: using 256 tx descriptors
[ 1.000004] rgephy0 at re0 phy 7: RTL8211B 1000BASE-T media interface
[ 1.000004] rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
[ 1.000004] iwi0 at pci1 dev 2 function 0: Intel PRO/Wireless LAN 2200BG Mini-PCI Adapter (rev. 0x05)
[ 1.000004] iwi0: interrupting at irq 11
[ 1.000004] iwi0: 802.11 address 00:13:ce:6b:7d:01
[ 1.000004] cbb0 at pci1 dev 4 function 0: ENE Technology CB710 CardBus Controller (rev. 0x00)
[ 1.000004] ENE Technology product 0530 (flash memory) at pci1 dev 4 function 1 not configured
[ 1.000004] sdhc0 at pci1 dev 4 function 2: ENE Technology CB712/714/810 PCI SD Card Reader Controller (rev. 0x00)
[ 1.000004] sdhc0: interrupting at irq 5
[ 1.000004] sdhc0: SDHC 1.0, rev 0, caps <01e021a1/00000000>, SDMA, 33000 kHz, HS 3.3V, 512 byte blocks
[ 1.000004] sdmmc0 at sdhc0 slot 0
[ 1.000004] cbb0: cacheline 0x8 lattimer 0x40
[ 1.000004] cbb0: bhlc 0x824008
[ 1.000004] cbb0: autoconfiguration error: secondary bus number uninitialized; try PCI_BUS_FIXUP
[ 1.000004] pci_intr_map: no mapping for pin A (line=ff)
[ 1.000004] cbb0: autoconfiguration error: couldn't map interrupt
[ 1.000004] cardslot0 at cbb0
[ 1.000004] pcmcia0 at cardslot0
[ 1.000004] auich0 at pci0 dev 30 function 2: i82801FB (ICH6) AC-97 Audio
[ 1.000004] auich0: interrupting at irq 5
[ 1.000004] auich0: ac97: Avance Logic unknown (0x414c4752) codec; headphone, 20 bit DAC, 18 bit ADC, no 3D stereo
[ 1.000004] auich0: ac97: ext id 0xa07<AC97_23,AMAP,SPDIF,DRA,VRA>
[ 1.000004] Intel 82801FB/FR AC'97 Modem Controller (modem communications, revision 0x04) at pci0 dev 30 function 3 not configured
[ 1.000004] ichlpcib0 at pci0 dev 31 function 0: Intel 82801FBM ICH6M LPC Interface Bridge (rev. 0x04)
[ 1.000004] timecounter: Timecounter "ichlpcib0" frequency 3579545 Hz quality 1000
[ 1.006336] ichlpcib0: 24-bit timer
[ 1.006336] tco0 at ichlpcib0: TCO (watchdog) timer configured.
[ 1.006336] tco0: Min/Max interval 1/367 seconds
[ 1.006336] piixide0 at pci0 dev 31 function 1: Intel 82801FB IDE Controller (ICH6) (rev. 0x04)
[ 1.006336] piixide0: bus-master DMA support present
[ 1.006336] piixide0: primary channel configured to compatibility mode
[ 1.006336] piixide0: primary channel interrupting at irq 14
[ 1.006336] atabus0 at piixide0 channel 0
[ 1.006336] piixide0: secondary channel configured to compatibility mode
[ 1.006336] piixide0: secondary channel interrupting at irq 15
[ 1.006336] atabus1 at piixide0 channel 1
[ 1.006336] ichsmb0 at pci0 dev 31 function 3: Intel 82801FB/FR SMBus Controller (rev. 0x04)
[ 1.006336] ichsmb0: interrupting at irq 3
[ 1.006336] iic0 at ichsmb0: I2C bus
[ 1.006336] isa0 at ichlpcib0
[ 1.006336] pckbc0 at isa0 port 0x60-0x64
[ 1.006336] pckbd0 at pckbc0 (kbd slot)
[ 1.006336] pckbc0: using irq 1 for kbd slot
[ 1.006336] wskbd0 at pckbd0: console keyboard
[ 1.006336] pms0 at pckbc0 (aux slot)
[ 1.006336] pms0: ALPS PS/2 V2 pointing device
[ 1.006336] pckbc0: using irq 12 for aux slot
[ 1.006336] wsmouse0 at pms0 mux 0
[ 1.006336] attimer0 at isa0 port 0x40-0x43
[ 1.006336] pcppi0 at isa0 port 0x61
[ 1.006336] midi0 at pcppi0: PC speaker
[ 1.006336] sysbeep0 at pcppi0
[ 1.006336] attimer0: attached to pcppi0
[ 1.006336] est0 at cpu0: Enhanced SpeedStep
[ 1.006336] fwohci0: BUS reset
[ 1.006336] fwohci0: node_id=0xc000ffc0, gen=1, CYCLEMASTER mode
[ 1.006336] ieee1394if0: 1 nodes, maxhop <= 0 cable IRM irm(0) (me)
[ 1.006336] ieee1394if0: bus manager 0
[ 1.006336] WARNING: system needs entropy for security; see entropy(7)
[ 1.242502] timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
[ 1.574789] auich0: measured ac97 link rate at 48000 Hz
[ 1.574789] audio0 at auich0: playback, capture, full duplex, independent
[ 1.574789] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
[ 1.574789] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
[ 1.574789] uhub0 at usb0: NetBSD (0x0000) UHCI root hub (0x0000), class 9/0, rev 1.00/1.00, addr 1
[ 1.574789] uhub0: 2 ports with 2 removable, self powered
[ 1.574789] uhub1 at usb1: NetBSD (0x0000) UHCI root hub (0x0000), class 9/0, rev 1.00/1.00, addr 1
[ 1.574789] uhub1: 2 ports with 2 removable, self powered
[ 1.574789] uhub2 at usb2: NetBSD (0x0000) UHCI root hub (0x0000), class 9/0, rev 1.00/1.00, addr 1
[ 1.574789] uhub2: 2 ports with 2 removable, self powered
[ 1.574789] uhub3 at usb3: NetBSD (0x0000) UHCI root hub (0x0000), class 9/0, rev 1.00/1.00, addr 1
[ 1.574789] uhub3: 2 ports with 2 removable, self powered
[ 1.574789] uhub4 at usb4: NetBSD (0x0000) EHCI root hub (0x0000), class 9/0, rev 2.00/1.00, addr 1
[ 1.574789] uhub4: 8 ports with 8 removable, self powered
[ 1.584792] IPsec: Initialized Security Association Processing.
[ 1.594790] atapibus0 at atabus0: 2 targets
[ 1.684790] cd0 at atapibus0 drive 1: <TSSTcorpCD/DVDW TS-L632B, 95WK401090, TI33> cdrom removable
[ 1.684790] cd0: 32-bit data port
[ 1.684790] cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 2 (Ultra/33)
[ 1.684790] wd0 at atabus0 drive 0
[ 1.694791] wd0: <IC25N080ATMR04-0>
[ 1.694791] wd0: drive supports 16-sector PIO transfers, LBA48 addressing
[ 1.694791] wd0: 76319 MB, 155061 cyl, 16 head, 63 sec, 512 bytes/sect x 156301488 sectors
[ 2.144797] wd0: 32-bit data port
[ 2.144797] wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
[ 2.144797] wd0(piixide0:0:0): using PIO mode 4, Ultra-DMA mode 5 (Ultra/100) (using DMA)
[ 2.144797] cd0(piixide0:0:1): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA)
[ 2.234799] swwdog0: software watchdog initialized
[ 2.284800] WARNING: 2 errors while detecting hardware; check system log.
[ 2.284800] boot device: wd0
[ 2.284800] root on wd0a dumps on wd0b
[ 2.324801] root file system type: ffs
[ 2.324801] kern.module.path=/stand/i386/10.0/modules
[ 2.335349] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 2.335349] [drm] Driver supports precise vblank timestamp query.
[ 2.335349] i915drmkms0: interrupting at irq 11 (i915drmkms0)
[ 2.364802] [drm] Initialized overlay support.
[ 2.364802] [drm] Initialized i915 1.6.0 20200114 for i915drmkms0 on minor 0
[ 2.514811] intelfb0 at i915drmkms0
[ 2.514811] [drm] DRM_I915_DEBUG enabled
[ 2.514811] [drm] DRM_I915_DEBUG_GEM enabled
[ 2.514811] intelfb0: framebuffer at 0xa0009000, size 1280x800, depth 32, stride 5120
[ 3.094813] wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100 emulation), using wskbd0
[ 3.094813] wsmux1: connecting to wsdisplay0
[ 4.274834] uhidev0 at uhub2 port 1 configuration 1 interface 0
[ 4.274834] uhidev0: vendor 1997 (0x1997) mini keyboard (0x2433), rev 1.10/1.10, addr 2, iclass 3/1
[ 4.284831] ukbd0 at uhidev0
[ 4.284831] wskbd1 at ukbd0 mux 1
[ 4.284831] wskbd1: connecting to wsdisplay0
[ 4.284831] uhidev1 at uhub2 port 1 configuration 1 interface 1
[ 4.284831] uhidev1: vendor 1997 (0x1997) mini keyboard (0x2433), rev 1.10/1.10, addr 2, iclass 3/1
[ 4.304832] uhidev1: 3 report ids
[ 4.304832] ums0 at uhidev1 reportid 1: 5 buttons and Z dir
[ 4.304832] wsmouse1 at ums0 mux 0
[ 4.304832] uhid0 at uhidev1 reportid 2: input=1, output=0, feature=0
[ 4.304832] uhid1 at uhidev1 reportid 3: input=2, output=0, feature=0
[ 4.304832] entropy: best effort
[ 74.355907] wsdisplay0: screen 1 added (default, vt100 emulation)
[ 74.365910] wsdisplay0: screen 2 added (default, vt100 emulation)
[ 74.365910] wsdisplay0: screen 3 added (default, vt100 emulation)
[ 74.365910] wsdisplay0: screen 4 added (default, vt100 emulation)
[ 7459.551443] uvm_fault(0xc157f960, 0, 1) -> 0xe
[ 7459.551443] fatal page fault in supervisor mode
[ 7459.551443] trap type 6 code 0 eip 0xc0c47b88 cs 0x8 eflags 0x13282 cr2 0x10 ilevel 0 esp 0xdc7e1ee8
[ 7459.551443] curlwp 0xc4341600 pid 0 lid 63 lowest kstack 0xdc7e02c0
[ 7459.551443] panic: trap
[ 7459.551443] cpu0: Begin traceback...
[ 7459.551443] vpanic(c1186ce0,dc7e1dc0,dc7e1e7c,c012fed8,c1186ce0,dc7e1e88,dc7e1e88,3f,dc7e02c0,13282) at netbsd:vpanic+0x196
[ 7459.551443] panic(c1186ce0,dc7e1e88,dc7e1e88,3f,dc7e02c0,13282,10,0,dc7e1ee8,c157f960) at netbsd:panic+0x18
[ 7459.561447] trap() at netbsd:trap+0xd51
[ 7459.561447] --- trap (number 6) ---
[ 7459.561447] uvm_vm_page_to_phys(0,c3dfd004,c5ace900,dc7e1efc,0,c5ace900,dc7e1efc,c06cd118,0,c5ace9b0) at netbsd:uvm_vm_page_to_phys+0x6
[ 7459.561447] pmap_page_remove(0,c5ace9b0,c5ace900,dc7e1f48,c06cd604,c5ace900,1,0,c0c5dbef,0) at netbsd:pmap_page_remove+0x13
[ 7459.561447] i915_gem_object_release_mmap_offset(c5ace900,1,0,c0c5dbef,0,0,c3dff878,0,c5ace9b0,c5ace9ac) at netbsd:i915_gem_object_release_mmap_offset+0x3b
[ 7459.561447] __i915_gem_free_objects(c3dfea1c,c42a2f00,fffffffe,ffffffff,120,c4341600,c42a2f1c,dc7e1f78,c42a2f04,c42a2f1c) at netbsd:__i915_gem_free_objects+0x80
[ 7459.561447] linux_workqueue_thread(c42a2f00,1849000,1854000,0,c01005a8,0,0,0,0,0) at netbsd:linux_workqueue_thread+0xe6
[ 7459.571447] cpu0: End traceback...
[ 7459.571447] dumping to dev 0,1 offset 1023
[ 7459.571447] dump
netbsd-compal#
netbsd-compal# vmstat -M netbsd.3.core -N netbsd.3 -s
4096 bytes per page
64 page colors
506685 pages managed
84453 pages free
0 pages paging
35468 pages wired
1 reserve pagedaemon pages
5 reserve kernel pages
9402 boot kernel pages
40517 kernel pool pages
47888 anonymous pages
314479 cached file pages
16838 cached executable pages
256 minimum free pages
341 target free pages
168895 maximum wired pages
1 swap devices
522237 swap pages
0 swap pages in use
0 swap allocations
1702737 total faults taken
1592937 traps
2257774 device interrupts
2519014 CPU context switches
2612315 software interrupts
6872736 system calls
0 pagein requests
0 pageout requests
0 pages swapped in
0 pages swapped out
1777 forks total
749 forks blocked parent
749 forks shared address space with parent
2078128 pagealloc desired color avail
476938 pagealloc desired color not avail
0 pagealloc local cpu avail
2555066 pagealloc local cpu not avail
46 faults with no memory
0 faults with no anons
0 faults had to wait on pages
0 faults found released page
161864 faults relock (161850 ok)
188751 anon page faults
0 anon retry faults
115801 amap copy faults
0 neighbour anon page faults
857960 neighbour object page faults
559639 locked pager get faults
161864 unlocked pager get faults
163900 anon faults
24851 anon copy on write faults
508886 object faults
50736 promote copy faults
407127 promote zero fill faults
0 faults upgraded lock
0 faults couldn't upgrade lock
991 times daemon wokeup
991 revolutions of the clock hand
1316572 pages freed by daemon
1525176 pages scanned by daemon
0 anonymous pages scanned by daemon
1316572 object pages scanned by daemon
724 pages reactivated
0 pages found busy by daemon
0 total pending pageouts
1710899 pages deactivated
0 per-cpu stats synced
0 anon pages possibly dirty
0 anon pages dirty
0 anon pages clean
0 file pages possibly dirty
0 file pages dirty
0 file pages clean
1192643 total name lookups
919841 good hits
145944 negative hits
2291 bad hits
0 false hits
124567 miss
0 too long
357 pass2 hits
515 2passes
1645 reverse hits
3 reverse miss
0 access denied
cache hits (77% pos + 12% neg) system 0% per-process
deletions 0%, falsehits 0%, toolong 0%
netbsd-compal#
netbsd-compal# gdb netbsd.3
netbsd.3 netbsd.3.core
netbsd-compal# gdb netbsd.3
GNU gdb (GDB) 11.0.50.20200914-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i486--netbsdelf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
BFD: warning: /var/crash/netbsd.3 has a section extending past end of file
Reading symbols from netbsd.3...
(No debugging symbols found in netbsd.3)
(gdb) target kcore netbsd.3.core
Undefined target command: "kcore netbsd.3.core". Try "help target".
(gdb) target kvm netbsd.3.core
0xc012d6ed in cpu_reboot ()
(gdb) bt
#0 0xc012d6ed in cpu_reboot ()
#1 0xc0c85ca7 in kern_reboot ()
#2 0xc0cbc868 in vpanic ()
#3 0xc0cbc921 in panic ()
#4 0xc012fed8 in trap ()
#5 0xc012529b in alltraps ()
#6 0xdc7e1e88 in end ()
#7 0xc0b20010 in drm_mode_dirtyfb_ioctl ()
#8 0xc049813a in pmap_page_remove ()
#9 0xc06cd118 in i915_gem_object_release_mmap_offset ()
#10 0xc06cd604 in __i915_gem_free_objects ()
#11 0xc0aef545 in linux_workqueue_thread ()
#12 0xc0102011 in lwp_trampoline ()
(gdb)
netbsd-compal# cat /var/log/Xorg.0.log
[ 156.709]
X.Org X Server 1.21.1.9
X Protocol Version 11, Revision 0
[ 156.709] Current Operating System: NetBSD netbsd-compal.remigio 10.0_RC2 NetBSD 10.0_RC2 (GENERIC) #0: Mon Jan 1 14:04:52 UTC 2024 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/i386/compile/GENERIC i386
[ 156.709]
[ 156.709] Current version of pixman: 0.38.4
[ 156.709] Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
[ 156.709] Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[ 156.710] (==) Log file: "/var/log/Xorg.0.log", Time: Tue Jan 9 19:15:50 2024
[ 156.740] (II) Loader magic: 0xa64c80
[ 156.740] (II) Module ABI versions:
[ 156.740] X.Org ANSI C Emulation: 0.4
[ 156.740] X.Org Video Driver: 25.2
[ 156.740] X.Org XInput driver : 24.4
[ 156.740] X.Org Server Extension : 10.0
[ 156.750] (--) PCI:*(0@0:2:0) 8086:2592:14c0:0012 rev 4, Mem @ 0xd0000000/524288, 0xa0000000/268435456, 0xd0080000/262144, I/O @ 0x0000e000/8
[ 156.750] (--) PCI: (0@0:2:1) 8086:2792:14c0:0012 rev 4, Mem @ 0xd0100000/524288
[ 156.751] (==) Using default built-in configuration (39 lines)
[ 156.751] (==) --- Start of built-in configuration ---
[ 156.751] Section "Device"
[ 156.751] Identifier "Builtin Default intel Device 0"
[ 156.751] Driver "intel"
[ 156.751] EndSection
[ 156.751] Section "Screen"
[ 156.751] Identifier "Builtin Default intel Screen 0"
[ 156.751] Device "Builtin Default intel Device 0"
[ 156.751] EndSection
[ 156.751] Section "Device"
[ 156.751] Identifier "Builtin Default modesetting Device 0"
[ 156.751] Driver "modesetting"
[ 156.751] EndSection
[ 156.751] Section "Screen"
[ 156.751] Identifier "Builtin Default modesetting Screen 0"
[ 156.751] Device "Builtin Default modesetting Device 0"
[ 156.751] EndSection
[ 156.751] Section "Device"
[ 156.751] Identifier "Builtin Default vesa Device 0"
[ 156.751] Driver "vesa"
[ 156.751] EndSection
[ 156.751] Section "Screen"
[ 156.751] Identifier "Builtin Default vesa Screen 0"
[ 156.751] Device "Builtin Default vesa Device 0"
[ 156.751] EndSection
[ 156.751] Section "Device"
[ 156.751] Identifier "Builtin Default wsfb Device 0"
[ 156.751] Driver "wsfb"
[ 156.751] EndSection
[ 156.751] Section "Screen"
[ 156.751] Identifier "Builtin Default wsfb Screen 0"
[ 156.751] Device "Builtin Default wsfb Device 0"
[ 156.751] EndSection
[ 156.751] Section "ServerLayout"
[ 156.751] Identifier "Builtin Default Layout"
[ 156.752] Screen "Builtin Default intel Screen 0"
[ 156.752] Screen "Builtin Default modesetting Screen 0"
[ 156.752] Screen "Builtin Default vesa Screen 0"
[ 156.752] Screen "Builtin Default wsfb Screen 0"
[ 156.752] EndSection
[ 156.752] (==) --- End of built-in configuration ---
[ 156.752] (==) ServerLayout "Builtin Default Layout"
[ 156.752] (**) |-->Screen "Builtin Default intel Screen 0" (0)
[ 156.752] (**) | |-->Monitor "<default monitor>"
[ 156.764] (**) | |-->Device "Builtin Default intel Device 0"
[ 156.764] (==) No monitor specified for screen "Builtin Default intel Screen 0".
Using a default monitor configuration.
[ 156.764] (**) |-->Screen "Builtin Default modesetting Screen 0" (1)
[ 156.764] (**) | |-->Monitor "<default monitor>"
[ 156.765] (**) | |-->Device "Builtin Default modesetting Device 0"
[ 156.765] (==) No monitor specified for screen "Builtin Default modesetting Screen 0".
Using a default monitor configuration.
[ 156.765] (**) |-->Screen "Builtin Default vesa Screen 0" (2)
[ 156.765] (**) | |-->Monitor "<default monitor>"
[ 156.765] (**) | |-->Device "Builtin Default vesa Device 0"
[ 156.765] (==) No monitor specified for screen "Builtin Default vesa Screen 0".
Using a default monitor configuration.
[ 156.765] (**) |-->Screen "Builtin Default wsfb Screen 0" (3)
[ 156.765] (**) | |-->Monitor "<default monitor>"
[ 156.766] (**) | |-->Device "Builtin Default wsfb Device 0"
[ 156.766] (==) No monitor specified for screen "Builtin Default wsfb Screen 0".
Using a default monitor configuration.
[ 156.766] (==) Automatically adding devices
[ 156.766] (==) Automatically enabling devices
[ 156.766] (==) Not automatically adding GPU devices
[ 156.766] (==) Automatically binding GPU devices
[ 156.766] (==) Max clients allowed: 256, resource mask: 0x1fffff
[ 156.801] (WW) The directory "/usr/pkg/share/fonts/X11/misc/" does not exist.
[ 156.801] Entry deleted from font path.
[ 156.801] (WW) The directory "/usr/pkg/share/fonts/X11/TTF/" does not exist.
[ 156.801] Entry deleted from font path.
[ 156.801] (WW) The directory "/usr/pkg/share/fonts/X11/Type1/" does not exist.
[ 156.801] Entry deleted from font path.
[ 156.802] (WW) The directory "/usr/pkg/share/fonts/X11/75dpi/" does not exist.
[ 156.802] Entry deleted from font path.
[ 156.802] (WW) The directory "/usr/pkg/share/fonts/X11/100dpi/" does not exist.
[ 156.802] Entry deleted from font path.
[ 156.802] (==) FontPath set to:
/usr/X11R7/lib/X11/fonts/misc/,
/usr/X11R7/lib/X11/fonts/TTF/,
/usr/X11R7/lib/X11/fonts/Type1/,
/usr/X11R7/lib/X11/fonts/75dpi/,
/usr/X11R7/lib/X11/fonts/100dpi/
[ 156.802] (==) ModulePath set to "/usr/X11R7/lib/modules"
[ 156.802] (II) The server relies on wscons to provide the list of input devices.
If no devices become available, reconfigure wscons or disable AutoAddDevices.
[ 156.802] (II) LoadModule: "glx"
[ 156.818] (II) Loading /usr/X11R7/lib/modules/extensions/libglx.so
[ 156.842] (II) Module glx: vendor="X.Org Foundation"
[ 156.842] compiled for 1.21.1.9, module version = 1.0.0
[ 156.842] ABI class: X.Org Server Extension, version 10.0
[ 156.861] (II) LoadModule: "intel"
[ 156.862] (II) Loading /usr/X11R7/lib/modules/drivers/intel_drv.so
[ 156.933] (II) Module intel: vendor="X.Org Foundation"
[ 156.933] compiled for 1.21.1.9, module version = 2.99.917
[ 156.933] Module class: X.Org Video Driver
[ 156.933] ABI class: X.Org Video Driver, version 25.2
[ 156.941] (II) LoadModule: "modesetting"
[ 156.942] (II) Loading /usr/X11R7/lib/modules/drivers/modesetting_drv.so
[ 156.964] (II) Module modesetting: vendor="X.Org Foundation"
[ 156.964] compiled for 1.21.1.9, module version = 1.21.1
[ 156.964] Module class: X.Org Video Driver
[ 156.964] ABI class: X.Org Video Driver, version 25.2
[ 156.964] (II) LoadModule: "vesa"
[ 156.965] (II) Loading /usr/X11R7/lib/modules/drivers/vesa_drv.so
[ 156.984] (II) Module vesa: vendor="X.Org Foundation"
[ 156.984] compiled for 1.21.1.9, module version = 2.5.0
[ 156.984] Module class: X.Org Video Driver
[ 156.984] ABI class: X.Org Video Driver, version 25.2
[ 156.984] (II) LoadModule: "wsfb"
[ 156.984] (II) Loading /usr/X11R7/lib/modules/drivers/wsfb_drv.so
[ 156.989] (II) Module wsfb: vendor="X.Org Foundation"
[ 156.989] compiled for 1.21.1.9, module version = 0.4.0
[ 156.990] ABI class: X.Org Video Driver, version 25.2
[ 156.990] (II) intel: Driver for Intel(R) Integrated Graphics Chipsets:
i810, i810-dc100, i810e, i815, i830M, 845G, 854, 852GM/855GM, 865G,
915G, E7221 (i915), 915GM, 945G, 945GM, 945GME, Pineview GM,
Pineview G, 965G, G35, 965Q, 946GZ, 965GM, 965GME/GLE, G33, Q35, Q33,
GM45, 4 Series, G45/G43, Q45/Q43, G41, B43
[ 156.990] (II) intel: Driver for Intel(R) HD Graphics
[ 156.990] (II) intel: Driver for Intel(R) Iris(TM) Graphics
[ 156.990] (II) intel: Driver for Intel(R) Iris(TM) Pro Graphics
[ 156.990] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[ 156.990] (II) VESA: driver for VESA chipsets: vesa
[ 156.990] (II) wsfb: driver for wsdisplay framebuffer: wsfb
[ 156.990] (--) Using wscons driver on /dev/ttyE4 in pcvt compatibility mode (version 3.32)
[ 156.990] (--) using VT number 5
[ 157.030] (II) intel(0): Using Kernel Mode Setting driver: i915, version 1.6.0 20200114
[ 157.033] (WW) Falling back to old probe method for modesetting
[ 157.033] (WW) Falling back to old probe method for wsfb
[ 157.033] (WW) VGA arbiter: cannot open kernel arbiter, no multi-card support
[ 157.034] (--) intel(0): Integrated Graphics Chipset: Intel(R) 915GM
[ 157.034] (--) intel(0): CPU: x86, sse2; using a maximum of 1 threads
[ 157.034] (II) intel(0): Creating default Display subsection in Screen section
"Builtin Default intel Screen 0" for depth/fbbpp 24/32
[ 157.034] (==) intel(0): Depth 24, (--) framebuffer bpp 32
[ 157.034] (==) intel(0): RGB weight 888
[ 157.034] (==) intel(0): Default visual is TrueColor
[ 157.065] (II) intel(0): Output LVDS1 has no monitor section
[ 157.078] (II) intel(0): Enabled output LVDS1
[ 157.078] (II) intel(0): Output VGA1 has no monitor section
[ 157.078] (II) intel(0): Enabled output VGA1
[ 157.078] (II) intel(0): Output TV1 has no monitor section
[ 157.078] (II) intel(0): Enabled output TV1
[ 157.078] (--) intel(0): Using a maximum size of 256x256 for hardware cursors
[ 157.079] (II) intel(0): Output VIRTUAL1 has no monitor section
[ 157.079] (II) intel(0): Enabled output VIRTUAL1
[ 157.079] (--) intel(0): Output LVDS1 using initial mode 1280x800 on pipe 1
[ 157.079] (==) intel(0): TearFree enabled
[ 157.079] (==) intel(0): Using gamma correction (1.0, 1.0, 1.0)
[ 157.079] (==) intel(0): DPI set to (96, 96)
[ 157.079] (II) Loading sub module "dri2"
[ 157.079] (II) LoadModule: "dri2"
[ 157.079] (II) Module "dri2" already built-in
[ 157.079] (II) UnloadModule: "modesetting"
[ 157.079] (II) Unloading modesetting
[ 157.079] (II) UnloadModule: "vesa"
[ 157.079] (II) Unloading vesa
[ 157.079] (II) UnloadModule: "wsfb"
[ 157.079] (II) Unloading wsfb
[ 157.131] (II) intel(0): SNA initialized with Alviso (gen3) backend
[ 157.131] (==) intel(0): Backing store enabled
[ 157.131] (==) intel(0): Silken mouse enabled
[ 157.141] (II) intel(0): HW Cursor enabled
[ 157.144] (==) intel(0): DPMS enabled
[ 157.177] (II) intel(0): [DRI2] Setup complete
[ 157.177] (II) intel(0): [DRI2] DRI driver: i915
[ 157.177] (II) intel(0): [DRI2] VDPAU driver: va_gl
[ 157.177] (II) intel(0): direct rendering: DRI2 enabled
[ 157.192] (II) Initializing extension Generic Event Extension
[ 157.193] (II) Initializing extension SHAPE
[ 157.193] (II) Initializing extension MIT-SHM
[ 157.194] (II) Initializing extension XInputExtension
[ 157.196] (II) Initializing extension XTEST
[ 157.197] (II) Initializing extension BIG-REQUESTS
[ 157.197] (II) Initializing extension SYNC
[ 157.198] (II) Initializing extension XKEYBOARD
[ 157.208] (II) Initializing extension XC-MISC
[ 157.209] (II) Initializing extension SECURITY
[ 157.210] (II) Initializing extension XFIXES
[ 157.211] (II) Initializing extension XFree86-Bigfont
[ 157.212] (II) Initializing extension RENDER
[ 157.213] (II) Initializing extension RANDR
[ 157.214] (II) Initializing extension COMPOSITE
[ 157.222] (II) Initializing extension DAMAGE
[ 157.223] (II) Initializing extension MIT-SCREEN-SAVER
[ 157.231] (II) Initializing extension DOUBLE-BUFFER
[ 157.236] (II) Initializing extension RECORD
[ 157.237] (II) Initializing extension DPMS
[ 157.237] (II) Initializing extension Present
[ 157.239] (II) Initializing extension DRI3
[ 157.239] (II) Initializing extension X-Resource
[ 157.240] (II) Initializing extension XVideo
[ 157.240] (II) Initializing extension XVideo-MotionCompensation
[ 157.240] (II) Initializing extension GLX
[ 157.690] (II) AIGLX: Loaded and initialized i915
[ 157.690] (II) GLX: Initialized DRI2 GL provider for screen 0
[ 157.690] (II) Initializing extension XFree86-VidModeExtension
[ 157.691] (II) Initializing extension XFree86-DGA
[ 157.692] (II) Initializing extension XFree86-DRI
[ 157.692] (II) Initializing extension DRI2
[ 157.751] (II) intel(0): switch to mode 1280x800@60.0 on LVDS1 using pipe 1, position (0, 0), rotation normal, reflection none
[ 157.761] (II) intel(0): Setting screen physical size to 338 x 211
[ 158.451] (II) config/wscons: checking input device /dev/wskbd
[ 158.451] (II) wskbd: using layout es
[ 158.461] (II) LoadModule: "kbd"
[ 158.462] (II) Loading /usr/X11R7/lib/modules/drivers/kbd_drv.so
[ 158.487] (II) Module kbd: vendor="X.Org Foundation"
[ 158.487] compiled for 1.21.1.9, module version = 2.0.0
[ 158.487] Module class: X.Org XInput Driver
[ 158.487] ABI class: X.Org XInput driver, version 24.4
[ 158.487] (II) Using input driver 'kbd' for '/dev/wskbd'
[ 158.487] (**) /dev/wskbd: always reports core events
[ 158.487] (**) /dev/wskbd: always reports core events
[ 158.487] (**) Option "Protocol" "standard"
[ 158.487] (**) Option "XkbRules" "base"
[ 158.487] (**) Option "XkbModel" "pc105"
[ 158.487] (**) Option "XkbLayout" "es"
[ 158.487] (II) XINPUT: Adding extended input device "/dev/wskbd" (type: KEYBOARD, id 6)
[ 158.587] (II) config/wscons: checking input device /dev/wsmouse
[ 158.587] (II) LoadModule: "ws"
[ 158.588] (II) Loading /usr/X11R7/lib/modules/drivers/ws_drv.so
[ 158.595] (II) Module ws: vendor="X.Org Foundation"
[ 158.595] compiled for 1.21.1.9, module version = 1.3.0
[ 158.595] Module class: X.Org XInput Driver
[ 158.595] ABI class: X.Org XInput driver, version 24.4
[ 158.595] (II) Using input driver 'ws' for '/dev/wsmouse'
[ 158.595] (**) /dev/wsmouse: always reports core events
[ 158.595] (II) /dev/wsmouse: debuglevel 0
[ 158.595] (**) /dev/wsmouse: ZAxisMapping: buttons 4 and 5
[ 158.595] (**) /dev/wsmouse associated screen: 0
[ 158.595] (**) Option "Device" "/dev/wsmouse"
[ 158.598] (II) /dev/wsmouse minimum x position: 0
[ 158.598] (II) /dev/wsmouse maximum x position: 1279
[ 158.598] (II) /dev/wsmouse minimum y position: 0
[ 158.598] (II) /dev/wsmouse maximum y position: 799
[ 158.598] (**) /dev/wsmouse: Buttons: 5
[ 158.637] (II) XINPUT: Adding extended input device "/dev/wsmouse" (type: MOUSE, id 7)
[ 158.640] (**) /dev/wsmouse: (accel) keeping acceleration scheme 1
[ 158.640] (**) /dev/wsmouse: (accel) acceleration profile 0
[ 158.640] (**) /dev/wsmouse: (accel) acceleration factor: 2.000
[ 158.640] (**) /dev/wsmouse: (accel) acceleration threshold: 4
[ 159.168] (II) intel(0): EDID vendor "CMO", prod id 5380
[ 159.168] (II) intel(0): Printing DDC gathered Modelines:
[ 159.168] (II) intel(0): Modeline "1280x800"x0.0 71.00 1280 1328 1360 1440 800 803 809 823 -hsync -vsync (49.3 kHz eP)
netbsd-compal#
>How-To-Repeat:
Just exit the desktop.
>Fix:
No fix known
>Release-Note:
>Audit-Trail:
From: "David H. Gutteridge" <david@gutteridge.ca>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Wed, 10 Jan 2024 10:30:02 -0500
This is 100% reproducible for me with similar hardware. I hadn't got
around to filing it, thanks. Certainly on exit from X, every time I
get a kernel panic. There may be a second path, where I was doing
something still inside a WM (awesome, not that I think that matters)
which may have also tripped the same issue. This is a regression from
9.3_STABLE.
Dave
From: Ramiro Aceves <ea1abz@gmail.com>
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: "David H. Gutteridge" <david@gutteridge.ca>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Wed, 10 Jan 2024 19:23:35 +0100
El 10/1/24 a las 16:35, David H. Gutteridge escribió:
> The following reply was made to PR kern/57833; it has been noted by GNATS.
>
> From: "David H. Gutteridge" <david@gutteridge.ca>
> To: gnats-bugs@netbsd.org
> Cc:
> Subject: Re: kern/57833: kernel panic on xorg exit
> Date: Wed, 10 Jan 2024 10:30:02 -0500
>
> This is 100% reproducible for me with similar hardware. I hadn't got
> around to filing it, thanks. Certainly on exit from X, every time I
> get a kernel panic. There may be a second path, where I was doing
> something still inside a WM (awesome, not that I think that matters)
> which may have also tripped the same issue. This is a regression from
> 9.3_STABLE.
>
> Dave
>
Interesting.
Disabling i915drmkms driver at boot removes the panics but screen
horizontal resolution in Xorg is reduced to 1024 (from 1280 with the
i915 driver.)
Ramiro.
From: RVP <rvp@SDF.ORG>
To: Ramiro Aceves <ea1abz@gmail.com>
Cc: gnats-bugs@netbsd.org, "David H. Gutteridge" <david@gutteridge.ca>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Wed, 10 Jan 2024 23:34:50 +0000 (UTC)
On Wed, 10 Jan 2024, Ramiro Aceves wrote:
> Disabling i915drmkms driver at boot removes the panics but screen horizontal
> resolution in Xorg is reduced to 1024 (from 1280 with the i915 driver.)
>
Set a higher resolution in the bootloader using the `vesa' or `gop' command:
https://wiki.netbsd.org/tutorials/x11/how_to_use_wsfb_uefi_bios_framebuffer/
-RVP
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>,
"David H. Gutteridge" <david@gutteridge.ca>
Cc: gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 11 Jan 2024 03:23:52 +0000
This is a multi-part message in MIME format.
--=_0HRkmbj5w4l3btWdYGspzomvaep+joYl
Can you please try the attached patch and see if it makes progress?
I don't know if this condition should be possible, so this might be
papering over the symptom rather than addressing the problem, but
maybe it'll work as a stop-gap measure.
--=_0HRkmbj5w4l3btWdYGspzomvaep+joYl
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gemrelmmapoffnullpage"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gemrelmmapoffnullpage.patch"
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..276ebbdbc234 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -677,6 +677,8 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
return;
for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
+ if (page =3D=3D NULL)
+ continue;
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
}
--=_0HRkmbj5w4l3btWdYGspzomvaep+joYl--
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>,
"David H. Gutteridge" <david@gutteridge.ca>
Cc: gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 11 Jan 2024 03:35:34 +0000
This is a multi-part message in MIME format.
--=_N0hLBzU5DjcEYheFlzRdAXMCmk/RN49m
Aside from working around the symptom -- do you get a core dump, and do you
have netbsd.gdb for a kernel which produces it?
If so, can you go to the i915_gem_object_release_mmap_offset frame,
and print some information?
# gdb ./netbsd.gdb
(gdb) target kvm netbsd.42.core
(gdb) frame 3 # or whatever the frame number is
(gdb) info locals
(gdb) print *obj
(gdb) print *obj->mm.pages
(gdb) print obj->mm.pages->sgl->sg_pgs[0]
--=_N0hLBzU5DjcEYheFlzRdAXMCmk/RN49m
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gemrelmmapoffnullpage"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gemrelmmapoffnullpage.patch"
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..276ebbdbc234 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -677,6 +677,8 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
return;
for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
+ if (page =3D=3D NULL)
+ continue;
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
}
--=_N0hLBzU5DjcEYheFlzRdAXMCmk/RN49m--
State-Changed-From-To: open->feedback
State-Changed-By: riastradh@NetBSD.org
State-Changed-When: Thu, 11 Jan 2024 03:48:49 +0000
State-Changed-Why:
feedback requested
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>,
"David H. Gutteridge" <david@gutteridge.ca>
Cc: gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 11 Jan 2024 04:37:03 +0000
This is a multi-part message in MIME format.
--=_rcF9s9y1wcdKoxr8Pe72O3MsTry8XuO4
Can you also try the attached patch, instead of the other one, to see
what happens?
(This might break things more spectacularly -- I haven't thought about
whether it makes a lot of sense -- but it should at least prevent the
particular crash you observed, if we ever get that far with it.)
--=_rcF9s9y1wcdKoxr8Pe72O3MsTry8XuO4
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages.patch"
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..276ebbdbc234 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -677,6 +677,8 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
return;
for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
+ if (page =3D=3D NULL)
+ continue;
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
}
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..29772bdbd8d9 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -83,8 +83,14 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+ goto err_st;
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
goto err_st;
+#endif
=20
sg =3D st->sgl;
#ifdef __NetBSD__
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..5e8232b9634f 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -85,7 +85,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamem_export_pages(dmat, segs, nsegs, sg->sg_pgs,
+ sg->sg_npgs);
+ if (ret)
+ goto err;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..08cf7f0001bf 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -532,6 +531,7 @@ i915_pages_create_for_stolen(struct drm_device *dev,
return ERR_PTR(-ENOMEM);
}
=20
+ sg =3D st->sgl;
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,19 +548,25 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamem_export_pages(dmat, seg, nseg, sg->sg_pgs,
+ sg->sg_npgs);
+ if (ret)
+ goto err;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
/* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -571,13 +577,12 @@ i915_pages_create_for_stolen(struct drm_device *dev,
=20
out: if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
- sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
=20
--=_rcF9s9y1wcdKoxr8Pe72O3MsTry8XuO4--
From: "David H. Gutteridge" <david@gutteridge.ca>
To: Taylor R Campbell <riastradh@netbsd.org>
Cc: gnats-bugs@netbsd.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 11 Jan 2024 18:04:44 -0500
--=_79cd473ca3d4e19fbe52c232ee5dd792
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII;
format=flowed
On 2024-01-10 23:37, Taylor R Campbell wrote:
> Can you also try the attached patch, instead of the other one, to see
> what happens?
>
> (This might break things more spectacularly -- I haven't thought about
> whether it makes a lot of sense -- but it should at least prevent the
> particular crash you observed, if we ever get that far with it.)
I've supplied a debug log. (It can be found at:
https://www.netbsd.org/~gutteridge/pr57833_debug.log .)
Applying the first (small) patch did not prevent the panics. But the
larger patch did fix the problem for me. There was a slight coding
error with the second patch (wrong label for a goto statement), so it
didn't compile as-is. I've attached a revised patch that fixes that one
line, should anyone else want to test this.
Thanks,
Dave
--=_79cd473ca3d4e19fbe52c232ee5dd792
Content-Transfer-Encoding: base64
Content-Type: text/x-diff;
name=pr57833-i915gempages-v2.patch
Content-Disposition: attachment;
filename=pr57833-i915gempages-v2.patch;
size=4173
ZGlmZiAtLWdpdCBhL3N5cy9leHRlcm5hbC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1
X2dlbV9tbWFuLmMgYi9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkx
NV9nZW1fbW1hbi5jCmluZGV4IDhlNTkyZjAwOGVmNy4uMjc2ZWJiZGJjMjM0IDEwMDY0NAotLS0g
YS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5j
CisrKyBiL3N5cy9leHRlcm5hbC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9t
bWFuLmMKQEAgLTY3Nyw2ICs2NzcsOCBAQCB2b2lkIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21t
YXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCXJldHVybjsKIAlm
b3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsgaSsrKSB7CiAJCXBh
Z2UgPSBvYmotPm1tLnBhZ2VzLT5zZ2wtPnNnX3Bnc1tpXTsKKwkJaWYgKHBhZ2UgPT0gTlVMTCkK
KwkJCWNvbnRpbnVlOwogCQl2bV9wYWdlID0gJnBhZ2UtPnBfdm1wOwogCQlwbWFwX3BhZ2VfcHJv
dGVjdCh2bV9wYWdlLCBWTV9QUk9UX05PTkUpOwogCX0KZGlmZiAtLWdpdCBhL3N5cy9leHRlcm5h
bC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMgYi9zeXMvZXh0ZXJu
YWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jCmluZGV4IDNmNjgy
NzZlZWE1Zi4uMjk3NzJiZGJkOGQ5IDEwMDY0NAotLS0gYS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIv
ZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jCisrKyBiL3N5cy9leHRlcm5hbC9ic2Qv
ZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMKQEAgLTgzLDggKzgzLDE0IEBA
IHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkx
NV9nZW1fb2JqZWN0ICpvYmopCiAJaWYgKCFzdCkKIAkJZ290byBlcnJfcGNpOwogCisjaWZkZWYg
X19OZXRCU0RfXworCWlmIChzZ19hbGxvY190YWJsZV9mcm9tX2J1c19kbWFtZW0oc3QsIGRtYXQs
ICZvYmotPm1tLnUucGh5cy5zZWcsIDEsCisJCUdGUF9LRVJORUwpKQorCQlnb3RvIGVycl9zdDsK
KyNlbHNlCiAJaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCAxLCBHRlBfS0VSTkVMKSkKIAkJZ290byBl
cnJfc3Q7CisjZW5kaWYKIAogCXNnID0gc3QtPnNnbDsKICNpZmRlZiBfX05ldEJTRF9fCmRpZmYg
LS1naXQgYS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f
cmVnaW9uLmMgYi9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9n
ZW1fcmVnaW9uLmMKaW5kZXggMWE5Mjg5ODhiZDVmLi41ZTgyMzJiOTYzNGYgMTAwNjQ0Ci0tLSBh
L3N5cy9leHRlcm5hbC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24u
YworKysgYi9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f
cmVnaW9uLmMKQEAgLTg1LDcgKzg1LDE1IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfYnVk
ZHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAogCQlzZWdzW2ldLmRzX2FkZHIg
PSBtZW0tPnJlZ2lvbi5zdGFydCArIG9mZnNldDsKIAkJc2Vnc1tpXS5kc19sZW4gPSBibG9ja19z
aXplOworCQlpKys7CiAJfQorCUtBU1NFUlQoaSA9PSBuc2Vncyk7CisKKwkvKiBYWFggZXJybm8g
TmV0QlNELT5MaW51eCAqLworCXJldCA9IC1idXNfZG1hbWVtX2V4cG9ydF9wYWdlcyhkbWF0LCBz
ZWdzLCBuc2Vncywgc2ctPnNnX3BncywKKwkgICAgc2ctPnNnX25wZ3MpOworCWlmIChyZXQpCisJ
CWdvdG8gZXJyOwogCiAJLyogWFhYIGVycm5vIE5ldEJTRC0+TGludXggKi8KIAlyZXQgPSAtYnVz
X2RtYW1hcF9jcmVhdGUoZG1hdCwgc2l6ZSwgbnNlZ3MsIHNpemUsIDAsIEJVU19ETUFfV0FJVE9L
LApkaWZmIC0tZ2l0IGEvc3lzL2V4dGVybmFsL2JzZC9kcm0yL2Rpc3QvZHJtL2k5MTUvZ2VtL2k5
MTVfZ2VtX3N0b2xlbi5jIGIvc3lzL2V4dGVybmFsL2JzZC9kcm0yL2Rpc3QvZHJtL2k5MTUvZ2Vt
L2k5MTVfZ2VtX3N0b2xlbi5jCmluZGV4IGI1M2Q1NDNmYTg5NC4uMDhjZjdmMDAwMWJmIDEwMDY0
NAotLS0gYS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f
c3RvbGVuLmMKKysrIGIvc3lzL2V4dGVybmFsL2JzZC9kcm0yL2Rpc3QvZHJtL2k5MTUvZ2VtL2k5
MTVfZ2VtX3N0b2xlbi5jCkBAIC01MDYsMTQgKzUwNiwxMyBAQCBpOTE1X3BhZ2VzX2NyZWF0ZV9m
b3Jfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IGRybV9pOTE1X3By
aXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlzdHJ1
Y3Qgc2NhdHRlcmxpc3QgKnNnOwogI2lmZGVmIF9fTmV0QlNEX18KIAlidXNfZG1hX3RhZ190IGRt
YXQgPSBpOTE1LT5kcm0uZG1hdDsKIAlidXNfZG1hX3NlZ21lbnRfdCAqc2VnID0gTlVMTDsKIAlp
bnQgbnNlZyA9IDAsIGk7CiAJYm9vbCBsb2FkZWQgPSBmYWxzZTsKIAlpbnQgcmV0OwotI2Vsc2UK
LQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogI2VuZGlmCiAKIAlHRU1fQlVHX09OKHJhbmdlX292
ZXJmbG93cyhvZmZzZXQsIHNpemUsIHJlc291cmNlX3NpemUoJmk5MTUtPmRzbSkpKTsKQEAgLTUz
Miw2ICs1MzEsNyBAQCBpOTE1X3BhZ2VzX2NyZWF0ZV9mb3Jfc3RvbGVuKHN0cnVjdCBkcm1fZGV2
aWNlICpkZXYsCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAorCXNnID0gc3QtPnNn
bDsKICNpZmRlZiBfX05ldEJTRF9fCiAJS0FTU0VSVCgoc2l6ZSAlIFBBR0VfU0laRSkgPT0gMCk7
CiAJbnNlZyA9IHNpemUgLyBQQUdFX1NJWkU7CkBAIC01NDgsMTkgKzU0OCwyNSBAQCBpOTE1X3Bh
Z2VzX2NyZWF0ZV9mb3Jfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXNlZ1tpXS5k
c19sZW4gPSBQQUdFX1NJWkU7CiAJfQogCisJLyogWFhYIGVycm5vIE5ldEJTRC0+TGludXggKi8K
KwlyZXQgPSAtYnVzX2RtYW1lbV9leHBvcnRfcGFnZXMoZG1hdCwgc2VnLCBuc2VnLCBzZy0+c2df
cGdzLAorCSAgICBzZy0+c2dfbnBncyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKIAkvKiBY
WFggZXJybm8gTmV0QlNELT5MaW51eCAqLwogCXJldCA9IC1idXNfZG1hbWFwX2NyZWF0ZShkbWF0
LCBzaXplLCBuc2VnLCBQQUdFX1NJWkUsIDAsCi0JICAgIEJVU19ETUFfV0FJVE9LLCAmc3QtPnNn
bC0+c2dfZG1hbWFwKTsKKwkgICAgQlVTX0RNQV9XQUlUT0ssICZzZy0+c2dfZG1hbWFwKTsKIAlp
ZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBETUEgbWFwIGZvciBzdG9s
ZW4gb2JqZWN0OiAlZFxuIiwKIAkJICAgIHJldCk7Ci0JCXN0LT5zZ2wtPnNnX2RtYW1hcCA9IE5V
TEw7CisJCXNnLT5zZ19kbWFtYXAgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3QtPnNnbC0+
c2dfZG1hdCA9IGRtYXQ7CisJc2ctPnNnX2RtYXQgPSBkbWF0OwogCiAJLyogWFhYIGVycm5vIE5l
dEJTRC0+TGl1eCAqLwotCXJldCA9IC1idXNfZG1hbWFwX2xvYWRfcmF3KGRtYXQsIHN0LT5zZ2wt
PnNnX2RtYW1hcCwgc2VnLCBuc2VnLCBzaXplLAorCXJldCA9IC1idXNfZG1hbWFwX2xvYWRfcmF3
KGRtYXQsIHNnLT5zZ19kbWFtYXAsIHNlZywgbnNlZywgc2l6ZSwKIAkgICAgQlVTX0RNQV9XQUlU
T0spOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9hZCBETUEgbWFwIGZv
ciBzdG9sZW4gb2JqZWN0OiAlZFxuIiwKQEAgLTU3MSwxMyArNTc3LDEyIEBAIGk5MTVfcGFnZXNf
Y3JlYXRlX2Zvcl9zdG9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogb3V0OglpZiAocmV0
KSB7CiAJCWlmIChsb2FkZWQpCi0JCQlidXNfZG1hbWFwX3VubG9hZChkbWF0LCBzdC0+c2dsLT5z
Z19kbWFtYXApOworCQkJYnVzX2RtYW1hcF91bmxvYWQoZG1hdCwgc2ctPnNnX2RtYW1hcCk7CiAJ
CXNnX2ZyZWVfdGFibGUoc3QpOwogCQlrZnJlZShzdCk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7
CiAJfQogI2Vsc2UKLQlzZyA9IHN0LT5zZ2w7CiAJc2ctPm9mZnNldCA9IDA7CiAJc2ctPmxlbmd0
aCA9IHNpemU7CiAK
--=_79cd473ca3d4e19fbe52c232ee5dd792--
State-Changed-From-To: feedback->open
State-Changed-By: gutteridge@NetBSD.org
State-Changed-When: Thu, 11 Jan 2024 23:11:07 +0000
State-Changed-Why:
Feedback supplied.
From: Ramiro Aceves <ea1abz@gmail.com>
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: rvP <rvp@SDF.ORG>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Fri, 12 Jan 2024 19:35:21 +0100
El 11/1/24 a las 0:35, RVP escribió:
> The following reply was made to PR kern/57833; it has been noted by GNATS.
>
> From: RVP <rvp@SDF.ORG>
> To: Ramiro Aceves <ea1abz@gmail.com>
> Cc: gnats-bugs@netbsd.org, "David H. Gutteridge" <david@gutteridge.ca>
> Subject: Re: kern/57833: kernel panic on xorg exit
> Date: Wed, 10 Jan 2024 23:34:50 +0000 (UTC)
>
> On Wed, 10 Jan 2024, Ramiro Aceves wrote:
>
> > Disabling i915drmkms driver at boot removes the panics but screen horizontal
> > resolution in Xorg is reduced to 1024 (from 1280 with the i915 driver.)
> >
>
> Set a higher resolution in the bootloader using the `vesa' or `gop' command:
Thanks RVP for the tip, but the maximum resolution available with "vesa
list" is 1024x768
Ramiro.
>
> https://wiki.netbsd.org/tutorials/x11/how_to_use_wsfb_uefi_bios_framebuffer/
>
> -RVP
>
From: Ramiro Aceves <ea1abz@gmail.com>
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: "David H. Gutteridge" <david@gutteridge.ca>,
Taylor R Campbell <riastradh@NetBSD.org>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Fri, 12 Jan 2024 23:52:23 +0100
El 12/1/24 a las 0:05, David H. Gutteridge escribió:
> The following reply was made to PR kern/57833; it has been noted by GNATS.
>
> From: "David H. Gutteridge" <david@gutteridge.ca>
> To: Taylor R Campbell <riastradh@netbsd.org>
> Cc: gnats-bugs@netbsd.org
> Subject: Re: kern/57833: kernel panic on xorg exit
> Date: Thu, 11 Jan 2024 18:04:44 -0500
>
> --=_79cd473ca3d4e19fbe52c232ee5dd792
> Content-Transfer-Encoding: 7bit
> Content-Type: text/plain; charset=US-ASCII;
> format=flowed
>
> On 2024-01-10 23:37, Taylor R Campbell wrote:
> > Can you also try the attached patch, instead of the other one, to see
> > what happens?
> >
> > (This might break things more spectacularly -- I haven't thought about
> > whether it makes a lot of sense -- but it should at least prevent the
> > particular crash you observed, if we ever get that far with it.)
>
> I've supplied a debug log. (It can be found at:
> https://www.netbsd.org/~gutteridge/pr57833_debug.log .)
>
> Applying the first (small) patch did not prevent the panics. But the
> larger patch did fix the problem for me. There was a slight coding
> error with the second patch (wrong label for a goto statement), so it
> didn't compile as-is. I've attached a revised patch that fixes that one
> line, should anyone else want to test this.
>
> Thanks,
>
> Dave
Hello Dave, thanks for feedback. Here I had the same problem, I applied
the patch and could not compile the kernel because en error in 555 line
when compiling i915_gem_stolen.c file. I changed
goto err;
to
goto out;
(not sure if that is the right fix)
File compiled ok. Rebuilt the kernel and I had the same panic the first
time abandoned Xorg session.
Ramiro.
>
> --=_79cd473ca3d4e19fbe52c232ee5dd792
> Content-Transfer-Encoding: base64
> Content-Type: text/x-diff;
> name=pr57833-i915gempages-v2.patch
> Content-Disposition: attachment;
> filename=pr57833-i915gempages-v2.patch;
> size=4173
>
> ZGlmZiAtLWdpdCBhL3N5cy9leHRlcm5hbC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1
> X2dlbV9tbWFuLmMgYi9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkx
> NV9nZW1fbW1hbi5jCmluZGV4IDhlNTkyZjAwOGVmNy4uMjc2ZWJiZGJjMjM0IDEwMDY0NAotLS0g
> YS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5j
> CisrKyBiL3N5cy9leHRlcm5hbC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9t
> bWFuLmMKQEAgLTY3Nyw2ICs2NzcsOCBAQCB2b2lkIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21t
> YXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCXJldHVybjsKIAlm
> b3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsgaSsrKSB7CiAJCXBh
> Z2UgPSBvYmotPm1tLnBhZ2VzLT5zZ2wtPnNnX3Bnc1tpXTsKKwkJaWYgKHBhZ2UgPT0gTlVMTCkK
> KwkJCWNvbnRpbnVlOwogCQl2bV9wYWdlID0gJnBhZ2UtPnBfdm1wOwogCQlwbWFwX3BhZ2VfcHJv
> dGVjdCh2bV9wYWdlLCBWTV9QUk9UX05PTkUpOwogCX0KZGlmZiAtLWdpdCBhL3N5cy9leHRlcm5h
> bC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMgYi9zeXMvZXh0ZXJu
> YWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jCmluZGV4IDNmNjgy
> NzZlZWE1Zi4uMjk3NzJiZGJkOGQ5IDEwMDY0NAotLS0gYS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIv
> ZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jCisrKyBiL3N5cy9leHRlcm5hbC9ic2Qv
> ZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMKQEAgLTgzLDggKzgzLDE0IEBA
> IHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkx
> NV9nZW1fb2JqZWN0ICpvYmopCiAJaWYgKCFzdCkKIAkJZ290byBlcnJfcGNpOwogCisjaWZkZWYg
> X19OZXRCU0RfXworCWlmIChzZ19hbGxvY190YWJsZV9mcm9tX2J1c19kbWFtZW0oc3QsIGRtYXQs
> ICZvYmotPm1tLnUucGh5cy5zZWcsIDEsCisJCUdGUF9LRVJORUwpKQorCQlnb3RvIGVycl9zdDsK
> KyNlbHNlCiAJaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCAxLCBHRlBfS0VSTkVMKSkKIAkJZ290byBl
> cnJfc3Q7CisjZW5kaWYKIAogCXNnID0gc3QtPnNnbDsKICNpZmRlZiBfX05ldEJTRF9fCmRpZmYg
> LS1naXQgYS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f
> cmVnaW9uLmMgYi9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9n
> ZW1fcmVnaW9uLmMKaW5kZXggMWE5Mjg5ODhiZDVmLi41ZTgyMzJiOTYzNGYgMTAwNjQ0Ci0tLSBh
> L3N5cy9leHRlcm5hbC9ic2QvZHJtMi9kaXN0L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24u
> YworKysgYi9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f
> cmVnaW9uLmMKQEAgLTg1LDcgKzg1LDE1IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfYnVk
> ZHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAogCQlzZWdzW2ldLmRzX2FkZHIg
> PSBtZW0tPnJlZ2lvbi5zdGFydCArIG9mZnNldDsKIAkJc2Vnc1tpXS5kc19sZW4gPSBibG9ja19z
> aXplOworCQlpKys7CiAJfQorCUtBU1NFUlQoaSA9PSBuc2Vncyk7CisKKwkvKiBYWFggZXJybm8g
> TmV0QlNELT5MaW51eCAqLworCXJldCA9IC1idXNfZG1hbWVtX2V4cG9ydF9wYWdlcyhkbWF0LCBz
> ZWdzLCBuc2Vncywgc2ctPnNnX3BncywKKwkgICAgc2ctPnNnX25wZ3MpOworCWlmIChyZXQpCisJ
> CWdvdG8gZXJyOwogCiAJLyogWFhYIGVycm5vIE5ldEJTRC0+TGludXggKi8KIAlyZXQgPSAtYnVz
> X2RtYW1hcF9jcmVhdGUoZG1hdCwgc2l6ZSwgbnNlZ3MsIHNpemUsIDAsIEJVU19ETUFfV0FJVE9L
> LApkaWZmIC0tZ2l0IGEvc3lzL2V4dGVybmFsL2JzZC9kcm0yL2Rpc3QvZHJtL2k5MTUvZ2VtL2k5
> MTVfZ2VtX3N0b2xlbi5jIGIvc3lzL2V4dGVybmFsL2JzZC9kcm0yL2Rpc3QvZHJtL2k5MTUvZ2Vt
> L2k5MTVfZ2VtX3N0b2xlbi5jCmluZGV4IGI1M2Q1NDNmYTg5NC4uMDhjZjdmMDAwMWJmIDEwMDY0
> NAotLS0gYS9zeXMvZXh0ZXJuYWwvYnNkL2RybTIvZGlzdC9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f
> c3RvbGVuLmMKKysrIGIvc3lzL2V4dGVybmFsL2JzZC9kcm0yL2Rpc3QvZHJtL2k5MTUvZ2VtL2k5
> MTVfZ2VtX3N0b2xlbi5jCkBAIC01MDYsMTQgKzUwNiwxMyBAQCBpOTE1X3BhZ2VzX2NyZWF0ZV9m
> b3Jfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IGRybV9pOTE1X3By
> aXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlzdHJ1
> Y3Qgc2NhdHRlcmxpc3QgKnNnOwogI2lmZGVmIF9fTmV0QlNEX18KIAlidXNfZG1hX3RhZ190IGRt
> YXQgPSBpOTE1LT5kcm0uZG1hdDsKIAlidXNfZG1hX3NlZ21lbnRfdCAqc2VnID0gTlVMTDsKIAlp
> bnQgbnNlZyA9IDAsIGk7CiAJYm9vbCBsb2FkZWQgPSBmYWxzZTsKIAlpbnQgcmV0OwotI2Vsc2UK
> LQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogI2VuZGlmCiAKIAlHRU1fQlVHX09OKHJhbmdlX292
> ZXJmbG93cyhvZmZzZXQsIHNpemUsIHJlc291cmNlX3NpemUoJmk5MTUtPmRzbSkpKTsKQEAgLTUz
> Miw2ICs1MzEsNyBAQCBpOTE1X3BhZ2VzX2NyZWF0ZV9mb3Jfc3RvbGVuKHN0cnVjdCBkcm1fZGV2
> aWNlICpkZXYsCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAorCXNnID0gc3QtPnNn
> bDsKICNpZmRlZiBfX05ldEJTRF9fCiAJS0FTU0VSVCgoc2l6ZSAlIFBBR0VfU0laRSkgPT0gMCk7
> CiAJbnNlZyA9IHNpemUgLyBQQUdFX1NJWkU7CkBAIC01NDgsMTkgKzU0OCwyNSBAQCBpOTE1X3Bh
> Z2VzX2NyZWF0ZV9mb3Jfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXNlZ1tpXS5k
> c19sZW4gPSBQQUdFX1NJWkU7CiAJfQogCisJLyogWFhYIGVycm5vIE5ldEJTRC0+TGludXggKi8K
> KwlyZXQgPSAtYnVzX2RtYW1lbV9leHBvcnRfcGFnZXMoZG1hdCwgc2VnLCBuc2VnLCBzZy0+c2df
> cGdzLAorCSAgICBzZy0+c2dfbnBncyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKIAkvKiBY
> WFggZXJybm8gTmV0QlNELT5MaW51eCAqLwogCXJldCA9IC1idXNfZG1hbWFwX2NyZWF0ZShkbWF0
> LCBzaXplLCBuc2VnLCBQQUdFX1NJWkUsIDAsCi0JICAgIEJVU19ETUFfV0FJVE9LLCAmc3QtPnNn
> bC0+c2dfZG1hbWFwKTsKKwkgICAgQlVTX0RNQV9XQUlUT0ssICZzZy0+c2dfZG1hbWFwKTsKIAlp
> ZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBETUEgbWFwIGZvciBzdG9s
> ZW4gb2JqZWN0OiAlZFxuIiwKIAkJICAgIHJldCk7Ci0JCXN0LT5zZ2wtPnNnX2RtYW1hcCA9IE5V
> TEw7CisJCXNnLT5zZ19kbWFtYXAgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3QtPnNnbC0+
> c2dfZG1hdCA9IGRtYXQ7CisJc2ctPnNnX2RtYXQgPSBkbWF0OwogCiAJLyogWFhYIGVycm5vIE5l
> dEJTRC0+TGl1eCAqLwotCXJldCA9IC1idXNfZG1hbWFwX2xvYWRfcmF3KGRtYXQsIHN0LT5zZ2wt
> PnNnX2RtYW1hcCwgc2VnLCBuc2VnLCBzaXplLAorCXJldCA9IC1idXNfZG1hbWFwX2xvYWRfcmF3
> KGRtYXQsIHNnLT5zZ19kbWFtYXAsIHNlZywgbnNlZywgc2l6ZSwKIAkgICAgQlVTX0RNQV9XQUlU
> T0spOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9hZCBETUEgbWFwIGZv
> ciBzdG9sZW4gb2JqZWN0OiAlZFxuIiwKQEAgLTU3MSwxMyArNTc3LDEyIEBAIGk5MTVfcGFnZXNf
> Y3JlYXRlX2Zvcl9zdG9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogb3V0OglpZiAocmV0
> KSB7CiAJCWlmIChsb2FkZWQpCi0JCQlidXNfZG1hbWFwX3VubG9hZChkbWF0LCBzdC0+c2dsLT5z
> Z19kbWFtYXApOworCQkJYnVzX2RtYW1hcF91bmxvYWQoZG1hdCwgc2ctPnNnX2RtYW1hcCk7CiAJ
> CXNnX2ZyZWVfdGFibGUoc3QpOwogCQlrZnJlZShzdCk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7
> CiAJfQogI2Vsc2UKLQlzZyA9IHN0LT5zZ2w7CiAJc2ctPm9mZnNldCA9IDA7CiAJc2ctPmxlbmd0
> aCA9IHNpemU7CiAK
> --=_79cd473ca3d4e19fbe52c232ee5dd792--
>
From: "David H. Gutteridge" <david@gutteridge.ca>
To: Gnats Bugs <gnats-bugs@netbsd.org>
Cc: Taylor R Campbell <riastradh@netbsd.org>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Fri, 12 Jan 2024 19:37:16 -0500
On 2024-01-12 17:52, Ramiro Aceves wrote:
> El 12/1/24 a las 0:05, David H. Gutteridge escribió:
>
>> The following reply was made to PR kern/57833; it has been noted by
>> GNATS.
>>
>> From: "David H. Gutteridge" <david@gutteridge.ca>
>> To: Taylor R Campbell <riastradh@netbsd.org>
>> Cc: gnats-bugs@netbsd.org
>> Subject: Re: kern/57833: kernel panic on xorg exit
>> Date: Thu, 11 Jan 2024 18:04:44 -0500
>>
>> --=_79cd473ca3d4e19fbe52c232ee5dd792
>> Content-Transfer-Encoding: 7bit
>> Content-Type: text/plain; charset=US-ASCII;
>> format=flowed
>> On 2024-01-10 23:37, Taylor R Campbell wrote:
>>> Can you also try the attached patch, instead of the other one, to see
>>> what happens?
>>>
>>> (This might break things more spectacularly -- I haven't thought
>>> about
>>> whether it makes a lot of sense -- but it should at least prevent the
>>> particular crash you observed, if we ever get that far with it.)
>> I've supplied a debug log. (It can be found at:
>> https://www.netbsd.org/~gutteridge/pr57833_debug.log .)
>> Applying the first (small) patch did not prevent the panics. But the
>> larger patch did fix the problem for me. There was a slight coding
>> error with the second patch (wrong label for a goto statement), so it
>> didn't compile as-is. I've attached a revised patch that fixes that
>> one
>> line, should anyone else want to test this.
>> Thanks,
>> Dave
>
> Hello Dave, thanks for feedback. Here I had the same problem, I applied
> the patch and could not compile the kernel because en error in 555
> line when compiling i915_gem_stolen.c file. I changed
>
> goto err;
>
> to
>
> goto out;
>
> (not sure if that is the right fix)
Yes, it is.
> File compiled ok. Rebuilt the kernel and I had the same panic the first
> time abandoned Xorg session.
There must be something different about your hardware than mine here,
then. (Mine is Intel 945GME.) The patch did work for me, but I guess
there's more to it.
Do you have a build that includes a netbsd.gdb file? If not, you can
generate one (e.g., for your patched kernel) by un-commenting the
line
makeoptions DEBUG="-g"
in your kernel config file (I assume GENERIC?) and re-building. The
extra file should appear.
Then we would have the means to get the other details Taylor is looking
for here (see the email from Thu, 11 Jan 2024 03:45UTC).
Dave
PS Sorry I was not able to send you a patch again earlier. GMail is not
accepting email from my domain, so my email bounced. Evidently my emails
do make it when funnelled through GNATS.
From: Ramiro Aceves <ea1abz@gmail.com>
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: "David H. Gutteridge" <david@gutteridge.ca>,
Taylor R Campbell <riastradh@NetBSD.org>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Sat, 13 Jan 2024 11:28:46 +0100
El 13/1/24 a las 1:40, David H. Gutteridge escribió:
> The following reply was made to PR kern/57833; it has been noted by GNATS.
>
> From: "David H. Gutteridge" <david@gutteridge.ca>
> To: Gnats Bugs <gnats-bugs@netbsd.org>
> Cc: Taylor R Campbell <riastradh@netbsd.org>
> Subject: Re: kern/57833: kernel panic on xorg exit
> Date: Fri, 12 Jan 2024 19:37:16 -0500
>
> On 2024-01-12 17:52, Ramiro Aceves wrote:
> > El 12/1/24 a las 0:05, David H. Gutteridge escribió:
> >
> >> The following reply was made to PR kern/57833; it has been noted by
> >> GNATS.
> >>
> >> From: "David H. Gutteridge" <david@gutteridge.ca>
> >> To: Taylor R Campbell <riastradh@netbsd.org>
> >> Cc: gnats-bugs@netbsd.org
> >> Subject: Re: kern/57833: kernel panic on xorg exit
> >> Date: Thu, 11 Jan 2024 18:04:44 -0500
> >>
> >> --=_79cd473ca3d4e19fbe52c232ee5dd792
> >> Content-Transfer-Encoding: 7bit
> >> Content-Type: text/plain; charset=US-ASCII;
> >> format=flowed
> >> On 2024-01-10 23:37, Taylor R Campbell wrote:
> >>> Can you also try the attached patch, instead of the other one, to see
> >>> what happens?
> >>>
> >>> (This might break things more spectacularly -- I haven't thought
> >>> about
> >>> whether it makes a lot of sense -- but it should at least prevent the
> >>> particular crash you observed, if we ever get that far with it.)
> >> I've supplied a debug log. (It can be found at:
> >> https://www.netbsd.org/~gutteridge/pr57833_debug.log .)
> >> Applying the first (small) patch did not prevent the panics. But the
> >> larger patch did fix the problem for me. There was a slight coding
> >> error with the second patch (wrong label for a goto statement), so it
> >> didn't compile as-is. I've attached a revised patch that fixes that
> >> one
> >> line, should anyone else want to test this.
> >> Thanks,
> >> Dave
> >
> > Hello Dave, thanks for feedback. Here I had the same problem, I applied
> > the patch and could not compile the kernel because en error in 555
> > line when compiling i915_gem_stolen.c file. I changed
> >
> > goto err;
> >
> > to
> >
> > goto out;
> >
> > (not sure if that is the right fix)
>
> Yes, it is.
>
> > File compiled ok. Rebuilt the kernel and I had the same panic the first
> > time abandoned Xorg session.
>
> There must be something different about your hardware than mine here,
> then. (Mine is Intel 945GME.) The patch did work for me, but I guess
> there's more to it.
Hello Dave, thanks for your help.
Yes, there must be sometihng different between my system and yours. I
have notice something since I use the patched kernel. I do not know if
it is related or not, but /var/crash/netbsd.4.gz file cannot be extracted.
netbsd-compal# cd /var/crash/
netbsd-compal# ls -al
total 1904080
drwxrwx--- 2 root wheel 512 Jan 13 10:57 .
drwxr-xr-x 26 root wheel 512 Jan 9 19:14 ..
-rw------- 1 root wheel 2 Jan 13 10:56 bounds
-rw------- 1 root wheel 5 Jan 1 15:04 minfree
-rw------- 1 root wheel 1958710 Jan 9 19:21 netbsd.0
-rw------- 1 root wheel 154079764 Jan 9 19:21 netbsd.0.core
-rw------- 1 root wheel 1958710 Jan 9 19:24 netbsd.1
-rw------- 1 root wheel 117210132 Jan 9 19:24 netbsd.1.core
-rw------- 1 root wheel 1958710 Jan 9 20:14 netbsd.2
-rw------- 1 root wheel 202709524 Jan 9 20:14 netbsd.2.core
-rw------- 1 root wheel 1958710 Jan 10 07:18 netbsd.3
-rw------- 1 root wheel 245231124 Jan 10 07:18 netbsd.3.core
-rw------- 1 root wheel 122661396 Jan 12 19:29 netbsd.4.core
-rw------- 1 root wheel 843776 Jan 12 19:29 netbsd.4.gz
-rw------- 1 root wheel 122661396 Jan 13 10:56 netbsd.5.core
-rw------- 1 root wheel 843776 Jan 13 10:56 netbsd.5.
Look at this. 0, 1, 2 and 3 are the crashes with the GENERIC kernel. I
started xorg ONLY ONCE and when exiting, the panic was produced.
netbsd-compal# gunzip netbsd.4.gz
gunzip: netbsd.4.gz: unexpected end of file
gunzip: netbsd.4.gz: uncompress failed
And whent to bed.
Today I started the operating system but I did not entered in Xorg, but
at boot the system tried to save netbsd.5.gz and I could see a segfault
on the screen. In the same way, netbsd.5.gz could not be extracted.
netbsd-compal# gunzip netbsd.5.gz
gunzip: netbsd.5.gz: unexpected end of file
gunzip: netbsd.5.gz: uncompress failed
>
> Do you have a build that includes a netbsd.gdb file? If not, you can
> generate one (e.g., for your patched kernel) by un-commenting the
> line
>
> makeoptions DEBUG="-g"
I am compiling now, lets wait to see what happens. This old machine
takes 32 minutes to compile the kernel without debugging symbols. With
them, I do not know. I am very newbie to all of this but it is fun and a
good learning experience!
>
> in your kernel config file (I assume GENERIC?) and re-building. The
> extra file should appear.
Yes, I use GENERIC renamed to MYKERNEL as the guide says :-)
>
> Then we would have the means to get the other details Taylor is looking
> for here (see the email from Thu, 11 Jan 2024 03:45UTC).
ok.
>
> Dave
>
> PS Sorry I was not able to send you a patch again earlier. GMail is not
> accepting email from my domain, so my email bounced. Evidently my emails
> do make it when funnelled through GNATS.
>
No problem. I had indeed a bad experience with gmail. I downloaded
Taylor patches using Thunderbird and they ended in DOS format instead of
UNIX. Patching failed in a very strange manner, but beeing a newbie I
thought I did not know how to patch a file. I were struggling my mind
several hours searching on the internet until Vim said that the file was
in DOS format. I changed format to UNIX and patches were applied fine
using inside /usr/src:
patch -p1 <patch.file
Also noticed that Gmail marks as spam many emails addreses of netbsd
users. I do not know...
Ramiro.
From: Ramiro Aceves <ea1abz@gmail.com>
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: "David H. Gutteridge" <david@gutteridge.ca>,
Taylor R Campbell <riastradh@NetBSD.org>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Sat, 13 Jan 2024 12:41:36 +0100
El 13/1/24 a las 11:30, Ramiro Aceves escribió:
> The following reply was made to PR kern/57833; it has been noted by GNATS.
>
> From: Ramiro Aceves <ea1abz@gmail.com>
> To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
> gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
> Cc: "David H. Gutteridge" <david@gutteridge.ca>,
> Taylor R Campbell <riastradh@NetBSD.org>
> Subject: Re: kern/57833: kernel panic on xorg exit
> Date: Sat, 13 Jan 2024 11:28:46 +0100
>
> El 13/1/24 a las 1:40, David H. Gutteridge escribió:
> > The following reply was made to PR kern/57833; it has been noted by GNATS.
> >
> > From: "David H. Gutteridge" <david@gutteridge.ca>
> > To: Gnats Bugs <gnats-bugs@netbsd.org>
> > Cc: Taylor R Campbell <riastradh@netbsd.org>
> > Subject: Re: kern/57833: kernel panic on xorg exit
> > Date: Fri, 12 Jan 2024 19:37:16 -0500
> >
> > On 2024-01-12 17:52, Ramiro Aceves wrote:
> > > El 12/1/24 a las 0:05, David H. Gutteridge escribió:
> > >
> > >> The following reply was made to PR kern/57833; it has been noted by
> > >> GNATS.
> > >>
> > >> From: "David H. Gutteridge" <david@gutteridge.ca>
> > >> To: Taylor R Campbell <riastradh@netbsd.org>
> > >> Cc: gnats-bugs@netbsd.org
> > >> Subject: Re: kern/57833: kernel panic on xorg exit
> > >> Date: Thu, 11 Jan 2024 18:04:44 -0500
> > >>
> > >> --=_79cd473ca3d4e19fbe52c232ee5dd792
> > >> Content-Transfer-Encoding: 7bit
> > >> Content-Type: text/plain; charset=US-ASCII;
> > >> format=flowed
> > >> On 2024-01-10 23:37, Taylor R Campbell wrote:
> > >>> Can you also try the attached patch, instead of the other one, to see
> > >>> what happens?
> > >>>
> > >>> (This might break things more spectacularly -- I haven't thought
> > >>> about
> > >>> whether it makes a lot of sense -- but it should at least prevent the
> > >>> particular crash you observed, if we ever get that far with it.)
> > >> I've supplied a debug log. (It can be found at:
> > >> https://www.netbsd.org/~gutteridge/pr57833_debug.log .)
> > >> Applying the first (small) patch did not prevent the panics. But the
> > >> larger patch did fix the problem for me. There was a slight coding
> > >> error with the second patch (wrong label for a goto statement), so it
> > >> didn't compile as-is. I've attached a revised patch that fixes that
> > >> one
> > >> line, should anyone else want to test this.
> > >> Thanks,
> > >> Dave
> > >
> > > Hello Dave, thanks for feedback. Here I had the same problem, I applied
> > > the patch and could not compile the kernel because en error in 555
> > > line when compiling i915_gem_stolen.c file. I changed
> > >
> > > goto err;
> > >
> > > to
> > >
> > > goto out;
> > >
> > > (not sure if that is the right fix)
> >
> > Yes, it is.
> >
> > > File compiled ok. Rebuilt the kernel and I had the same panic the first
> > > time abandoned Xorg session.
> >
> > There must be something different about your hardware than mine here,
> > then. (Mine is Intel 945GME.) The patch did work for me, but I guess
> > there's more to it.
>
>
> Hello Dave, thanks for your help.
>
> Yes, there must be sometihng different between my system and yours. I
> have notice something since I use the patched kernel. I do not know if
> it is related or not, but /var/crash/netbsd.4.gz file cannot be extracted.
>
> netbsd-compal# cd /var/crash/
> netbsd-compal# ls -al
> total 1904080
> drwxrwx--- 2 root wheel 512 Jan 13 10:57 .
> drwxr-xr-x 26 root wheel 512 Jan 9 19:14 ..
> -rw------- 1 root wheel 2 Jan 13 10:56 bounds
> -rw------- 1 root wheel 5 Jan 1 15:04 minfree
> -rw------- 1 root wheel 1958710 Jan 9 19:21 netbsd.0
> -rw------- 1 root wheel 154079764 Jan 9 19:21 netbsd.0.core
> -rw------- 1 root wheel 1958710 Jan 9 19:24 netbsd.1
> -rw------- 1 root wheel 117210132 Jan 9 19:24 netbsd.1.core
> -rw------- 1 root wheel 1958710 Jan 9 20:14 netbsd.2
> -rw------- 1 root wheel 202709524 Jan 9 20:14 netbsd.2.core
> -rw------- 1 root wheel 1958710 Jan 10 07:18 netbsd.3
> -rw------- 1 root wheel 245231124 Jan 10 07:18 netbsd.3.core
> -rw------- 1 root wheel 122661396 Jan 12 19:29 netbsd.4.core
> -rw------- 1 root wheel 843776 Jan 12 19:29 netbsd.4.gz
> -rw------- 1 root wheel 122661396 Jan 13 10:56 netbsd.5.core
> -rw------- 1 root wheel 843776 Jan 13 10:56 netbsd.5.
>
> Look at this. 0, 1, 2 and 3 are the crashes with the GENERIC kernel. I
> started xorg ONLY ONCE and when exiting, the panic was produced.
>
>
> netbsd-compal# gunzip netbsd.4.gz
> gunzip: netbsd.4.gz: unexpected end of file
> gunzip: netbsd.4.gz: uncompress failed
>
> And whent to bed.
>
> Today I started the operating system but I did not entered in Xorg, but
> at boot the system tried to save netbsd.5.gz and I could see a segfault
> on the screen. In the same way, netbsd.5.gz could not be extracted.
>
> netbsd-compal# gunzip netbsd.5.gz
> gunzip: netbsd.5.gz: unexpected end of file
> gunzip: netbsd.5.gz: uncompress failed
>
Hello
I rebooted again (not touching xorg at all, so not panics) and this time
the system could save a good netbsd.6.gz and could be extracted. I do
not know...
After that, I compiled the kernel with the debug on as you suggested (51
minutes)
netbsd-compal# cd /usr/src/sys/arch/i386/compile/MYKERNEL/
netbsd-compal# ls -l netbsd*
-rwxr-xr-x 1 root wsrc 23870560 Jan 13 12:00 netbsd
-rwxr-xr-x 1 root wsrc 133343616 Jan 13 12:00 netbsd-MYKERNEL.debug
-rwxr-xr-x 1 root wsrc 154132948 Jan 13 12:00 netbsd.gdb
-rw-r--r-- 1 root wsrc 899 Jan 13 11:08 netbsd.ldscript
-rw-r--r-- 1 root wsrc 12710983 Jan 13 11:58 netbsd.map
Copied netbsd file to /netbsd and rebooted.
I started xorg, and at exit, I got the usual panic.
netbsd-compal# gunzip netbsd.7.
netbsd.7.core.gz netbsd.7.gz
netbsd-compal# gunzip netbsd.7.*
netbsd-compal# ls -al
total 1197912
drwxrwx--- 2 root wheel 512 Jan 13 12:36 .
drwxr-xr-x 26 root wheel 512 Jan 9 19:14 ..
-rw------- 1 root wheel 2 Jan 13 12:31 bounds
-rw------- 1 root wheel 5 Jan 1 15:04 minfree
-rw------- 1 root wheel 1958710 Jan 9 19:21 netbsd.0
-rw------- 1 root wheel 154079764 Jan 9 19:21 netbsd.0.core
-rw------- 1 root wheel 1958710 Jan 9 19:24 netbsd.1
-rw------- 1 root wheel 117210132 Jan 9 19:24 netbsd.1.core
-rw------- 1 root wheel 1958710 Jan 9 20:14 netbsd.2
-rw------- 1 root wheel 202709524 Jan 9 20:14 netbsd.2.core
-rw------- 1 root wheel 1958710 Jan 10 07:18 netbsd.3
-rw------- 1 root wheel 245231124 Jan 10 07:18 netbsd.3.core
-rw------- 1 root wheel 122661396 Jan 12 19:29 netbsd.4.core
-rw------- 1 root wheel 843776 Jan 12 19:29 netbsd.4.gz
-rw------- 1 root wheel 122661396 Jan 13 10:56 netbsd.5.core
-rw------- 1 root wheel 843776 Jan 13 10:56 netbsd.5.gz
-rw------- 1 root wheel 2063492 Jan 13 12:12 netbsd.6
-rw------- 1 root wheel 122661396 Jan 13 12:12 netbsd.6.core
-rw------- 1 root wheel 1958653 Jan 13 12:31 netbsd.7
-rw------- 1 root wheel 124865556 Jan 13 12:31 netbsd.7.core
this time the seventh crash could be gunziped without errors.
Do you think it would be quicker that I place the files in my little
Raspberry server or somewhere for you to download and play with them? I
do not have any experience with the debugger and I do not know what I am
doing.
I wait for your advice. Thanks so much.
Regards.
Ramiro.
>
>
> >
> > Do you have a build that includes a netbsd.gdb file? If not, you can
> > generate one (e.g., for your patched kernel) by un-commenting the
> > line
> >
> > makeoptions DEBUG="-g"
>
> I am compiling now, lets wait to see what happens. This old machine
> takes 32 minutes to compile the kernel without debugging symbols. With
> them, I do not know. I am very newbie to all of this but it is fun and a
> good learning experience!
> >
> > in your kernel config file (I assume GENERIC?) and re-building. The
> > extra file should appear.
>
> Yes, I use GENERIC renamed to MYKERNEL as the guide says :-)
>
> >
> > Then we would have the means to get the other details Taylor is looking
> > for here (see the email from Thu, 11 Jan 2024 03:45UTC).
>
> ok.
>
> >
> > Dave
> >
> > PS Sorry I was not able to send you a patch again earlier. GMail is not
> > accepting email from my domain, so my email bounced. Evidently my emails
> > do make it when funnelled through GNATS.
> >
>
> No problem. I had indeed a bad experience with gmail. I downloaded
> Taylor patches using Thunderbird and they ended in DOS format instead of
> UNIX. Patching failed in a very strange manner, but beeing a newbie I
> thought I did not know how to patch a file. I were struggling my mind
> several hours searching on the internet until Vim said that the file was
> in DOS format. I changed format to UNIX and patches were applied fine
> using inside /usr/src:
>
> patch -p1 <patch.file
>
> Also noticed that Gmail marks as spam many emails addreses of netbsd
> users. I do not know...
>
> Ramiro.
>
>
>
>
>
>
>
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: kern-bug-people@netbsd.org, ea1abz@gmail.com,
"David H. Gutteridge" <david@gutteridge.ca>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Sat, 13 Jan 2024 12:29:49 +0000 (UTC)
On Sat, 13 Jan 2024, David H. Gutteridge wrote:
> There must be something different about your hardware than mine here,
> then. (Mine is Intel 945GME.) The patch did work for me, but I guess
> there's more to it.
>
Might have something to do with turning ACPI off on OP's laptop. See PR# 57826.
David, does Taylor's still patch work if you `boot -2' on this machine of yours?
-RVP
From: Ramiro Aceves <ea1abz@gmail.com>
To: gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: Taylor R Campbell <riastradh@NetBSD.org>,
"David H. Gutteridge" <david@gutteridge.ca>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Sat, 13 Jan 2024 22:41:49 +0100
El 13/1/24 a las 1:40, David H. Gutteridge escribió:
> The following reply was made to PR kern/57833; it has been noted by GNATS.
>
> From: "David H. Gutteridge" <david@gutteridge.ca>
> To: Gnats Bugs <gnats-bugs@netbsd.org>
> Cc: Taylor R Campbell <riastradh@netbsd.org>
> Subject: Re: kern/57833: kernel panic on xorg exit
> Date: Fri, 12 Jan 2024 19:37:16 -0500
>
> On 2024-01-12 17:52, Ramiro Aceves wrote:
> > El 12/1/24 a las 0:05, David H. Gutteridge escribió:
> >
> >> The following reply was made to PR kern/57833; it has been noted by
> >> GNATS.
> >>
> >> From: "David H. Gutteridge" <david@gutteridge.ca>
> >> To: Taylor R Campbell <riastradh@netbsd.org>
> >> Cc: gnats-bugs@netbsd.org
> >> Subject: Re: kern/57833: kernel panic on xorg exit
> >> Date: Thu, 11 Jan 2024 18:04:44 -0500
> >>
> >> --=_79cd473ca3d4e19fbe52c232ee5dd792
> >> Content-Transfer-Encoding: 7bit
> >> Content-Type: text/plain; charset=US-ASCII;
> >> format=flowed
> >> On 2024-01-10 23:37, Taylor R Campbell wrote:
> >>> Can you also try the attached patch, instead of the other one, to see
> >>> what happens?
> >>>
> >>> (This might break things more spectacularly -- I haven't thought
> >>> about
> >>> whether it makes a lot of sense -- but it should at least prevent the
> >>> particular crash you observed, if we ever get that far with it.)
> >> I've supplied a debug log. (It can be found at:
> >> https://www.netbsd.org/~gutteridge/pr57833_debug.log .)
> >> Applying the first (small) patch did not prevent the panics. But the
> >> larger patch did fix the problem for me. There was a slight coding
> >> error with the second patch (wrong label for a goto statement), so it
> >> didn't compile as-is. I've attached a revised patch that fixes that
> >> one
> >> line, should anyone else want to test this.
> >> Thanks,
> >> Dave
> >
> > Hello Dave, thanks for feedback. Here I had the same problem, I applied
> > the patch and could not compile the kernel because en error in 555
> > line when compiling i915_gem_stolen.c file. I changed
> >
> > goto err;
> >
> > to
> >
> > goto out;
> >
> > (not sure if that is the right fix)
>
> Yes, it is.
>
> > File compiled ok. Rebuilt the kernel and I had the same panic the first
> > time abandoned Xorg session.
>
> There must be something different about your hardware than mine here,
> then. (Mine is Intel 945GME.) The patch did work for me, but I guess
> there's more to it.
>
> Do you have a build that includes a netbsd.gdb file? If not, you can
> generate one (e.g., for your patched kernel) by un-commenting the
> line
>
> makeoptions DEBUG="-g"
>
> in your kernel config file (I assume GENERIC?) and re-building. The
> extra file should appear.
>
> Then we would have the means to get the other details Taylor is looking
> for here (see the email from Thu, 11 Jan 2024 03:45UTC).
>
> Dave
>
> PS Sorry I was not able to send you a patch again earlier. GMail is not
> accepting email from my domain, so my email bounced. Evidently my emails
> do make it when funnelled through GNATS.
>
Hello,
This is the last recorded crash after Taylor's patch and compiling the
kernel with debugging symbols ad David suggested:
netbsd-compal# dmesg -M /var/crash/netbsd.7.core -N /var/crash/netbsd.7
...
...
4.324510] uhid1 at uhidev1 reportid 3: input=2, output=0, feature=0
[ 16.564698] wsdisplay0: screen 1 added (default, vt100 emulation)
[ 16.564698] wsdisplay0: screen 2 added (default, vt100 emulation)
[ 16.564698] wsdisplay0: screen 3 added (default, vt100 emulation)
[ 16.564698] wsdisplay0: screen 4 added (default, vt100 emulation)
[ 234.752732] uvm_fault(0xc151c400, 0xdd4e8000, 1) -> 0xe
[ 234.752732] fatal page fault in supervisor mode
[ 234.752732] trap type 6 code 0 eip 0xc0b02ece cs 0x8 eflags 0x13287
cr2 0xdd4e8000 ilevel 0x8 esp 0x4bb1a000
[ 234.752732] curlwp 0xc4341600 pid 0 lid 63 lowest kstack 0xdc7e02c0
[ 234.752732] panic: trap
[ 234.752732] cpu0: Begin traceback...
[ 234.752732]
vpanic(c1186d04,dc7e1d7c,dc7e1e38,c012fed8,c1186d04,dc7e1e44,dc7e1e44,3f,dc7e02c0,13287)
at netbsd:vpanic+0x196
[ 234.752732]
panic(c1186d04,dc7e1e44,dc7e1e44,3f,dc7e02c0,13287,dd4e8000,8,4bb1a000,c157e960)
at netbsd:panic+0x18
[ 234.752732] trap() at netbsd:trap+0xd51
[ 234.752732] --- trap (number 6) ---
[ 234.752732]
drm_clflush_virt_range(dd4e8000,1000,0,1000,0,0,c147c8c0,dd4e8000,db6ff000,c5c423c0)
at netbsd:drm_clflush_virt_range+0x3f
[ 234.752732]
i915_gem_object_put_pages_phys(c5c15900,c5c222c4,c5c15900,c5c15900,4,dc7e1f48,c06cd688,c5c15900,54,0)
at netbsd:i915_gem_object_put_pages_phys+0x15a
[ 234.752732]
__i915_gem_object_put_pages(c5c15900,54,0,c0c5dd4f,0,0,c3dff878,0,c5c159b0,c5c159ac)
at netbsd:__i915_gem_object_put_pages+0x70
[ 234.752732]
__i915_gem_free_objects(c3dfea1c,c42a2f00,0,0,120,c4341600,c42a2f1c,dc7e1f78,c42a2f04,c42a2f1c)
at netbsd:__i915_gem_free_objects+0x104
[ 234.752732]
linux_workqueue_thread(c42a2f00,1848000,1853000,0,c01005a8,0,0,0,0,0) at
netbsd:linux_workqueue_thread+0xe6
[ 234.752732] cpu0: End traceback...
[ 234.752732] dumping to dev 0,1 offset 1023
[ 234.752732] dump
netbsd-compal#
netbsd-compal# gdb /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb
GNU gdb (GDB) 11.0.50.20200914-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i486--netbsdelf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb...
(gdb) target kvm /var/crash/netbsd.7.core
0xc012d6ed in maybe_dump (howto=260) at
../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) frame 0
#0 0xc012d6ed in maybe_dump (howto=260) at
../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) frame 1
#1 cpu_reboot (howto=howto@entry=260, bootstr=bootstr@entry=0x0) at
../../../../arch/i386/i386/machdep.c:746
746 maybe_dump(howto);
(gdb) frame 2
#2 0xc0c85e17 in kern_reboot (howto=howto@entry=260,
bootstr=bootstr@entry=0x0) at ../../../../kern/kern_reboot.c:73
73 cpu_reboot(howto, bootstr);
(gdb) frame 3
#3 0xc0cbc9d8 in vpanic (fmt=fmt@entry=0xc1186d04 "trap", ap=0xdc7e1d7c
"D\036~\334D\036~\334?")
at ../../../../kern/subr_prf.c:291
291 kern_reboot(bootopt, NULL);
(gdb) frame 4
#4 0xc0cbca91 in panic (fmt=fmt@entry=0xc1186d04 "trap") at
../../../../kern/subr_prf.c:208
208 vpanic(fmt, ap);
(gdb) frame 5
#5 0xc012fed8 in trap (frame=0xdc7e1e44) at
../../../../arch/i386/i386/trap.c:358
358 panic("trap");
(gdb) frame 6
#6 0xc012529b in alltraps ()
(gdb) frame 7
#7 0xdc7e1e44 in ?? ()
(gdb) frame 8
#8 0xc06cf74c in i915_gem_object_put_pages_phys (obj=<optimized out>,
pages=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:206
206 drm_clflush_virt_range(src, PAGE_SIZE);
(gdb)
#8 0xc06cf74c in i915_gem_object_put_pages_phys (obj=<optimized out>,
pages=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:206
206 drm_clflush_virt_range(src, PAGE_SIZE);
(gdb) info locals
page = 0x40
dst = 0xdb6ff000 "\377\377\377\377\377\377\377\377"
mapping = <optimized out>
src = 0xdd4e8000
i = <optimized out>
dmat = <optimized out>
vaddr = <optimized out>
(gdb) frame 9
#9 0xc06cf1b2 in __i915_gem_object_put_pages (obj=obj@entry=0xc5c15900)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c:246
246 obj->ops->put_pages(obj, pages);
(gdb) info locals
pages = <optimized out>
err = <optimized out>
(gdb) frame 10
#10 0xc06cd688 in __i915_gem_free_objects (i915=0xc3dfd004,
freed=<optimized out>)
at
../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c:257
257 __i915_gem_object_put_pages(obj);
(gdb) info locals
mmo = <optimized out>
mn = <optimized out>
obj = 0xc5c15900
on = 0x0
wakeref = <optimized out>
(gdb) frame 11
#11 0xc0aef695 in linux_workqueue_thread (cookie=0xc42a2f00) at
../../../../external/bsd/common/linux/linux_work.c:455
455 (*func)(work);
(gdb) info locals
func = 0xc06cd7f2 <__i915_gem_free_work>
wq = 0xc42a2f00
q = {0x0, 0xc42a2f24}
marker = {work_owner = 3291047360, work_entry = {tqe_next = 0x0,
tqe_prev = 0xc42a2f1c}, func = 0xc42a2f00}
work = 0xc3dfea1c
i = <optimized out>
(gdb) frame 12
#12 0xc0102011 in lwp_trampoline ()
(gdb) info locals
No symbol table info available.
(gdb) frame 13
No frame at level 13.
(gdb)
Ramiro.
From: "David H. Gutteridge" <david@gutteridge.ca>
To: RVP <rvp@SDF.ORG>, gnats-bugs@netbsd.org
Cc:
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Sun, 14 Jan 2024 00:13:55 -0500
On Sat, 2024-01-13 at 12:29 +0000, RVP wrote:
> On Sat, 13 Jan 2024, David H. Gutteridge wrote:
>=20
> > There must be something different about your hardware than mine
> > here,
> > then. (Mine is Intel 945GME.) The patch did work for me, but I guess
> > there's more to it.
> >=20
>=20
> Might have something to do with turning ACPI off on OP's laptop. See
> PR# 57826.
> David, does Taylor's still patch work if you `boot -2' on this machine
> of yours?
If I disable ACPI, it makes no difference, X still exits cleanly for me.
Dave
From: "David H. Gutteridge" <david@gutteridge.ca>
To: gnats-bugs@netbsd.org
Cc: Taylor R Campbell <riastradh@NetBSD.org>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Sun, 14 Jan 2024 00:19:26 -0500
On Sat, 2024-01-13 at 22:41 +0100, Ramiro Aceves wrote:
> Hello,
>=20
> This is the last recorded crash after Taylor's patch and compiling the
> kernel with debugging symbols ad David suggested:
>=20
> netbsd-compal# dmesg -M /var/crash/netbsd.7.core -N
> /var/crash/netbsd.7
>=20
> ...
> ...
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4.324510] uhid1 at uhidev1 reportid 3: inp=
ut=3D2, output=3D0,
> feature=3D0
> [=C2=A0=C2=A0=C2=A0 16.564698] wsdisplay0: screen 1 added (default, vt100=
emulation)
> [=C2=A0=C2=A0=C2=A0 16.564698] wsdisplay0: screen 2 added (default, vt100=
emulation)
> [=C2=A0=C2=A0=C2=A0 16.564698] wsdisplay0: screen 3 added (default, vt100=
emulation)
> [=C2=A0=C2=A0=C2=A0 16.564698] wsdisplay0: screen 4 added (default, vt100=
emulation)
> [=C2=A0=C2=A0 234.752732] uvm_fault(0xc151c400, 0xdd4e8000, 1) -> 0xe
> [=C2=A0=C2=A0 234.752732] fatal page fault in supervisor mode
> [=C2=A0=C2=A0 234.752732] trap type 6 code 0 eip 0xc0b02ece cs 0x8 eflags
> 0x13287=20
> cr2 0xdd4e8000 ilevel 0x8 esp 0x4bb1a000
> [=C2=A0=C2=A0 234.752732] curlwp 0xc4341600 pid 0 lid 63 lowest kstack
> 0xdc7e02c0
> [=C2=A0=C2=A0 234.752732] panic: trap
> [=C2=A0=C2=A0 234.752732] cpu0: Begin traceback...
> [=C2=A0=C2=A0 234.752732]=20
> vpanic(c1186d04,dc7e1d7c,dc7e1e38,c012fed8,c1186d04,dc7e1e44,dc7e1e44,
> 3f,dc7e02c0,13287)=20
> at netbsd:vpanic+0x196
> [=C2=A0=C2=A0 234.752732]=20
> panic(c1186d04,dc7e1e44,dc7e1e44,3f,dc7e02c0,13287,dd4e8000,8,4bb1a000
> ,c157e960)=20
> at netbsd:panic+0x18
> [=C2=A0=C2=A0 234.752732] trap() at netbsd:trap+0xd51
> [=C2=A0=C2=A0 234.752732] --- trap (number 6) ---
> [=C2=A0=C2=A0 234.752732]=20
> drm_clflush_virt_range(dd4e8000,1000,0,1000,0,0,c147c8c0,dd4e8000,db6f
> f000,c5c423c0)=20
> at netbsd:drm_clflush_virt_range+0x3f
> [=C2=A0=C2=A0 234.752732]=20
> i915_gem_object_put_pages_phys(c5c15900,c5c222c4,c5c15900,c5c15900,4,d
> c7e1f48,c06cd688,c5c15900,54,0)=20
> at netbsd:i915_gem_object_put_pages_phys+0x15a
> [=C2=A0=C2=A0 234.752732]=20
> __i915_gem_object_put_pages(c5c15900,54,0,c0c5dd4f,0,0,c3dff878,0,c5c1
> 59b0,c5c159ac)=20
> at netbsd:__i915_gem_object_put_pages+0x70
> [=C2=A0=C2=A0 234.752732]=20
> __i915_gem_free_objects(c3dfea1c,c42a2f00,0,0,120,c4341600,c42a2f1c,dc
> 7e1f78,c42a2f04,c42a2f1c)=20
> at netbsd:__i915_gem_free_objects+0x104
> [=C2=A0=C2=A0 234.752732]=20
> linux_workqueue_thread(c42a2f00,1848000,1853000,0,c01005a8,0,0,0,0,0)
> at=20
> netbsd:linux_workqueue_thread+0xe6
> [=C2=A0=C2=A0 234.752732] cpu0: End traceback...
>=20
> [=C2=A0=C2=A0 234.752732] dumping to dev 0,1 offset 1023
> [=C2=A0=C2=A0 234.752732] dump
> netbsd-compal#
>=20
>=20
> netbsd-compal# gdb /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb
> GNU gdb (GDB) 11.0.50.20200914-git
> Copyright (C) 2020 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later=20
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Type "show copying" and "show warranty" for details.
> This GDB was configured as "i486--netbsdelf".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <https://www.gnu.org/software/gdb/bugs/>.
> Find the GDB manual and other documentation resources online at:
> =C2=A0=C2=A0=C2=A0=C2=A0 <http://www.gnu.org/software/gdb/documentation/>=
.
>=20
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from
> /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb...
> (gdb) target kvm /var/crash/netbsd.7.core
> 0xc012d6ed in maybe_dump (howto=3D260) at=20
> ../../../../arch/i386/i386/machdep.c:725
> 725 dumpsys();
> (gdb) frame 0
> #0=C2=A0 0xc012d6ed in maybe_dump (howto=3D260) at=20
> ../../../../arch/i386/i386/machdep.c:725
> 725 dumpsys();
> (gdb) frame 1
> #1=C2=A0 cpu_reboot (howto=3Dhowto@entry=3D260, bootstr=3Dbootstr@entry=
=3D0x0) at=20
> ../../../../arch/i386/i386/machdep.c:746
> 746 maybe_dump(howto);
> (gdb) frame 2
> #2=C2=A0 0xc0c85e17 in kern_reboot (howto=3Dhowto@entry=3D260,=20
> bootstr=3Dbootstr@entry=3D0x0) at ../../../../kern/kern_reboot.c:73
> 73 cpu_reboot(howto, bootstr);
> (gdb) frame 3
> #3=C2=A0 0xc0cbc9d8 in vpanic (fmt=3Dfmt@entry=3D0xc1186d04 "trap",
> ap=3D0xdc7e1d7c=20
> "D\036~\334D\036~\334?")
> =C2=A0=C2=A0=C2=A0=C2=A0 at ../../../../kern/subr_prf.c:291
> 291 kern_reboot(bootopt, NULL);
> (gdb) frame 4
> #4=C2=A0 0xc0cbca91 in panic (fmt=3Dfmt@entry=3D0xc1186d04 "trap") at=20
> ../../../../kern/subr_prf.c:208
> 208 vpanic(fmt, ap);
> (gdb) frame 5
> #5=C2=A0 0xc012fed8 in trap (frame=3D0xdc7e1e44) at=20
> ../../../../arch/i386/i386/trap.c:358
> 358 panic("trap");
> (gdb) frame 6
> #6=C2=A0 0xc012529b in alltraps ()
> (gdb) frame 7
> #7=C2=A0 0xdc7e1e44 in ?? ()
> (gdb) frame 8
> #8=C2=A0 0xc06cf74c in i915_gem_object_put_pages_phys (obj=3D<optimized o=
ut>,
> pages=3D<optimized out>)
> =C2=A0=C2=A0=C2=A0=C2=A0 at
> ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:206
> 206 drm_clflush_virt_range(src,
> PAGE_SIZE);
> (gdb)
> #8=C2=A0 0xc06cf74c in i915_gem_object_put_pages_phys (obj=3D<optimized o=
ut>,
> pages=3D<optimized out>)
> =C2=A0=C2=A0=C2=A0=C2=A0 at
> ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:206
> 206 drm_clflush_virt_range(src,
> PAGE_SIZE);
> (gdb) info locals
> page =3D 0x40
> dst =3D 0xdb6ff000 "\377\377\377\377\377\377\377\377"
> mapping =3D <optimized out>
> src =3D 0xdd4e8000
> i =3D <optimized out>
> dmat =3D <optimized out>
> vaddr =3D <optimized out>
> (gdb) frame 9
> #9=C2=A0 0xc06cf1b2 in __i915_gem_object_put_pages
> (obj=3Dobj@entry=3D0xc5c15900)
> =C2=A0=C2=A0=C2=A0=C2=A0 at
> ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c:246
> 246 obj->ops->put_pages(obj, pages);
> (gdb) info locals
> pages =3D <optimized out>
> err =3D <optimized out>
> (gdb) frame 10
> #10 0xc06cd688 in __i915_gem_free_objects (i915=3D0xc3dfd004,=20
> freed=3D<optimized out>)
> =C2=A0=C2=A0=C2=A0=C2=A0 at=20
> ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c:257
> 257 __i915_gem_object_put_pages(obj);
> (gdb) info locals
> mmo =3D <optimized out>
> mn =3D <optimized out>
> obj =3D 0xc5c15900
> on =3D 0x0
> wakeref =3D <optimized out>
> (gdb) frame 11
> #11 0xc0aef695 in linux_workqueue_thread (cookie=3D0xc42a2f00) at=20
> ../../../../external/bsd/common/linux/linux_work.c:455
> 455 (*func)(work);
> (gdb) info locals
> func =3D 0xc06cd7f2 <__i915_gem_free_work>
> wq =3D 0xc42a2f00
> q =3D {0x0, 0xc42a2f24}
> marker =3D {work_owner =3D 3291047360, work_entry =3D {tqe_next =3D 0x0,=
=20
> tqe_prev =3D 0xc42a2f1c}, func =3D 0xc42a2f00}
> work =3D 0xc3dfea1c
> i =3D <optimized out>
> (gdb) frame 12
> #12 0xc0102011 in lwp_trampoline ()
> (gdb) info locals
> No symbol table info available.
> (gdb) frame 13
> No frame at level 13.
> (gdb)
This is a different trace than the original one, so seems to be another
point of failure. Taylor would have to advise here which frame would be
of interest (my guess would be 8, but I am out of my depth here).
Dave
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>,
"David H. Gutteridge" <david@gutteridge.ca>
Cc: gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Mon, 15 Jan 2024 05:39:40 +0000
This is a multi-part message in MIME format.
--=_kfI//mdIC0kx2NGNjppVUyLgYbxCgVBW
Can you please try the attached patch and see if it helps?
--=_kfI//mdIC0kx2NGNjppVUyLgYbxCgVBW
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages-v3"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages-v3.patch"
From 56ff365790fbb65134f61ec5c18521c9c709caf7 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Sun, 14 Jan 2024 22:35:09 +0000
Subject: [PATCH] i915: Ensure every get_pages method fills the sg pages.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
Note: This requires i915_gem_phys.c to use pmap_kenter_pa to preserve
the _kernel's_ mapping of the pages after pmap_page_protect, but
bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...) instead
which creates a mapping that is removed by pmap_page_protect. So we
use a variant of bus_dmamem_map that uses pmap_kenter_pa instead --
perhaps bus_dmamem_map should do this itself, but this change is less
risky to pull up than a change to bus_dmamem_map itself.
While here, make iteration over sg_pgs a little more robust, and
reduce diff from upstream where convenient.
PR kern/57833
XXX pullup-10
---
.../drm2/dist/drm/i915/gem/i915_gem_mman.c | 2 +-
.../drm2/dist/drm/i915/gem/i915_gem_pages.c | 9 ++++
.../drm2/dist/drm/i915/gem/i915_gem_phys.c | 54 ++++++++++++++++++-
.../drm2/dist/drm/i915/gem/i915_gem_region.c | 23 ++++++--
.../drm2/dist/drm/i915/gem/i915_gem_stolen.c | 44 +++++++++------
5 files changed, 110 insertions(+), 22 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..d0265738e2c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
=20
if (!i915_gem_object_has_pages(obj))
return;
- for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+ for (i =3D 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c b/sys=
/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
index 58075877254a..32c188352dbb 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
@@ -42,6 +42,15 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_obj=
ect *obj,
}
=20
#ifndef __NetBSD__
+ /*
+ * Paranoia: In NetBSD, a scatterlist is just an array of
+ * pages, not an array of segments that might be larger than
+ * pages, so the number of entries must exactly match the size
+ * of the object (which should also be page-aligned).
+ */
+ KASSERTMSG(pages->sgl->sg_npgs =3D=3D obj->base.size >> PAGE_SHIFT,
+ "npgs=3D%zu size=3D%zu", pages->sgl->sg_npgs, obj->base.size);
+
obj->mm.get_page.sg_pos =3D pages->sgl;
obj->mm.get_page.sg_idx =3D 0;
#endif
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..41dc1031fba8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -26,6 +26,53 @@ __KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/1=
2/19 12:45:43 riastradh
=20
#include <linux/nbsd-namespace.h>
=20
+#ifdef __NetBSD__
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t dmat, const bus_dma_segment_t *segs, int nse=
gs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ if (size =3D=3D 0)
+ panic("_bus_dmamem_map: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+#endif
+
static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
{
#ifdef __NetBSD__
@@ -65,7 +112,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +130,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..85a1de8cb7ea 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
if (!st)
return -ENOMEM;
=20
+#ifndef __NetBSD__
if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
kfree(st);
return -ENOMEM;
}
+#endif
=20
flags =3D I915_ALLOC_MIN_PAGE_SIZE;
if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,15 +62,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
=20
GEM_BUG_ON(list_empty(blocks));
=20
- sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
- __USE(sg_page_sizes);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
bus_dma_segment_t *segs =3D NULL;
int i =3D 0, nsegs =3D 0;
bool loaded =3D false;
=20
+ sg =3D NULL;
+
list_for_each_entry(block, blocks, link) {
if (nsegs >=3D INT_MAX ||
nsegs >=3D SIZE_MAX/sizeof(segs[0]))
@@ -85,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+ GFP_KERNEL);
+ if (ret)
+ goto err;
+ sg =3D st->sgl;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -106,8 +116,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
kmem_free(segs, nsegs * sizeof(segs[0]));
segs =3D NULL;
=20
- __i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+ sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
+ sg =3D st->sgl;
st->nents =3D 0;
sg_page_sizes =3D 0;
prev_end =3D (resource_size_t)-1;
@@ -145,16 +156,18 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_o=
bject *obj)
sg_page_sizes |=3D sg->length;
sg_mark_end(sg);
i915_sg_trim(st);
+#endif
=20
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
=20
return 0;
=20
#ifdef __NetBSD__
err:
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (segs)
kmem_free(segs, nsegs * sizeof(segs[0]));
__intel_memory_region_put_pages_buddy(mem, blocks);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..1635e57befd7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_device *dev,
if (st =3D=3D NULL)
return ERR_PTR(-ENOMEM);
=20
- if (sg_alloc_table(st, 1, GFP_KERNEL)) {
- kfree(st);
- return ERR_PTR(-ENOMEM);
- }
-
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,19 +542,30 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ sg =3D NULL;
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+ if (ret) {
+ DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+ ret);
+ ret =3D -ENOMEM;
+ goto out;
+ }
+ sg =3D st->sgl;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
- /* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -569,14 +574,23 @@ i915_pages_create_for_stolen(struct drm_device *dev,
}
loaded =3D true;
=20
-out: if (ret) {
+out: kmem_free(seg, nseg * sizeof(seg[0]));
+ if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
- sg_free_table(st);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
+ if (sg)
+ sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
+ if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+ kfree(st);
+ return ERR_PTR(-ENOMEM);
+ }
+
sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
--=_kfI//mdIC0kx2NGNjppVUyLgYbxCgVBW--
Responsible-Changed-From-To: kern-bug-people->riastradh
Responsible-Changed-By: riastradh@NetBSD.org
Responsible-Changed-When: Mon, 15 Jan 2024 15:23:40 +0000
Responsible-Changed-Why:
mine
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>,
"David H. Gutteridge" <david@gutteridge.ca>
Cc: gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Mon, 15 Jan 2024 17:19:21 +0000
This is a multi-part message in MIME format.
--=_doTlMKKkYbLBtme6fab/51tYZGWhbizH
Small update to previous patch -- if we use pmap_kenter_pa then we
need to use pmap_kremove later on, not pmap_remove.
--=_doTlMKKkYbLBtme6fab/51tYZGWhbizH
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages-v4"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages-v4.patch"
From cc07bce236934283926a18f9ba19e47e4d29869a Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Sun, 14 Jan 2024 22:35:09 +0000
Subject: [PATCH] i915: Ensure every get_pages method fills the sg pages.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
Note: This requires i915_gem_phys.c to use pmap_kenter_pa to preserve
the _kernel's_ mapping of the pages after pmap_page_protect, but
bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...) instead
which creates a mapping that is removed by pmap_page_protect. So we
use a variant of bus_dmamem_map that uses pmap_kenter_pa instead --
perhaps bus_dmamem_map should do this itself, but this change is less
risky to pull up than a change to bus_dmamem_map itself.
While here, make iteration over sg_pgs a little more robust, and
reduce diff from upstream where convenient.
PR kern/57833
XXX pullup-10
---
.../drm2/dist/drm/i915/gem/i915_gem_mman.c | 2 +-
.../drm2/dist/drm/i915/gem/i915_gem_pages.c | 9 ++
.../drm2/dist/drm/i915/gem/i915_gem_phys.c | 89 ++++++++++++++++++-
.../drm2/dist/drm/i915/gem/i915_gem_region.c | 23 +++--
.../drm2/dist/drm/i915/gem/i915_gem_stolen.c | 44 +++++----
5 files changed, 143 insertions(+), 24 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..d0265738e2c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
=20
if (!i915_gem_object_has_pages(obj))
return;
- for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+ for (i =3D 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c b/sys=
/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
index 58075877254a..32c188352dbb 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
@@ -42,6 +42,15 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_obj=
ect *obj,
}
=20
#ifndef __NetBSD__
+ /*
+ * Paranoia: In NetBSD, a scatterlist is just an array of
+ * pages, not an array of segments that might be larger than
+ * pages, so the number of entries must exactly match the size
+ * of the object (which should also be page-aligned).
+ */
+ KASSERTMSG(pages->sgl->sg_npgs =3D=3D obj->base.size >> PAGE_SHIFT,
+ "npgs=3D%zu size=3D%zu", pages->sgl->sg_npgs, obj->base.size);
+
obj->mm.get_page.sg_pos =3D pages->sgl;
obj->mm.get_page.sg_idx =3D 0;
#endif
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..a5aec14d48a4 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -24,6 +24,84 @@ __KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/1=
2/19 12:45:43 riastradh
#include "i915_gem_region.h"
#include "i915_scatterlist.h"
=20
+#ifdef __NetBSD__
+
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+
+#include <machine/pmap_private.h> /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t dmat, const bus_dma_segment_t *segs, int nse=
gs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ if (size =3D=3D 0)
+ panic("_bus_dmamem_map: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+ pt_entry_t *pte, opte;
+ vaddr_t va, sva, eva;
+
+ KASSERTMSG(((uintptr_t)kva & PGOFSET) =3D=3D 0, "kva=3D%p", kva);
+
+ size =3D round_page(size);
+ sva =3D (vaddr_t)kva;
+ eva =3D sva + size;
+
+ /*
+ * mark pages cacheable again.
+ */
+ for (va =3D sva; va < eva; va +=3D PAGE_SIZE) {
+ pte =3D kvtopte(va);
+ opte =3D *pte;
+ if ((opte & PTE_PCD) !=3D 0)
+ pmap_pte_clearbits(pte, PTE_PCD);
+ }
+ pmap_kremove((vaddr_t)kva, size);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
+
#include <linux/nbsd-namespace.h>
=20
static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
@@ -65,7 +143,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +161,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
@@ -151,7 +234,7 @@ err_st:
err_pci:
#ifdef __NetBSD__
if (vaddr) {
- bus_dmamem_unmap(dmat, vaddr,
+ bus_dmamem_kunmap(dmat, vaddr,
roundup_pow_of_two(obj->base.size));
}
obj->mm.u.phys.kva =3D NULL;
@@ -225,7 +308,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_obje=
ct *obj,
kfree(pages);
=20
#ifdef __NetBSD__
- bus_dmamem_unmap(dmat, obj->mm.u.phys.kva,
+ bus_dmamem_kunmap(dmat, obj->mm.u.phys.kva,
roundup_pow_of_two(obj->base.size));
obj->mm.u.phys.kva =3D NULL;
bus_dmamem_free(dmat, &obj->mm.u.phys.seg, 1);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..85a1de8cb7ea 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
if (!st)
return -ENOMEM;
=20
+#ifndef __NetBSD__
if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
kfree(st);
return -ENOMEM;
}
+#endif
=20
flags =3D I915_ALLOC_MIN_PAGE_SIZE;
if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,15 +62,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
=20
GEM_BUG_ON(list_empty(blocks));
=20
- sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
- __USE(sg_page_sizes);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
bus_dma_segment_t *segs =3D NULL;
int i =3D 0, nsegs =3D 0;
bool loaded =3D false;
=20
+ sg =3D NULL;
+
list_for_each_entry(block, blocks, link) {
if (nsegs >=3D INT_MAX ||
nsegs >=3D SIZE_MAX/sizeof(segs[0]))
@@ -85,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+ GFP_KERNEL);
+ if (ret)
+ goto err;
+ sg =3D st->sgl;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -106,8 +116,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
kmem_free(segs, nsegs * sizeof(segs[0]));
segs =3D NULL;
=20
- __i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+ sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
+ sg =3D st->sgl;
st->nents =3D 0;
sg_page_sizes =3D 0;
prev_end =3D (resource_size_t)-1;
@@ -145,16 +156,18 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_o=
bject *obj)
sg_page_sizes |=3D sg->length;
sg_mark_end(sg);
i915_sg_trim(st);
+#endif
=20
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
=20
return 0;
=20
#ifdef __NetBSD__
err:
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (segs)
kmem_free(segs, nsegs * sizeof(segs[0]));
__intel_memory_region_put_pages_buddy(mem, blocks);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..1635e57befd7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_device *dev,
if (st =3D=3D NULL)
return ERR_PTR(-ENOMEM);
=20
- if (sg_alloc_table(st, 1, GFP_KERNEL)) {
- kfree(st);
- return ERR_PTR(-ENOMEM);
- }
-
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,19 +542,30 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ sg =3D NULL;
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+ if (ret) {
+ DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+ ret);
+ ret =3D -ENOMEM;
+ goto out;
+ }
+ sg =3D st->sgl;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
- /* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -569,14 +574,23 @@ i915_pages_create_for_stolen(struct drm_device *dev,
}
loaded =3D true;
=20
-out: if (ret) {
+out: kmem_free(seg, nseg * sizeof(seg[0]));
+ if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
- sg_free_table(st);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
+ if (sg)
+ sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
+ if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+ kfree(st);
+ return ERR_PTR(-ENOMEM);
+ }
+
sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
--=_doTlMKKkYbLBtme6fab/51tYZGWhbizH--
From: Ramiro Aceves <ea1abz@gmail.com>
To: Taylor R Campbell <riastradh@NetBSD.org>,
"David H. Gutteridge" <david@gutteridge.ca>
Cc: gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Tue, 16 Jan 2024 07:21:55 +0100
El 15/1/24 a las 18:19, Taylor R Campbell escribió:
> Small update to previous patch -- if we use pmap_kenter_pa then we
> need to use pmap_kremove later on, not pmap_remove.
Hello Taylor
Thanks for your help and efforts. I have tried v4 patch and the
situation is even worse, the panic occurs after issuing startx command,
black screen and panic.
netbsd-compal# uname -a
NetBSD netbsd-compal.remigio 10.0_RC2 NetBSD 10.0_RC2 (MYKERNEL) #4: Mon
Jan 15 20:34:13 CET 2024
root@netbsd-compal.remigio:/usr/src/sys/arch/i386/compile/MYKERNEL i386
netbsd-compal# ls -l /var/crash
total 1228356
-rw------- 1 root wheel 2 Jan 15 22:28 bounds
-rw------- 1 root wheel 5 Jan 1 15:04 minfree
-rw------- 1 root wheel 1958710 Jan 9 19:21 netbsd.0
-rw------- 1 root wheel 154079764 Jan 9 19:21 netbsd.0.core
-rw------- 1 root wheel 1958710 Jan 9 19:24 netbsd.1
-rw------- 1 root wheel 117210132 Jan 9 19:24 netbsd.1.core
-rw------- 1 root wheel 1958710 Jan 9 20:14 netbsd.2
-rw------- 1 root wheel 202709524 Jan 9 20:14 netbsd.2.core
-rw------- 1 root wheel 1958710 Jan 10 07:18 netbsd.3
-rw------- 1 root wheel 245231124 Jan 10 07:18 netbsd.3.core
-rw------- 1 root wheel 122661396 Jan 12 19:29 netbsd.4.core
-rw------- 1 root wheel 843776 Jan 12 19:29 netbsd.4.gz
-rw------- 1 root wheel 122661396 Jan 13 10:56 netbsd.5.core
-rw------- 1 root wheel 843776 Jan 13 10:56 netbsd.5.gz
-rw------- 1 root wheel 2063492 Jan 13 12:12 netbsd.6
-rw------- 1 root wheel 122661396 Jan 13 12:12 netbsd.6.core
-rw------- 1 root wheel 1958653 Jan 13 12:31 netbsd.7
-rw------- 1 root wheel 124865556 Jan 13 12:31 netbsd.7.core
-rw------- 1 root wheel 30271982 Jan 15 22:28 netbsd.8.core.gz
-rw------- 1 root wheel 853430 Jan 15 22:28 netbsd.8.gz
dmesg -M /var/crash/netbsd.8.core -N /var/crash/netbsd.8
...
...
[ 56644.606442] wd0: detached
[ 56644.606442] atabus0: detached
[ 56644.606442] rebooting...
[ 1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003,
[ 1.000000] 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013,
[ 1.000000] 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021,
2022, 2023,
[ 1.000000] 2024
[ 1.000000] The NetBSD Foundation, Inc. All rights reserved.
[ 1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[ 1.000000] The Regents of the University of California. All
rights reserved.
[ 1.000000] NetBSD 10.0_RC2 (MYKERNEL) #4: Mon Jan 15 20:34:13 CET 2024
[ 1.000000]
root@netbsd-compal.remigio:/usr/src/sys/arch/i386/compile/MYKERNEL
[ 1.000000] total memory = 2039 MB
[ 1.000000] avail memory = 1978 MB
[ 1.000000] timecounter: Timecounters tick every 10.000 msec
[ 1.000000] Kernelized RAIDframe activated
[ 1.000000] timecounter: Timecounter "i8254" frequency 1193182 Hz
quality 100
[ 1.000004] mainbus0 (root)
[ 1.000004] cpu0 at mainbus0
[ 1.000004] ACPI Error: AE_BAD_PARAMETER, Thread 3242920000 could
not acquire Mutex [ACPI_MTX_Tables] (0x2) (20221020/utmutex-326)
[ 1.000004] cpu0: Use lfence to serialize rdtsc
[ 1.000004] cpu0: Intel(R) Pentium(R) M processor 1.86GHz, id 0x6d8
[ 1.000004] cpu0: node 0, package 0, core 0, smt 0
[ 1.000004] pci0 at mainbus0 bus 0: configuration mode 1
[ 1.000004] pci0: i/o space, memory space enabled, rd/line, rd/mult,
wr/inv ok
[ 1.000004] pchb0 at pci0 dev 0 function 0: Intel
82915PM/GM/GMS,82910GML Host Bridge (rev. 0x04)
[ 1.000004] agp0 at pchb0: i915-family chipset
[ 1.000004] agp0: detected 7932k stolen memory
[ 1.000004] agp0: aperture at 0xa0000000, size 0x10000000
[ 1.000004] i915drmkms0 at pci0 dev 2 function 0: Intel
82915GM/GMS,82910GML Integrated Graphics Device (rev. 0x04)
[ 1.000004] Intel 82915GM/GMS IGD Companion (miscellaneous display,
revision 0x04) at pci0 dev 2 function 1 not configured
[ 1.000004] uhci0 at pci0 dev 29 function 0: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci0: interrupting at irq 7
[ 1.000004] usb0 at uhci0: USB revision 1.0
[ 1.000004] uhci1 at pci0 dev 29 function 1: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci1: interrupting at irq 3
[ 1.000004] usb1 at uhci1: USB revision 1.0
[ 1.000004] uhci2 at pci0 dev 29 function 2: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci2: interrupting at irq 11
[ 1.000004] usb2 at uhci2: USB revision 1.0
[ 1.000004] uhci3 at pci0 dev 29 function 3: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci3: interrupting at irq 11
[ 1.000004] usb3 at uhci3: USB revision 1.0
[ 1.000004] ehci0 at pci0 dev 29 function 7: Intel 82801FB/FR USB
EHCI Controller (rev. 0x04)
[ 1.000004] ehci0: 64-bit DMA - limited
[ 1.000004] ehci0: interrupting at irq 7
[ 1.000004] ehci0: EHCI version 1.0
[ 1.000004] ehci0: 4 companion controllers, 2 ports each: uhci0
uhci1 uhci2 uhci3
[ 1.000004] ehci0: Using DMA subregion for control data structures
[ 1.000004] usb4 at ehci0: USB revision 2.0
[ 1.000004] ppb0 at pci0 dev 30 function 0: Intel 82801BAM Hub-PCI
Bridge (rev. 0xd4)
[ 1.000004] pci1 at ppb0 bus 1
[ 1.000004] pci1: i/o space, memory space enabled
[ 1.000004] fwohci0 at pci1 dev 0 function 0: VIA Technologies
VT6306 IEEE 1394 Host Controller (rev. 0x80)
[ 1.000004] fwohci0: interrupting at irq 10
[ 1.000004] fwohci0: OHCI version 1.0 (ROM=1)
[ 1.000004] fwohci0: No. of Isochronous channels is 4.
[ 1.000004] fwohci0: EUI64 00:02:3f:59:88:40:01:0f
[ 1.000004] fwohci0: Phy 1394a available S400, 2 ports.
[ 1.000004] fwohci0: Link S400, max_rec 512 bytes.
[ 1.000004] fwohci0: max_rec 512 -> 2048
[ 1.000004] ieee1394if0 at fwohci0: IEEE1394 bus
[ 1.000004] fwip0 at ieee1394if0: IP over IEEE1394
[ 1.000004] fwohci0: Initiate bus reset
[ 1.000004] re0 at pci1 dev 1 function 0: RealTek 8169/8110 Gigabit
Ethernet (rev. 0x10)
[ 1.000004] re0: interrupting at irq 11
[ 1.000004] re0: RTL8169/8110SB (0x1000)
[ 1.000004] re0: Ethernet address 00:0f:b0:93:6f:e1
[ 1.000004] re0: using 256 tx descriptors
[ 1.000004] rgephy0 at re0 phy 7: RTL8211B 1000BASE-T media interface
[ 1.000004] rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
1000baseT, 1000baseT-FDX, auto
[ 1.000004] iwi0 at pci1 dev 2 function 0: Intel PRO/Wireless LAN
2200BG Mini-PCI Adapter (rev. 0x05)
[ 1.000004] iwi0: interrupting at irq 11
[ 1.000004] iwi0: 802.11 address 00:13:ce:6b:7d:01
[ 1.000004] cbb0 at pci1 dev 4 function 0: ENE Technology CB710
CardBus Controller (rev. 0x00)
[ 1.000004] ENE Technology product 0530 (flash memory) at pci1 dev 4
function 1 not configured
[ 1.000004] sdhc0 at pci1 dev 4 function 2: ENE Technology
CB712/714/810 PCI SD Card Reader Controller (rev. 0x00)
[ 1.000004] sdhc0: interrupting at irq 5
[ 1.000004] sdhc0: SDHC 1.0, rev 0, caps <01e021a1/00000000>, SDMA,
33000 kHz, HS 3.3V, 512 byte blocks
[ 1.000004] sdmmc0 at sdhc0 slot 0
[ 1.000004] cbb0: cacheline 0x8 lattimer 0x40
[ 1.000004] cbb0: bhlc 0x824008
[ 1.000004] cbb0: autoconfiguration error: secondary bus number
uninitialized; try PCI_BUS_FIXUP
[ 1.000004] pci_intr_map: no mapping for pin A (line=ff)
[ 1.000004] cbb0: autoconfiguration error: couldn't map interrupt
[ 1.000004] cardslot0 at cbb0
[ 1.000004] pcmcia0 at cardslot0
[ 1.000004] auich0 at pci0 dev 30 function 2: i82801FB (ICH6) AC-97
Audio
[ 1.000004] auich0: interrupting at irq 5
[ 1.000004] auich0: ac97: Avance Logic unknown (0x414c4752) codec;
headphone, 20 bit DAC, 18 bit ADC, no 3D stereo
[ 1.000004] auich0: ac97: ext id 0xa07<AC97_23,AMAP,SPDIF,DRA,VRA>
[ 1.000004] Intel 82801FB/FR AC'97 Modem Controller (modem
communications, revision 0x04) at pci0 dev 30 function 3 not configured
[ 1.000004] ichlpcib0 at pci0 dev 31 function 0: Intel 82801FBM
ICH6M LPC Interface Bridge (rev. 0x04)
[ 1.000004] timecounter: Timecounter "ichlpcib0" frequency 3579545
Hz quality 1000
[ 1.006137] ichlpcib0: 24-bit timer
[ 1.006137] tco0 at ichlpcib0: TCO (watchdog) timer configured.
[ 1.006137] tco0: Min/Max interval 1/367 seconds
[ 1.006137] piixide0 at pci0 dev 31 function 1: Intel 82801FB IDE
Controller (ICH6) (rev. 0x04)
[ 1.006137] piixide0: bus-master DMA support present
[ 1.006137] piixide0: primary channel configured to compatibility mode
[ 1.006137] piixide0: primary channel interrupting at irq 14
[ 1.006137] atabus0 at piixide0 channel 0
[ 1.006137] piixide0: secondary channel configured to compatibility mode
[ 1.006137] piixide0: secondary channel interrupting at irq 15
[ 1.006137] atabus1 at piixide0 channel 1
[ 1.006137] ichsmb0 at pci0 dev 31 function 3: Intel 82801FB/FR
SMBus Controller (rev. 0x04)
[ 1.006137] ichsmb0: interrupting at irq 3
[ 1.006137] iic0 at ichsmb0: I2C bus
[ 1.006137] isa0 at ichlpcib0
[ 1.006137] pckbc0 at isa0 port 0x60-0x64
[ 1.006137] pckbd0 at pckbc0 (kbd slot)
[ 1.006137] pckbc0: using irq 1 for kbd slot
[ 1.006137] wskbd0 at pckbd0: console keyboard
[ 1.006137] pms0 at pckbc0 (aux slot)
[ 1.006137] pms0: ALPS PS/2 V2 pointing device
[ 1.006137] pckbc0: using irq 12 for aux slot
[ 1.006137] wsmouse0 at pms0 mux 0
[ 1.006137] attimer0 at isa0 port 0x40-0x43
[ 1.006137] pcppi0 at isa0 port 0x61
[ 1.006137] midi0 at pcppi0: PC speaker
[ 1.006137] sysbeep0 at pcppi0
[ 1.006137] attimer0: attached to pcppi0
[ 1.006137] est0 at cpu0: Enhanced SpeedStep
[ 1.006137] fwohci0: BUS reset
[ 1.006137] fwohci0: node_id=0xc000ffc0, gen=1, CYCLEMASTER mode
[ 1.006137] ieee1394if0: 1 nodes, maxhop <= 0 cable IRM irm(0) (me)
[ 1.006137] ieee1394if0: bus manager 0
[ 1.241472] timecounter: Timecounter "clockinterrupt" frequency 100
Hz quality 0
[ 1.574164] auich0: measured ac97 link rate at 48000 Hz
[ 1.574164] audio0 at auich0: playback, capture, full duplex,
independent
[ 1.574164] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms)
for playback
[ 1.574164] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms)
for recording
[ 1.574164] uhub0 at usb0: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.574164] uhub0: 2 ports with 2 removable, self powered
[ 1.574164] uhub1 at usb1: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.574164] uhub1: 2 ports with 2 removable, self powered
[ 1.574164] uhub2 at usb2: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.574164] uhub2: 2 ports with 2 removable, self powered
[ 1.574164] uhub3 at usb3: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.574164] uhub3: 2 ports with 2 removable, self powered
[ 1.574164] uhub4 at usb4: NetBSD (0x0000) EHCI root hub (0x0000),
class 9/0, rev 2.00/1.00, addr 1
[ 1.574164] uhub4: 8 ports with 8 removable, self powered
[ 1.584167] IPsec: Initialized Security Association Processing.
[ 1.594164] atapibus0 at atabus0: 2 targets
[ 1.684165] cd0 at atapibus0 drive 1: <TSSTcorpCD/DVDW TS-L632B,
95WK401090, TI33> cdrom removable
[ 1.684165] cd0: 32-bit data port
[ 1.684165] cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA
mode 2 (Ultra/33)
[ 1.684165] wd0 at atabus0 drive 0
[ 1.694165] wd0: <IC25N080ATMR04-0>
[ 1.694165] wd0: drive supports 16-sector PIO transfers, LBA48
addressing
[ 1.694165] wd0: 76319 MB, 155061 cyl, 16 head, 63 sec, 512
bytes/sect x 156301488 sectors
[ 2.164173] wd0: 32-bit data port
[ 2.164173] wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA
mode 5 (Ultra/100)
[ 2.164173] wd0(piixide0:0:0): using PIO mode 4, Ultra-DMA mode 5
(Ultra/100) (using DMA)
[ 2.164173] cd0(piixide0:0:1): using PIO mode 4, Ultra-DMA mode 2
(Ultra/33) (using DMA)
[ 2.164173] swwdog0: software watchdog initialized
[ 2.224173] WARNING: 2 errors while detecting hardware; check system
log.
[ 2.224173] boot device: wd0
[ 2.224173] root on wd0a dumps on wd0b
[ 2.254174] root file system type: ffs
[ 2.264174] kern.module.path=/stand/i386/10.0/modules
[ 2.264174] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 2.264174] [drm] Driver supports precise vblank timestamp query.
[ 2.264174] i915drmkms0: interrupting at irq 11 (i915drmkms0)
[ 2.304175] [drm] Initialized overlay support.
[ 2.304175] [drm] Initialized i915 1.6.0 20200114 for i915drmkms0 on
minor 0
[ 2.444179] intelfb0 at i915drmkms0
[ 2.444179] [drm] DRM_I915_DEBUG enabled
[ 2.444179] [drm] DRM_I915_DEBUG_GEM enabled
[ 2.444179] intelfb0: framebuffer at 0xa0009000, size 1280x800,
depth 32, stride 5120
[ 3.094187] wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100
emulation), using wskbd0
[ 3.105786] wsmux1: connecting to wsdisplay0
[ 16.124387] wsdisplay0: screen 1 added (default, vt100 emulation)
[ 16.124387] wsdisplay0: screen 2 added (default, vt100 emulation)
[ 16.124387] wsdisplay0: screen 3 added (default, vt100 emulation)
[ 16.124387] wsdisplay0: screen 4 added (default, vt100 emulation)
[ 60.455840] panic: _bus_dmamem_map: size botch
[ 60.455840] cpu0: Begin traceback...
[ 60.455840]
vpanic(c11d9795,dcbeea90,dcbeeae4,c06cfe6c,c11d9795,0,0,4,0,7f7cefff) at
netbsd:vpanic+0x196
[ 60.455840] panic(c11d9795,0,0,4,0,7f7cefff,dcbeead4,0,c5c24a5c,0)
at netbsd:panic+0x18
[ 60.465846]
i915_gem_object_get_pages_phys(c5c24900,1,2,c4353004,c4348804,c434a084,c4353000,c52c8c44,c5286f04,1)
at netbsd:i915_gem_object_get_pages_phys+0x4fc
[ 60.465846]
i915_gem_object_attach_phys(c5c24900,1000,c0af8654,c3dfd004,c5c24900,c5c24a18,dcbeeb6c,c0673d15,c5c24a18,1)
at netbsd:i915_gem_object_attach_phys+0xb4
[ 60.465846]
intel_plane_pin_fb(c5c24a18,1,2,c0b2f858,c4352010,c4353000,c3dfd004,c5b9c804,c4352004,c5b9c804)
at netbsd:intel_plane_pin_fb+0x62
[ 60.465846]
intel_prepare_plane_fb(c434a084,c52c8c44,c3dff878,10001,c5b9c804,c4353004,c3dff878,dcbeebb8,c066abaf,c3dfd004)
at netbsd:intel_prepare_plane_fb+0xcf
[ 60.465846]
drm_atomic_helper_prepare_planes(c3dfd004,c5b9c804,1,c5b9cd64,0,c5b9c804,c3dfd004,c52c8c44,dcbeebd4,c0af8a55)
at netbsd:drm_atomic_helper_prepare_planes+0x7a
[ 60.475844]
intel_atomic_commit(c3dfd004,c5b9c804,0,c434a084,c5b9c804,dcbeebfc,c0afde20,c5b9c804,c5286f04,40)
at netbsd:intel_atomic_commit+0x9c
[ 60.475844]
drm_atomic_commit(c5b9c804,c5286f04,40,0,400000,c434a084,c5286f04,18f,dcbeec64,c0b2b344)
at netbsd:drm_atomic_commit+0x52
[ 60.475844]
drm_atomic_helper_update_plane(c434a084,c4348804,c5286f04,27f,18f,40,40,0,0,400000)
at netbsd:drm_atomic_helper_update_plane+0xd9
[ 60.475844]
__setplane_atomic(27f,18f,40,40,0,0,400000,400000,dcbeecb8,400000) at
netbsd:__setplane_atomic+0x10b
[ 60.475844]
drm_mode_cursor_common(3,2c,27f,18f,40,40,b,0,0,dcbeee54) at
netbsd:drm_mode_cursor_common+0x261
[ 60.485842]
drm_mode_cursor_ioctl(c3dfd004,dcbeeeac,c5286104,dcbeedc4,1c,dcbeeeac,63,dcbeedc4,c3dfd360,c5286104)
at netbsd:drm_mode_cursor_ioctl+0x4e
[ 60.485842]
drm_ioctl(c5b908c0,c01c64a3,dcbeeeac,dcbeef38,c0cc9817,c5b908c0,c01c64a3,dcbeeeac,c0c45367,c429dd24)
at netbsd:drm_ioctl+0x42d
[ 60.485842]
drm_ioctl_shim(c5b908c0,c01c64a3,dcbeeeac,c0c45367,c429dd24,dcbeef10,0,c5b95fb8,c5b908c0,0)
at netbsd:drm_ioctl_shim+0x43
[ 60.485842]
sys_ioctl(c4361940,dcbeef68,dcbeef60,c5281500,0,36,dcbeef60,dcbeef68,0,0)
at netbsd:sys_ioctl+0x35b
[ 60.485842] syscall() at netbsd:syscall+0x1d6
[ 60.485842] --- syscall (number 54) ---
[ 60.485842] af601dc7:
[ 60.485842] cpu0: End traceback...
[ 60.485842] dumping to dev 0,1 offset 1023
[ 60.485842] dump
netbsd-compal#
netbsd-compal# gdb /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb
GNU gdb (GDB) 11.0.50.20200914-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i486--netbsdelf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb...
(gdb) target kvm /var/crash/netbsd.8.core
0xc012d6ed in maybe_dump (howto=260)
at ../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) frame 0
#0 0xc012d6ed in maybe_dump (howto=260)
at ../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) frame 1
#1 cpu_reboot (howto=howto@entry=260, bootstr=bootstr@entry=0x0)
at ../../../../arch/i386/i386/machdep.c:746
746 maybe_dump(howto);
(gdb) frame 2
#2 0xc0c85d87 in kern_reboot (howto=howto@entry=260,
bootstr=bootstr@entry=0x0) at ../../../../kern/kern_reboot.c:73
73 cpu_reboot(howto, bootstr);
(gdb) frame 3
#3 0xc0cbc948 in vpanic (
fmt=fmt@entry=0xc11d9795 "_bus_dmamem_map: size botch",
ap=0xdcbeea90 "")
at ../../../../kern/subr_prf.c:291
291 kern_reboot(bootopt, NULL);
(gdb) frame 4
#4 0xc0cbca01 in panic (
fmt=fmt@entry=0xc11d9795 "_bus_dmamem_map: size botch")
at ../../../../kern/subr_prf.c:208
208 vpanic(fmt, ap);
(gdb) frame 5
#5 0xc06cfe6c in bus_dmamem_kmap (nsegs=1, flags=4,
dmat=0xc147c8c0 <pci_bus_dma_tag>, kvap=<synthetic pointer>,
size=<optimized out>, segs=0xc5c24a34)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:66
66 panic("_bus_dmamem_map: size botch");
(gdb) frame 6
#6 i915_gem_object_get_pages_phys (obj=0xc5c24900)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:146
146 ret = -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
(gdb) frame 7
#7 0xc06cff89 in i915_gem_object_attach_phys (obj=0xc5c24900, align=4096)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:378
378 err = ____i915_gem_object_get_pages(obj);
(gdb) frame 8
#8 0xc06653cb in intel_plane_pin_fb
(plane_state=plane_state@entry=0xc52c8c44)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15729
15729 err = i915_gem_object_attach_phys(obj, align);
(gdb) frame 9
#9 0xc0673d15 in intel_prepare_plane_fb (plane=0xc434a084,
_new_plane_state=0xc52c8c44)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15832
15832 ret = intel_plane_pin_fb(new_plane_state);
(gdb) frame 10
#10 0xc0afcd48 in drm_atomic_helper_prepare_planes (dev=<optimized out>,
state=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2399
2399 ret = funcs->prepare_fb(plane, new_plane_state);
(gdb) frame 11
#11 drm_atomic_helper_prepare_planes (dev=0xc3dfd004,
state=state@entry=0xc5b9c804)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2375
2375 int drm_atomic_helper_prepare_planes(struct drm_device *dev,
(gdb) frame 12
#12 0xc066abaf in intel_atomic_prepare_commit (state=0xc5b9c804)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:14760
14760 return drm_atomic_helper_prepare_planes(state->base.dev,
(gdb) frame 13
#13 intel_atomic_commit (dev=0xc3dfd004, _state=0xc5b9c804, nonblock=false)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15595
15595 ret = intel_atomic_prepare_commit(state);
(gdb) frame 14
#14 0xc0af8a55 in drm_atomic_commit (state=state@entry=0xc5b9c804)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic.c:1238
1238 return config->funcs->atomic_commit(state->dev, state, false);
(gdb) frame 15
#15 0xc0afde20 in drm_atomic_helper_update_plane (plane=0xc434a084,
crtc=0xc4348804, fb=0xc5286f04, crtc_x=639, crtc_y=399, crtc_w=64,
crtc_h=64, src_x=0, src_y=0, src_w=4194304, src_h=4194304,
ctx=0xdcbeecb8)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2910
2910 ret = drm_atomic_commit(state);
(gdb) frame 16
#16 0xc0b2b344 in __setplane_atomic (plane=plane@entry=0xc434a084,
crtc=crtc@entry=0xc4348804, fb=fb@entry=0xc5286f04,
crtc_x=crtc_x@entry=639, crtc_y=crtc_y@entry=399, crtc_w=64,
crtc_h=64,
src_x=src_x@entry=0, src_y=src_y@entry=0, src_w=src_w@entry=4194304,
src_h=src_h@entry=4194304, ctx=ctx@entry=0xdcbeecb8)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:761
761 return plane->funcs->update_plane(plane, crtc, fb,
(gdb) frame 17
#17 0xc0b2b77d in drm_mode_cursor_universal (ctx=0xdcbeecb8,
file_priv=0xc5286104, req=0xdcbeed64, crtc=0xc4348804)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:914
914 ret = __setplane_atomic(plane, crtc, fb,
(gdb) frame 18
#18 drm_mode_cursor_common (dev=dev@entry=0xc3dfd004,
req=req@entry=0xdcbeed64, file_priv=file_priv@entry=0xc5286104)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:973
973 ret = drm_mode_cursor_universal(crtc, req, file_priv, &ctx);
(gdb) frame 19
#19 0xc0b2bdcb in drm_mode_cursor_ioctl (dev=0xc3dfd004, data=0xdcbeeeac,
file_priv=0xc5286104)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:1023
1023 return drm_mode_cursor_common(dev, &new_req, file_priv);
(gdb) frame 20
#20 0xc0b23b5c in drm_ioctl (fp=<optimized out>, cmd=<optimized out>,
data=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/drm_ioctl.c:968
968 error = -(*ioctl->func)(dev, data0, file);
(gdb) frame 21
#21 0xc0af1d36 in drm_ioctl_shim (fp=0xc5b908c0, cmd=3223086243,
data=0xdcbeeeac) at ../../../../external/bsd/drm2/drm/drm_cdevsw.c:393
393
Regards.
Ramiro.
From: "David H. Gutteridge" <david@gutteridge.ca>
To: Gnats Bugs <gnats-bugs@netbsd.org>
Cc:
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Tue, 16 Jan 2024 19:27:27 -0500
On 2024-01-16 01:21, Ramiro Aceves wrote:
> Thanks for your help and efforts. I have tried v4 patch and the
> situation is even worse, the panic occurs after issuing startx command,
> black screen and panic.
I tested the "v4" patch set. Different behaviour encountered on my
machine. Does not panic on boot. However, starting X results in a
blank screen with all VTs then unusable. I was not able to get a
trace from the kernel (doesn't seem to actually panic) nor X. (I
haven't tried setting up the machine so I can log in remotely and
monitor that way.)
Dave
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>
Cc: "David H. Gutteridge" <david@gutteridge.ca>,
gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Wed, 17 Jan 2024 02:12:07 +0000
This is a multi-part message in MIME format.
--=_iH22Mq8cEGadrlwrn55fhppMX7+AHtfW
OK, that's frustrating! Here's one more change, attached as
pr57833-i915gempages-v5.diff -- this will print some information that
got optimized away and unavailable in gdb.
If it still crashes: Can you find the i915_gem_object_get_pages_phys
frame and share the output of `print *obj', in addition to dmesg
output and `info locals' in all the frames?
Attached as pr57833-i915gempages-v5.patch is a step-by-step patch
series. If you have the time, and the single giant .diff still
doesn't work, it would be helpful if you could use bisection to find
where the old symptom goes away and the new symptom appears. (It's
possible I made a mistake in some of the related changes to files
other than i915_gem_phys.c.)
--=_iH22Mq8cEGadrlwrn55fhppMX7+AHtfW
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages-v5"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages-v5.diff"
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..d0265738e2c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
=20
if (!i915_gem_object_has_pages(obj))
return;
- for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+ for (i =3D 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c b/sys=
/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
index 58075877254a..2bc7b11695ec 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
@@ -42,6 +42,18 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_obj=
ect *obj,
}
=20
#ifndef __NetBSD__
+ /*
+ * Paranoia: In NetBSD, a scatterlist is just an array of
+ * pages, not an array of segments that might be larger than
+ * pages, so the number of entries must exactly match the size
+ * of the object (which should also be page-aligned).
+ *
+ * Both vm_fault_cpu and i915_gem_object_release_mmap_offset in
+ * i915_gem_mman.c rely on this page array as such.
+ */
+ KASSERTMSG(pages->sgl->sg_npgs =3D=3D obj->base.size >> PAGE_SHIFT,
+ "npgs=3D%zu size=3D%zu", pages->sgl->sg_npgs, obj->base.size);
+
obj->mm.get_page.sg_pos =3D pages->sgl;
obj->mm.get_page.sg_idx =3D 0;
#endif
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..07f7825ec0db 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -24,6 +24,87 @@ __KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/1=
2/19 12:45:43 riastradh
#include "i915_gem_region.h"
#include "i915_scatterlist.h"
=20
+#ifdef __NetBSD__
+
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+
+#include <machine/pmap_private.h> /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ printf("%s: t=3D%p segs=3D%p nsegs=3D%d size=3D0x%zx kvap=3D%p flags=3D0x=
%x\n",
+ __func__, t, segs, nsegs, size, kvap, flags);
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ if (size =3D=3D 0)
+ panic("_bus_dmamem_kmap: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+ pt_entry_t *pte, opte;
+ vaddr_t va, sva, eva;
+
+ KASSERTMSG(((uintptr_t)kva & PGOFSET) =3D=3D 0, "kva=3D%p", kva);
+
+ size =3D round_page(size);
+ sva =3D (vaddr_t)kva;
+ eva =3D sva + size;
+
+ /*
+ * mark pages cacheable again.
+ */
+ for (va =3D sva; va < eva; va +=3D PAGE_SIZE) {
+ pte =3D kvtopte(va);
+ opte =3D *pte;
+ if ((opte & PTE_PCD) !=3D 0)
+ pmap_pte_clearbits(pte, PTE_PCD);
+ }
+ pmap_kremove((vaddr_t)kva, size);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
+
#include <linux/nbsd-namespace.h>
=20
static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
@@ -65,7 +146,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +164,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
@@ -151,7 +237,7 @@ err_st:
err_pci:
#ifdef __NetBSD__
if (vaddr) {
- bus_dmamem_unmap(dmat, vaddr,
+ bus_dmamem_kunmap(dmat, vaddr,
roundup_pow_of_two(obj->base.size));
}
obj->mm.u.phys.kva =3D NULL;
@@ -225,7 +311,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_obje=
ct *obj,
kfree(pages);
=20
#ifdef __NetBSD__
- bus_dmamem_unmap(dmat, obj->mm.u.phys.kva,
+ bus_dmamem_kunmap(dmat, obj->mm.u.phys.kva,
roundup_pow_of_two(obj->base.size));
obj->mm.u.phys.kva =3D NULL;
bus_dmamem_free(dmat, &obj->mm.u.phys.seg, 1);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..72efd363fdc7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
if (!st)
return -ENOMEM;
=20
+#ifndef __NetBSD__
if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
kfree(st);
return -ENOMEM;
}
+#endif
=20
flags =3D I915_ALLOC_MIN_PAGE_SIZE;
if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,15 +62,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
=20
GEM_BUG_ON(list_empty(blocks));
=20
- sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
- __USE(sg_page_sizes);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
bus_dma_segment_t *segs =3D NULL;
int i =3D 0, nsegs =3D 0;
bool loaded =3D false;
=20
+ sg =3D NULL;
+
list_for_each_entry(block, blocks, link) {
if (nsegs >=3D INT_MAX ||
nsegs >=3D SIZE_MAX/sizeof(segs[0]))
@@ -85,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+ GFP_KERNEL);
+ if (ret)
+ goto err;
+ sg =3D st->sgl;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -106,8 +116,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
kmem_free(segs, nsegs * sizeof(segs[0]));
segs =3D NULL;
=20
- __i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+ sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
+ sg =3D st->sgl;
st->nents =3D 0;
sg_page_sizes =3D 0;
prev_end =3D (resource_size_t)-1;
@@ -145,9 +156,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
sg_page_sizes |=3D sg->length;
sg_mark_end(sg);
i915_sg_trim(st);
+#endif
=20
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
=20
return 0;
=20
@@ -155,6 +166,8 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
err:
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (segs)
kmem_free(segs, nsegs * sizeof(segs[0]));
__intel_memory_region_put_pages_buddy(mem, blocks);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..1635e57befd7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_device *dev,
if (st =3D=3D NULL)
return ERR_PTR(-ENOMEM);
=20
- if (sg_alloc_table(st, 1, GFP_KERNEL)) {
- kfree(st);
- return ERR_PTR(-ENOMEM);
- }
-
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,19 +542,30 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ sg =3D NULL;
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+ if (ret) {
+ DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+ ret);
+ ret =3D -ENOMEM;
+ goto out;
+ }
+ sg =3D st->sgl;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
- /* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -569,14 +574,23 @@ i915_pages_create_for_stolen(struct drm_device *dev,
}
loaded =3D true;
=20
-out: if (ret) {
+out: kmem_free(seg, nseg * sizeof(seg[0]));
+ if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
- sg_free_table(st);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
+ if (sg)
+ sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
+ if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+ kfree(st);
+ return ERR_PTR(-ENOMEM);
+ }
+
sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
--=_iH22Mq8cEGadrlwrn55fhppMX7+AHtfW
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages-v5"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages-v5.patch"
From 7fb48cd42a6dc1e58f9c6b27c7853d721d9f96da Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:38:08 +0000
Subject: [PATCH 1/9] i915_gem_region: Reduce diff from upstream a little.
No functional change intended.
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..e539dc4530dc 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -63,7 +63,6 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_objec=
t *obj)
sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
- __USE(sg_page_sizes);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
bus_dma_segment_t *segs =3D NULL;
int i =3D 0, nsegs =3D 0;
@@ -106,7 +105,7 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
kmem_free(segs, nsegs * sizeof(segs[0]));
segs =3D NULL;
=20
- __i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+ sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
st->nents =3D 0;
sg_page_sizes =3D 0;
@@ -145,9 +144,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
sg_page_sizes |=3D sg->length;
sg_mark_end(sg);
i915_sg_trim(st);
+#endif
=20
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
=20
return 0;
=20
From 97510e276148cfc6f223b397704b3d81905f8eb0 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:38:38 +0000
Subject: [PATCH 2/9] i915_gem: Avoid walking off end of sg_pgs.
sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.
Related to PR kern/57833.
XXX pullup-10
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..d0265738e2c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
=20
if (!i915_gem_object_has_pages(obj))
return;
- for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+ for (i =3D 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
From 4fabd36d0f4f0b06ff600d91789c56730a6698a7 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Wed, 17 Jan 2024 01:33:22 +0000
Subject: [PATCH 3/9] i915_gem: Assert page array size.
Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.
Related to PR kern/57833.
XXX pullup-10
---
.../bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c b/sys=
/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
index 58075877254a..2bc7b11695ec 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
@@ -42,6 +42,18 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_obj=
ect *obj,
}
=20
#ifndef __NetBSD__
+ /*
+ * Paranoia: In NetBSD, a scatterlist is just an array of
+ * pages, not an array of segments that might be larger than
+ * pages, so the number of entries must exactly match the size
+ * of the object (which should also be page-aligned).
+ *
+ * Both vm_fault_cpu and i915_gem_object_release_mmap_offset in
+ * i915_gem_mman.c rely on this page array as such.
+ */
+ KASSERTMSG(pages->sgl->sg_npgs =3D=3D obj->base.size >> PAGE_SHIFT,
+ "npgs=3D%zu size=3D%zu", pages->sgl->sg_npgs, obj->base.size);
+
obj->mm.get_page.sg_pos =3D pages->sgl;
obj->mm.get_page.sg_idx =3D 0;
#endif
From 2911d578f7bb1b45ba50dd0caa08e1d54883befc Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:49:04 +0000
Subject: [PATCH 4/9] i915_gem_phys: Fill sg_pgs.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.
But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.
So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead. Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.
PR kern/57833: kernel panic on xorg exit
XXX pullup-10
---
.../drm2/dist/drm/i915/gem/i915_gem_phys.c | 89 ++++++++++++++++++-
1 file changed, 86 insertions(+), 3 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..a96e039c21a8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -24,6 +24,84 @@ __KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/1=
2/19 12:45:43 riastradh
#include "i915_gem_region.h"
#include "i915_scatterlist.h"
=20
+#ifdef __NetBSD__
+
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+
+#include <machine/pmap_private.h> /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ if (size =3D=3D 0)
+ panic("_bus_dmamem_kmap: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+ pt_entry_t *pte, opte;
+ vaddr_t va, sva, eva;
+
+ KASSERTMSG(((uintptr_t)kva & PGOFSET) =3D=3D 0, "kva=3D%p", kva);
+
+ size =3D round_page(size);
+ sva =3D (vaddr_t)kva;
+ eva =3D sva + size;
+
+ /*
+ * mark pages cacheable again.
+ */
+ for (va =3D sva; va < eva; va +=3D PAGE_SIZE) {
+ pte =3D kvtopte(va);
+ opte =3D *pte;
+ if ((opte & PTE_PCD) !=3D 0)
+ pmap_pte_clearbits(pte, PTE_PCD);
+ }
+ pmap_kremove((vaddr_t)kva, size);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
+
#include <linux/nbsd-namespace.h>
=20
static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
@@ -65,7 +143,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +161,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
@@ -151,7 +234,7 @@ err_st:
err_pci:
#ifdef __NetBSD__
if (vaddr) {
- bus_dmamem_unmap(dmat, vaddr,
+ bus_dmamem_kunmap(dmat, vaddr,
roundup_pow_of_two(obj->base.size));
}
obj->mm.u.phys.kva =3D NULL;
@@ -225,7 +308,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_obje=
ct *obj,
kfree(pages);
=20
#ifdef __NetBSD__
- bus_dmamem_unmap(dmat, obj->mm.u.phys.kva,
+ bus_dmamem_kunmap(dmat, obj->mm.u.phys.kva,
roundup_pow_of_two(obj->base.size));
obj->mm.u.phys.kva =3D NULL;
bus_dmamem_free(dmat, &obj->mm.u.phys.seg, 1);
From 43593f6fbccce1cfe499bbed9822889cc2413e39 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:55:15 +0000
Subject: [PATCH 5/9] i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE
entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work. And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
XXX pullup-10
---
.../bsd/drm2/dist/drm/i915/gem/i915_gem_region.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index e539dc4530dc..72efd363fdc7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
if (!st)
return -ENOMEM;
=20
+#ifndef __NetBSD__
if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
kfree(st);
return -ENOMEM;
}
+#endif
=20
flags =3D I915_ALLOC_MIN_PAGE_SIZE;
if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,7 +62,6 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_objec=
t *obj)
=20
GEM_BUG_ON(list_empty(blocks));
=20
- sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
@@ -68,6 +69,8 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_objec=
t *obj)
int i =3D 0, nsegs =3D 0;
bool loaded =3D false;
=20
+ sg =3D NULL;
+
list_for_each_entry(block, blocks, link) {
if (nsegs >=3D INT_MAX ||
nsegs >=3D SIZE_MAX/sizeof(segs[0]))
@@ -84,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+ GFP_KERNEL);
+ if (ret)
+ goto err;
+ sg =3D st->sgl;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -107,6 +118,7 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
=20
sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
+ sg =3D st->sgl;
st->nents =3D 0;
sg_page_sizes =3D 0;
prev_end =3D (resource_size_t)-1;
@@ -154,6 +166,8 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
err:
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (segs)
kmem_free(segs, nsegs * sizeof(segs[0]));
__intel_memory_region_put_pages_buddy(mem, blocks);
From 57ce19c53c6db50be440740495d8a87f9cef3a9c Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Tue, 16 Jan 2024 00:28:23 +0000
Subject: [PATCH 6/9] i915_gem_stolen: Fix memory leak.
Found while trying to address the PR 57833 class of problems.
XXX pullup-10
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..9ad5df8c75c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -569,7 +569,8 @@ i915_pages_create_for_stolen(struct drm_device *dev,
}
loaded =3D true;
=20
-out: if (ret) {
+out: kmem_free(seg, nseg * sizeof(seg[0]));
+ if (ret) {
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
sg_free_table(st);
From 30b321cb3cd94f9b77bab1b409c7fab289a9f128 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Tue, 16 Jan 2024 00:40:20 +0000
Subject: [PATCH 7/9] i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE
entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway). And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
XXX pullup-10
---
.../drm2/dist/drm/i915/gem/i915_gem_stolen.c | 29 ++++++++++++++-----
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index 9ad5df8c75c8..1e7398090d11 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_device *dev,
if (st =3D=3D NULL)
return ERR_PTR(-ENOMEM);
=20
- if (sg_alloc_table(st, 1, GFP_KERNEL)) {
- kfree(st);
- return ERR_PTR(-ENOMEM);
- }
-
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,6 +542,17 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ sg =3D NULL;
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+ if (ret) {
+ DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+ ret);
+ ret =3D -ENOMEM;
+ goto out;
+ }
+ sg =3D st->sgl;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
@@ -573,11 +578,19 @@ out: kmem_free(seg, nseg * sizeof(seg[0]));
if (ret) {
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
- sg_free_table(st);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
+ if (sg)
+ sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
+ if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+ kfree(st);
+ return ERR_PTR(-ENOMEM);
+ }
+
sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
From 74e265bc6fa36862a55163f44788d8963f0689fc Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Tue, 16 Jan 2024 00:42:08 +0000
Subject: [PATCH 8/9] i915_gem_stolen: Take advantage of a local variable.
No functional change intended.
Prompted by PR kern/57833.
XXX pullup-10
---
.../bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index 1e7398090d11..1635e57befd7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -555,17 +555,17 @@ i915_pages_create_for_stolen(struct drm_device *dev,
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
- /* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -577,7 +577,7 @@ i915_pages_create_for_stolen(struct drm_device *dev,
out: kmem_free(seg, nseg * sizeof(seg[0]));
if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
if (sg && sg->sg_dmamap)
bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (sg)
From 28b6c22d35054a2c62eb8bd4d0fb955a00a2517f Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Wed, 17 Jan 2024 01:36:11 +0000
Subject: [PATCH 9/9] WIP: i915: debug bus_dmamem_kmap
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index a96e039c21a8..07f7825ec0db 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -47,6 +47,9 @@ bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs,=
int nsegs,
(flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
=20
+ printf("%s: t=3D%p segs=3D%p nsegs=3D%d size=3D0x%zx kvap=3D%p flags=3D0x=
%x\n",
+ __func__, t, segs, nsegs, size, kvap, flags);
+
size =3D round_page(size);
if (flags & BUS_DMA_NOCACHE)
pmapflags |=3D PMAP_NOCACHE;
--=_iH22Mq8cEGadrlwrn55fhppMX7+AHtfW--
From: Ramiro Aceves <ea1abz@gmail.com>
To: Taylor R Campbell <riastradh@NetBSD.org>
Cc: "David H. Gutteridge" <david@gutteridge.ca>, gnats-bugs@NetBSD.org,
netbsd-bugs@NetBSD.org, RVP <rvp@SDF.ORG>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Wed, 17 Jan 2024 21:09:53 +0100
El 17/1/24 a las 3:12, Taylor R Campbell escribió:
> OK, that's frustrating! Here's one more change, attached as
> pr57833-i915gempages-v5.diff -- this will print some information that
> got optimized away and unavailable in gdb.
>
> If it still crashes: Can you find the i915_gem_object_get_pages_phys
> frame and share the output of `print *obj', in addition to dmesg
> output and `info locals' in all the frames?
>
> Attached as pr57833-i915gempages-v5.patch is a step-by-step patch
> series. If you have the time, and the single giant .diff still
> doesn't work, it would be helpful if you could use bisection to find
> where the old symptom goes away and the new symptom appears. (It's
> possible I made a mistake in some of the related changes to files
> other than i915_gem_phys.c.)
Hello Taylor,
Thanks for your help and efforts, I appreciate them very much.
I have applied v5.diff big patch and ended in a panic just after the
startx command. Please see bellow for the details you asked for.
After this, I am not sure how to apply the step by step patch (sorry for
my ignorance with all of this things) I think that after getting a fresh
kernel files, I have to apply one step patch, then another step patch
over the last patch, and so on until the 9th patch. ¿Is there a way to
apply them one by one with a command without spliting the patch in 9
small files? ¿One for each email? I think am missing something ;-)
Thanks.
netbsd-compal# dmesg -M netbsd.9.core -N netbsd.9
...
...
[ 1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003,
[ 1.000000] 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013,
[ 1.000000] 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021,
2022, 2023,
[ 1.000000] 2024
[ 1.000000] The NetBSD Foundation, Inc. All rights reserved.
[ 1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[ 1.000000] The Regents of the University of California. All
rights reserved.
[ 1.000000] NetBSD 10.0_RC2 (MYKERNEL) #5: Wed Jan 17 11:20:28 CET 2024
[ 1.000000]
ramiro@netbsd-compal.remigio:/usr/src/sys/arch/i386/compile/MYKERNEL
[ 1.000000] total memory = 2039 MB
[ 1.000000] avail memory = 1978 MB
[ 1.000000] timecounter: Timecounters tick every 10.000 msec
[ 1.000000] Kernelized RAIDframe activated
[ 1.000000] timecounter: Timecounter "i8254" frequency 1193182 Hz
quality 100
[ 1.000004] mainbus0 (root)
[ 1.000004] cpu0 at mainbus0
[ 1.000004] ACPI Error: AE_BAD_PARAMETER, Thread 3242924096 could
not acquire Mutex [ACPI_MTX_Tables] (0x2) (20221020/utmutex-326)
[ 1.000004] cpu0: Use lfence to serialize rdtsc
[ 1.000004] cpu0: Intel(R) Pentium(R) M processor 1.86GHz, id 0x6d8
[ 1.000004] cpu0: node 0, package 0, core 0, smt 0
[ 1.000004] pci0 at mainbus0 bus 0: configuration mode 1
[ 1.000004] pci0: i/o space, memory space enabled, rd/line, rd/mult,
wr/inv ok
[ 1.000004] pchb0 at pci0 dev 0 function 0: Intel
82915PM/GM/GMS,82910GML Host Bridge (rev. 0x04)
[ 1.000004] agp0 at pchb0: i915-family chipset
[ 1.000004] agp0: detected 7932k stolen memory
[ 1.000004] agp0: aperture at 0xa0000000, size 0x10000000
[ 1.000004] i915drmkms0 at pci0 dev 2 function 0: Intel
82915GM/GMS,82910GML Integrated Graphics Device (rev. 0x04)
[ 1.000004] Intel 82915GM/GMS IGD Companion (miscellaneous display,
revision 0x04) at pci0 dev 2 function 1 not configured
[ 1.000004] uhci0 at pci0 dev 29 function 0: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci0: interrupting at irq 7
[ 1.000004] usb0 at uhci0: USB revision 1.0
[ 1.000004] uhci1 at pci0 dev 29 function 1: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci1: interrupting at irq 3
[ 1.000004] usb1 at uhci1: USB revision 1.0
[ 1.000004] uhci2 at pci0 dev 29 function 2: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci2: interrupting at irq 11
[ 1.000004] usb2 at uhci2: USB revision 1.0
[ 1.000004] uhci3 at pci0 dev 29 function 3: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci3: interrupting at irq 11
[ 1.000004] usb3 at uhci3: USB revision 1.0
[ 1.000004] ehci0 at pci0 dev 29 function 7: Intel 82801FB/FR USB
EHCI Controller (rev. 0x04)
[ 1.000004] ehci0: 64-bit DMA - limited
[ 1.000004] ehci0: interrupting at irq 7
[ 1.000004] ehci0: EHCI version 1.0
[ 1.000004] ehci0: 4 companion controllers, 2 ports each: uhci0
uhci1 uhci2 uhci3
[ 1.000004] ehci0: Using DMA subregion for control data structures
[ 1.000004] usb4 at ehci0: USB revision 2.0
[ 1.000004] ppb0 at pci0 dev 30 function 0: Intel 82801BAM Hub-PCI
Bridge (rev. 0xd4)
[ 1.000004] pci1 at ppb0 bus 1
[ 1.000004] pci1: i/o space, memory space enabled
[ 1.000004] fwohci0 at pci1 dev 0 function 0: VIA Technologies
VT6306 IEEE 1394 Host Controller (rev. 0x80)
[ 1.000004] fwohci0: interrupting at irq 10
[ 1.000004] fwohci0: OHCI version 1.0 (ROM=1)
[ 1.000004] fwohci0: No. of Isochronous channels is 4.
[ 1.000004] fwohci0: EUI64 00:02:3f:59:88:40:01:0f
[ 1.000004] fwohci0: Phy 1394a available S400, 2 ports.
[ 1.000004] fwohci0: Link S400, max_rec 512 bytes.
[ 1.000004] fwohci0: max_rec 512 -> 2048
[ 1.000004] ieee1394if0 at fwohci0: IEEE1394 bus
[ 1.000004] fwip0 at ieee1394if0: IP over IEEE1394
[ 1.000004] fwohci0: Initiate bus reset
[ 1.000004] re0 at pci1 dev 1 function 0: RealTek 8169/8110 Gigabit
Ethernet (rev. 0x10)
[ 1.000004] re0: interrupting at irq 11
[ 1.000004] re0: RTL8169/8110SB (0x1000)
[ 1.000004] re0: Ethernet address 00:0f:b0:93:6f:e1
[ 1.000004] re0: using 256 tx descriptors
[ 1.000004] rgephy0 at re0 phy 7: RTL8211B 1000BASE-T media interface
[ 1.000004] rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
1000baseT, 1000baseT-FDX, auto
[ 1.000004] iwi0 at pci1 dev 2 function 0: Intel PRO/Wireless LAN
2200BG Mini-PCI Adapter (rev. 0x05)
[ 1.000004] iwi0: interrupting at irq 11
[ 1.000004] iwi0: 802.11 address 00:13:ce:6b:7d:01
[ 1.000004] cbb0 at pci1 dev 4 function 0: ENE Technology CB710
CardBus Controller (rev. 0x00)
[ 1.000004] ENE Technology product 0530 (flash memory) at pci1 dev 4
function 1 not configured
[ 1.000004] sdhc0 at pci1 dev 4 function 2: ENE Technology
CB712/714/810 PCI SD Card Reader Controller (rev. 0x00)
[ 1.000004] sdhc0: interrupting at irq 5
[ 1.000004] sdhc0: SDHC 1.0, rev 0, caps <01e021a1/00000000>, SDMA,
33000 kHz, HS 3.3V, 512 byte blocks
[ 1.000004] sdmmc0 at sdhc0 slot 0
[ 1.000004] cbb0: cacheline 0x8 lattimer 0x40
[ 1.000004] cbb0: bhlc 0x824008
[ 1.000004] cbb0: autoconfiguration error: secondary bus number
uninitialized; try PCI_BUS_FIXUP
[ 1.000004] pci_intr_map: no mapping for pin A (line=ff)
[ 1.000004] cbb0: autoconfiguration error: couldn't map interrupt
[ 1.000004] cardslot0 at cbb0
[ 1.000004] pcmcia0 at cardslot0
[ 1.000004] auich0 at pci0 dev 30 function 2: i82801FB (ICH6) AC-97
Audio
[ 1.000004] auich0: interrupting at irq 5
[ 1.000004] auich0: ac97: Avance Logic unknown (0x414c4752) codec;
headphone, 20 bit DAC, 18 bit ADC, no 3D stereo
[ 1.000004] auich0: ac97: ext id 0xa07<AC97_23,AMAP,SPDIF,DRA,VRA>
[ 1.000004] Intel 82801FB/FR AC'97 Modem Controller (modem
communications, revision 0x04) at pci0 dev 30 function 3 not configured
[ 1.000004] ichlpcib0 at pci0 dev 31 function 0: Intel 82801FBM
ICH6M LPC Interface Bridge (rev. 0x04)
[ 1.000004] timecounter: Timecounter "ichlpcib0" frequency 3579545
Hz quality 1000
[ 1.006162] ichlpcib0: 24-bit timer
[ 1.006162] tco0 at ichlpcib0: TCO (watchdog) timer configured.
[ 1.006162] tco0: Min/Max interval 1/367 seconds
[ 1.006162] piixide0 at pci0 dev 31 function 1: Intel 82801FB IDE
Controller (ICH6) (rev. 0x04)
[ 1.006162] piixide0: bus-master DMA support present
[ 1.006162] piixide0: primary channel configured to compatibility mode
[ 1.006162] piixide0: primary channel interrupting at irq 14
[ 1.006162] atabus0 at piixide0 channel 0
[ 1.006162] piixide0: secondary channel configured to compatibility mode
[ 1.006162] piixide0: secondary channel interrupting at irq 15
[ 1.006162] atabus1 at piixide0 channel 1
[ 1.006162] ichsmb0 at pci0 dev 31 function 3: Intel 82801FB/FR
SMBus Controller (rev. 0x04)
[ 1.006162] ichsmb0: interrupting at irq 3
[ 1.006162] iic0 at ichsmb0: I2C bus
[ 1.006162] isa0 at ichlpcib0
[ 1.006162] pckbc0 at isa0 port 0x60-0x64
[ 1.006162] pckbd0 at pckbc0 (kbd slot)
[ 1.006162] pckbc0: using irq 1 for kbd slot
[ 1.006162] wskbd0 at pckbd0: console keyboard
[ 1.006162] pms0 at pckbc0 (aux slot)
[ 1.006162] pms0: ALPS PS/2 V2 pointing device
[ 1.006162] pckbc0: using irq 12 for aux slot
[ 1.006162] wsmouse0 at pms0 mux 0
[ 1.006162] attimer0 at isa0 port 0x40-0x43
[ 1.006162] pcppi0 at isa0 port 0x61
[ 1.006162] midi0 at pcppi0: PC speaker
[ 1.006162] sysbeep0 at pcppi0
[ 1.006162] attimer0: attached to pcppi0
[ 1.006162] est0 at cpu0: Enhanced SpeedStep
[ 1.006162] fwohci0: BUS reset
[ 1.006162] fwohci0: node_id=0xc000ffc0, gen=1, CYCLEMASTER mode
[ 1.006162] ieee1394if0: 1 nodes, maxhop <= 0 cable IRM irm(0) (me)
[ 1.006162] ieee1394if0: bus manager 0
[ 1.243701] timecounter: Timecounter "clockinterrupt" frequency 100
Hz quality 0
[ 1.574365] auich0: measured ac97 link rate at 48000 Hz
[ 1.574365] audio0 at auich0: playback, capture, full duplex,
independent
[ 1.574365] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms)
for playback
[ 1.574365] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms)
for recording
[ 1.574365] uhub0 at usb0: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.574365] uhub0: 2 ports with 2 removable, self powered
[ 1.574365] uhub1 at usb1: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.584368] uhub1: 2 ports with 2 removable, self powered
[ 1.584368] uhub2 at usb2: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.584368] uhub2: 2 ports with 2 removable, self powered
[ 1.584368] uhub3 at usb3: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.584368] uhub3: 2 ports with 2 removable, self powered
[ 1.584368] uhub4 at usb4: NetBSD (0x0000) EHCI root hub (0x0000),
class 9/0, rev 2.00/1.00, addr 1
[ 1.584368] uhub4: 8 ports with 8 removable, self powered
[ 1.594366] atapibus0 at atabus0: 2 targets
[ 1.594366] IPsec: Initialized Security Association Processing.
[ 1.674366] cd0 at atapibus0 drive 1: <TSSTcorpCD/DVDW TS-L632B,
95WK401090, TI33> cdrom removable
[ 1.684366] cd0: 32-bit data port
[ 1.684366] cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA
mode 2 (Ultra/33)
[ 1.684366] wd0 at atabus0 drive 0
[ 1.684366] wd0: <IC25N080ATMR04-0>
[ 1.684366] wd0: drive supports 16-sector PIO transfers, LBA48
addressing
[ 1.684366] wd0: 76319 MB, 155061 cyl, 16 head, 63 sec, 512
bytes/sect x 156301488 sectors
[ 2.124373] wd0: 32-bit data port
[ 2.124373] wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA
mode 5 (Ultra/100)
[ 2.124373] wd0(piixide0:0:0): using PIO mode 4, Ultra-DMA mode 5
(Ultra/100) (using DMA)
[ 2.124373] cd0(piixide0:0:1): using PIO mode 4, Ultra-DMA mode 2
(Ultra/33) (using DMA)
[ 2.134373] swwdog0: software watchdog initialized
[ 2.174373] WARNING: 2 errors while detecting hardware; check system
log.
[ 2.174373] boot device: wd0
[ 2.174373] root on wd0a dumps on wd0b
[ 2.204374] root file system type: ffs
[ 2.214374] kern.module.path=/stand/i386/10.0/modules
[ 2.214374] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 2.214374] [drm] Driver supports precise vblank timestamp query.
[ 2.214374] i915drmkms0: interrupting at irq 11 (i915drmkms0)
[ 2.254375] [drm] Initialized overlay support.
[ 2.254375] [drm] Initialized i915 1.6.0 20200114 for i915drmkms0 on
minor 0
[ 2.394380] intelfb0 at i915drmkms0
[ 2.394380] [drm] DRM_I915_DEBUG enabled
[ 2.394380] [drm] DRM_I915_DEBUG_GEM enabled
[ 2.394380] intelfb0: framebuffer at 0xa0009000, size 1280x800,
depth 32, stride 5120
[ 3.034388] wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100
emulation), using wskbd0
[ 3.034388] wsmux1: connecting to wsdisplay0
[ 17.214604] wsdisplay0: screen 1 added (default, vt100 emulation)
[ 17.214604] wsdisplay0: screen 2 added (default, vt100 emulation)
[ 17.214604] wsdisplay0: screen 3 added (default, vt100 emulation)
[ 17.214604] wsdisplay0: screen 4 added (default, vt100 emulation)
[ 64.776202] bus_dmamem_kmap: t=0xc147d8c0 segs=0xc5c20a34 nsegs=1
size=0x4000 kvap=0xdcbeead0 flags=0x4
[ 64.776202] panic: _bus_dmamem_kmap: size botch
[ 64.776202] cpu0: Begin traceback...
[ 64.776202]
vpanic(c1214668,dcbeea90,dcbeeae4,c06cfeba,c1214668,0,0,4,1,4000) at
netbsd:vpanic+0x196
[ 64.776202] panic(c1214668,0,0,4,1,4000,dcbeead0,4,c5c20a5c,0) at
netbsd:panic+0x18
[ 64.776202]
i915_gem_object_get_pages_phys(c5c20900,1,2,c4353004,c4348804,c434a084,c4353000,c53b1c44,c5340a04,1)
at netbsd:i915_gem_object_get_pages_phys+0x54a
[ 64.786211]
i915_gem_object_attach_phys(c5c20900,1000,c0af86a4,c3dfd004,c5c20900,c5c20a18,dcbeeb6c,c0673d15,c5c20a18,1)
at netbsd:i915_gem_object_attach_phys+0xb4
[ 64.786211]
intel_plane_pin_fb(c5c20a18,1,2,c0b2f8a8,c4352010,c4353000,c3dfd004,c50f1004,c4352004,c50f1004)
at netbsd:intel_plane_pin_fb+0x62
[ 64.786211]
intel_prepare_plane_fb(c434a084,c53b1c44,c3dff878,10001,c50f1004,c4353004,c3dff878,dcbeebb8,c066abaf,c3dfd004)
at netbsd:intel_prepare_plane_fb+0xcf
[ 64.786211]
drm_atomic_helper_prepare_planes(c3dfd004,c50f1004,1,c50f1564,0,c50f1004,c3dfd004,c53b1c44,dcbeebd4,c0af8aa5)
at netbsd:drm_atomic_helper_prepare_planes+0x7a
[ 64.786211]
intel_atomic_commit(c3dfd004,c50f1004,0,c434a084,c50f1004,dcbeebfc,c0afde70,c50f1004,c5340a04,40)
at netbsd:intel_atomic_commit+0x9c
[ 64.796205]
drm_atomic_commit(c50f1004,c5340a04,40,0,400000,c434a084,c5340a04,18f,dcbeec64,c0b2b394)
at netbsd:drm_atomic_commit+0x52
[ 64.796205]
drm_atomic_helper_update_plane(c434a084,c4348804,c5340a04,27f,18f,40,40,0,0,400000)
at netbsd:drm_atomic_helper_update_plane+0xd9
[ 64.796205]
__setplane_atomic(27f,18f,40,40,0,0,400000,400000,dcbeecb8,400000) at
netbsd:__setplane_atomic+0x10b
[ 64.796205]
drm_mode_cursor_common(3,2c,27f,18f,40,40,b,0,0,dcbeee54) at
netbsd:drm_mode_cursor_common+0x261
[ 64.796205]
drm_mode_cursor_ioctl(c3dfd004,dcbeeeac,c5bfa004,dcbeedc4,1c,dcbeeeac,63,dcbeedc4,c3dfd360,c5bfa004)
at netbsd:drm_mode_cursor_ioctl+0x4e
[ 64.796205]
drm_ioctl(c5b908c0,c01c64a3,dcbeeeac,dcbeef38,c0cc9867,c5b908c0,c01c64a3,dcbeeeac,c0c453b7,c429fd24)
at netbsd:drm_ioctl+0x42d
[ 64.806208]
drm_ioctl_shim(c5b908c0,c01c64a3,dcbeeeac,c0c453b7,c429fd24,dcbeef10,0,c5bcc178,c5b908c0,0)
at netbsd:drm_ioctl_shim+0x43
[ 64.806208]
sys_ioctl(c4361940,dcbeef68,dcbeef60,c5339500,0,36,dcbeef60,dcbeef68,0,0)
at netbsd:sys_ioctl+0x35b
[ 64.806208] syscall() at netbsd:syscall+0x1d6
[ 64.806208] --- syscall (number 54) ---
[ 64.806208] b96fbdc7:
[ 64.806208] cpu0: End traceback...
[ 64.806208] dumping to dev 0,1 offset 1023
[ 64.806208] dump
netbsd-compal# gdb /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb
GNU gdb (GDB) 11.0.50.20200914-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i486--netbsdelf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb...
(gdb) target kvm /var/crash/netbsd.9.core
0xc012d6ed in maybe_dump (howto=260) at
../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) frame 0
#0 0xc012d6ed in maybe_dump (howto=260) at
../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) info locals
s = 0
s = <optimized out>
(gdb) frame 1
#1 cpu_reboot (howto=howto@entry=260, bootstr=bootstr@entry=0x0)
at ../../../../arch/i386/i386/machdep.c:746
746 maybe_dump(howto);
(gdb) info locals
syncdone = false
s = 0
(gdb) frame 2
#2 0xc0c85dd7 in kern_reboot (howto=howto@entry=260,
bootstr=bootstr@entry=0x0)
at ../../../../kern/kern_reboot.c:73
73 cpu_reboot(howto, bootstr);
(gdb) info locals
rebooter = 0xc4361940
l = 0x0
(gdb) frame 3
#3 0xc0cbc998 in vpanic (fmt=fmt@entry=0xc1214668 "_bus_dmamem_kmap:
size botch",
ap=0xdcbeea90 "") at ../../../../kern/subr_prf.c:291
291 kern_reboot(bootopt, NULL);
(gdb) info locals
cii = <optimized out>
ci = <optimized out>
oci = <optimized out>
bootopt = 260
scratchstr = "_bus_dmamem_kmap: size botch", '\000' <repeats 355 times>
(gdb) frame 4
#4 0xc0cbca51 in panic (fmt=fmt@entry=0xc1214668 "_bus_dmamem_kmap:
size botch")
at ../../../../kern/subr_prf.c:208
208 vpanic(fmt, ap);
(gdb) info locals
ap = 0xdcbeea90 ""
(gdb) frame 5
#5 0xc06cfeba in bus_dmamem_kmap (nsegs=1, flags=4, kvap=0xdcbeead0,
size=<optimized out>, segs=0xc5c20a34, t=0xc147d8c0 <pci_bus_dma_tag>)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:69
69 panic("_bus_dmamem_kmap: size botch");
(gdb) info locals
kmflags = 0
pmapflags = 19
va = <optimized out>
addr = <optimized out>
curseg = 0
va = <optimized out>
addr = <optimized out>
curseg = <optimized out>
kmflags = <optimized out>
pmapflags = <optimized out>
__func__ = "bus_dmamem_kmap"
(gdb) frame 6
#6 i915_gem_object_get_pages_phys (obj=0xc5c20900)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:149
149 ret = -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
(gdb) info locals
mapping = 0xc5c61300
sg = <optimized out>
st = <optimized out>
dma = <optimized out>
vaddr = 0xdb5b4000
dst = <optimized out>
i = <optimized out>
dmat = 0xc147d8c0 <pci_bus_dma_tag>
loaded = false
rsegs = 1
ret = <optimized out>
(gdb) print *obj
$1 = {base = {refcount = {kr_count = 3}, handle_count = 1, dev =
0xc3dfd004,
filp = 0xc5c61300, gemo_uvmobj = {vmobjlock = 0xc5c706c0,
pgops = 0xc1086780 <i915_gem_uvm_ops>, uo_npages = 0, uo_refs =
1, uo_pages = {
t_root = 0x0, t_height = 0}, uo_ubc = {lh_first = 0x0}},
vma_node = {von_lock = {
rw_owner = 0}, von_startpage = 0, von_npages = 0, von_files = {
rbt_root = 0xc5b2c914, rbt_ops = 0xc11480ec
<drm_vma_file_rb_ops>, rbt_minmax = {
0xc5b2c914, 0xc5b2c914}}, von_rb_node = {rb_nodes = {0x0,
0x0}, rb_info = 0},
readonly = false}, size = 16384, name = 0, dma_buf = 0x0,
import_attach = 0x0,
resv = 0xc5c2096c, _resv = {lock = {wwm_state = 0 '\000', wwm_debug
= false, wwm_u = {
owner = 0x0, ctx = 0x0}, wwm_lock = {u = {mtxa_owner = 1537,
s = {
mtxs_dummy = 1 '\001', mtxs_ipl = {_ipl = 6 '\006'},
mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}},
wwm_class = 0xc14d1cc0 <linux_reservation_ww_class>,
wwm_waiters = {
rbt_root = 0x0, rbt_ops = 0xc117b290 <ww_acquire_ctx_rb_ops>,
rbt_minmax = {0x0,
0x0}}, wwm_cv = {cv_opaque = {0x0, 0xc1276960}}}, seq =
{sqc_gen = 0},
fence_excl = 0x0, fence = 0x0, robj_prealloc = 0x0}, funcs = 0x0},
ops = 0xc10867e0 <i915_gem_phys_ops>, vma = {lock = {sl_lock = {u =
{mtxa_owner = 1537,
s = {mtxs_dummy = 1 '\001', mtxs_ipl = {_ipl = 6 '\006'},
mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}, list = {prev = 0xc4355f80, next
= 0xc4355f80},
tree = {rbr_tree = {rbt_root = 0xc4355f88, rbt_ops = 0xc10903fc
<vma_tree_rb_ops>,
rbt_minmax = {0xc4355f88, 0xc4355f88}}}}, lut_list = {prev =
0xc5c209c8,
next = 0xc5c209c8}, stolen = 0x0, {rcu = {rcuh_u = {callback = 0x0,
obj = 0x0},
rcuh_next = 0x0}, freed = {next = 0x0}}, userfault_count = 0,
userfault_link = {
prev = 0x2, next = 0x1}, mmo = {lock = {sl_lock = {u = {mtxa_owner
= 1537, s = {
mtxs_dummy = 1 '\001', mtxs_ipl = {_ipl = 6 '\006'},
mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}, offsets = {0xc5bcc144, 0x0,
0x0, 0x0}}, flags = 0,
cache_level = 0, cache_coherent = 0, cache_dirty = 0, read_domains = 64,
write_domain = 64, frontbuffer = 0xc5c4b184, tiling_and_stride = 0,
bind_count = {a_u = {
--Type <RET> for more, q to quit, c to continue without paging--
au_int = 0, au_uint = 0}}, mm = {lock = {mtx_lock = {u =
{mtxa_owner = 3291879744,
s = {mtxs_dummy = 64 '@', mtxs_ipl = {_ipl = 25 '\031'},
mtxs_lock = 54 '6',
mtxs_unused = 196 '\304'}}}}, pages_pin_count = {a_u =
{au_int = 1,
au_uint = 1}}, shrink_pin = {a_u = {au_int = 1, au_uint = 1}},
region = 0xc4290f04, blocks = {prev = 0xc5c20a24, next =
0xc5c20a24}, region_link = {
prev = 0xc4290fe0, next = 0xc5c2086c}, u = {internal = {segs =
0x4afb8000,
nsegs = 16384, rsegs = 0}, phys = {seg = {ds_addr = 1257996288,
ds_len = 16384},
kva = 0x0}}, pages = 0x0, mapping = 0x0, page_sizes = {phys =
0, sg = 0, gtt = 0},
get_page = {sg_pos = 0x0, sg_idx = 0, radix = {rtr_tree = {t_root =
0x0,
t_height = 0}, rtr_lock = 0 '\000'}, lock = {mtx_lock = {u =
{mtxa_owner = 0,
s = {mtxs_dummy = 0 '\000', mtxs_ipl = {_ipl = 0 '\000'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}}}}, link = {
prev = 0xc5c20a6c, next = 0xc5c20a6c}, madv = 0, dirty = true,
quirked = false},
bit_17 = 0x0, {userptr = {ptr = 0, mm = 0x0, mmu_object = 0x0, work =
0x0}, scratch = 0,
gvt_info = 0x0}}
(gdb) frame 7
#7 0xc06cffd9 in i915_gem_object_attach_phys (obj=0xc5c20900, align=4096)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:381
381 err = ____i915_gem_object_get_pages(obj);
(gdb) info locals
pages = 0xc5c352e4
err = <optimized out>
(gdb) frame 8
#8 0xc06653cb in intel_plane_pin_fb
(plane_state=plane_state@entry=0xc53b1c44)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15729
15729 err = i915_gem_object_attach_phys(obj, align);
(gdb) info locals
obj = <optimized out>
align = <optimized out>
err = <optimized out>
plane = <optimized out>
dev_priv = <optimized out>
fb = 0xc5340a04
vma = <optimized out>
(gdb) frame 9
#9 0xc0673d15 in intel_prepare_plane_fb (plane=0xc434a084,
_new_plane_state=0xc53b1c44)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15832
15832 ret = intel_plane_pin_fb(new_plane_state);
(gdb) info locals
new_plane_state = 0xc53b1c44
intel_state = 0xc50f1004
dev_priv = 0xc3dfd004
fb = <optimized out>
obj = 0xc5c20900
old_obj = <optimized out>
ret = <optimized out>
(gdb) frame 10
#10 0xc0afcd98 in drm_atomic_helper_prepare_planes (dev=<optimized out>,
state=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2399
2399 ret = funcs->prepare_fb(plane, new_plane_state);
(gdb) info locals
funcs = <optimized out>
connector = <optimized out>
new_plane_state = <optimized out>
ret = <optimized out>
i = 3
new_conn_state = <optimized out>
plane = <optimized out>
j = <optimized out>
connector = <optimized out>
new_conn_state = <optimized out>
plane = <optimized out>
new_plane_state = <optimized out>
ret = <optimized out>
i = <optimized out>
j = <optimized out>
fail = <optimized out>
funcs = <optimized out>
funcs = <optimized out>
(gdb) frame 11
#11 drm_atomic_helper_prepare_planes (dev=0xc3dfd004,
state=state@entry=0xc50f1004)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2375
2375 int drm_atomic_helper_prepare_planes(struct drm_device *dev,
(gdb) info locals
connector = <optimized out>
new_conn_state = <optimized out>
plane = <optimized out>
new_plane_state = <optimized out>
ret = <optimized out>
i = <optimized out>
j = <optimized out>
fail = <optimized out>
funcs = <optimized out>
funcs = <optimized out>
(gdb) frame 12
#12 0xc066abaf in intel_atomic_prepare_commit (state=0xc50f1004)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:14760
14760 return drm_atomic_helper_prepare_planes(state->base.dev,
(gdb) info locals
No locals.
(gdb) frame 13
#13 intel_atomic_commit (dev=0xc3dfd004, _state=0xc50f1004, nonblock=false)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15595
15595 ret = intel_atomic_prepare_commit(state);
(gdb) info locals
state = 0xc50f1004
dev_priv = 0xc3dfd004
ret = 0
(gdb) frame 14
#14 0xc0af8aa5 in drm_atomic_commit (state=state@entry=0xc50f1004)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic.c:1238
1238 return config->funcs->atomic_commit(state->dev, state, false);
(gdb) info locals
config = 0xc3dfd0c8
ret = <optimized out>
(gdb) frame 15
#15 0xc0afde70 in drm_atomic_helper_update_plane (plane=0xc434a084,
crtc=0xc4348804,
fb=0xc5340a04, crtc_x=639, crtc_y=399, crtc_w=64, crtc_h=64,
src_x=0, src_y=0,
src_w=4194304, src_h=4194304, ctx=0xdcbeecb8)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2910
2910 ret = drm_atomic_commit(state);
(gdb) info locals
state = 0xc50f1004
plane_state = 0xc53b1c44
ret = 0
(gdb) frame 16
#16 0xc0b2b394 in __setplane_atomic (plane=plane@entry=0xc434a084,
crtc=crtc@entry=0xc4348804, fb=fb@entry=0xc5340a04,
crtc_x=crtc_x@entry=639,
crtc_y=crtc_y@entry=399, crtc_w=64, crtc_h=64, src_x=src_x@entry=0,
src_y=src_y@entry=0, src_w=src_w@entry=4194304,
src_h=src_h@entry=4194304,
ctx=ctx@entry=0xdcbeecb8) at
../../../../external/bsd/drm2/dist/drm/drm_plane.c:761
761 return plane->funcs->update_plane(plane, crtc, fb,
(gdb) info locals
ret = <optimized out>
(gdb) frame 17
#17 0xc0b2b7cd in drm_mode_cursor_universal (ctx=0xdcbeecb8,
file_priv=0xc5bfa004,
req=0xdcbeed64, crtc=0xc4348804)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:914
914 ret = __setplane_atomic(plane, crtc, fb,
(gdb) info locals
plane = 0xc434a084
fbreq = {fb_id = 0, width = 64, height = 64, pixel_format = 875713089,
flags = 0,
handles = {11, 0, 0, 0}, pitches = {256, 0, 0, 0}, offsets = {0, 0,
0, 0}, modifier = {
0, 0, 0, 0}}
crtc_x = 639
crtc_y = 399
src_w = 4194304
src_h = 4194304
ret = 0
dev = 0xc3dfd004
fb = 0xc5340a04
crtc_w = <optimized out>
crtc_h = <optimized out>
dev = <optimized out>
plane = <optimized out>
fb = <optimized out>
fbreq = {fb_id = <optimized out>, width = <optimized out>, height =
<optimized out>,
pixel_format = <optimized out>, flags = <optimized out>, handles =
{<optimized out>,
<optimized out>, <optimized out>, <optimized out>}, pitches =
{<optimized out>,
<optimized out>, <optimized out>, <optimized out>}, offsets =
{<optimized out>,
<optimized out>, <optimized out>, <optimized out>}, modifier =
{<optimized out>,
<optimized out>, <optimized out>, <optimized out>}}
crtc_x = <optimized out>
crtc_y = <optimized out>
crtc_w = <optimized out>
crtc_h = <optimized out>
src_w = <optimized out>
src_h = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
ret = <optimized out>
(gdb) frame 18
#18 drm_mode_cursor_common (dev=dev@entry=0xc3dfd004,
req=req@entry=0xdcbeed64,
file_priv=file_priv@entry=0xc5bfa004)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:973
973 ret = drm_mode_cursor_universal(crtc, req, file_priv, &ctx);
(gdb) info locals
crtc = 0xc4348804
ctx = {ww_ctx = {wwx_class = 0xc14ab70c <crtc_ww_class>, wwx_owner =
0xc4361940,
wwx_ticket = 37, wwx_acquired = 2, wwx_acquire_done = false,
wwx_rb_node = {
rb_nodes = {0x0, 0x0}, rb_info = 0}}, contended = 0x0, locked =
{prev = 0xc4348840,
next = 0xc434a0bc}, trylock_only = false, interruptible = true}
ret = <optimized out>
(gdb) frame 19
#19 0xc0b2be1b in drm_mode_cursor_ioctl (dev=0xc3dfd004, data=0xdcbeeeac,
file_priv=0xc5bfa004) at
../../../../external/bsd/drm2/dist/drm/drm_plane.c:1023
1023 return drm_mode_cursor_common(dev, &new_req, file_priv);
(gdb) info locals
req = 0xdcbeeeac
new_req = {flags = 3, crtc_id = 44, x = 639, y = 399, width = 64, height
= 64,
handle = 11, hot_x = 0, hot_y = 0}
(gdb) frame 20
#20 0xc0b23bac in drm_ioctl (fp=<optimized out>, cmd=<optimized out>,
data=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/drm_ioctl.c:968
968 error = -(*ioctl->func)(dev, data0, file);
(gdb) info locals
stackbuf =
"B\000\000\000@\035\277\305P\375)\304\000\000\257\266\000\000\000\000\000\000\000\000\060\001\000\000\000\000\000\000\000\301\274\305\000\000\000\000\000\000\000\001\000\000\000\000\003\000\000\000\000\000\000\000@{\272\305\001\000\000\000$\375)\304\000\340\256\266\000\020\000\000$\375)\304|\004\000\000\000\v\303\305\000\020\000\000\002\000\000\000\000\340\256\266\001\000\000\000\000\000\000\000\001\000\000\001\003",
'\000' <repeats 11 times>, "\001\000\000"
buf = 0xdcbeedc4 "B"
data0 = 0xdcbeeeac
file = <optimized out>
nr = <optimized out>
error = <optimized out>
dev = 0xc3dfd004
ioctl = <optimized out>
is_driver_ioctl = <optimized out>
(gdb) frame 21
#21 0xc0af1d86 in drm_ioctl_shim (fp=0xc5b908c0, cmd=3223086243,
data=0xdcbeeeac)
at ../../../../external/bsd/drm2/drm/drm_cdevsw.c:393
393 error = drm_ioctl(fp, cmd, data);
(gdb) info locals
file = <optimized out>
driver = <optimized out>
error = <optimized out>
(gdb) frame 22
#22 0xc0cc9867 in sys_ioctl (l=<optimized out>, uap=<optimized out>,
retval=<optimized out>) at ../../../../kern/sys_generic.c:675
675 error = (*fp->f_ops->fo_ioctl)(fp, com, data);
(gdb) info locals
fp = <optimized out>
p = <optimized out>
com = <optimized out>
error = <optimized out>
size = <optimized out>
alloc_size = <optimized out>
data = 0xdcbeeeac
memp = 0x0
stkbuf = {3, 44, 639, 399, 64, 64, 11, 262, 3291879744, 2, 3703500700,
3222468089,
3291086116, 3064913920, 2, 0, 0, 1, 3, 1, 3317481848, 3291086116, 0,
3064913920,
3064913920, 3291086116, 0, 3291065536, 3703492608, 3703500712, 0, 0}
(gdb) frame 23
#23 0xc049b4c6 in sy_call (rval=0xdcbeef60, uap=0xdcbeef68, l=0xc4361940,
sy=0xc14ae998 <sysent+1080>) at ../../../../sys/syscallvar.h:65
65 error = (*sy->sy_call)(l, uap, rval);
(gdb) info locals
error = <optimized out>
error = <optimized out>
(gdb) frame 24
#24 sy_invoke (code=<optimized out>, rval=0xdcbeef60, uap=0xdcbeef68,
l=0xc4361940,
sy=0xc14ae998 <sysent+1080>) at ../../../../sys/syscallvar.h:94
94 error = sy_call(sy, l, uap, rval);
(gdb) info locals
do_trace = <optimized out>
error = <optimized out>
do_trace = <optimized out>
error = <optimized out>
(gdb) frame 25
#25 syscall (frame=0xdcbeefa8) at ../../../../arch/x86/x86/syscall.c:138
138 error = sy_invoke(callp, l, args, rval, code);
(gdb) info locals
callp = 0xc14ae998 <sysent+1080>
p = <optimized out>
l = 0xc4361940
error = <optimized out>
code = <optimized out>
rval = {0, 0}
args = {10, -1071881053, -1078530356, -1195388928, 10, 0, 281542656, 0,
-1195388928,
-1078530476}
(gdb) frame 26
#26 0xc0102230 in Xsyscall ()
(gdb) info locals
No symbol table info available.
(gdb) frame 27
#27 0xdcbeefa8 in ?? ()
(gdb) info locals
No symbol table info available.
(gdb) frame 28
No frame at level 28.
(gdb)
Thanks
Ramiro.
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>
Cc: "David H. Gutteridge" <david@gutteridge.ca>,
gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org, RVP <rvp@SDF.ORG>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 18 Jan 2024 03:11:09 +0000
This is a multi-part message in MIME format.
--=_yZfuFEUR5sBHB86OQy7idKn1uESPEWyt
OK, that's getting pretty weird. Can you please revert all your local
changes, and apply just the attached patch?
If it crashes, same request as before -- `print *obj', `info locals'
in all frames, dmesg, plus `print segs[0]' in the bus_dmamem_kmap
frame (which was frame 5 in your last reply).
P.S. The pr57833-i915gempages-v5.patch file I gave you earlier is a
git patch series. You can apply it on top of a git repository wit the
`git am' command, and bisect with `git bisect'. If the smaller
i915_gem_phys.patch attached to this message works, we can use that to
try finding which other part of the changes might have broken things.
--=_yZfuFEUR5sBHB86OQy7idKn1uESPEWyt
Content-Type: text/plain; charset="ISO-8859-1"; name="i915_gem_phys"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="i915_gem_phys.patch"
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..375246c43af6 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -24,6 +24,98 @@ __KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/1=
2/19 12:45:43 riastradh
#include "i915_gem_region.h"
#include "i915_scatterlist.h"
=20
+#ifdef __NetBSD__
+
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+
+#include <machine/pmap_private.h> /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ CTASSERT(PAGE_SIZE =3D=3D 4096);
+ printf("%s: t=3D%p segs=3D%p nsegs=3D%d size=3D0x%zx kvap=3D%p flags=3D0x=
%x\n",
+ __func__, t, segs, nsegs, size, kvap, flags);
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ printf("%s: va=3D%"PRIxVADDR"\n", __func__, va);
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ printf("%s:%d size=3D0x%"PRIxBUSSIZE
+ " curseg=3D%d addr=3D0x%"PRIxBUSADDR" len=3D0x%"PRIxBUSSIZE
+ " end=3D0x%"PRIxBUSADDR"\n",
+ __func__, __LINE__, size,
+ curseg, segs[curseg].ds_addr, segs[curseg].ds_len,
+ segs[curseg].ds_addr + segs[curseg].ds_len);
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ printf("%s:%d: size=3D0x%"PRIxBUSSIZE
+ " addr=3D0x%"PRIxBUSADDR,
+ __func__, __LINE__, size, addr);
+ if (size =3D=3D 0)
+ panic("_bus_dmamem_kmap: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+ pt_entry_t *pte, opte;
+ vaddr_t va, sva, eva;
+
+ KASSERTMSG(((uintptr_t)kva & PGOFSET) =3D=3D 0, "kva=3D%p", kva);
+
+ size =3D round_page(size);
+ sva =3D (vaddr_t)kva;
+ eva =3D sva + size;
+
+ /*
+ * mark pages cacheable again.
+ */
+ for (va =3D sva; va < eva; va +=3D PAGE_SIZE) {
+ pte =3D kvtopte(va);
+ opte =3D *pte;
+ if ((opte & PTE_PCD) !=3D 0)
+ pmap_pte_clearbits(pte, PTE_PCD);
+ }
+ pmap_kremove((vaddr_t)kva, size);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
+
#include <linux/nbsd-namespace.h>
=20
static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
@@ -65,7 +157,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +175,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
@@ -151,7 +248,7 @@ err_st:
err_pci:
#ifdef __NetBSD__
if (vaddr) {
- bus_dmamem_unmap(dmat, vaddr,
+ bus_dmamem_kunmap(dmat, vaddr,
roundup_pow_of_two(obj->base.size));
}
obj->mm.u.phys.kva =3D NULL;
@@ -225,7 +322,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_obje=
ct *obj,
kfree(pages);
=20
#ifdef __NetBSD__
- bus_dmamem_unmap(dmat, obj->mm.u.phys.kva,
+ bus_dmamem_kunmap(dmat, obj->mm.u.phys.kva,
roundup_pow_of_two(obj->base.size));
obj->mm.u.phys.kva =3D NULL;
bus_dmamem_free(dmat, &obj->mm.u.phys.seg, 1);
--=_yZfuFEUR5sBHB86OQy7idKn1uESPEWyt--
From: Ramiro Aceves <ea1abz@gmail.com>
To: Taylor R Campbell <riastradh@NetBSD.org>
Cc: "David H. Gutteridge" <david@gutteridge.ca>, gnats-bugs@NetBSD.org,
netbsd-bugs@NetBSD.org, RVP <rvp@SDF.ORG>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 18 Jan 2024 21:44:23 +0100
El 18/1/24 a las 4:11, Taylor R Campbell escribió:
> OK, that's getting pretty weird. Can you please revert all your local
> changes, and apply just the attached patch?
>
> If it crashes, same request as before -- `print *obj', `info locals'
> in all frames, dmesg, plus `print segs[0]' in the bus_dmamem_kmap
> frame (which was frame 5 in your last reply).
>
>
> P.S. The pr57833-i915gempages-v5.patch file I gave you earlier is a
> git patch series. You can apply it on top of a git repository wit the
> `git am' command, and bisect with `git bisect'. If the smaller
> i915_gem_phys.patch attached to this message works, we can use that to
> try finding which other part of the changes might have broken things.
Hello Taylor,
Thanks for reply and the new patch. New panic today as soon as I
entered in xorg with startx command. Please see below.
Thanks so much.
netbsd-compal# pwd
/var/crash
netbsd-compal# ls -al
total 1538712
drwxrwx--- 2 root wheel 1024 Jan 18 19:23 .
drwxr-xr-x 26 root wheel 512 Jan 9 19:14 ..
-rw------- 1 root wheel 3 Jan 18 19:13 bounds
-rw------- 1 root wheel 5 Jan 1 15:04 minfree
-rw------- 1 root wheel 1958710 Jan 9 19:21 netbsd.0
-rw------- 1 root wheel 154079764 Jan 9 19:21 netbsd.0.core
-rw------- 1 root wheel 1958710 Jan 9 19:24 netbsd.1
-rw------- 1 root wheel 117210132 Jan 9 19:24 netbsd.1.core
-rw------- 1 root wheel 1958027 Jan 18 19:13 netbsd.10
-rw------- 1 root wheel 114651156 Jan 18 19:13 netbsd.10.core
-rw------- 1 root wheel 1958710 Jan 9 20:14 netbsd.2
-rw------- 1 root wheel 202709524 Jan 9 20:14 netbsd.2.core
-rw------- 1 root wheel 1958710 Jan 10 07:18 netbsd.3
-rw------- 1 root wheel 245231124 Jan 10 07:18 netbsd.3.core
-rw------- 1 root wheel 122661396 Jan 12 19:29 netbsd.4.core
-rw------- 1 root wheel 843776 Jan 12 19:29 netbsd.4.gz
-rw------- 1 root wheel 122661396 Jan 13 10:56 netbsd.5.core
-rw------- 1 root wheel 843776 Jan 13 10:56 netbsd.5.gz
-rw------- 1 root wheel 2063492 Jan 13 12:12 netbsd.6
-rw------- 1 root wheel 122661396 Jan 13 12:12 netbsd.6.core
-rw------- 1 root wheel 1958653 Jan 13 12:31 netbsd.7
-rw------- 1 root wheel 124865556 Jan 13 12:31 netbsd.7.core
-rw------- 1 root wheel 1958011 Jan 15 22:28 netbsd.8
-rw------- 1 root wheel 114051092 Jan 15 22:28 netbsd.8.core
-rw------- 1 root wheel 1958027 Jan 17 19:01 netbsd.9
-rw------- 1 root wheel 114056212 Jan 17 19:01 netbsd.9.core
netbsd-compal#
netbsd-compal# dmesg -M netbsd.10.core -N netbsd.10
...
...
...
[ 1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003,
[ 1.000000] 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013,
[ 1.000000] 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021,
2022, 2023,
[ 1.000000] 2024
[ 1.000000] The NetBSD Foundation, Inc. All rights reserved.
[ 1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[ 1.000000] The Regents of the University of California. All
rights reserved.
[ 1.000000] NetBSD 10.0_RC2 (MYKERNEL) #6: Thu Jan 18 09:26:12 CET 2024
[ 1.000000]
ramiro@netbsd-compal.remigio:/usr/src/sys/arch/i386/compile/MYKERNEL
[ 1.000000] total memory = 2039 MB
[ 1.000000] avail memory = 1978 MB
[ 1.000000] timecounter: Timecounters tick every 10.000 msec
[ 1.000000] Kernelized RAIDframe activated
[ 1.000000] timecounter: Timecounter "i8254" frequency 1193182 Hz
quality 100
[ 1.000004] mainbus0 (root)
[ 1.000004] cpu0 at mainbus0
[ 1.000004] ACPI Error: AE_BAD_PARAMETER, Thread 3242924096 could
not acquire Mutex [ACPI_MTX_Tables] (0x2) (20221020/utmutex-326)
[ 1.000004] cpu0: Use lfence to serialize rdtsc
[ 1.000004] cpu0: Intel(R) Pentium(R) M processor 1.86GHz, id 0x6d8
[ 1.000004] cpu0: node 0, package 0, core 0, smt 0
[ 1.000004] pci0 at mainbus0 bus 0: configuration mode 1
[ 1.000004] pci0: i/o space, memory space enabled, rd/line, rd/mult,
wr/inv ok
[ 1.000004] pchb0 at pci0 dev 0 function 0: Intel
82915PM/GM/GMS,82910GML Host Bridge (rev. 0x04)
[ 1.000004] agp0 at pchb0: i915-family chipset
[ 1.000004] agp0: detected 7932k stolen memory
[ 1.000004] agp0: aperture at 0xa0000000, size 0x10000000
[ 1.000004] i915drmkms0 at pci0 dev 2 function 0: Intel
82915GM/GMS,82910GML Integrated Graphics Device (rev. 0x04)
[ 1.000004] Intel 82915GM/GMS IGD Companion (miscellaneous display,
revision 0x04) at pci0 dev 2 function 1 not configured
[ 1.000004] uhci0 at pci0 dev 29 function 0: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci0: interrupting at irq 7
[ 1.000004] usb0 at uhci0: USB revision 1.0
[ 1.000004] uhci1 at pci0 dev 29 function 1: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci1: interrupting at irq 3
[ 1.000004] usb1 at uhci1: USB revision 1.0
[ 1.000004] uhci2 at pci0 dev 29 function 2: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci2: interrupting at irq 11
[ 1.000004] usb2 at uhci2: USB revision 1.0
[ 1.000004] uhci3 at pci0 dev 29 function 3: Intel 82801FB/FR USB
UHCI Controller (rev. 0x04)
[ 1.000004] uhci3: interrupting at irq 11
[ 1.000004] usb3 at uhci3: USB revision 1.0
[ 1.000004] ehci0 at pci0 dev 29 function 7: Intel 82801FB/FR USB
EHCI Controller (rev. 0x04)
[ 1.000004] ehci0: 64-bit DMA - limited
[ 1.000004] ehci0: interrupting at irq 7
[ 1.000004] ehci0: EHCI version 1.0
[ 1.000004] ehci0: 4 companion controllers, 2 ports each: uhci0
uhci1 uhci2 uhci3
[ 1.000004] ehci0: Using DMA subregion for control data structures
[ 1.000004] usb4 at ehci0: USB revision 2.0
[ 1.000004] ppb0 at pci0 dev 30 function 0: Intel 82801BAM Hub-PCI
Bridge (rev. 0xd4)
[ 1.000004] pci1 at ppb0 bus 1
[ 1.000004] pci1: i/o space, memory space enabled
[ 1.000004] fwohci0 at pci1 dev 0 function 0: VIA Technologies
VT6306 IEEE 1394 Host Controller (rev. 0x80)
[ 1.000004] fwohci0: interrupting at irq 10
[ 1.000004] fwohci0: OHCI version 1.0 (ROM=1)
[ 1.000004] fwohci0: No. of Isochronous channels is 4.
[ 1.000004] fwohci0: EUI64 00:02:3f:59:88:40:01:0f
[ 1.000004] fwohci0: Phy 1394a available S400, 2 ports.
[ 1.000004] fwohci0: Link S400, max_rec 512 bytes.
[ 1.000004] fwohci0: max_rec 512 -> 2048
[ 1.000004] ieee1394if0 at fwohci0: IEEE1394 bus
[ 1.000004] fwip0 at ieee1394if0: IP over IEEE1394
[ 1.000004] fwohci0: Initiate bus reset
[ 1.000004] re0 at pci1 dev 1 function 0: RealTek 8169/8110 Gigabit
Ethernet (rev. 0x10)
[ 1.000004] re0: interrupting at irq 11
[ 1.000004] re0: RTL8169/8110SB (0x1000)
[ 1.000004] re0: Ethernet address 00:0f:b0:93:6f:e1
[ 1.000004] re0: using 256 tx descriptors
[ 1.000004] rgephy0 at re0 phy 7: RTL8211B 1000BASE-T media interface
[ 1.000004] rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
1000baseT, 1000baseT-FDX, auto
[ 1.000004] iwi0 at pci1 dev 2 function 0: Intel PRO/Wireless LAN
2200BG Mini-PCI Adapter (rev. 0x05)
[ 1.000004] iwi0: interrupting at irq 11
[ 1.000004] iwi0: 802.11 address 00:13:ce:6b:7d:01
[ 1.000004] cbb0 at pci1 dev 4 function 0: ENE Technology CB710
CardBus Controller (rev. 0x00)
[ 1.000004] ENE Technology product 0530 (flash memory) at pci1 dev 4
function 1 not configured
[ 1.000004] sdhc0 at pci1 dev 4 function 2: ENE Technology
CB712/714/810 PCI SD Card Reader Controller (rev. 0x00)
[ 1.000004] sdhc0: interrupting at irq 5
[ 1.000004] sdhc0: SDHC 1.0, rev 0, caps <01e021a1/00000000>, SDMA,
33000 kHz, HS 3.3V, 512 byte blocks
[ 1.000004] sdmmc0 at sdhc0 slot 0
[ 1.000004] cbb0: cacheline 0x8 lattimer 0x40
[ 1.000004] cbb0: bhlc 0x824008
[ 1.000004] cbb0: autoconfiguration error: secondary bus number
uninitialized; try PCI_BUS_FIXUP
[ 1.000004] pci_intr_map: no mapping for pin A (line=ff)
[ 1.000004] cbb0: autoconfiguration error: couldn't map interrupt
[ 1.000004] cardslot0 at cbb0
[ 1.000004] pcmcia0 at cardslot0
[ 1.000004] auich0 at pci0 dev 30 function 2: i82801FB (ICH6) AC-97
Audio
[ 1.000004] auich0: interrupting at irq 5
[ 1.000004] auich0: ac97: Avance Logic unknown (0x414c4752) codec;
headphone, 20 bit DAC, 18 bit ADC, no 3D stereo
[ 1.000004] auich0: ac97: ext id 0xa07<AC97_23,AMAP,SPDIF,DRA,VRA>
[ 1.000004] Intel 82801FB/FR AC'97 Modem Controller (modem
communications, revision 0x04) at pci0 dev 30 function 3 not configured
[ 1.000004] ichlpcib0 at pci0 dev 31 function 0: Intel 82801FBM
ICH6M LPC Interface Bridge (rev. 0x04)
[ 1.000004] timecounter: Timecounter "ichlpcib0" frequency 3579545
Hz quality 1000
[ 1.006042] ichlpcib0: 24-bit timer
[ 1.006042] tco0 at ichlpcib0: TCO (watchdog) timer configured.
[ 1.006042] tco0: Min/Max interval 1/367 seconds
[ 1.006042] piixide0 at pci0 dev 31 function 1: Intel 82801FB IDE
Controller (ICH6) (rev. 0x04)
[ 1.006042] piixide0: bus-master DMA support present
[ 1.006042] piixide0: primary channel configured to compatibility mode
[ 1.006042] piixide0: primary channel interrupting at irq 14
[ 1.006042] atabus0 at piixide0 channel 0
[ 1.006042] piixide0: secondary channel configured to compatibility mode
[ 1.006042] piixide0: secondary channel interrupting at irq 15
[ 1.006042] atabus1 at piixide0 channel 1
[ 1.006042] ichsmb0 at pci0 dev 31 function 3: Intel 82801FB/FR
SMBus Controller (rev. 0x04)
[ 1.006042] ichsmb0: interrupting at irq 3
[ 1.006042] iic0 at ichsmb0: I2C bus
[ 1.006042] isa0 at ichlpcib0
[ 1.006042] pckbc0 at isa0 port 0x60-0x64
[ 1.006042] pckbd0 at pckbc0 (kbd slot)
[ 1.006042] pckbc0: using irq 1 for kbd slot
[ 1.006042] wskbd0 at pckbd0: console keyboard
[ 1.006042] pms0 at pckbc0 (aux slot)
[ 1.006042] pms0: ALPS PS/2 V2 pointing device
[ 1.006042] pckbc0: using irq 12 for aux slot
[ 1.006042] wsmouse0 at pms0 mux 0
[ 1.006042] attimer0 at isa0 port 0x40-0x43
[ 1.006042] pcppi0 at isa0 port 0x61
[ 1.006042] midi0 at pcppi0: PC speaker
[ 1.006042] sysbeep0 at pcppi0
[ 1.006042] attimer0: attached to pcppi0
[ 1.006042] est0 at cpu0: Enhanced SpeedStep
[ 1.006042] fwohci0: BUS reset
[ 1.006042] fwohci0: node_id=0xc000ffc0, gen=1, CYCLEMASTER mode
[ 1.006042] ieee1394if0: 1 nodes, maxhop <= 0 cable IRM irm(0) (me)
[ 1.006042] ieee1394if0: bus manager 0
[ 1.241923] timecounter: Timecounter "clockinterrupt" frequency 100
Hz quality 0
[ 1.573274] auich0: measured ac97 link rate at 48000 Hz
[ 1.573274] audio0 at auich0: playback, capture, full duplex,
independent
[ 1.573274] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms)
for playback
[ 1.573274] audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms)
for recording
[ 1.573274] uhub0 at usb0: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.573274] uhub0: 2 ports with 2 removable, self powered
[ 1.573274] uhub1 at usb1: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.573274] uhub1: 2 ports with 2 removable, self powered
[ 1.573274] uhub2 at usb2: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.573274] uhub2: 2 ports with 2 removable, self powered
[ 1.573274] uhub3 at usb3: NetBSD (0x0000) UHCI root hub (0x0000),
class 9/0, rev 1.00/1.00, addr 1
[ 1.573274] uhub3: 2 ports with 2 removable, self powered
[ 1.573274] uhub4 at usb4: NetBSD (0x0000) EHCI root hub (0x0000),
class 9/0, rev 2.00/1.00, addr 1
[ 1.583299] uhub4: 8 ports with 8 removable, self powered
[ 1.583299] IPsec: Initialized Security Association Processing.
[ 1.593275] atapibus0 at atabus0: 2 targets
[ 1.683275] cd0 at atapibus0 drive 1: <TSSTcorpCD/DVDW TS-L632B,
95WK401090, TI33> cdrom removable
[ 1.683275] cd0: 32-bit data port
[ 1.683275] cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA
mode 2 (Ultra/33)
[ 1.693276] wd0 at atabus0 drive 0
[ 1.693276] wd0: <IC25N080ATMR04-0>
[ 1.693276] wd0: drive supports 16-sector PIO transfers, LBA48
addressing
[ 1.693276] wd0: 76319 MB, 155061 cyl, 16 head, 63 sec, 512
bytes/sect x 156301488 sectors
[ 2.103282] wd0: 32-bit data port
[ 2.103282] wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA
mode 5 (Ultra/100)
[ 2.103282] wd0(piixide0:0:0): using PIO mode 4, Ultra-DMA mode 5
(Ultra/100) (using DMA)
[ 2.103282] cd0(piixide0:0:1): using PIO mode 4, Ultra-DMA mode 2
(Ultra/33) (using DMA)
[ 2.103282] swwdog0: software watchdog initialized
[ 2.143282] WARNING: 2 errors while detecting hardware; check system
log.
[ 2.143282] boot device: wd0
[ 2.143282] root on wd0a dumps on wd0b
[ 2.183283] root file system type: ffs
[ 2.183283] kern.module.path=/stand/i386/10.0/modules
[ 2.193289] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 2.193289] [drm] Driver supports precise vblank timestamp query.
[ 2.193289] i915drmkms0: interrupting at irq 11 (i915drmkms0)
[ 2.213284] [drm] Initialized overlay support.
[ 2.213284] [drm] Initialized i915 1.6.0 20200114 for i915drmkms0 on
minor 0
[ 2.363286] intelfb0 at i915drmkms0
[ 2.363286] [drm] DRM_I915_DEBUG enabled
[ 2.363286] [drm] DRM_I915_DEBUG_GEM enabled
[ 2.363286] intelfb0: framebuffer at 0xa0009000, size 1280x800,
depth 32, stride 5120
[ 2.943296] wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100
emulation), using wskbd0
[ 2.957024] wsmux1: connecting to wsdisplay0
[ 17.173515] wsdisplay0: screen 1 added (default, vt100 emulation)
[ 17.173515] wsdisplay0: screen 2 added (default, vt100 emulation)
[ 17.173515] wsdisplay0: screen 3 added (default, vt100 emulation)
[ 17.173515] wsdisplay0: screen 4 added (default, vt100 emulation)
[ 60.224927] bus_dmamem_kmap: t=0xc147d8c0 segs=0xc5c6ba34 nsegs=1
size=0x4000 kvap=0xdcbeead0 flags=0x4
[ 60.224927] bus_dmamem_kmap: va=db5b4000
[ 60.224927] bus_dmamem_kmap:70 size=0x0 curseg=0 addr=0x4b2b8000
len=0x4000 end=0x4b2bc000
[ 60.224927] bus_dmamem_kmap:78: size=0x0 addr=0x4b2b8000panic:
_bus_dmamem_kmap: size botch
[ 60.224927] cpu0: Begin traceback...
[ 60.224927]
vpanic(c12146cd,dcbeea90,dcbeeae4,c06cff50,c12146cd,c10867c0,4e,0,4b2b8000,4b2b8000)
at netbsd:vpanic+0x196
[ 60.224927]
panic(c12146cd,c10867c0,4e,0,4b2b8000,4b2b8000,4000,4b2bc000,c5c6ba5c,0)
at netbsd:panic+0x18
[ 60.224927]
i915_gem_object_get_pages_phys(c5c6b900,1,2,c4353004,c4348804,c434a084,c4353000,c521cc44,c48ac404,1)
at netbsd:i915_gem_object_get_pages_phys+0x5d0
[ 60.234933]
i915_gem_object_attach_phys(c5c6b900,1000,c0af8784,c3dfd004,c5c6b900,c5c6ba18,dcbeeb6c,c0673d15,c5c6ba18,1)
at netbsd:i915_gem_object_attach_phys+0xb4
[ 60.234933]
intel_plane_pin_fb(c5c6ba18,1,2,c0b2f988,c4352010,c4353000,c3dfd004,c5bb5804,c4352004,c5bb5804)
at netbsd:intel_plane_pin_fb+0x62
[ 60.234933]
intel_prepare_plane_fb(c434a084,c521cc44,c3dff878,10001,c5bb5804,c4353004,c3dff878,dcbeebb8,c066abaf,c3dfd004)
at netbsd:intel_prepare_plane_fb+0xcf
[ 60.234933]
drm_atomic_helper_prepare_planes(c3dfd004,c5bb5804,1,c5bb5d64,0,c5bb5804,c3dfd004,c521cc44,dcbeebd4,c0af8b85)
at netbsd:drm_atomic_helper_prepare_planes+0x7a
[ 60.234933]
intel_atomic_commit(c3dfd004,c5bb5804,0,c434a084,c5bb5804,dcbeebfc,c0afdf50,c5bb5804,c48ac404,40)
at netbsd:intel_atomic_commit+0x9c
[ 60.234933]
drm_atomic_commit(c5bb5804,c48ac404,40,0,400000,c434a084,c48ac404,18f,dcbeec64,c0b2b474)
at netbsd:drm_atomic_commit+0x52
[ 60.244929]
drm_atomic_helper_update_plane(c434a084,c4348804,c48ac404,27f,18f,40,40,0,0,400000)
at netbsd:drm_atomic_helper_update_plane+0xd9
[ 60.244929]
__setplane_atomic(27f,18f,40,40,0,0,400000,400000,dcbeecb8,400000) at
netbsd:__setplane_atomic+0x10b
[ 60.244929]
drm_mode_cursor_common(3,2c,27f,18f,40,40,b,0,0,dcbeee54) at
netbsd:drm_mode_cursor_common+0x261
[ 60.244929]
drm_mode_cursor_ioctl(c3dfd004,dcbeeeac,c4e67a04,dcbeedc4,1c,dcbeeeac,63,dcbeedc4,c3dfd360,c4e67a04)
at netbsd:drm_mode_cursor_ioctl+0x4e
[ 60.244929]
drm_ioctl(c5bcc8c0,c01c64a3,dcbeeeac,dcbeef38,c0cc9947,c5bcc8c0,c01c64a3,dcbeeeac,c0c45497,c429dd24)
at netbsd:drm_ioctl+0x42d
[ 60.254928]
drm_ioctl_shim(c5bcc8c0,c01c64a3,dcbeeeac,c0c45497,c429dd24,dcbeef10,0,c5c26078,c5bcc8c0,0)
at netbsd:drm_ioctl_shim+0x43
[ 60.254928]
sys_ioctl(c4361940,dcbeef68,dcbeef60,c51a1500,0,36,dcbeef60,dcbeef68,0,0)
at netbsd:sys_ioctl+0x35b
[ 60.254928] syscall() at netbsd:syscall+0x1d6
[ 60.254928] --- syscall (number 54) ---
[ 60.254928] b1833dc7:
[ 60.254928] cpu0: End traceback...
[ 60.254928] dumping to dev 0,1 offset 1023
[ 60.254928] dump
netbsd-compal#
netbsd-compal# gdb /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb
GNU gdb (GDB) 11.0.50.20200914-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i486--netbsdelf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/src/sys/arch/i386/compile/MYKERNEL/netbsd.gdb...
(gdb) target kvm /var/crash/netbsd.10.core
0xc012d6ed in maybe_dump (howto=260) at
../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) frame 0
#0 0xc012d6ed in maybe_dump (howto=260) at
../../../../arch/i386/i386/machdep.c:725
725 dumpsys();
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
s = 0
s = <optimized out>
(gdb) frame 1
#1 cpu_reboot (howto=howto@entry=260, bootstr=bootstr@entry=0x0)
at ../../../../arch/i386/i386/machdep.c:746
746 maybe_dump(howto);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
syncdone = false
s = 0
(gdb) frame 2
#2 0xc0c85eb7 in kern_reboot (howto=howto@entry=260,
bootstr=bootstr@entry=0x0)
at ../../../../kern/kern_reboot.c:73
73 cpu_reboot(howto, bootstr);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
rebooter = 0xc4361940
l = 0x0
(gdb) frame 3
#3 0xc0cbca78 in vpanic (fmt=fmt@entry=0xc12146cd "_bus_dmamem_kmap:
size botch",
ap=0xdcbeea90 "\300g\b\301N") at ../../../../kern/subr_prf.c:291
291 kern_reboot(bootopt, NULL);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
cii = <optimized out>
ci = <optimized out>
oci = <optimized out>
bootopt = 260
scratchstr = "_bus_dmamem_kmap: size botch", '\000' <repeats 355 times>
(gdb) frame 4
#4 0xc0cbcb31 in panic (fmt=fmt@entry=0xc12146cd "_bus_dmamem_kmap:
size botch")
at ../../../../kern/subr_prf.c:208
208 vpanic(fmt, ap);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
ap = 0xdcbeea90 "\300g\b\301N"
(gdb) frame 5
#5 0xc06cff50 in bus_dmamem_kmap (nsegs=1, flags=4, kvap=0xdcbeead0,
size=0, segs=0xc5c6ba34,
t=0xc147d8c0 <pci_bus_dma_tag>)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:80
80 panic("_bus_dmamem_kmap: size botch");
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
kmflags = 0
pmapflags = 19
va = 3680190464
addr = 1261142016
curseg = 0
va = <optimized out>
addr = <optimized out>
curseg = <optimized out>
kmflags = <optimized out>
pmapflags = <optimized out>
__func__ = "bus_dmamem_kmap"
(gdb) print segs[0]
$1 = {ds_addr = 1261142016, ds_len = 16384}
(gdb) frame 6
#6 i915_gem_object_get_pages_phys (obj=0xc5c6b900)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:160
160 ret = -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
(gdb) print *obj
$2 = {base = {refcount = {kr_count = 3}, handle_count = 1, dev =
0xc3dfd004, filp = 0xc5c72b80,
gemo_uvmobj = {vmobjlock = 0xc5cb4900, pgops = 0xc1086780
<i915_gem_uvm_ops>, uo_npages = 0,
uo_refs = 1, uo_pages = {t_root = 0x0, t_height = 0}, uo_ubc =
{lh_first = 0x0}}, vma_node = {
von_lock = {rw_owner = 0}, von_startpage = 0, von_npages = 0,
von_files = {
rbt_root = 0xc519c8e4, rbt_ops = 0xc11480ec
<drm_vma_file_rb_ops>, rbt_minmax = {0xc519c8e4,
0xc519c8e4}}, von_rb_node = {rb_nodes = {0x0, 0x0}, rb_info =
0}, readonly = false},
size = 16384, name = 0, dma_buf = 0x0, import_attach = 0x0, resv =
0xc5c6b96c, _resv = {lock = {
wwm_state = 0 '\000', wwm_debug = false, wwm_u = {owner = 0x0,
ctx = 0x0}, wwm_lock = {u = {
mtxa_owner = 1537, s = {mtxs_dummy = 1 '\001', mtxs_ipl =
{_ipl = 6 '\006'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}},
wwm_class = 0xc14d1cc0 <linux_reservation_ww_class>,
wwm_waiters = {rbt_root = 0x0,
rbt_ops = 0xc117b290 <ww_acquire_ctx_rb_ops>, rbt_minmax =
{0x0, 0x0}}, wwm_cv = {
cv_opaque = {0x0, 0xc1276994}}}, seq = {sqc_gen = 0},
fence_excl = 0x0, fence = 0x0,
robj_prealloc = 0x0}, funcs = 0x0}, ops = 0xc10867e0
<i915_gem_phys_ops>, vma = {lock = {
sl_lock = {u = {mtxa_owner = 1537, s = {mtxs_dummy = 1 '\001',
mtxs_ipl = {_ipl = 6 '\006'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}}}, list =
{prev = 0xc4355f80,
next = 0xc4355f80}, tree = {rbr_tree = {rbt_root = 0xc4355f88,
rbt_ops = 0xc10903fc <vma_tree_rb_ops>, rbt_minmax =
{0xc4355f88, 0xc4355f88}}}}, lut_list = {
prev = 0xc5c6b9c8, next = 0xc5c6b9c8}, stolen = 0x0, {rcu = {rcuh_u
= {callback = 0x0, obj = 0x0},
rcuh_next = 0x0}, freed = {next = 0x0}}, userfault_count = 0,
userfault_link = {prev = 0x2,
next = 0x1}, mmo = {lock = {sl_lock = {u = {mtxa_owner = 1537, s =
{mtxs_dummy = 1 '\001',
mtxs_ipl = {_ipl = 6 '\006'}, mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}, offsets = {
0xc5c26044, 0x0, 0x0, 0x0}}, flags = 0, cache_level = 0,
cache_coherent = 0, cache_dirty = 0,
read_domains = 64, write_domain = 64, frontbuffer = 0xc5c26e44,
tiling_and_stride = 0, bind_count = {
a_u = {au_int = 0, au_uint = 0}}, mm = {lock = {mtx_lock = {u =
{mtxa_owner = 3291879744, s = {
--Type <RET> for more, q to quit, c to continue without paging--
mtxs_dummy = 64 '@', mtxs_ipl = {_ipl = 25 '\031'},
mtxs_lock = 54 '6',
mtxs_unused = 196 '\304'}}}}, pages_pin_count = {a_u =
{au_int = 1, au_uint = 1}},
shrink_pin = {a_u = {au_int = 1, au_uint = 1}}, region =
0xc4290f04, blocks = {prev = 0xc5c6ba24,
next = 0xc5c6ba24}, region_link = {prev = 0xc4290fe0, next =
0xc5c6b86c}, u = {internal = {
segs = 0x4b2b8000, nsegs = 16384, rsegs = 0}, phys = {seg =
{ds_addr = 1261142016,
ds_len = 16384}, kva = 0x0}}, pages = 0x0, mapping = 0x0,
page_sizes = {phys = 0, sg = 0,
gtt = 0}, get_page = {sg_pos = 0x0, sg_idx = 0, radix = {rtr_tree
= {t_root = 0x0,
t_height = 0}, rtr_lock = 0 '\000'}, lock = {mtx_lock = {u =
{mtxa_owner = 0, s = {
mtxs_dummy = 0 '\000', mtxs_ipl = {_ipl = 0 '\000'},
mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}}, link = {prev = 0xc5c6ba6c,
next = 0xc5c6ba6c}, madv = 0,
dirty = true, quirked = false}, bit_17 = 0x0, {userptr = {ptr = 0,
mm = 0x0, mmu_object = 0x0,
work = 0x0}, scratch = 0, gvt_info = 0x0}}
(gdb) info locals
mapping = 0xc5c72b80
sg = <optimized out>
st = <optimized out>
dma = <optimized out>
vaddr = 0xdb5b4000
dst = <optimized out>
i = <optimized out>
dmat = 0xc147d8c0 <pci_bus_dma_tag>
loaded = false
rsegs = 1
ret = <optimized out>
(gdb) frame 7
#7 0xc06d006d in i915_gem_object_attach_phys (obj=0xc5c6b900, align=4096)
at ../../../../external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:392
392 err = ____i915_gem_object_get_pages(obj);
(gdb) print *obj
$3 = {base = {refcount = {kr_count = 3}, handle_count = 1, dev =
0xc3dfd004, filp = 0xc5c72b80,
gemo_uvmobj = {vmobjlock = 0xc5cb4900, pgops = 0xc1086780
<i915_gem_uvm_ops>, uo_npages = 0,
uo_refs = 1, uo_pages = {t_root = 0x0, t_height = 0}, uo_ubc =
{lh_first = 0x0}}, vma_node = {
von_lock = {rw_owner = 0}, von_startpage = 0, von_npages = 0,
von_files = {
rbt_root = 0xc519c8e4, rbt_ops = 0xc11480ec
<drm_vma_file_rb_ops>, rbt_minmax = {0xc519c8e4,
0xc519c8e4}}, von_rb_node = {rb_nodes = {0x0, 0x0}, rb_info =
0}, readonly = false},
size = 16384, name = 0, dma_buf = 0x0, import_attach = 0x0, resv =
0xc5c6b96c, _resv = {lock = {
wwm_state = 0 '\000', wwm_debug = false, wwm_u = {owner = 0x0,
ctx = 0x0}, wwm_lock = {u = {
mtxa_owner = 1537, s = {mtxs_dummy = 1 '\001', mtxs_ipl =
{_ipl = 6 '\006'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}},
wwm_class = 0xc14d1cc0 <linux_reservation_ww_class>,
wwm_waiters = {rbt_root = 0x0,
rbt_ops = 0xc117b290 <ww_acquire_ctx_rb_ops>, rbt_minmax =
{0x0, 0x0}}, wwm_cv = {
cv_opaque = {0x0, 0xc1276994}}}, seq = {sqc_gen = 0},
fence_excl = 0x0, fence = 0x0,
robj_prealloc = 0x0}, funcs = 0x0}, ops = 0xc10867e0
<i915_gem_phys_ops>, vma = {lock = {
sl_lock = {u = {mtxa_owner = 1537, s = {mtxs_dummy = 1 '\001',
mtxs_ipl = {_ipl = 6 '\006'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}}}, list =
{prev = 0xc4355f80,
next = 0xc4355f80}, tree = {rbr_tree = {rbt_root = 0xc4355f88,
rbt_ops = 0xc10903fc <vma_tree_rb_ops>, rbt_minmax =
{0xc4355f88, 0xc4355f88}}}}, lut_list = {
prev = 0xc5c6b9c8, next = 0xc5c6b9c8}, stolen = 0x0, {rcu = {rcuh_u
= {callback = 0x0, obj = 0x0},
rcuh_next = 0x0}, freed = {next = 0x0}}, userfault_count = 0,
userfault_link = {prev = 0x2,
next = 0x1}, mmo = {lock = {sl_lock = {u = {mtxa_owner = 1537, s =
{mtxs_dummy = 1 '\001',
mtxs_ipl = {_ipl = 6 '\006'}, mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}, offsets = {
0xc5c26044, 0x0, 0x0, 0x0}}, flags = 0, cache_level = 0,
cache_coherent = 0, cache_dirty = 0,
read_domains = 64, write_domain = 64, frontbuffer = 0xc5c26e44,
tiling_and_stride = 0, bind_count = {
a_u = {au_int = 0, au_uint = 0}}, mm = {lock = {mtx_lock = {u =
{mtxa_owner = 3291879744, s = {
--Type <RET> for more, q to quit, c to continue without paging--
mtxs_dummy = 64 '@', mtxs_ipl = {_ipl = 25 '\031'},
mtxs_lock = 54 '6',
mtxs_unused = 196 '\304'}}}}, pages_pin_count = {a_u =
{au_int = 1, au_uint = 1}},
shrink_pin = {a_u = {au_int = 1, au_uint = 1}}, region =
0xc4290f04, blocks = {prev = 0xc5c6ba24,
next = 0xc5c6ba24}, region_link = {prev = 0xc4290fe0, next =
0xc5c6b86c}, u = {internal = {
segs = 0x4b2b8000, nsegs = 16384, rsegs = 0}, phys = {seg =
{ds_addr = 1261142016,
ds_len = 16384}, kva = 0x0}}, pages = 0x0, mapping = 0x0,
page_sizes = {phys = 0, sg = 0,
gtt = 0}, get_page = {sg_pos = 0x0, sg_idx = 0, radix = {rtr_tree
= {t_root = 0x0,
t_height = 0}, rtr_lock = 0 '\000'}, lock = {mtx_lock = {u =
{mtxa_owner = 0, s = {
mtxs_dummy = 0 '\000', mtxs_ipl = {_ipl = 0 '\000'},
mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}}, link = {prev = 0xc5c6ba6c,
next = 0xc5c6ba6c}, madv = 0,
dirty = true, quirked = false}, bit_17 = 0x0, {userptr = {ptr = 0,
mm = 0x0, mmu_object = 0x0,
work = 0x0}, scratch = 0, gvt_info = 0x0}}
(gdb) info locals
pages = 0xc5c6e524
err = <optimized out>
(gdb) frame 8
#8 0xc06653cb in intel_plane_pin_fb
(plane_state=plane_state@entry=0xc521cc44)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15729
15729 err = i915_gem_object_attach_phys(obj, align);
(gdb) print *obj
value has been optimized out
(gdb) info locals
obj = <optimized out>
align = <optimized out>
err = <optimized out>
plane = <optimized out>
dev_priv = <optimized out>
fb = 0xc48ac404
vma = <optimized out>
(gdb) frame 9
#9 0xc0673d15 in intel_prepare_plane_fb (plane=0xc434a084,
_new_plane_state=0xc521cc44)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15832
15832 ret = intel_plane_pin_fb(new_plane_state);
(gdb) print *obj
$4 = {base = {refcount = {kr_count = 3}, handle_count = 1, dev =
0xc3dfd004, filp = 0xc5c72b80,
gemo_uvmobj = {vmobjlock = 0xc5cb4900, pgops = 0xc1086780
<i915_gem_uvm_ops>, uo_npages = 0,
uo_refs = 1, uo_pages = {t_root = 0x0, t_height = 0}, uo_ubc =
{lh_first = 0x0}}, vma_node = {
von_lock = {rw_owner = 0}, von_startpage = 0, von_npages = 0,
von_files = {
rbt_root = 0xc519c8e4, rbt_ops = 0xc11480ec
<drm_vma_file_rb_ops>, rbt_minmax = {0xc519c8e4,
0xc519c8e4}}, von_rb_node = {rb_nodes = {0x0, 0x0}, rb_info =
0}, readonly = false},
size = 16384, name = 0, dma_buf = 0x0, import_attach = 0x0, resv =
0xc5c6b96c, _resv = {lock = {
wwm_state = 0 '\000', wwm_debug = false, wwm_u = {owner = 0x0,
ctx = 0x0}, wwm_lock = {u = {
mtxa_owner = 1537, s = {mtxs_dummy = 1 '\001', mtxs_ipl =
{_ipl = 6 '\006'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}},
wwm_class = 0xc14d1cc0 <linux_reservation_ww_class>,
wwm_waiters = {rbt_root = 0x0,
rbt_ops = 0xc117b290 <ww_acquire_ctx_rb_ops>, rbt_minmax =
{0x0, 0x0}}, wwm_cv = {
cv_opaque = {0x0, 0xc1276994}}}, seq = {sqc_gen = 0},
fence_excl = 0x0, fence = 0x0,
robj_prealloc = 0x0}, funcs = 0x0}, ops = 0xc10867e0
<i915_gem_phys_ops>, vma = {lock = {
sl_lock = {u = {mtxa_owner = 1537, s = {mtxs_dummy = 1 '\001',
mtxs_ipl = {_ipl = 6 '\006'},
mtxs_lock = 0 '\000', mtxs_unused = 0 '\000'}}}}, list =
{prev = 0xc4355f80,
next = 0xc4355f80}, tree = {rbr_tree = {rbt_root = 0xc4355f88,
rbt_ops = 0xc10903fc <vma_tree_rb_ops>, rbt_minmax =
{0xc4355f88, 0xc4355f88}}}}, lut_list = {
prev = 0xc5c6b9c8, next = 0xc5c6b9c8}, stolen = 0x0, {rcu = {rcuh_u
= {callback = 0x0, obj = 0x0},
rcuh_next = 0x0}, freed = {next = 0x0}}, userfault_count = 0,
userfault_link = {prev = 0x2,
next = 0x1}, mmo = {lock = {sl_lock = {u = {mtxa_owner = 1537, s =
{mtxs_dummy = 1 '\001',
mtxs_ipl = {_ipl = 6 '\006'}, mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}, offsets = {
0xc5c26044, 0x0, 0x0, 0x0}}, flags = 0, cache_level = 0,
cache_coherent = 0, cache_dirty = 0,
read_domains = 64, write_domain = 64, frontbuffer = 0xc5c26e44,
tiling_and_stride = 0, bind_count = {
a_u = {au_int = 0, au_uint = 0}}, mm = {lock = {mtx_lock = {u =
{mtxa_owner = 3291879744, s = {
--Type <RET> for more, q to quit, c to continue without paging--
mtxs_dummy = 64 '@', mtxs_ipl = {_ipl = 25 '\031'},
mtxs_lock = 54 '6',
mtxs_unused = 196 '\304'}}}}, pages_pin_count = {a_u =
{au_int = 1, au_uint = 1}},
shrink_pin = {a_u = {au_int = 1, au_uint = 1}}, region =
0xc4290f04, blocks = {prev = 0xc5c6ba24,
next = 0xc5c6ba24}, region_link = {prev = 0xc4290fe0, next =
0xc5c6b86c}, u = {internal = {
segs = 0x4b2b8000, nsegs = 16384, rsegs = 0}, phys = {seg =
{ds_addr = 1261142016,
ds_len = 16384}, kva = 0x0}}, pages = 0x0, mapping = 0x0,
page_sizes = {phys = 0, sg = 0,
gtt = 0}, get_page = {sg_pos = 0x0, sg_idx = 0, radix = {rtr_tree
= {t_root = 0x0,
t_height = 0}, rtr_lock = 0 '\000'}, lock = {mtx_lock = {u =
{mtxa_owner = 0, s = {
mtxs_dummy = 0 '\000', mtxs_ipl = {_ipl = 0 '\000'},
mtxs_lock = 0 '\000',
mtxs_unused = 0 '\000'}}}}}, link = {prev = 0xc5c6ba6c,
next = 0xc5c6ba6c}, madv = 0,
dirty = true, quirked = false}, bit_17 = 0x0, {userptr = {ptr = 0,
mm = 0x0, mmu_object = 0x0,
work = 0x0}, scratch = 0, gvt_info = 0x0}}
(gdb) info locals
new_plane_state = 0xc521cc44
intel_state = 0xc5bb5804
dev_priv = 0xc3dfd004
fb = <optimized out>
obj = 0xc5c6b900
old_obj = <optimized out>
ret = <optimized out>
(gdb) frame 10
#10 0xc0afce78 in drm_atomic_helper_prepare_planes (dev=<optimized out>,
state=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2399
2399 ret = funcs->prepare_fb(plane, new_plane_state);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
funcs = <optimized out>
connector = <optimized out>
new_plane_state = <optimized out>
ret = <optimized out>
i = 3
new_conn_state = <optimized out>
plane = <optimized out>
j = <optimized out>
connector = <optimized out>
new_conn_state = <optimized out>
plane = <optimized out>
new_plane_state = <optimized out>
ret = <optimized out>
i = <optimized out>
j = <optimized out>
fail = <optimized out>
funcs = <optimized out>
funcs = <optimized out>
(gdb) frame 11
#11 drm_atomic_helper_prepare_planes (dev=0xc3dfd004,
state=state@entry=0xc5bb5804)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2375
2375 int drm_atomic_helper_prepare_planes(struct drm_device *dev,
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
connector = <optimized out>
new_conn_state = <optimized out>
plane = <optimized out>
new_plane_state = <optimized out>
ret = <optimized out>
i = <optimized out>
j = <optimized out>
fail = <optimized out>
funcs = <optimized out>
funcs = <optimized out>
(gdb) frame 12
#12 0xc066abaf in intel_atomic_prepare_commit (state=0xc5bb5804)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:14760
14760 return drm_atomic_helper_prepare_planes(state->base.dev,
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
No locals.
(gdb) frame 13
#13 intel_atomic_commit (dev=0xc3dfd004, _state=0xc5bb5804, nonblock=false)
at
../../../../external/bsd/drm2/dist/drm/i915/display/intel_display.c:15595
15595 ret = intel_atomic_prepare_commit(state);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
state = 0xc5bb5804
dev_priv = 0xc3dfd004
ret = 0
(gdb) frame 14
#14 0xc0af8b85 in drm_atomic_commit (state=state@entry=0xc5bb5804)
at ../../../../external/bsd/drm2/dist/drm/drm_atomic.c:1238
1238 return config->funcs->atomic_commit(state->dev, state, false);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
config = 0xc3dfd0c8
ret = <optimized out>
(gdb) frame 15
#15 0xc0afdf50 in drm_atomic_helper_update_plane (plane=0xc434a084,
crtc=0xc4348804, fb=0xc48ac404,
crtc_x=639, crtc_y=399, crtc_w=64, crtc_h=64, src_x=0, src_y=0,
src_w=4194304, src_h=4194304,
ctx=0xdcbeecb8) at
../../../../external/bsd/drm2/dist/drm/drm_atomic_helper.c:2910
2910 ret = drm_atomic_commit(state);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
state = 0xc5bb5804
plane_state = 0xc521cc44
ret = 0
(gdb) frame 16
#16 0xc0b2b474 in __setplane_atomic (plane=plane@entry=0xc434a084,
crtc=crtc@entry=0xc4348804,
fb=fb@entry=0xc48ac404, crtc_x=crtc_x@entry=639,
crtc_y=crtc_y@entry=399, crtc_w=64, crtc_h=64,
src_x=src_x@entry=0, src_y=src_y@entry=0,
src_w=src_w@entry=4194304, src_h=src_h@entry=4194304,
ctx=ctx@entry=0xdcbeecb8) at
../../../../external/bsd/drm2/dist/drm/drm_plane.c:761
761 return plane->funcs->update_plane(plane, crtc, fb,
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
ret = <optimized out>
(gdb) frame 17
#17 0xc0b2b8ad in drm_mode_cursor_universal (ctx=0xdcbeecb8,
file_priv=0xc4e67a04, req=0xdcbeed64,
crtc=0xc4348804) at
../../../../external/bsd/drm2/dist/drm/drm_plane.c:914
914 ret = __setplane_atomic(plane, crtc, fb,
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
plane = 0xc434a084
fbreq = {fb_id = 0, width = 64, height = 64, pixel_format = 875713089,
flags = 0, handles = {11, 0, 0,
0}, pitches = {256, 0, 0, 0}, offsets = {0, 0, 0, 0}, modifier =
{0, 0, 0, 0}}
crtc_x = 639
crtc_y = 399
src_w = 4194304
src_h = 4194304
ret = 0
dev = 0xc3dfd004
fb = 0xc48ac404
crtc_w = <optimized out>
crtc_h = <optimized out>
dev = <optimized out>
plane = <optimized out>
fb = <optimized out>
fbreq = {fb_id = <optimized out>, width = <optimized out>, height =
<optimized out>,
pixel_format = <optimized out>, flags = <optimized out>, handles =
{<optimized out>,
<optimized out>, <optimized out>, <optimized out>}, pitches =
{<optimized out>, <optimized out>,
<optimized out>, <optimized out>}, offsets = {<optimized out>,
<optimized out>, <optimized out>,
<optimized out>}, modifier = {<optimized out>, <optimized out>,
<optimized out>, <optimized out>}}
crtc_x = <optimized out>
crtc_y = <optimized out>
crtc_w = <optimized out>
crtc_h = <optimized out>
src_w = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
src_h = <optimized out>
ret = <optimized out>
(gdb) frame 18
#18 drm_mode_cursor_common (dev=dev@entry=0xc3dfd004,
req=req@entry=0xdcbeed64,
file_priv=file_priv@entry=0xc4e67a04) at
../../../../external/bsd/drm2/dist/drm/drm_plane.c:973
973 ret = drm_mode_cursor_universal(crtc, req, file_priv, &ctx);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
crtc = 0xc4348804
ctx = {ww_ctx = {wwx_class = 0xc14ab70c <crtc_ww_class>, wwx_owner =
0xc4361940, wwx_ticket = 35,
wwx_acquired = 2, wwx_acquire_done = false, wwx_rb_node = {rb_nodes
= {0x0, 0x0}, rb_info = 0}},
contended = 0x0, locked = {prev = 0xc4348840, next = 0xc434a0bc},
trylock_only = false,
interruptible = true}
ret = <optimized out>
(gdb) frame 19
#19 0xc0b2befb in drm_mode_cursor_ioctl (dev=0xc3dfd004,
data=0xdcbeeeac, file_priv=0xc4e67a04)
at ../../../../external/bsd/drm2/dist/drm/drm_plane.c:1023
1023 return drm_mode_cursor_common(dev, &new_req, file_priv);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
req = 0xdcbeeeac
new_req = {flags = 3, crtc_id = 44, x = 639, y = 399, width = 64, height
= 64, handle = 11, hot_x = 0,
hot_y = 0}
(gdb) frame 20
#20 0xc0b23c8c in drm_ioctl (fp=<optimized out>, cmd=<optimized out>,
data=<optimized out>)
at ../../../../external/bsd/drm2/dist/drm/drm_ioctl.c:968
968 error = -(*ioctl->func)(dev, data0, file);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
stackbuf =
"B\000\000\000\300\236\303\305P\335)\304\000\200\302\256\000\000\000\000\000\000\000\000\060\001\000\000\000\000\000\000\000`\302\305\000\000\000\000\000\000\000\001\000\000\000\000\003\000\000\000\000\000\000\000\000V\300\305\001\000\000\000$\335)\304\000`\302\256\000\020\000\000$\335)\304~\004\000\000\200|\307\305\000\020\000\000\002\000\000\000\000`\302\256\001\000\000\000\000\000\000\000\001\000\000\001\003",
'\000' <repeats 11 times>, "\001\000\000"
buf = 0xdcbeedc4 "B"
data0 = 0xdcbeeeac
file = <optimized out>
nr = <optimized out>
error = <optimized out>
dev = 0xc3dfd004
ioctl = <optimized out>
is_driver_ioctl = <optimized out>
(gdb) frame 21
#21 0xc0af1e66 in drm_ioctl_shim (fp=0xc5bcc8c0, cmd=3223086243,
data=0xdcbeeeac)
at ../../../../external/bsd/drm2/drm/drm_cdevsw.c:393
393 error = drm_ioctl(fp, cmd, data);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
file = <optimized out>
driver = <optimized out>
error = <optimized out>
(gdb) frame 22
#22 0xc0cc9947 in sys_ioctl (l=<optimized out>, uap=<optimized out>,
retval=<optimized out>)
at ../../../../kern/sys_generic.c:675
675 error = (*fp->f_ops->fo_ioctl)(fp, com, data);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
fp = <optimized out>
p = <optimized out>
com = <optimized out>
error = <optimized out>
size = <optimized out>
alloc_size = <optimized out>
data = 0xdcbeeeac
memp = 0x0
stkbuf = {3, 44, 639, 399, 64, 64, 11, 262, 3291879744, 2, 3703500700,
3222468089, 3291077924,
2931974144, 2, 0, 0, 1, 3, 1, 3317850232, 3291077924, 0, 2931974144,
2931974144, 3291077924, 0,
3291057344, 3703492608, 3703500712, 0, 0}
(gdb) frame 23
#23 0xc049b4c6 in sy_call (rval=0xdcbeef60, uap=0xdcbeef68,
l=0xc4361940, sy=0xc14ae998 <sysent+1080>)
at ../../../../sys/syscallvar.h:65
65 error = (*sy->sy_call)(l, uap, rval);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
error = <optimized out>
error = <optimized out>
(gdb) frame 24
#24 sy_invoke (code=<optimized out>, rval=0xdcbeef60, uap=0xdcbeef68,
l=0xc4361940,
sy=0xc14ae998 <sysent+1080>) at ../../../../sys/syscallvar.h:94
94 error = sy_call(sy, l, uap, rval);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
do_trace = <optimized out>
error = <optimized out>
do_trace = <optimized out>
error = <optimized out>
(gdb) frame 25
#25 syscall (frame=0xdcbeefa8) at ../../../../arch/x86/x86/syscall.c:138
138 error = sy_invoke(callp, l, args, rval, code);
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
callp = 0xc14ae998 <sysent+1080>
p = <optimized out>
l = 0xc4361940
error = <optimized out>
code = <optimized out>
rval = {0, 0}
args = {10, -1071881053, -1078913788, -1325424640, 10, 0, 281542656, 0,
-1325424640, -1078913908}
(gdb) frame 26
#26 0xc0102230 in Xsyscall ()
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
No symbol table info available.
(gdb) frame 27
#27 0xdcbeefa8 in ?? ()
(gdb) print *obj
No symbol "obj" in current context.
(gdb) info locals
No symbol table info available.
(gdb) frame 28
No frame at level 28.
(gdb)
From: Taylor R Campbell <riastradh@NetBSD.org>
To: Ramiro Aceves <ea1abz@gmail.com>
Cc: "David H. Gutteridge" <david@gutteridge.ca>,
gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org, RVP <rvp@SDF.ORG>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Thu, 18 Jan 2024 22:24:47 +0000
This is a multi-part message in MIME format.
--=_zuuYtksK0C8RJaF9J8AwVVP/KZSlw/L+
OK, I think I found the problem with my patch: a side effect of
Linux's backwards definition of PAGE_MASK from NetBSD's, causing
round_page(size) to return 0 instead of 0x4000 when size=0x4000.
Try this one?
(Posting this again as one giant diff in .diff, and an incremental
git patch series in .patch, in case that's helpful, whichever is
easier for you to deal with.)
--=_zuuYtksK0C8RJaF9J8AwVVP/KZSlw/L+
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages-v6"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages-v6.diff"
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..d0265738e2c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
=20
if (!i915_gem_object_has_pages(obj))
return;
- for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+ for (i =3D 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c b/sys=
/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
index 58075877254a..2bc7b11695ec 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
@@ -42,6 +42,18 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_obj=
ect *obj,
}
=20
#ifndef __NetBSD__
+ /*
+ * Paranoia: In NetBSD, a scatterlist is just an array of
+ * pages, not an array of segments that might be larger than
+ * pages, so the number of entries must exactly match the size
+ * of the object (which should also be page-aligned).
+ *
+ * Both vm_fault_cpu and i915_gem_object_release_mmap_offset in
+ * i915_gem_mman.c rely on this page array as such.
+ */
+ KASSERTMSG(pages->sgl->sg_npgs =3D=3D obj->base.size >> PAGE_SHIFT,
+ "npgs=3D%zu size=3D%zu", pages->sgl->sg_npgs, obj->base.size);
+
obj->mm.get_page.sg_pos =3D pages->sgl;
obj->mm.get_page.sg_idx =3D 0;
#endif
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..257f386695f3 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -9,6 +9,90 @@
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/12/19 12:45:43 rias=
tradh Exp $");
=20
+#ifdef __NetBSD__
+/*
+ * Make sure this block comes before any linux includes, so we don't
+ * get mixed up by the PAGE_MASK complementation.
+ */
+
+#include <sys/bus.h>
+
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+
+#include <machine/pmap_private.h> /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ if (size =3D=3D 0)
+ panic("bus_dmamem_kmap: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+ pt_entry_t *pte, opte;
+ vaddr_t va, sva, eva;
+
+ KASSERTMSG(((uintptr_t)kva & PGOFSET) =3D=3D 0, "kva=3D%p", kva);
+
+ size =3D round_page(size);
+ sva =3D (vaddr_t)kva;
+ eva =3D sva + size;
+
+ /*
+ * mark pages cacheable again.
+ */
+ for (va =3D sva; va < eva; va +=3D PAGE_SIZE) {
+ pte =3D kvtopte(va);
+ opte =3D *pte;
+ if ((opte & PTE_PCD) !=3D 0)
+ pmap_pte_clearbits(pte, PTE_PCD);
+ }
+ pmap_kremove((vaddr_t)kva, size);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
+
#include <linux/highmem.h>
#include <linux/shmem_fs.h>
#include <linux/swap.h>
@@ -65,7 +149,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +167,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
@@ -151,7 +240,7 @@ err_st:
err_pci:
#ifdef __NetBSD__
if (vaddr) {
- bus_dmamem_unmap(dmat, vaddr,
+ bus_dmamem_kunmap(dmat, vaddr,
roundup_pow_of_two(obj->base.size));
}
obj->mm.u.phys.kva =3D NULL;
@@ -225,7 +314,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_obje=
ct *obj,
kfree(pages);
=20
#ifdef __NetBSD__
- bus_dmamem_unmap(dmat, obj->mm.u.phys.kva,
+ bus_dmamem_kunmap(dmat, obj->mm.u.phys.kva,
roundup_pow_of_two(obj->base.size));
obj->mm.u.phys.kva =3D NULL;
bus_dmamem_free(dmat, &obj->mm.u.phys.seg, 1);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..72efd363fdc7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
if (!st)
return -ENOMEM;
=20
+#ifndef __NetBSD__
if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
kfree(st);
return -ENOMEM;
}
+#endif
=20
flags =3D I915_ALLOC_MIN_PAGE_SIZE;
if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,15 +62,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
=20
GEM_BUG_ON(list_empty(blocks));
=20
- sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
- __USE(sg_page_sizes);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
bus_dma_segment_t *segs =3D NULL;
int i =3D 0, nsegs =3D 0;
bool loaded =3D false;
=20
+ sg =3D NULL;
+
list_for_each_entry(block, blocks, link) {
if (nsegs >=3D INT_MAX ||
nsegs >=3D SIZE_MAX/sizeof(segs[0]))
@@ -85,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+ GFP_KERNEL);
+ if (ret)
+ goto err;
+ sg =3D st->sgl;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -106,8 +116,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
kmem_free(segs, nsegs * sizeof(segs[0]));
segs =3D NULL;
=20
- __i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+ sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
+ sg =3D st->sgl;
st->nents =3D 0;
sg_page_sizes =3D 0;
prev_end =3D (resource_size_t)-1;
@@ -145,9 +156,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
sg_page_sizes |=3D sg->length;
sg_mark_end(sg);
i915_sg_trim(st);
+#endif
=20
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
=20
return 0;
=20
@@ -155,6 +166,8 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
err:
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (segs)
kmem_free(segs, nsegs * sizeof(segs[0]));
__intel_memory_region_put_pages_buddy(mem, blocks);
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..1635e57befd7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_device *dev,
if (st =3D=3D NULL)
return ERR_PTR(-ENOMEM);
=20
- if (sg_alloc_table(st, 1, GFP_KERNEL)) {
- kfree(st);
- return ERR_PTR(-ENOMEM);
- }
-
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,19 +542,30 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ sg =3D NULL;
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+ if (ret) {
+ DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+ ret);
+ ret =3D -ENOMEM;
+ goto out;
+ }
+ sg =3D st->sgl;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
- /* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -569,14 +574,23 @@ i915_pages_create_for_stolen(struct drm_device *dev,
}
loaded =3D true;
=20
-out: if (ret) {
+out: kmem_free(seg, nseg * sizeof(seg[0]));
+ if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
- sg_free_table(st);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
+ if (sg)
+ sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
+ if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+ kfree(st);
+ return ERR_PTR(-ENOMEM);
+ }
+
sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
--=_zuuYtksK0C8RJaF9J8AwVVP/KZSlw/L+
Content-Type: text/plain; charset="ISO-8859-1"; name="pr57833-i915gempages-v6"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="pr57833-i915gempages-v6.patch"
From 7fb48cd42a6dc1e58f9c6b27c7853d721d9f96da Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:38:08 +0000
Subject: [PATCH 1/8] i915_gem_region: Reduce diff from upstream a little.
No functional change intended.
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index 1a928988bd5f..e539dc4530dc 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -63,7 +63,6 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_objec=
t *obj)
sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
- __USE(sg_page_sizes);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
bus_dma_segment_t *segs =3D NULL;
int i =3D 0, nsegs =3D 0;
@@ -106,7 +105,7 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
kmem_free(segs, nsegs * sizeof(segs[0]));
segs =3D NULL;
=20
- __i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+ sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
st->nents =3D 0;
sg_page_sizes =3D 0;
@@ -145,9 +144,9 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
sg_page_sizes |=3D sg->length;
sg_mark_end(sg);
i915_sg_trim(st);
+#endif
=20
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
=20
return 0;
=20
From 97510e276148cfc6f223b397704b3d81905f8eb0 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:38:38 +0000
Subject: [PATCH 2/8] i915_gem: Avoid walking off end of sg_pgs.
sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.
Related to PR kern/57833.
XXX pullup-10
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
index 8e592f008ef7..d0265738e2c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset(struct drm_i91=
5_gem_object *obj)
=20
if (!i915_gem_object_has_pages(obj))
return;
- for (i =3D 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+ for (i =3D 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
page =3D obj->mm.pages->sgl->sg_pgs[i];
vm_page =3D &page->p_vmp;
pmap_page_protect(vm_page, VM_PROT_NONE);
From 4fabd36d0f4f0b06ff600d91789c56730a6698a7 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Wed, 17 Jan 2024 01:33:22 +0000
Subject: [PATCH 3/8] i915_gem: Assert page array size.
Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.
Related to PR kern/57833.
XXX pullup-10
---
.../bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c b/sys=
/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
index 58075877254a..2bc7b11695ec 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
@@ -42,6 +42,18 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_obj=
ect *obj,
}
=20
#ifndef __NetBSD__
+ /*
+ * Paranoia: In NetBSD, a scatterlist is just an array of
+ * pages, not an array of segments that might be larger than
+ * pages, so the number of entries must exactly match the size
+ * of the object (which should also be page-aligned).
+ *
+ * Both vm_fault_cpu and i915_gem_object_release_mmap_offset in
+ * i915_gem_mman.c rely on this page array as such.
+ */
+ KASSERTMSG(pages->sgl->sg_npgs =3D=3D obj->base.size >> PAGE_SHIFT,
+ "npgs=3D%zu size=3D%zu", pages->sgl->sg_npgs, obj->base.size);
+
obj->mm.get_page.sg_pos =3D pages->sgl;
obj->mm.get_page.sg_idx =3D 0;
#endif
From b63c51da1202bfbe0a633a72ca9b7e2575dfb3ca Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:49:04 +0000
Subject: [PATCH 4/8] i915_gem_phys: Fill sg_pgs.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.
But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.
So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead. Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.
PR kern/57833: kernel panic on xorg exit
XXX pullup-10
---
.../drm2/dist/drm/i915/gem/i915_gem_phys.c | 95 ++++++++++++++++++-
1 file changed, 92 insertions(+), 3 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c b/sys/=
external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
index 3f68276eea5f..257f386695f3 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
@@ -9,6 +9,90 @@
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/12/19 12:45:43 rias=
tradh Exp $");
=20
+#ifdef __NetBSD__
+/*
+ * Make sure this block comes before any linux includes, so we don't
+ * get mixed up by the PAGE_MASK complementation.
+ */
+
+#include <sys/bus.h>
+
+#include <uvm/uvm.h>
+#include <uvm/uvm_extern.h>
+
+#include <machine/pmap_private.h> /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address. Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs,
+ size_t size, void **kvap, int flags)
+{
+ vaddr_t va;
+ bus_addr_t addr;
+ int curseg;
+ const uvm_flag_t kmflags =3D
+ (flags & BUS_DMA_NOWAIT) !=3D 0 ? UVM_KMF_NOWAIT : 0;
+ u_int pmapflags =3D PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+ size =3D round_page(size);
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |=3D PMAP_NOCACHE;
+
+ va =3D uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+ if (va =3D=3D 0)
+ return ENOMEM;
+
+ *kvap =3D (void *)va;
+
+ for (curseg =3D 0; curseg < nsegs; curseg++) {
+ for (addr =3D segs[curseg].ds_addr;
+ addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+ addr +=3D PAGE_SIZE, va +=3D PAGE_SIZE, size -=3D PAGE_SIZE) {
+ if (size =3D=3D 0)
+ panic("bus_dmamem_kmap: size botch");
+ pmap_kenter_pa(va, addr,
+ VM_PROT_READ | VM_PROT_WRITE,
+ pmapflags);
+ }
+ }
+ pmap_update(pmap_kernel());
+
+ return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+ pt_entry_t *pte, opte;
+ vaddr_t va, sva, eva;
+
+ KASSERTMSG(((uintptr_t)kva & PGOFSET) =3D=3D 0, "kva=3D%p", kva);
+
+ size =3D round_page(size);
+ sva =3D (vaddr_t)kva;
+ eva =3D sva + size;
+
+ /*
+ * mark pages cacheable again.
+ */
+ for (va =3D sva; va < eva; va +=3D PAGE_SIZE) {
+ pte =3D kvtopte(va);
+ opte =3D *pte;
+ if ((opte & PTE_PCD) !=3D 0)
+ pmap_pte_clearbits(pte, PTE_PCD);
+ }
+ pmap_kremove((vaddr_t)kva, size);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
+
#include <linux/highmem.h>
#include <linux/shmem_fs.h>
#include <linux/swap.h>
@@ -65,7 +149,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i91=
5_gem_object *obj)
if (ret)
return -ENOMEM;
KASSERT(rsegs =3D=3D 1);
- ret =3D -bus_dmamem_map(dmat, &obj->mm.u.phys.seg, 1,
+ ret =3D -bus_dmamem_kmap(dmat, &obj->mm.u.phys.seg, 1,
roundup_pow_of_two(obj->base.size), &vaddr,
BUS_DMA_WAITOK|BUS_DMA_COHERENT);
if (ret)
@@ -83,7 +167,12 @@ static int i915_gem_object_get_pages_phys(struct drm_i9=
15_gem_object *obj)
if (!st)
goto err_pci;
=20
+#ifdef __NetBSD__
+ if (sg_alloc_table_from_bus_dmamem(st, dmat, &obj->mm.u.phys.seg, 1,
+ GFP_KERNEL))
+#else
if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
goto err_st;
=20
sg =3D st->sgl;
@@ -151,7 +240,7 @@ err_st:
err_pci:
#ifdef __NetBSD__
if (vaddr) {
- bus_dmamem_unmap(dmat, vaddr,
+ bus_dmamem_kunmap(dmat, vaddr,
roundup_pow_of_two(obj->base.size));
}
obj->mm.u.phys.kva =3D NULL;
@@ -225,7 +314,7 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_obje=
ct *obj,
kfree(pages);
=20
#ifdef __NetBSD__
- bus_dmamem_unmap(dmat, obj->mm.u.phys.kva,
+ bus_dmamem_kunmap(dmat, obj->mm.u.phys.kva,
roundup_pow_of_two(obj->base.size));
obj->mm.u.phys.kva =3D NULL;
bus_dmamem_free(dmat, &obj->mm.u.phys.seg, 1);
From 3229d55123905abf7bc15757d6a6a06e3bac9e8e Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Mon, 15 Jan 2024 22:55:15 +0000
Subject: [PATCH 5/8] i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE
entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work. And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
XXX pullup-10
---
.../bsd/drm2/dist/drm/i915/gem/i915_gem_region.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
index e539dc4530dc..72efd363fdc7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
if (!st)
return -ENOMEM;
=20
+#ifndef __NetBSD__
if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
kfree(st);
return -ENOMEM;
}
+#endif
=20
flags =3D I915_ALLOC_MIN_PAGE_SIZE;
if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,7 +62,6 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_objec=
t *obj)
=20
GEM_BUG_ON(list_empty(blocks));
=20
- sg =3D st->sgl;
#ifdef __NetBSD__
__USE(prev_end);
bus_dma_tag_t dmat =3D obj->base.dev->dmat;
@@ -68,6 +69,8 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_objec=
t *obj)
int i =3D 0, nsegs =3D 0;
bool loaded =3D false;
=20
+ sg =3D NULL;
+
list_for_each_entry(block, blocks, link) {
if (nsegs >=3D INT_MAX ||
nsegs >=3D SIZE_MAX/sizeof(segs[0]))
@@ -84,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obje=
ct *obj)
=20
segs[i].ds_addr =3D mem->region.start + offset;
segs[i].ds_len =3D block_size;
+ i++;
}
+ KASSERT(i =3D=3D nsegs);
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+ GFP_KERNEL);
+ if (ret)
+ goto err;
+ sg =3D st->sgl;
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -107,6 +118,7 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
=20
sg_page_sizes =3D i915_sg_page_sizes(sg);
#else
+ sg =3D st->sgl;
st->nents =3D 0;
sg_page_sizes =3D 0;
prev_end =3D (resource_size_t)-1;
@@ -154,6 +166,8 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_obj=
ect *obj)
err:
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (segs)
kmem_free(segs, nsegs * sizeof(segs[0]));
__intel_memory_region_put_pages_buddy(mem, blocks);
From c5314565868d7d7180b329eac2a88d02914d31f9 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Tue, 16 Jan 2024 00:28:23 +0000
Subject: [PATCH 6/8] i915_gem_stolen: Fix memory leak.
Found while trying to address the PR 57833 class of problems.
XXX pullup-10
---
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index b53d543fa894..9ad5df8c75c8 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -569,7 +569,8 @@ i915_pages_create_for_stolen(struct drm_device *dev,
}
loaded =3D true;
=20
-out: if (ret) {
+out: kmem_free(seg, nseg * sizeof(seg[0]));
+ if (ret) {
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
sg_free_table(st);
From 86efff2fa17f45b558e29e065f3616e891b1393f Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Tue, 16 Jan 2024 00:40:20 +0000
Subject: [PATCH 7/8] i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE
entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway). And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
XXX pullup-10
---
.../drm2/dist/drm/i915/gem/i915_gem_stolen.c | 29 ++++++++++++++-----
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index 9ad5df8c75c8..1e7398090d11 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_device *dev,
{
struct drm_i915_private *i915 =3D to_i915(dev);
struct sg_table *st;
+ struct scatterlist *sg;
#ifdef __NetBSD__
bus_dma_tag_t dmat =3D i915->drm.dmat;
bus_dma_segment_t *seg =3D NULL;
int nseg =3D 0, i;
bool loaded =3D false;
int ret;
-#else
- struct scatterlist *sg;
#endif
=20
GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_device *dev,
if (st =3D=3D NULL)
return ERR_PTR(-ENOMEM);
=20
- if (sg_alloc_table(st, 1, GFP_KERNEL)) {
- kfree(st);
- return ERR_PTR(-ENOMEM);
- }
-
#ifdef __NetBSD__
KASSERT((size % PAGE_SIZE) =3D=3D 0);
nseg =3D size / PAGE_SIZE;
@@ -548,6 +542,17 @@ i915_pages_create_for_stolen(struct drm_device *dev,
seg[i].ds_len =3D PAGE_SIZE;
}
=20
+ sg =3D NULL;
+
+ ret =3D sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+ if (ret) {
+ DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+ ret);
+ ret =3D -ENOMEM;
+ goto out;
+ }
+ sg =3D st->sgl;
+
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
@@ -573,11 +578,19 @@ out: kmem_free(seg, nseg * sizeof(seg[0]));
if (ret) {
if (loaded)
bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
- sg_free_table(st);
+ if (sg && sg->sg_dmamap)
+ bus_dmamap_destroy(dmat, sg->sg_dmamap);
+ if (sg)
+ sg_free_table(st);
kfree(st);
return ERR_PTR(ret);
}
#else
+ if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+ kfree(st);
+ return ERR_PTR(-ENOMEM);
+ }
+
sg =3D st->sgl;
sg->offset =3D 0;
sg->length =3D size;
From f00c3079c6dc7eb6ff62c12a2b6d08e1144db957 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Tue, 16 Jan 2024 00:42:08 +0000
Subject: [PATCH 8/8] i915_gem_stolen: Take advantage of a local variable.
No functional change intended.
Prompted by PR kern/57833.
XXX pullup-10
---
.../bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c b/sy=
s/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
index 1e7398090d11..1635e57befd7 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
@@ -555,17 +555,17 @@ i915_pages_create_for_stolen(struct drm_device *dev,
=20
/* XXX errno NetBSD->Linux */
ret =3D -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
- BUS_DMA_WAITOK, &st->sgl->sg_dmamap);
+ BUS_DMA_WAITOK, &sg->sg_dmamap);
if (ret) {
DRM_ERROR("failed to create DMA map for stolen object: %d\n",
ret);
- st->sgl->sg_dmamap =3D NULL;
+ sg->sg_dmamap =3D NULL;
goto out;
}
- st->sgl->sg_dmat =3D dmat;
+ sg->sg_dmat =3D dmat;
=20
- /* XXX errno NetBSD->Liux */
- ret =3D -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
+ /* XXX errno NetBSD->Linux */
+ ret =3D -bus_dmamap_load_raw(dmat, sg->sg_dmamap, seg, nseg, size,
BUS_DMA_WAITOK);
if (ret) {
DRM_ERROR("failed to load DMA map for stolen object: %d\n",
@@ -577,7 +577,7 @@ i915_pages_create_for_stolen(struct drm_device *dev,
out: kmem_free(seg, nseg * sizeof(seg[0]));
if (ret) {
if (loaded)
- bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+ bus_dmamap_unload(dmat, sg->sg_dmamap);
if (sg && sg->sg_dmamap)
bus_dmamap_destroy(dmat, sg->sg_dmamap);
if (sg)
--=_zuuYtksK0C8RJaF9J8AwVVP/KZSlw/L+--
From: Ramiro Aceves <ea1abz@gmail.com>
To: Taylor R Campbell <riastradh@NetBSD.org>
Cc: "David H. Gutteridge" <david@gutteridge.ca>, gnats-bugs@NetBSD.org,
netbsd-bugs@NetBSD.org, RVP <rvp@SDF.ORG>
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Fri, 19 Jan 2024 07:32:04 +0100
El 18/1/24 a las 23:24, Taylor R Campbell escribió:
> OK, I think I found the problem with my patch: a side effect of
> Linux's backwards definition of PAGE_MASK from NetBSD's, causing
> round_page(size) to return 0 instead of 0x4000 when size=0x4000.
>
> Try this one?
>
> (Posting this again as one giant diff in .diff, and an incremental
> git patch series in .patch, in case that's helpful, whichever is
> easier for you to deal with.)
Hello Taylor, you are absolutely amazing! :-) I got up earlier in the
morning before going work to compile and install v6.diff patch. Now I
can enter and abandon xorg without panics!
If you need more test here I am ready.
Thank you very much.
Ramiro.
From: "David H. Gutteridge" <david@gutteridge.ca>
To: Gnats Bugs <gnats-bugs@netbsd.org>
Cc:
Subject: Re: kern/57833: kernel panic on xorg exit
Date: Fri, 19 Jan 2024 17:18:47 -0500
On 2024-01-18 17:24, Taylor R Campbell wrote:
> OK, I think I found the problem with my patch: a side effect of
> Linux's backwards definition of PAGE_MASK from NetBSD's, causing
> round_page(size) to return 0 instead of 0x4000 when size=0x4000.
>
> Try this one?
>
> (Posting this again as one giant diff in .diff, and an incremental
> git patch series in .patch, in case that's helpful, whichever is
> easier for you to deal with.)
Confirming your "v6" patch set works fine with my hardware. I can
repeatedly exit an X session without a panic.
Thanks,
Dave
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:22:27 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:22:27 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_region.c
Log Message:
i915_gem_region: Reduce diff from upstream a little.
No functional change intended.
Prompted by upcoming nearby changes related to PR kern/57833.
XXX pullup-10 (to make subsequent pullups easier)
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:22:40 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:22:40 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_mman.c
Log Message:
i915_gem: Avoid walking off end of sg_pgs.
sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.
Related to PR kern/57833.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:22:54 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:22:54 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_pages.c
Log Message:
i915_gem: Assert page array size.
Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.
Related to PR kern/57833.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:23:04 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:23:04 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_phys.c
Log Message:
i915_gem_phys: Fill sg_pgs.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.
But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.
So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead. Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.
PR kern/57833: kernel panic on xorg exit
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:23:19 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:23:19 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_region.c
Log Message:
i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work. And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:24:27 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:24:27 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_stolen.c
Log Message:
i915_gem_stolen: Fix memory leak.
Found while trying to address the PR 57833 class of problems.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Taylor R Campbell" <riastradh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Fri, 19 Jan 2024 22:24:38 +0000
Module Name: src
Committed By: riastradh
Date: Fri Jan 19 22:24:38 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_stolen.c
Log Message:
i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway). And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: open->needs-pullups
State-Changed-By: riastradh@NetBSD.org
State-Changed-When: Fri, 19 Jan 2024 23:23:45 +0000
State-Changed-Why:
fix committed to HEAD, needs pullup-10, inapplicable to <10
State-Changed-From-To: needs-pullups->pending-pullups
State-Changed-By: gutteridge@NetBSD.org
State-Changed-When: Tue, 23 Jan 2024 22:47:43 +0000
State-Changed-Why:
riastradh@ submitted pullup ticket #559 for the netbsd-10 branch.
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57833 CVS commit: [netbsd-10] src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Sat, 3 Feb 2024 11:15:12 +0000
Module Name: src
Committed By: martin
Date: Sat Feb 3 11:15:12 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem [netbsd-10]:
i915_gem_mman.c i915_gem_pages.c i915_gem_phys.c i915_gem_region.c
i915_gem_stolen.c
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #559):
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c: revision 1.6
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c: revision 1.7
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c: revision 1.7
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c: revision 1.9
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c: revision 1.22
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c: revision 1.5
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c: revision 1.6
i915_gem_region: Reduce diff from upstream a little.
No functional change intended.
Prompted by upcoming nearby changes related to PR kern/57833.
i915_gem: Avoid walking off end of sg_pgs.
sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.
Related to PR kern/57833.
i915_gem: Assert page array size.
Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.
Related to PR kern/57833.
i915_gem_phys: Fill sg_pgs.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.
But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.
So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead. Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.
PR kern/57833: kernel panic on xorg exit
i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work. And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
i915_gem_stolen: Fix memory leak.
Found while trying to address the PR 57833 class of problems.
i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway). And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.21.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
cvs rdiff -u -r1.6 -r1.6.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
cvs rdiff -u -r1.8 -r1.8.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
cvs rdiff -u -r1.4 -r1.4.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
cvs rdiff -u -r1.5 -r1.5.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: pending-pullups->closed
State-Changed-By: riastradh@NetBSD.org
State-Changed-When: Sat, 03 Feb 2024 15:12:30 +0000
State-Changed-Why:
fixed and pulled up
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2024
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.