All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
@ 2003-06-06 21:58 Stephen Hemminger
  2003-06-06 23:07 ` Stephen Hemminger
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: Stephen Hemminger @ 2003-06-06 21:58 UTC (permalink / raw)
  To: David S. Miller, Jeff Garzik; +Cc: netdev

This is the first phase of a sequence of patches to resolve network
device reference count issues exposed by the new sysfs interface.

Phase I:  introduces release_netdev which is the hook to allow later
   changes to hold onto the net device after the device has potentially
   unloaded.  Includes patch for the easy to fix devices. 

Phase II: fixes devices that encapsulate network device structure
   inside their own structure, or allocate private data in a way
   that will break later.

Phase III: changes release_netdev to handle the case of delayed freeing
   of the network device, and appropriate state checking.


diff -Nru a/include/linux/netdevice.h b/include/linux/netdevice.h
--- a/include/linux/netdevice.h	Thu Jun  5 14:44:28 2003
+++ b/include/linux/netdevice.h	Thu Jun  5 14:44:28 2003
@@ -491,6 +491,7 @@
 extern int		dev_queue_xmit(struct sk_buff *skb);
 extern int		register_netdevice(struct net_device *dev);
 extern int		unregister_netdevice(struct net_device *dev);
+extern void		release_netdev(struct net_device *dev);
 extern void		synchronize_net(void);
 extern int 		register_netdevice_notifier(struct notifier_block *nb);
 extern int		unregister_netdevice_notifier(struct notifier_block *nb);
diff -Nru a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c	Thu Jun  5 14:44:28 2003
+++ b/net/core/dev.c	Thu Jun  5 14:44:28 2003
@@ -2768,6 +2768,21 @@
 	}
 }
 
+
+/**
+ *	release_netdev - free network device
+ *	@dev: device
+ *
+ *	This function does the last stage of destroying an allocated device 
+ * 	interface. Currently, it just frees the device.
+ *
+ */
+
+void release_netdev(struct net_device *dev)
+{
+	kfree(dev);
+}
+
 /* Synchronize with packet receive processing. */
 void synchronize_net(void) 
 {
diff -Nru a/net/netsyms.c b/net/netsyms.c
--- a/net/netsyms.c	Thu Jun  5 14:44:28 2003
+++ b/net/netsyms.c	Thu Jun  5 14:44:28 2003
@@ -558,6 +558,7 @@
 EXPORT_SYMBOL(loopback_dev);
 EXPORT_SYMBOL(register_netdevice);
 EXPORT_SYMBOL(unregister_netdevice);
+EXPORT_SYMBOL(release_netdev);
 EXPORT_SYMBOL(synchronize_net);
 EXPORT_SYMBOL(netdev_state_change);
 EXPORT_SYMBOL(dev_new_index);

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-06 21:58 [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup Stephen Hemminger
@ 2003-06-06 23:07 ` Stephen Hemminger
  2003-06-07  9:05 ` David S. Miller
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ messages in thread
From: Stephen Hemminger @ 2003-06-06 23:07 UTC (permalink / raw)
  To: David S. Miller; +Cc: jgarzik, netdev

Here is a patch to convert the "easy" drivers to use release_netdev, instead of directly
freeing the net_device.  They all compile but only e100 and e1000 have been tested with
real hardware.

diff -Nru a/drivers/net/3c59x.c b/drivers/net/3c59x.c
--- a/drivers/net/3c59x.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/3c59x.c	Thu Jun  5 15:51:50 2003
@@ -1021,7 +1021,7 @@
 	outw (TotalReset|0x14, ioaddr + EL3_CMD);
 	release_region (ioaddr, VORTEX_TOTAL_SIZE);
 
-	kfree (dev);
+	release_netdev (dev);
 	return 0;
 }
 #endif
@@ -3072,7 +3072,7 @@
 						vp->rx_ring_dma);
 	if (vp->must_free_region)
 		release_region(dev->base_addr, vp->io_size);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 
diff -Nru a/drivers/net/8139cp.c b/drivers/net/8139cp.c
--- a/drivers/net/8139cp.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/8139cp.c	Thu Jun  5 15:51:50 2003
@@ -1969,7 +1969,7 @@
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
 	pci_set_drvdata(pdev, NULL);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 #ifdef CONFIG_PM
diff -Nru a/drivers/net/8139too.c b/drivers/net/8139too.c
--- a/drivers/net/8139too.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/8139too.c	Thu Jun  5 15:51:50 2003
@@ -721,7 +721,7 @@
 		sizeof (struct rtl8139_private));
 #endif /* RTL8139_NDEBUG */
 
-	kfree (dev);
+	release_netdev (dev);
 
 	pci_set_drvdata (pdev, NULL);
 }
diff -Nru a/drivers/net/a2065.c b/drivers/net/a2065.c
--- a/drivers/net/a2065.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/a2065.c	Thu Jun  5 15:51:50 2003
@@ -820,7 +820,7 @@
 		release_mem_region(ZTWO_PADDR(dev->base_addr),
 				   sizeof(struct lance_regs));
 		release_mem_region(ZTWO_PADDR(dev->mem_start), A2065_RAM_SIZE);
-		kfree(dev);
+		release_netdev(dev);
 		root_a2065_dev = next;
 	}
 #endif
diff -Nru a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c
--- a/drivers/net/amd8111e.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/amd8111e.c	Thu Jun  5 15:51:50 2003
@@ -1709,7 +1709,7 @@
 	if (dev) {
 		unregister_netdev(dev);
 		iounmap((void *) ((struct amd8111e_priv *)(dev->priv))->mmio);
-		kfree(dev);
+		release_netdev(dev);
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
 		pci_set_drvdata(pdev, NULL);
diff -Nru a/drivers/net/ariadne.c b/drivers/net/ariadne.c
--- a/drivers/net/ariadne.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/ariadne.c	Thu Jun  5 15:51:50 2003
@@ -852,7 +852,7 @@
 	unregister_netdev(dev);
 	release_mem_region(ZTWO_PADDR(dev->base_addr), sizeof(struct Am79C960));
 	release_mem_region(ZTWO_PADDR(dev->mem_start), ARIADNE_RAM_SIZE);
-	kfree(dev);
+	release_netdev(dev);
 	root_ariadne_dev = next;
     }
 #endif
diff -Nru a/drivers/net/ariadne2.c b/drivers/net/ariadne2.c
--- a/drivers/net/ariadne2.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/ariadne2.c	Thu Jun  5 15:51:50 2003
@@ -413,7 +413,7 @@
 	unregister_netdev(dev);
 	free_irq(IRQ_AMIGA_PORTS, dev);
 	release_mem_region(ZTWO_PADDR(dev->base_addr), NE_IO_EXTENT*2);
-	kfree(dev);
+	release_netdev(dev);
 	root_ariadne2_dev = next;
     }
 #endif
diff -Nru a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c
--- a/drivers/net/arm/am79c961a.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/arm/am79c961a.c	Thu Jun  5 15:51:50 2003
@@ -677,7 +677,7 @@
 	release_region(dev->base_addr, 0x18);
 nodev:
 	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 out:
 	return ret;
 }
diff -Nru a/drivers/net/arm/ether1.c b/drivers/net/arm/ether1.c
--- a/drivers/net/arm/ether1.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/arm/ether1.c	Thu Jun  5 15:51:50 2003
@@ -1058,7 +1058,7 @@
 	release_region(dev->base_addr, 16);
 	release_region(dev->base_addr + 0x800, 4096);
 	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 out:
 	return ret;
 }
@@ -1073,7 +1073,7 @@
 
 	release_region(dev->base_addr, 16);
 	release_region(dev->base_addr + 0x800, 4096);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 static const struct ecard_id ether1_ids[] = {
diff -Nru a/drivers/net/arm/ether3.c b/drivers/net/arm/ether3.c
--- a/drivers/net/arm/ether3.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/arm/ether3.c	Thu Jun  5 15:51:50 2003
@@ -899,7 +899,7 @@
 	release_region(dev->base_addr, 128);
 free:
 	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 out:
 	return ret;
 }
@@ -912,7 +912,7 @@
 
 	unregister_netdev(dev);
 	release_region(dev->base_addr, 128);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 static const struct ecard_id ether3_ids[] = {
diff -Nru a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c
--- a/drivers/net/au1000_eth.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/au1000_eth.c	Thu Jun  5 15:51:50 2003
@@ -823,7 +823,7 @@
 				MAX_BUF_SIZE * (NUM_TX_BUFFS+NUM_RX_BUFFS));
 	printk(KERN_ERR "%s: au1000_probe1 failed.  Returns %d\n",
 	       dev->name, retval);
-	kfree(dev);
+	release_netdev(dev);
 	return retval;
 }
 
diff -Nru a/drivers/net/b44.c b/drivers/net/b44.c
--- a/drivers/net/b44.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/b44.c	Thu Jun  5 15:51:50 2003
@@ -1830,7 +1830,7 @@
 	if (dev) {
 		unregister_netdev(dev);
 		iounmap((void *) ((struct b44 *)(dev->priv))->regs);
-		kfree(dev);
+		release_netdev(dev);
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
 		pci_set_drvdata(pdev, NULL);
diff -Nru a/drivers/net/bmac.c b/drivers/net/bmac.c
--- a/drivers/net/bmac.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/bmac.c	Thu Jun  5 15:51:50 2003
@@ -1452,7 +1452,7 @@
 		pmac_call_feature(PMAC_FTR_BMAC_ENABLE, bp->node, 0, 0);
 	}
 	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 static int bmac_open(struct net_device *dev)
@@ -1710,7 +1710,7 @@
 		free_irq(bp->tx_dma_intr, dev);
 		free_irq(bp->rx_dma_intr, dev);
 
-		kfree(dev);
+		release_netdev(dev);
 	} while (bmac_devs != NULL);
 }
 
diff -Nru a/drivers/net/declance.c b/drivers/net/declance.c
--- a/drivers/net/declance.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/declance.c	Thu Jun  5 15:51:50 2003
@@ -1203,7 +1203,7 @@
 
 err_out:
 	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 	return ret;
 }
 
diff -Nru a/drivers/net/dl2k.c b/drivers/net/dl2k.c
--- a/drivers/net/dl2k.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/dl2k.c	Thu Jun  5 15:51:50 2003
@@ -1844,7 +1844,7 @@
 #ifdef MEM_MAPPING
 		iounmap ((char *) (dev->base_addr));
 #endif
-		kfree (dev);
+		release_netdev (dev);
 		pci_release_regions (pdev);
 		pci_disable_device (pdev);
 	}
diff -Nru a/drivers/net/e100/e100_main.c b/drivers/net/e100/e100_main.c
--- a/drivers/net/e100/e100_main.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/e100/e100_main.c	Thu Jun  5 15:51:50 2003
@@ -716,7 +716,7 @@
 	e100_dealloc_space(bdp);
 err_dev:
 	pci_set_drvdata(pcid, NULL);
-	kfree(dev);
+	release_netdev(dev);
 out:
 	return rc;
 }
@@ -738,7 +738,7 @@
 
 	e100_dealloc_space(bdp);
 	pci_set_drvdata(bdp->pdev, NULL);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 static void __devexit
diff -Nru a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
--- a/drivers/net/e1000/e1000_main.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/e1000/e1000_main.c	Thu Jun  5 15:51:50 2003
@@ -542,7 +542,7 @@
 	iounmap(adapter->hw.hw_addr);
 	pci_release_regions(pdev);
 
-	kfree(netdev);
+	release_netdev(netdev);
 }
 
 /**
diff -Nru a/drivers/net/eepro100.c b/drivers/net/eepro100.c
--- a/drivers/net/eepro100.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/eepro100.c	Thu Jun  5 15:51:50 2003
@@ -2364,7 +2364,7 @@
 								+ sizeof(struct speedo_stats),
 						sp->tx_ring, sp->tx_ring_dma);
 	pci_disable_device(pdev);
-	kfree(dev);
+	release_netdev(dev);
 }
 \f
 static struct pci_device_id eepro100_pci_tbl[] __devinitdata = {
diff -Nru a/drivers/net/epic100.c b/drivers/net/epic100.c
--- a/drivers/net/epic100.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/epic100.c	Thu Jun  5 15:51:50 2003
@@ -1482,7 +1482,7 @@
 	iounmap((void*) dev->base_addr);
 #endif
 	pci_release_regions(pdev);
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 	/* pci_power_off(pdev, -1); */
 }
diff -Nru a/drivers/net/fealnx.c b/drivers/net/fealnx.c
--- a/drivers/net/fealnx.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/fealnx.c	Thu Jun  5 15:51:50 2003
@@ -712,7 +712,7 @@
 #ifndef USE_IO_OPS
 		iounmap((void *)dev->base_addr);
 #endif
-		kfree(dev);
+		release_netdev(dev);
 		pci_release_regions(pdev);
 		pci_set_drvdata(pdev, NULL);
 	} else
diff -Nru a/drivers/net/hamachi.c b/drivers/net/hamachi.c
--- a/drivers/net/hamachi.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/hamachi.c	Thu Jun  5 15:51:50 2003
@@ -1976,7 +1976,7 @@
 			hmp->tx_ring_dma);
 		unregister_netdev(dev);
 		iounmap((char *)dev->base_addr);
-		kfree(dev);
+		release_netdev(dev);
 		pci_release_regions(pdev);
 		pci_set_drvdata(pdev, NULL);
 	}
diff -Nru a/drivers/net/hydra.c b/drivers/net/hydra.c
--- a/drivers/net/hydra.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/hydra.c	Thu Jun  5 15:51:50 2003
@@ -243,7 +243,7 @@
 	unregister_netdev(dev);
 	free_irq(IRQ_AMIGA_PORTS, dev);
 	release_mem_region(ZTWO_PADDR(dev->base_addr)-HYDRA_NIC_BASE, 0x10000);
-	kfree(dev);
+	release_netdev(dev);
 	root_hydra_dev = next;
     }
 #endif
diff -Nru a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
--- a/drivers/net/ixgb/ixgb_main.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/ixgb/ixgb_main.c	Thu Jun  5 15:51:50 2003
@@ -478,7 +478,7 @@
 	iounmap((void *) adapter->hw.hw_addr);
 	pci_release_regions(pdev);
 
-	kfree(netdev);
+	release_netdev(netdev);
 }
 
 /**
diff -Nru a/drivers/net/mace.c b/drivers/net/mace.c
--- a/drivers/net/mace.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/mace.c	Thu Jun  5 15:51:50 2003
@@ -254,7 +254,7 @@
 		release_OF_resource(mp->of_node, 1);
 		release_OF_resource(mp->of_node, 2);
 	}
-	kfree(dev);
+	release_netdev(dev);
 }
 
 static void dbdma_reset(volatile struct dbdma_regs *dma)
@@ -976,7 +976,7 @@
 		release_OF_resource(mp->of_node, 1);
 		release_OF_resource(mp->of_node, 2);
 
-		kfree(dev);
+		release_netdev(dev);
     }
     if (dummy_buf != NULL) {
 		kfree(dummy_buf);
diff -Nru a/drivers/net/myri_sbus.c b/drivers/net/myri_sbus.c
--- a/drivers/net/myri_sbus.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/myri_sbus.c	Thu Jun  5 15:51:50 2003
@@ -1090,7 +1090,7 @@
 	return 0;
 err:	unregister_netdev(dev);
 	/* This will also free the co-allocated 'dev->priv' */
-	kfree(dev);
+	release_netdev(dev);
 	return -ENODEV;
 }
 
diff -Nru a/drivers/net/natsemi.c b/drivers/net/natsemi.c
--- a/drivers/net/natsemi.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/natsemi.c	Thu Jun  5 15:51:50 2003
@@ -838,7 +838,7 @@
 	if (i) {
 		pci_release_regions(pdev);
 		unregister_netdev(dev);
-		kfree(dev);
+		release_netdev(dev);
 		pci_set_drvdata(pdev, NULL);
 		return i;
 	}
diff -Nru a/drivers/net/ne2k-pci.c b/drivers/net/ne2k-pci.c
--- a/drivers/net/ne2k-pci.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/ne2k-pci.c	Thu Jun  5 15:51:50 2003
@@ -635,7 +635,7 @@
 
 	unregister_netdev(dev);
 	release_region(dev->base_addr, NE_IO_EXTENT);
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 }
 
diff -Nru a/drivers/net/pci-skeleton.c b/drivers/net/pci-skeleton.c
--- a/drivers/net/pci-skeleton.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/pci-skeleton.c	Thu Jun  5 15:51:50 2003
@@ -871,7 +871,7 @@
 		sizeof (struct netdrv_private));
 #endif /* NETDRV_NDEBUG */
 
-	kfree (dev);
+	release_netdev (dev);
 
 	pci_set_drvdata (pdev, NULL);
 
diff -Nru a/drivers/net/pcmcia/ibmtr_cs.c b/drivers/net/pcmcia/ibmtr_cs.c
--- a/drivers/net/pcmcia/ibmtr_cs.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/pcmcia/ibmtr_cs.c	Thu Jun  5 15:51:50 2003
@@ -310,7 +310,7 @@
     /* Unlink device structure, free bits */
     *linkp = link->next;
     unregister_netdev(dev);
-    kfree(dev);
+    release_netdev(dev);
 } /* ibmtr_detach */
 
 /*======================================================================
diff -Nru a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c
--- a/drivers/net/pcnet32.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/pcnet32.c	Thu Jun  5 15:51:50 2003
@@ -1762,7 +1762,7 @@
 	if (lp->pci_dev)
 	    pci_unregister_driver(&pcnet32_driver);
 	pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
-	kfree(pcnet32_dev);
+	release_netdev(pcnet32_dev);
 	pcnet32_dev = next_dev;
     }
 }
diff -Nru a/drivers/net/r8169.c b/drivers/net/r8169.c
--- a/drivers/net/r8169.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/r8169.c	Thu Jun  5 15:51:50 2003
@@ -646,7 +646,7 @@
 	       sizeof (struct net_device) + sizeof (struct rtl8169_private));
 
 	pci_disable_device(pdev);
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 }
 
diff -Nru a/drivers/net/rrunner.c b/drivers/net/rrunner.c
--- a/drivers/net/rrunner.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/rrunner.c	Thu Jun  5 15:51:50 2003
@@ -253,7 +253,7 @@
 				    rr->tx_ring_dma);
 		unregister_netdev(dev);
 		iounmap(rr->regs);
-		kfree(dev);
+		release_netdev(dev);
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
 		pci_set_drvdata(pdev, NULL);
diff -Nru a/drivers/net/sis900.c b/drivers/net/sis900.c
--- a/drivers/net/sis900.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/sis900.c	Thu Jun  5 15:51:50 2003
@@ -493,7 +493,7 @@
  	pci_set_drvdata(pci_dev, NULL);
 	pci_release_regions(pci_dev);
  err_out:
-	kfree(net_dev);
+	release_netdev(net_dev);
 	return ret;
 }
 
@@ -2189,7 +2189,7 @@
 	pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
 		sis_priv->tx_ring_dma);
 	unregister_netdev(net_dev);
-	kfree(net_dev);
+	release_netdev(net_dev);
 	pci_release_regions(pci_dev);
 	pci_set_drvdata(pci_dev, NULL);
 }
diff -Nru a/drivers/net/skfp/skfddi.c b/drivers/net/skfp/skfddi.c
--- a/drivers/net/skfp/skfddi.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/skfp/skfddi.c	Thu Jun  5 15:51:50 2003
@@ -2633,7 +2633,7 @@
 	}
 	unregister_netdev(p);
 	printk("%s: unloaded\n", p->name);
-	kfree(p);		/* Free the device structure */
+	release_netdev(p);		/* Free the device structure */
 
 	return next;
 }				// unlink_modules
diff -Nru a/drivers/net/starfire.c b/drivers/net/starfire.c
--- a/drivers/net/starfire.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/starfire.c	Thu Jun  5 15:51:50 2003
@@ -2196,7 +2196,7 @@
 	pci_release_regions(pdev);
 
 	pci_set_drvdata(pdev, NULL);
-	kfree(dev);			/* Will also free np!! */
+	release_netdev(dev);			/* Will also free np!! */
 }
 
 
diff -Nru a/drivers/net/sunbmac.c b/drivers/net/sunbmac.c
--- a/drivers/net/sunbmac.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/sunbmac.c	Thu Jun  5 15:51:50 2003
@@ -1209,7 +1209,7 @@
 
 	unregister_netdev(dev);
 	/* This also frees the co-located 'dev->priv' */
-	kfree(dev);
+	release_netdev(dev);
 	return -ENODEV;
 }
 
diff -Nru a/drivers/net/sundance.c b/drivers/net/sundance.c
--- a/drivers/net/sundance.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/sundance.c	Thu Jun  5 15:51:50 2003
@@ -730,7 +730,7 @@
 #endif
 	pci_release_regions(pdev);
 err_out_netdev:
-	kfree (dev);
+	release_netdev(dev);
 	return -ENODEV;
 }
 
@@ -1784,7 +1784,7 @@
 #ifndef USE_IO_OPS
 		iounmap((char *)(dev->base_addr));
 #endif
-		kfree(dev);
+		release_netdev(dev);
 		pci_set_drvdata(pdev, NULL);
 	}
 }
diff -Nru a/drivers/net/sungem.c b/drivers/net/sungem.c
--- a/drivers/net/sungem.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/sungem.c	Thu Jun  5 15:51:50 2003
@@ -2885,7 +2885,7 @@
 				    gp->gblock_dvma);
 		iounmap((void *) gp->regs);
 		pci_release_regions(pdev);
-		kfree(dev);
+		release_netdev(dev);
 
 		pci_set_drvdata(pdev, NULL);
 	}
diff -Nru a/drivers/net/sunhme.c b/drivers/net/sunhme.c
--- a/drivers/net/sunhme.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/sunhme.c	Thu Jun  5 15:51:50 2003
@@ -3351,7 +3351,7 @@
 			pci_release_regions(hp->happy_dev);
 		}
 #endif
-		kfree(dev);
+		release_netdev(dev);
 
 		root_happy_dev = next;
 	}
diff -Nru a/drivers/net/tc35815.c b/drivers/net/tc35815.c
--- a/drivers/net/tc35815.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tc35815.c	Thu Jun  5 15:51:50 2003
@@ -1762,7 +1762,7 @@
 		next_dev = ((struct tc35815_local *)dev->priv)->next_module;
 		iounmap((void *)(dev->base_addr));
 		unregister_netdev(dev);
-		kfree(dev);
+		release_netdev(dev);
 		root_tc35815_dev = next_dev;
 	}
 }
diff -Nru a/drivers/net/tg3.c b/drivers/net/tg3.c
--- a/drivers/net/tg3.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tg3.c	Thu Jun  5 15:51:50 2003
@@ -6942,7 +6942,7 @@
 	if (dev) {
 		unregister_netdev(dev);
 		iounmap((void *) ((struct tg3 *)(dev->priv))->regs);
-		kfree(dev);
+		release_netdev(dev);
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
 		pci_set_drvdata(pdev, NULL);
diff -Nru a/drivers/net/tlan.c b/drivers/net/tlan.c
--- a/drivers/net/tlan.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tlan.c	Thu Jun  5 15:51:50 2003
@@ -447,7 +447,7 @@
 
 	pci_release_regions(pdev);
 	
-	kfree( dev );
+	release_netdev( dev );
 		
 	pci_set_drvdata( pdev, NULL );
 } 
@@ -695,7 +695,7 @@
 		release_region( dev->base_addr, 0x10);
 		unregister_netdev( dev );
 		TLan_Eisa_Devices = priv->nextDevice;
-		kfree( dev );
+		release_netdev( dev );
 		tlan_have_eisa--;
 	}
 }
diff -Nru a/drivers/net/tokenring/abyss.c b/drivers/net/tokenring/abyss.c
--- a/drivers/net/tokenring/abyss.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tokenring/abyss.c	Thu Jun  5 15:51:50 2003
@@ -443,7 +443,7 @@
 	release_region(dev->base_addr-0x10, ABYSS_IO_EXTENT);
 	free_irq(dev->irq, dev);
 	tmsdev_term(dev);
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 }
 
diff -Nru a/drivers/net/tokenring/lanstreamer.c b/drivers/net/tokenring/lanstreamer.c
--- a/drivers/net/tokenring/lanstreamer.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tokenring/lanstreamer.c	Thu Jun  5 15:51:50 2003
@@ -433,7 +433,7 @@
 	/* shouldn't we do iounmap here? */
 	release_region(pci_resource_start(pdev, 0), pci_resource_len(pdev,0));
 	release_mem_region(pci_resource_start(pdev, 1), pci_resource_len(pdev,1));
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 }
 
diff -Nru a/drivers/net/tokenring/olympic.c b/drivers/net/tokenring/olympic.c
--- a/drivers/net/tokenring/olympic.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tokenring/olympic.c	Thu Jun  5 15:51:50 2003
@@ -1778,7 +1778,7 @@
 	iounmap(olympic_priv->olympic_lap) ; 
 	pci_release_regions(pdev) ;
 	pci_set_drvdata(pdev,NULL) ;  	
-	kfree(dev) ; 
+	release_netdev(dev) ; 
 }
 
 static struct pci_driver olympic_driver = { 
diff -Nru a/drivers/net/tokenring/smctr.c b/drivers/net/tokenring/smctr.c
--- a/drivers/net/tokenring/smctr.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tokenring/smctr.c	Thu Jun  5 15:51:50 2003
@@ -5730,7 +5730,7 @@
 		if (dev) {
 			unregister_netdev(dev);
 			cleanup_card(dev);
-			kfree(dev);
+			release_netdev(dev);
 		}
         }
 }
diff -Nru a/drivers/net/tokenring/tmspci.c b/drivers/net/tokenring/tmspci.c
--- a/drivers/net/tokenring/tmspci.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tokenring/tmspci.c	Thu Jun  5 15:51:50 2003
@@ -229,7 +229,7 @@
 	release_region(dev->base_addr, TMS_PCI_IO_EXTENT);
 	free_irq(dev->irq, dev);
 	tmsdev_term(dev);
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 }
 
diff -Nru a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c
--- a/drivers/net/tulip/de2104x.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tulip/de2104x.c	Thu Jun  5 15:51:50 2003
@@ -2153,7 +2153,7 @@
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
 	pci_set_drvdata(pdev, NULL);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 #ifdef CONFIG_PM
diff -Nru a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
--- a/drivers/net/tulip/dmfe.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tulip/dmfe.c	Thu Jun  5 15:51:50 2003
@@ -478,7 +478,7 @@
 					db->buf_pool_ptr, db->buf_pool_dma_ptr);
 		unregister_netdev(dev);
 		pci_release_regions(pdev);
-		kfree(dev);	/* free board information */
+		release_netdev(dev);	/* free board information */
 		pci_set_drvdata(pdev, NULL);
 	}
 
diff -Nru a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c
--- a/drivers/net/tulip/tulip_core.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tulip/tulip_core.c	Thu Jun  5 15:51:50 2003
@@ -1767,7 +1767,7 @@
 #ifndef USE_IO_OPS
 	iounmap((void *)dev->base_addr);
 #endif
-	kfree (dev);
+	release_netdev (dev);
 	pci_release_regions (pdev);
 	pci_set_drvdata (pdev, NULL);
 
diff -Nru a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c
--- a/drivers/net/tulip/winbond-840.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tulip/winbond-840.c	Thu Jun  5 15:51:50 2003
@@ -1623,7 +1623,7 @@
 #ifndef USE_IO_OPS
 		iounmap((char *)(dev->base_addr));
 #endif
-		kfree(dev);
+		release_netdev(dev);
 	}
 
 	pci_set_drvdata(pdev, NULL);
diff -Nru a/drivers/net/tulip/xircom_cb.c b/drivers/net/tulip/xircom_cb.c
--- a/drivers/net/tulip/xircom_cb.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tulip/xircom_cb.c	Thu Jun  5 15:51:50 2003
@@ -338,7 +338,7 @@
 	}
 	release_region(dev->base_addr, 128);
 	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 	leave("xircom_remove");
 } 
 
diff -Nru a/drivers/net/tulip/xircom_tulip_cb.c b/drivers/net/tulip/xircom_tulip_cb.c
--- a/drivers/net/tulip/xircom_tulip_cb.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/tulip/xircom_tulip_cb.c	Thu Jun  5 15:51:50 2003
@@ -645,11 +645,11 @@
 	return 0;
 
 err_out_cleardev:
+	unregister_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 	pci_release_regions(pdev);
 err_out_free_netdev:
-	unregister_netdev(dev);
-	kfree(dev);
+	release_netdev(dev);
 	return -ENODEV;
 }
 
@@ -1702,7 +1702,7 @@
 	printk(KERN_INFO "xircom_remove_one(%s)\n", dev->name);
 	unregister_netdev(dev);
 	pci_release_regions(pdev);
-	kfree(dev);
+	release_netdev(dev);
 	pci_set_drvdata(pdev, NULL);
 }
 
diff -Nru a/drivers/net/typhoon.c b/drivers/net/typhoon.c
--- a/drivers/net/typhoon.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/typhoon.c	Thu Jun  5 15:51:50 2003
@@ -2476,7 +2476,7 @@
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
 	pci_set_drvdata(pdev, NULL);
-	kfree(dev);
+	release_netdev(dev);
 }
 
 static struct pci_driver typhoon_driver = {
diff -Nru a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
--- a/drivers/net/via-rhine.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/via-rhine.c	Thu Jun  5 15:51:50 2003
@@ -1872,7 +1872,7 @@
 	iounmap((char *)(dev->base_addr));
 #endif
 
-	kfree(dev);
+	release_netdev(dev);
 	pci_disable_device(pdev);
 	pci_set_drvdata(pdev, NULL);
 }
diff -Nru a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
--- a/drivers/net/wireless/airo.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/wireless/airo.c	Thu Jun  5 15:51:50 2003
@@ -1573,7 +1573,7 @@
 	        release_region( dev->base_addr, 64 );
         }
 	del_airo_dev( dev );
-	kfree( dev );
+	release_netdev( dev );
 }
 
 EXPORT_SYMBOL(stop_airo_card);
diff -Nru a/drivers/net/wireless/orinoco_cs.c b/drivers/net/wireless/orinoco_cs.c
--- a/drivers/net/wireless/orinoco_cs.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/wireless/orinoco_cs.c	Thu Jun  5 15:51:50 2003
@@ -290,8 +290,9 @@
 		DEBUG(0, "orinoco_cs: About to unregister net device %p\n",
 		      dev);
 		unregister_netdev(dev);
-	}
-	kfree(dev);
+		release_netdev(dev);
+	} else
+		kfree(dev);
 }				/* orinoco_cs_detach */
 
 /*
diff -Nru a/drivers/net/wireless/orinoco_pci.c b/drivers/net/wireless/orinoco_pci.c
--- a/drivers/net/wireless/orinoco_pci.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/wireless/orinoco_pci.c	Thu Jun  5 15:51:50 2003
@@ -289,7 +289,7 @@
 		iounmap((unsigned char *) priv->hw.iobase);
 
 	pci_set_drvdata(pdev, NULL);
-	kfree(dev);
+	release_netdev(dev);
 
 	pci_disable_device(pdev);
 }
diff -Nru a/drivers/net/wireless/orinoco_tmd.c b/drivers/net/wireless/orinoco_tmd.c
--- a/drivers/net/wireless/orinoco_tmd.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/wireless/orinoco_tmd.c	Thu Jun  5 15:51:50 2003
@@ -182,7 +182,7 @@
 		
 	pci_set_drvdata(pdev, NULL);
 
-	kfree(dev);
+	release_netdev(dev);
 
 	release_region(pci_resource_start(pdev, 2), pci_resource_len(pdev, 2));
 
diff -Nru a/drivers/net/yellowfin.c b/drivers/net/yellowfin.c
--- a/drivers/net/yellowfin.c	Thu Jun  5 15:51:50 2003
+++ b/drivers/net/yellowfin.c	Thu Jun  5 15:51:50 2003
@@ -1486,7 +1486,7 @@
 	iounmap ((void *) dev->base_addr);
 #endif
 
-	kfree (dev);
+	release_netdev (dev);
 	pci_set_drvdata(pdev, NULL);
 }
 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-06 21:58 [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup Stephen Hemminger
  2003-06-06 23:07 ` Stephen Hemminger
