The driver may sleep under a spinlock, and the function call paths are: gma_power_begin (acquire the spinlock) gma_resume_pci pci_set_power_state __pci_start_power_transition (drivers/pci/pci.c) msleep --> may sleep
gma_power_begin (acquire the spinlock) gma_resume_pci pci_enable_device pci_enable_device_flags (drivers/pci/pci.c) do_pci_enable_device pci_set_power_state __pci_start_power_transition msleep --> may sleep
A possible fix is to replace msleep with mdelay in __pci_start_power_transition in drivers/pci/pci.c.
These bugs are found by my static analysis tool and my code review.
Thanks, Jia-Ju Bai
dri-devel@lists.freedesktop.org