[bisected regression] Re: scheduling while atomic on radeon rv620, kernel 3.30-rc3

Mikko Vinni mmvinni at yahoo.com
Sun Feb 12 09:20:03 PST 2012


Hi again,

I bisected this problem to:

47492a23a128e953bd5087b1cac909cd8124ca5e is the first bad commit
commit 47492a23a128e953bd5087b1cac909cd8124ca5e
Author: Christian König <deathsimple at vodafone.de>
Date:   Thu Oct 20 12:38:09 2011 +0200

    drm/radeon: add radeon_fence_count_emited function
    
    Split counting of emited fences out of power
    management into a seperate function.
    
    Signed-off-by: Christian König <deathsimple at vodafone.de>
    Reviewed-by: Jerome Glisse <jglisse at redhat.com>
    Signed-off-by: Dave Airlie <airlied at redhat.com>

:040000 040000 adbb5199d8ee03a75f65b9ddf6b1d398acfca4d9 67b8d0bfdd5507d82b0c8d8f500f32d140520f0d M    drivers



That patch (part of it below) moves code into a new function and perhaps changes
locking a bit. Is the return in the middle ok? This laptop has two cpus and

CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set


--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -368,6 +368,27 @@ void radeon_fence_process(struct radeon_device *rdev, int r
        }
 }
 
+int radeon_fence_count_emitted(struct radeon_device *rdev, int ring)
+{
+       unsigned long irq_flags;
+       int not_processed = 0;
+
+       read_lock_irqsave(&rdev->fence_lock, irq_flags);
+       if (!rdev->fence_drv[ring].initialized)
+               return 0;
+
+       if (!list_empty(&rdev->fence_drv[ring].emitted)) {
+               struct list_head *ptr;
+               list_for_each(ptr, &rdev->fence_drv[ring].emitted) {
+                       /* count up to 3, that's enought info */
+                       if (++not_processed >= 3)
+                               break;
+               }
+       }
+       read_unlock_irqrestore(&rdev->fence_lock, irq_flags);
+       return not_processed;
+}
+


Mikko