@ 2003-06-07  9:05 ` David S. Miller
  2003-06-07 15:25   ` Stephen Hemminger
  2003-06-07 19:15 ` Jeff Garzik
  2003-06-07 19:16 ` Jeff Garzik
  3 siblings, 1 reply; 14+ messages in thread
From: David S. Miller @ 2003-06-07  9:05 UTC (permalink / raw)
  To: shemminger; +Cc: jgarzik, netdev, viro

   From: Stephen Hemminger <shemminger@osdl.org>
   Date: Fri, 6 Jun 2003 14:58:35 -0700
   
   Phase I:  introduces release_netdev which is the hook to allow later
      changes to hold onto the net device after the device has potentially
      unloaded.  Includes patch for the easy to fix devices. 

Besides naming (thought this was going to be named netdev_drop)
I have no problems.

Al?

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-07  9:05 ` David S. Miller
@ 2003-06-07 15:25   ` Stephen Hemminger
  0 siblings, 0 replies; 14+ messages in thread
From: Stephen Hemminger @ 2003-06-07 15:25 UTC (permalink / raw)
  To: David S. Miller; +Cc: jgarzik, netdev, viro

On Sat, 07 Jun 2003 02:05:28 -0700 (PDT)
"David S. Miller" <davem@redhat.com> wrote:

