Commit b8e20524 authored by Dave Jones's avatar Dave Jones

[AGPGART] fix pci_get_device conversion in intel-agp

- any device teardown must happen between agp_remove_bridge and
  agp_put_bridge, before agp_remove_bridge users can still call into
  the code
- it's releasing a reference to the wrong device

Original patch from: Christoph Hellwig
Further munging from Roland Dreier and myself.
Signed-off-by: default avatarDave Jones <davej@redhat.com>
parent 5d58dea4
...@@ -1730,8 +1730,13 @@ static void __devexit agp_intel_remove(struct pci_dev *pdev) ...@@ -1730,8 +1730,13 @@ static void __devexit agp_intel_remove(struct pci_dev *pdev)
{ {
struct agp_bridge_data *bridge = pci_get_drvdata(pdev); struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
pci_dev_put(pdev);
agp_remove_bridge(bridge); agp_remove_bridge(bridge);
if (intel_i810_private.i810_dev)
pci_dev_put(intel_i810_private.i810_dev);
if (intel_i830_private.i830_dev)
pci_dev_put(intel_i830_private.i830_dev);
agp_put_bridge(bridge); agp_put_bridge(bridge);
} }
......
...@@ -569,8 +569,9 @@ static void __devexit agp_intelmch_remove(struct pci_dev *pdev) ...@@ -569,8 +569,9 @@ static void __devexit agp_intelmch_remove(struct pci_dev *pdev)
{ {
struct agp_bridge_data *bridge = pci_get_drvdata(pdev); struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
pci_dev_put(pdev);
agp_remove_bridge(bridge); agp_remove_bridge(bridge);
if (intel_i830_private.i830_dev)
pci_dev_put(intel_i830_private.i830_dev);
agp_put_bridge(bridge); agp_put_bridge(bridge);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment