Skip to contentSkip to conversation

post-sysfs netdev cleanup

PATCH Applied Jeff Muizelaar 3 participants 6 messages May 23, 2003 – May 28, 2003 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 post-sysfs netdev cleanup

The attached patch removes the struct device from struct net_device and sets net_device.class_dev.dev directly. The class_dev memset is removed because all of struct net_device should already be memset to 0 or there will be other problems.

-Jeff

include/linux/netdevice.h +1 -4
diff -urN linux-2.5.69-bk15/include/linux/netdevice.h linux-2.5.69-bk15-netdev-cleanup/include/linux/netdevice.h
@@ -441,9 +441,6 @@
 	struct divert_blk	*divert;
 #endif /* CONFIG_NET_DIVERT */
 
-	/* generic device structure used in constructing class */
-	struct device		*dev;
-
 	/* class/net/name entry */
 	struct class_device	class_dev;
 
@@ -455,7 +452,7 @@
 /* Set the sysfs physical device reference for the network logical device
  * if set prior to registration will cause a symlink during initialization.
  */
-#define SET_NETDEV_DEV(net, pdev)	((net)->dev = (pdev))
+#define SET_NETDEV_DEV(net, pdev)	((net)->class_dev.dev = (pdev))
 
 
 struct packet_type 
net/core/net-sysfs.c +0 -2
diff -urN linux-2.5.69-bk15/net/core/net-sysfs.c linux-2.5.69-bk15-netdev-cleanup/net/core/net-sysfs.c
@@ -291,9 +291,7 @@
 	struct class_device_attribute *attr;
 	int ret;
 
-	memset(class_dev, 0, sizeof(struct class_device)); 
 	class_dev->class = &net_class;
-	class_dev->dev = net->dev;
 	class_dev->class_data = net;
 
 	snprintf(class_dev->class_id, BUS_ID_SIZE, net->name);
#1 lore raw

From: Jeff Muizelaar <[email protected]>
Date: Thu, 22 May 2003 20:41:17 -0400

The attached patch removes the struct device from struct net_device and sets net_device.class_dev.dev directly.
The class_dev memset is removed because all of struct net_device should already be memset to 0 or there will be other problems.

Looks fine to me, Stephen?

#3 lore raw
In reply to a message not in the archive

From: Stephen Hemminger <[email protected]>
Date: Fri, 23 May 2003 16:47:35 -0700

Seems like a good idea too.

Ok, great.

Stephen, I think we need to find a way to put the device registration call outside of the RTNL semaphore. I removed in the unregister case, but to be complete we have to push it out in the register path too.

The reason for all of these issues is that link_watch grabs the RTNL semaphore, and this runs via keventd. Thus, trying to invoke any usermode helper (/sbin/hotplug etc.) while holding the RTNL semaphore can deadlock.

#4 lore raw
Quoted 12 lines · On Sun, 25 May 2003 19:24:17 -0700 (PDT) "David S. Miller" <[email protected]>…

From: Stephen Hemminger <[email protected]>
Date: Fri, 23 May 2003 16:47:35 -0700

Seems like a good idea too.

Ok, great.

Stephen, I think we need to find a way to put the device registration call outside of the RTNL semaphore. I removed in the unregister case, but to be complete we have to push it out in the register path too.

Quoted 4 lines

The reason for all of these issues is that link_watch grabs the RTNL semaphore, and this runs via keventd. Thus, trying to invoke any usermode helper (/sbin/hotplug etc.) while holding the RTNL semaphore can deadlock.

There needs to be some locking in the registration path doesn't there to prevent two calls to register the same name and other possible conflicts. So do you want to use dev_base lock or some other locking?

#5 lore raw

From: Stephen Hemminger <[email protected]>
Date: Tue, 27 May 2003 09:51:29 -0700

There needs to be some locking in the registration path doesn't there to prevent two calls to register the same name and other possible conflicts. So do you want to use dev_base lock or some other locking?

Good point. We can't be as "fast and loose" with this as we can with the hotplug invocation...

I can't come up with a usable solution at this moment. :(