>    From: Stephen Hemminger <shemminger@osdl.org>
>    Date: Fri, 6 Jun 2003 14:58:35 -0700
>    
>    Phase I:  introduces release_netdev which is the hook to allow later
>       changes to hold onto the net device after the device has potentially
>       unloaded.  Includes patch for the easy to fix devices. 
> 
> Besides naming (thought this was going to be named netdev_drop)
> I have no problems.
> 
> Al?

My (admittedly weak) rational for this was:
	- it seemed more like part of the register/unregister process
	  and those functions are named {un}register_netdevice
	- RTNL should not be held, same as unregister_netdev
	  (vs unregister_netdevice which requires it).
	- release rather than drop because release is used as name
	  in the kobject callback hook

But it's easy to change now.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-06 21:58 [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup Stephen Hemminger
  2003-06-06 23:07 ` Stephen Hemminger
  2003-06-07  9:05 ` David S. Miller
@ 2003-06-07 19:15 ` Jeff Garzik
  2003-06-08  6:58   ` David S. Miller
  2003-06-07 19:16 ` Jeff Garzik
  3 siblings, 1 reply; 14+ messages in thread
From: Jeff Garzik @ 2003-06-07 19:15 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: David S. Miller, netdev

On Fri, Jun 06, 2003 at 02:58:35PM -0700, Stephen Hemminger wrote:
> This is the first phase of a sequence of patches to resolve network
> device reference count issues exposed by the new sysfs interface.
> 
> Phase I:  introduces release_netdev which is the hook to allow later
>    changes to hold onto the net device after the device has potentially
>    unloaded.  Includes patch for the easy to fix devices. 
> 
> Phase II: fixes devices that encapsulate network device structure
>    inside their own structure, or allocate private data in a way
>    that will break later.

I would prefer to fix the drivers _before_ anything else.  i.e. Phase 2
becomes Phase 1.

These often need to be merged into 2.4 as well, and they can be applied
to all drivers without any API changes.  The changes are separated out
from any refcounting/sysfs stuff, and can (potentially) be considered
and reviewed by the respective maintainers.

	Jeff

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-06 21:58 [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup Stephen Hemminger
                   ` (2 preceding siblings ...)
  2003-06-07 19:15 ` Jeff Garzik
@ 2003-06-07 19:16 ` Jeff Garzik
  3 siblings, 0 replies; 14+ messages in thread
