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 mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to