----- Original Message -----
> From: Mikko Vinni
> To: "dri-devel at lists.freedesktop.org" <dri-devel at lists.freedesktop.org>
> Cc: airlied; alexander.deucher
> Sent: Friday, February 10, 2012 10:06 AM
> Subject: Re: scheduling while atomic on radeon rv620, kernel 3.30-rc3
> 
> Hi,
> 
> Testing a bit more. With the defaults:
> 
> $  cat /sys/class/drm/card0/device/power_profile
> default
> $  cat /sys/class/drm/card0/device/power_method
> profile
> 
> the laptop boots and works fine. However, doing:
> 
> 
> $ echo dynpm > /sys/class/drm/card0/device/power_method
> 
> leads to the scheduling while atomic bug.
> 
> Mikko
> 
> ----- Original Message -----
>>  From: Mikko Vinni:
>> 
>>  testing 3.3.0-rc3 on an HP Pavilion dv5 (last tested kernel 3.2.5 works 
> fine)
>>  and getting bugs apparently right after the radeon module is loaded.
>> 
>> 
>>  Linux version 3.3.0-rc3-CUST (mikko at koni) (gcc version 4.6.2 20120120 
>>  (prerelease) (GCC) ) #198 SMP PREEMPT Thu Feb 9 09:36:43 EET 2012
>>  Command line: BOOT_IMAGE=Arch_GitKernel ro root=803 ro root=/dev/sda3 
>>  init=/bin/systemd pcie_aspm=force
>>  ...
>>  firewire_core: created device fw0: GUID 00241b00322a5501, S400
>>  [drm] radeon defaulting to kernel modesetting.
>>  [drm] radeon kernel modesetting enabled.
>>  radeon 0000:01:00.0: power state changed by ACPI to D0
>>  radeon 0000:01:00.0: power state changed by ACPI to D0
>>  [drm] initializing kernel modesetting (RV620 0x1002:0x95C4 0x103C:0x3600).
>>  [drm] register mmio base: 0xD2300000
>>  [drm] register mmio size: 65536
>>  ATOM BIOS: M82
>>  radeon 0000:01:00.0: VRAM: 512M 0x0000000000000000 - 0x000000001FFFFFFF 
> (512M 
>>  used)
>>  radeon 0000:01:00.0: GTT: 512M 0x0000000020000000 - 0x000000003FFFFFFF
>>  [drm] Detected VRAM RAM=512M, BAR=256M
>>  [drm] RAM width 64bits DDR
>>  [TTM] Zone  kernel: Available graphics memory: 2023082 kiB.
>>  [TTM] Initializing pool allocator.
>>  [TTM] Initializing DMA pool allocator.
>>  [drm] radeon: 512M of VRAM memory ready
>>  [drm] radeon: 512M of GTT memory ready.
>>  [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
>>  [drm] Driver supports precise vblank timestamp query.
>>  radeon 0000:01:00.0: irq 46 for MSI/MSI-X
>>  radeon 0000:01:00.0: radeon: using MSI.
>>  [drm] radeon: irq initialized.
>>  [drm] GART: num cpu pages 131072, num gpu pages 131072
>>  [drm] radeon: ib pool ready.
>>  [drm] Loading RV620 Microcode
>>  usbcore: registered new interface driver usbfs
>>  ...
>>  [drm] PCIE GART of 512M enabled (table at 0x0000000000040000).
>>  radeon 0000:01:00.0: WB enabled
>>  [drm] fence driver on ring 0 use gpu addr 0x20000c00 and cpu addr 
>>  0xffff8801364bfc00
>>  [drm] ring test on 0 succeeded in 1 usecs
>>  [drm] ib test on ring 0 succeeded in 0 usecs
>>  [drm] Radeon Display Connectors
>>  [drm] Connector 0:
>>  [drm]   LVDS
>>  [drm]   Encoders:
>>  [drm]     LCD1: INTERNAL_KLDSCP_LVTMA
>>  [drm] Connector 1:
>>  [drm]   VGA
>>  [drm]   DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c
>>  [drm]   Encoders:
>>  [drm]     CRT1: INTERNAL_KLDSCP_DAC1
>>  [drm] Connector 2:
>>  [drm]   DIN
>>  [drm]   Encoders:
>>  [drm]     TV1: INTERNAL_KLDSCP_DAC2
>>  [drm] Connector 3:
>>  [drm]   HDMI-A
>>  [drm]   HPD1
>>  [drm]   DDC: 0x7e20 0x7e20 0x7e24 0x7e24 0x7e28 0x7e28 0x7e2c 0x7e2c
>>  [drm]   Encoders:
>>  [drm]     DFP1: INTERNAL_UNIPHY
>>  [drm] radeon: power management initialized
>> 
>>  ...
>>  [drm] fb mappable at 0xC0142000
>>  [drm] vram apper at 0xC0000000
>>  [drm] size 4096000
>>  [drm] fb depth is 24
>>  [drm]    pitch is 5120
>>  fbcon: radeondrmfb (fb0) is primary device
>>  Feb  9 16:54:56 koni systemd-fsck[287]: /dev/sda5: clean, 1102549/17514496 
>>  files, 32142735/70035359 blocks (check in 2 mounts)
>>  Feb  9 16:54:56 koni systemd-tmpfiles[298]: Two or more conflicting lines 
> for 
>>  /tmp configured, ignoring.
>>  Console: switching to colour frame buffer device 160x50
>>  fb0: radeondrmfb frame buffer device
>>  drm: registered panic notifier
>>  [drm] Initialized radeon 2.13.0 20080528 for 0000:01:00.0 on minor 0
>>  snd_hda_intel 0000:01:00.1: irq 47 for MSI/MSI-X
>>  HDMI status: Codec=0 Pin=3 Presence_Detect=0 ELD_Valid=0
>>  input: HDA ATI HDMI HDMI/DP,pcm=3 as 
>>  /devices/pci0000:00/0000:00:02.0/0000:01:00.1/sound/card1/input15
>>  EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: commit=30
>>  BUG: scheduling while atomic: kworker/1:3/119/0x00000003
>>  Modules linked in: snd_hda_codec_hdmi uvcvideo videobuf2_vmalloc 
>>  videobuf2_memops videobuf2_core videodev v4l2_compat_ioctl32 arc4 
>>  snd_hda_codec_idt ohci_hcd joydev snd_hda_intel ath5k snd_hda_codec 
> ehci_hcd 
>>  usbcore snd_hwdep snd_pcm mac80211 radeon ath snd_page_alloc snd_timer snd 
>>  hp_wmi sdhci_pci sparse_keymap sp5100_tco i2c_piix4 soundcore cfg80211 
> sdhci wmi 
>>  usb_common drm_kms_helper jmb38x_ms hp_accel psmouse r8169 ttm mmc_core 
> thermal 
>>  memstick rtc_cmos lis3lv02d evdev k10temp pcspkr input_polldev 
> firewire_ohci mii 
>>  serio_raw rfkill battery video ac button powernow_k8 mperf processor 
> autofs4 
>>  sr_mod cdrom sd_mod pata_acpi ahci libahci pata_atiixp libata scsi_mod
>>  Pid: 119, comm: kworker/1:3 Not tainted 3.3.0-rc3-CUST #198
>>  Call Trace:
>>  [<ffffffff81440f6c>] __schedule_bug+0x5d/0x61
>>  [<ffffffff81446dbc>] __schedule+0x84c/0x9c0
>>  [<ffffffff81097b34>] ? check_preempt_curr+0x84/0xa0
>>  [<ffffffff8109d519>] ? pull_task+0x49/0x60
>>  [<ffffffff8144705a>] schedule+0x3a/0x50
>>  [<ffffffff81444936>] schedule_timeout+0x166/0x380
>>  [<ffffffff81445ab5>] ? __mutex_lock_slowpath+0x235/0x340
>>  [<ffffffff81077fe0>] ? init_timer_deferrable_key+0x20/0x20
>>  [<ffffffffa02a940a>] radeon_pm_set_clocks+0x4ca/0x690 [radeon]
>>  [<ffffffff8108b010>] ? abort_exclusive_wait+0xb0/0xb0
>>  [<ffffffffa02a9930>] radeon_dynpm_idle_work_handler+0x160/0x170 
> [radeon]
>>  [<ffffffffa02a97d0>] ? radeon_acpi_event+0xc0/0xc0 [radeon]
>>  [<ffffffff8108509b>] process_one_work+0x11b/0x4d0
>>  [<ffffffff81085a1d>] worker_thread+0x15d/0x340
>>  [<ffffffff810858c0>] ? manage_workers.isra.27+0x220/0x220
>>  [<ffffffff8108a77e>] kthread+0x8e/0xa0
>>  [<ffffffff81449df4>] kernel_thread_helper+0x4/0x10
>>  [<ffffffff8108a6f0>] ? kthread_freezable_should_stop+0x60/0x60
>>  [<ffffffff81449df0>] ? gs_change+0xb/0xb
>>  BUG: scheduling while atomic: kworker/1:3/119/0x00000003
>>  Modules linked in: snd_hda_codec_hdmi uvcvideo videobuf2_vmalloc 
>>  videobuf2_memops videobuf2_core videodev v4l2_compat_ioctl32 arc4 
>>  snd_hda_codec_idt ohci_hcd joydev snd_hda_intel ath5k snd_hda_codec 
> ehci_hcd 
>>  usbcore snd_hwdep snd_pcm mac80211 radeon ath snd_page_alloc snd_timer snd 
>>  hp_wmi sdhci_pci sparse_keymap sp5100_tco i2c_piix4 soundcore cfg80211 
> sdhci wmi 
>>  usb_common drm_kms_helper jmb38x_ms hp_accel psmouse r8169 ttm mmc_core 
> thermal 
>>  memstick rtc_cmos lis3lv02d evdev k10temp pcspkr input_polldev 
> firewire_ohci mii 
>>  serio_raw rfkill battery video ac button powernow_k8 mperf processor 
> autofs4 
>>  sr_mod cdrom sd_mod pata_acpi ahci libahci pata_atiixp libata scsi_mod
>>  Pid: 119, comm: kworker/1:3 Not tainted 3.3.0-rc3-CUST #198
>>  Call Trace:
>>  [<ffffffff81440f6c>] __schedule_bug+0x5d/0x61
>>  [<ffffffff81446dbc>] __schedule+0x84c/0x9c0
>>  [<ffffffff81097b34>] ? check_preempt_curr+0x84/0xa0
>>  [<ffffffff8109d519>] ? pull_task+0x49/0x60
>>  [<ffffffff81078ac3>] ? lock_timer_base.isra.33+0x33/0x70
>>  [<ffffffff81078b91>] ? try_to_del_timer_sync+0x91/0x150
>>  [<ffffffff8144705a>] schedule+0x3a/0x50
>>  [<ffffffff81444936>] schedule_timeout+0x166/0x380
>>  [<ffffffff81077fe0>] ? init_timer_deferrable_key+0x20/0x20
>>  [<ffffffffa02a9521>] radeon_pm_set_clocks+0x5e1/0x690 [radeon]
>>  [<ffffffff8108b010>] ? abort_exclusive_wait+0xb0/0xb0
>>  [<ffffffffa02a9930>] radeon_dynpm_idle_work_handler+0x160/0x170 
> [radeon]
>>  [<ffffffffa02a97d0>] ? radeon_acpi_event+0xc0/0xc0 [radeon]
>>  [<ffffffff8108509b>] process_one_work+0x11b/0x4d0
>>  [<ffffffff81085a1d>] worker_thread+0x15d/0x340
>>  [<ffffffff810858c0>] ? manage_workers.isra.27+0x220/0x220
>>  [<ffffffff8108a77e>] kthread+0x8e/0xa0
>>  [<ffffffff81449df4>] kernel_thread_helper+0x4/0x10
>>  [<ffffffff8108a6f0>] ? kthread_freezable_should_stop+0x60/0x60
>>  [<ffffffff81449df0>] ? gs_change+0xb/0xb
>>  BUG: workqueue leaked lock or atomic: kworker/1:3/0x00000002/119
>>  last function: radeon_dynpm_idle_work_handler+0x0/0x170 [radeon]
>>  Pid: 119, comm: kworker/1:3 Not tainted 3.3.0-rc3-CUST #198
>>  Call Trace:
>>  [<ffffffff810853c0>] process_one_work+0x440/0x4d0
>>  [<ffffffff81085a1d>] worker_thread+0x15d/0x340
>>  [<ffffffff810858c0>] ? manage_workers.isra.27+0x220/0x220
>>  [<ffffffff8108a77e>] kthread+0x8e/0xa0
>>  [<ffffffff81449df4>] kernel_thread_helper+0x4/0x10
>>  [<ffffffff8108a6f0>] ? kthread_freezable_should_stop+0x60/0x60
>>  [<ffffffff81449df0>] ? gs_change+0xb/0xb
>>  BUG: workqueue leaked lock or atomic: kworker/1:3/0x00000002/119
>>  last function: cfq_kick_queue+0x0/0x50
>>  Pid: 119, comm: kworker/1:3 Not tainted 3.3.0-rc3-CUST #198
>>  Call Trace:
>>  [<ffffffff810853c0>] process_one_work+0x440/0x4d0
>>  [<ffffffff81085a1d>] worker_thread+0x15d/0x340
>>  [<ffffffff810858c0>] ? manage_workers.isra.27+0x220/0x220
>>  [<ffffffff8108a77e>] kthread+0x8e/0xa0
>>  [<ffffffff81449df4>] kernel_thread_helper+0x4/0x10
>>  [<ffffffff8108a6f0>] ? kthread_freezable_should_stop+0x60/0x60
>>  [<ffffffff81449df0>] ? gs_change+0xb/0xb
>>  BUG: workqueue leaked lock or atomic: kworker/1:3/0x00000002/119
>>  last function: do_dbs_timer+0x0/0x3d0
>>  Pid: 119, comm: kworker/1:3 Not tainted 3.3.0-rc3-CUST #198
>>  ...
>> 
>> 
>>  These messages continued to scroll by until the machine hanged up.
>>  Does it look familiar to anybody? Anything to test or give more information
>>  about?
>> 
>> 
>>  Mikko
>> 
> 


More information about the dri-devel mailing list