From: Jeff Garzik @ 2003-06-07 19:16 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: David S. Miller, netdev

IOW, release_netdev is basically a search-n-replace change that can be done
to drivers anytime.  Let's apply the "meat" changes to mainline first,
the bug fixes / cleanups to use dynamic alloc.

	Jeff

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-07 19:15 ` Jeff Garzik
@ 2003-06-08  6:58   ` David S. Miller
  2003-06-09  3:51     ` Jeff Garzik
  0 siblings, 1 reply; 14+ messages in thread
From: David S. Miller @ 2003-06-08  6:58 UTC (permalink / raw)
  To: jgarzik; +Cc: shemminger, netdev

   From: Jeff Garzik <jgarzik@pobox.com>
   Date: Sat, 7 Jun 2003 15:15:22 -0400

   I would prefer to fix the drivers _before_ anything else.  i.e. Phase 2
   becomes Phase 1.
   
   These often need to be merged into 2.4 as well, and they can be applied
   to all drivers without any API changes.  The changes are separated out
   from any refcounting/sysfs stuff, and can (potentially) be considered
   and reviewed by the respective maintainers.

Have you extracted out all the init_etherdev() killings Al and
myself did so you can backport them to 2.4.x too?

If you're not going to do that, there is not much point in trying to
sync other such things back to 2.4.x as well.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-08  6:58   ` David S. Miller
@ 2003-06-09  3:51     ` Jeff Garzik
  2003-06-09  5:53       ` David S. Miller
  0 siblings, 1 reply; 14+ messages in thread
