summaryrefslogtreecommitdiff
path: root/linux-core/i915_drv.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2008-06-13 10:27:39 -0700
committerKeith Packard <keithp@keithp.com>2008-06-13 14:29:46 -0700
commit3762c9ea6754763694b1de4df3acd9dc37247f87 (patch)
treeb66355348ec7392c9f4e210c79ed0c28680032cd /linux-core/i915_drv.c
parent5957470ca3be6c0225985f74b1511401e02c014b (diff)
[intel] Enable MSI for i915 IRQ
Diffstat (limited to 'linux-core/i915_drv.c')
-rw-r--r--linux-core/i915_drv.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/linux-core/i915_drv.c b/linux-core/i915_drv.c
index 8f51cd4d..89f089b0 100644
--- a/linux-core/i915_drv.c
+++ b/linux-core/i915_drv.c
@@ -560,6 +560,7 @@ static int i915_resume(struct drm_device *dev)
}
static int probe(struct pci_dev *pdev, const struct pci_device_id *ent);
+static void remove(struct pci_dev *pdev);
static struct drm_driver driver = {
/* don't use mtrr's here, the Xserver or user space app should
* deal with them for intel hardware.
@@ -604,7 +605,7 @@ static struct drm_driver driver = {
.name = DRIVER_NAME,
.id_table = pciidlist,
.probe = probe,
- .remove = __devexit_p(drm_cleanup_pci),
+ .remove = remove,
},
#ifdef I915_HAVE_FENCE
.fence_driver = &i915_fence_driver,
@@ -622,7 +623,19 @@ static struct drm_driver driver = {
static int probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
- return drm_get_dev(pdev, ent, &driver);
+ int ret;
+
+ (void) pci_enable_msi(pdev);
+ ret = drm_get_dev(pdev, ent, &driver);
+ if (ret && pdev->msi_enabled)
+ pci_disable_msi(pdev);
+ return ret;
+}
+static void remove(struct pci_dev *pdev)
+{
+ if (pdev->msi_enabled)
+ pci_disable_msi(pdev);
+ drm_cleanup_pci(pdev);
}
static int __init i915_init(void)