Skip to contentSkip to conversation

fix pci_get_device conversion in intel-agp

PATCH In review Christoph Hellwig 3 participants 4 messages Jan 8, 2005 – Jan 9, 2005 Agpgart driver

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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

drivers/char/agp/intel-agp.c +11 -3
@@ -1720,8 +1720,13 @@
 {
 	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
 
-	pci_dev_put(pdev);
 	agp_remove_bridge(bridge);
+
+	if (intel_i810_private.i810_dev)
+		pci_dev_put(intel_i810_private.i830_dev);
+	if (intel_i810_private.i830_dev)
+		pci_dev_put(intel_i830_private.i830_dev);
+	
 	agp_put_bridge(bridge);
 }
--- 1.18/drivers/char/agp/intel-mch-agp.c	2004-12-16 07:31:44 +01:00
+++ edited/drivers/char/agp/intel-mch-agp.c	2005-01-08 20:12:18 +01:00
@@ -569,8 +569,11 @@
 {
 	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
 
-	pci_dev_put(pdev);
 	agp_remove_bridge(bridge);
+
+	if (intel_i810_private.i830_dev)
+		pci_dev_put(intel_i830_private.i830_dev);
+
 	agp_put_bridge(bridge);
 }
 
#1 lore raw

drivers/char/agp/intel-agp.c line 1728

Quoted 4 lines
drivers/char/agp/intel-agp.c +4 -0
+	if (intel_i810_private.i810_dev)
+		pci_dev_put(intel_i810_private.i830_dev);
+	if (intel_i810_private.i830_dev)
+		pci_dev_put(intel_i830_private.i830_dev);

Is there a typo in the patch here -- should the first put be for i810_dev?

- R.

#2 lore raw
Quoted 6 lines · Roland Dreier

drivers/char/agp/intel-agp.c line 1728

Quoted 4 lines
drivers/char/agp/intel-agp.c +4 -0
+	if (intel_i810_private.i810_dev)
+		pci_dev_put(intel_i810_private.i830_dev);
+	if (intel_i810_private.i830_dev)
+		pci_dev_put(intel_i830_private.i830_dev);

Is there a typo in the patch here -- should the first put be for i810_dev?

Yes.

#3 lore raw
In reply to Christoph Hellwig

drivers/char/agp/intel-agp.c line 1728

Quoted 4 lines · Christoph Hellwig
drivers/char/agp/intel-agp.c +4 -0
+	if (intel_i810_private.i810_dev)
+		pci_dev_put(intel_i810_private.i830_dev);
+	if (intel_i810_private.i830_dev)
+		pci_dev_put(intel_i830_private.i830_dev);

It's legal to call pci_dev_put() with a NULL pointer, so these checks are not needed.

thanks,

greg k-h