From: Jeff Garzik @ 2003-06-09  3:51 UTC (permalink / raw)
  To: David S. Miller; +Cc: shemminger, netdev

David S. Miller wrote:
> Have you extracted out all the init_etherdev() killings Al and
> myself did so you can backport them to 2.4.x too?

That's the plan, yes.

	Jeff

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-09  3:51     ` Jeff Garzik
@ 2003-06-09  5:53       ` David S. Miller
  2003-06-09 17:09         ` Jeff Garzik
  0 siblings, 1 reply; 14+ messages in thread
From: David S. Miller @ 2003-06-09  5:53 UTC (permalink / raw)
  To: jgarzik; +Cc: shemminger, netdev

   From: Jeff Garzik <jgarzik@pobox.com>
   Date: Sun, 08 Jun 2003 23:51:57 -0400

   David S. Miller wrote:
   > Have you extracted out all the init_etherdev() killings Al and
   > myself did so you can backport them to 2.4.x too?
   
   That's the plan, yes.
   
That's your plan, but did you do any of this yet?  It'll keep
going deeper and deeper into bitkeeper history the longer that
you wait :-)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-09  5:53       ` David S. Miller
@ 2003-06-09 17:09         ` Jeff Garzik
  2003-06-09 17:09           ` David S. Miller
  0 siblings, 1 reply; 14+ messages in thread
