From a653224403a9c85b1406697e725226e0d477042a Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Tue, 8 Oct 2002 08:29:47 +0000 Subject: Call pci_enable_device() in DRM(irq_busid). --- linux-core/drm_ioctl.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'linux-core') diff --git a/linux-core/drm_ioctl.c b/linux-core/drm_ioctl.c index 0d8a1259..945340c7 100644 --- a/linux-core/drm_ioctl.c +++ b/linux-core/drm_ioctl.c @@ -32,6 +32,7 @@ #define __NO_VERSION__ #include "drmP.h" + int DRM(irq_busid)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { @@ -41,8 +42,20 @@ int DRM(irq_busid)(struct inode *inode, struct file *filp, if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p))) return -EFAULT; dev = pci_find_slot(p.busnum, PCI_DEVFN(p.devnum, p.funcnum)); - if (dev) p.irq = dev->irq; - else p.irq = 0; + if (!dev) { + DRM_ERROR("pci_find_slot failed for %d:%d:%d\n", + p.busnum, p.devnum, p.funcnum); + p.irq = 0; + goto out; + } + if (!pci_enable_device(dev)) { + DRM_ERROR("pci_enable_device failed for %d:%d:%d\n", + p.busnum, p.devnum, p.funcnum); + p.irq = 0; + goto out; + } + p.irq = dev->irq; + out: DRM_DEBUG("%d:%d:%d => IRQ %d\n", p.busnum, p.devnum, p.funcnum, p.irq); if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p))) -- cgit v1.2.3