diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 1dddd2f4f929..5dd7fc582e6f 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -1355,6 +1355,17 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1355 | return i915; | 1355 | return i915; |
1356 | } | 1356 | } |
1357 | 1357 | ||
1358 | static void i915_driver_destroy(struct drm_i915_private *i915) | ||
1359 | { | ||
1360 | struct pci_dev *pdev = i915->drm.pdev; | ||
1361 | |||
1362 | drm_dev_fini(&i915->drm); | ||
1363 | kfree(i915); | ||
1364 | |||
1365 | /* And make sure we never chase our dangling pointer from pci_dev */ | ||
1366 | pci_set_drvdata(pdev, NULL); | ||
1367 | } | ||
1368 | |||
1358 | /** | 1369 | /** |
1359 | * i915_driver_load - setup chip and create an initial config | 1370 | * i915_driver_load - setup chip and create an initial config |
1360 | * @pdev: PCI device | 1371 | * @pdev: PCI device |
@@ -1436,9 +1447,7 @@ out_pci_disable: | |||
1436 | pci_disable_device(pdev); | 1447 | pci_disable_device(pdev); |
1437 | out_fini: | 1448 | out_fini: |
1438 | i915_load_error(dev_priv, "Device initialization failed (%d)\n", ret); | 1449 | i915_load_error(dev_priv, "Device initialization failed (%d)\n", ret); |
1439 | drm_dev_fini(&dev_priv->drm); | 1450 | i915_driver_destroy(dev_priv); |
1440 | kfree(dev_priv); | ||
1441 | pci_set_drvdata(pdev, NULL); | ||
1442 | return ret; | 1451 | return ret; |
1443 | } | 1452 | } |
1444 | 1453 | ||
@@ -1489,9 +1498,7 @@ static void i915_driver_release(struct drm_device *dev) | |||
1489 | struct drm_i915_private *dev_priv = to_i915(dev); | 1498 | struct drm_i915_private *dev_priv = to_i915(dev); |
1490 | 1499 | ||
1491 | i915_driver_cleanup_early(dev_priv); | 1500 | i915_driver_cleanup_early(dev_priv); |
1492 | drm_dev_fini(&dev_priv->drm); | 1501 | i915_driver_destroy(dev_priv); |
1493 | |||
1494 | kfree(dev_priv); | ||
1495 | } | 1502 | } |
1496 | 1503 | ||
1497 | static int i915_driver_open(struct drm_device *dev, struct drm_file *file) | 1504 | static int i915_driver_open(struct drm_device *dev, struct drm_file *file) |