From: Jeff Garzik @ 2003-06-09 17:09 UTC (permalink / raw)
  To: David S. Miller; +Cc: shemminger, netdev

David S. Miller wrote:
>    From: Jeff Garzik <jgarzik@pobox.com>
>    Date: Sun, 08 Jun 2003 23:51:57 -0400
> 
>    David S. Miller wrote:
>    > Have you extracted out all the init_etherdev() killings Al and
>    > myself did so you can backport them to 2.4.x too?
>    
>    That's the plan, yes.
>    
> That's your plan, but did you do any of this yet?  It'll keep
> going deeper and deeper into bitkeeper history the longer that
> you wait :-)


Yes, I have been following my plan.  You will see when Marcelo opens 
2.4.22-pre1 that I have been committing these to my net-drivers-2.4 queue.

	Jeff

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-09 17:09         ` Jeff Garzik
@ 2003-06-09 17:09           ` David S. Miller
  2003-06-09 17:14             ` Jeff Garzik
  0 siblings, 1 reply; 14+ messages in thread
From: David S. Miller @ 2003-06-09 17:09 UTC (permalink / raw)
  To: jgarzik; +Cc: shemminger, netdev

   From: Jeff Garzik <jgarzik@pobox.com>
   Date: Mon, 09 Jun 2003 13:09:13 -0400

   David S. Miller wrote:
   > That's your plan, but did you do any of this yet?  It'll keep
   > going deeper and deeper into bitkeeper history the longer that
   > you wait :-)
   
   Yes, I have been following my plan.  You will see when Marcelo opens 
   2.4.22-pre1 that I have been committing these to my net-drivers-2.4 queue.

Awesome.

Now why was I asking this to begin with?  You wanted to do something,
what was that? :-)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-09 17:09           ` David S. Miller
@ 2003-06-09 17:14             ` Jeff Garzik
  2003-06-09 17:18               ` David S. Miller
  0 siblings, 1 reply; 14+ messages in thread
From: Jeff Garzik @ 2003-06-09 17:14 UTC (permalink / raw)
  To: David S. Miller; +Cc: shemminger, netdev

On Mon, Jun 09, 2003 at 10:09:48AM -0700, David S. Miller wrote:
>    From: Jeff Garzik <jgarzik@pobox.com>
>    Date: Mon, 09 Jun 2003 13:09:13 -0400
> 
>    David S. Miller wrote:
>    > That's your plan, but did you do any of this yet?  It'll keep
>    > going deeper and deeper into bitkeeper history the longer that
>    > you wait :-)
>    
>    Yes, I have been following my plan.  You will see when Marcelo opens 
>    2.4.22-pre1 that I have been committing these to my net-drivers-2.4 queue.
> 
> Awesome.
> 
> Now why was I asking this to begin with?  You wanted to do something,
> what was that? :-)

I wanted to wait on the s/kfree/release_netdev/ patch until the other
stuff is done.  Said patch can be applied anytime, and doing it in this
order reduces 2.4 backport merge pain.  :)

	Jeff

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-09 17:14             ` Jeff Garzik
@ 2003-06-09 17:18               ` David S. Miller
  2003-06-09 18:11                 ` Jeff Garzik
  0 siblings, 1 reply; 14+ messages in thread
From: David S. Miller @ 2003-06-09 17:18 UTC (permalink / raw)
  To: jgarzik; +Cc: shemminger, netdev

   From: Jeff Garzik <jgarzik@pobox.com>
   Date: Mon, 9 Jun 2003 13:14:46 -0400
   
   I wanted to wait on the s/kfree/release_netdev/ patch until the other
   stuff is done.  Said patch can be applied anytime, and doing it in this
   order reduces 2.4 backport merge pain.  :)

No problem, but once all the init_etherdev() etc. crap is abolished,
Stephen's work or something similar goes in...

Ok?

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup
  2003-06-09 17:18               ` David S. Miller
@ 2003-06-09 18:11                 ` Jeff Garzik
  0 siblings, 0 replies; 14+ messages in thread
From: Jeff Garzik @ 2003-06-09 18:11 UTC (permalink / raw)
  To: David S. Miller; +Cc: shemminger, netdev

On Mon, Jun 09, 2003 at 10:18:07AM -0700, David S. Miller wrote:
>    From: Jeff Garzik <jgarzik@pobox.com>
>    Date: Mon, 9 Jun 2003 13:14:46 -0400
>    
>    I wanted to wait on the s/kfree/release_netdev/ patch until the other
>    stuff is done.  Said patch can be applied anytime, and doing it in this
>    order reduces 2.4 backport merge pain.  :)
> 
> No problem, but once all the init_etherdev() etc. crap is abolished,
> Stephen's work or something similar goes in...
> 
> Ok?

Right.  That's what I want :)

	Jeff

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2003-06-09 18:11 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-06 21:58 [PATCH 2.5.70] Add release_netdev -- hook for sysfs/net device cleanup Stephen Hemminger
2003-06-06 23:07 ` Stephen Hemminger
2003-06-07  9:05 ` David S. Miller
2003-06-07 15:25   ` Stephen Hemminger
2003-06-07 19:15 ` Jeff Garzik
2003-06-08  6:58   ` David S. Miller
2003-06-09  3:51     ` Jeff Garzik
2003-06-09  5:53       ` David S. Miller
2003-06-09 17:09         ` Jeff Garzik
2003-06-09 17:09           ` David S. Miller
2003-06-09 17:14             ` Jeff Garzik
2003-06-09 17:18               ` David S. Miller
2003-06-09 18:11                 ` Jeff Garzik
2003-06-07 19:16 ` Jeff Garzik

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.