+ revert-gregkh-driver-network-class_device-to-device.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled

     revert gregkh-driver-network-class_device-to-device

has been added to the -mm tree.  Its filename is

     revert-gregkh-driver-network-class_device-to-device.patch

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this

------------------------------------------------------
Subject: revert gregkh-driver-network-class_device-to-device
From: Andrew Morton <akpm@xxxxxxxx>

Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---

 drivers/infiniband/ulp/ipoib/ipoib_main.c |   33 +-
 drivers/infiniband/ulp/ipoib/ipoib_vlan.c |   11 
 drivers/net/bonding/bond_sysfs.c          |  271 +++++++-------------
 drivers/net/wireless/hostap/hostap_main.c |    2 
 drivers/net/wireless/orinoco.c            |    4 
 drivers/net/wireless/orinoco_cs.c         |    2 
 drivers/net/wireless/spectrum_cs.c        |    2 
 include/linux/netdevice.h                 |    5 
 net/bridge/br_if.c                        |    2 
 net/bridge/br_sysfs_br.c                  |  234 +++++++----------
 net/bridge/br_sysfs_if.c                  |    2 
 net/core/dev.c                            |    6 
 net/core/net-sysfs.c                      |  175 ++++++------
 13 files changed, 332 insertions(+), 417 deletions(-)

diff -puN drivers/infiniband/ulp/ipoib/ipoib_main.c~revert-gregkh-driver-network-class_device-to-device drivers/infiniband/ulp/ipoib/ipoib_main.c
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -925,17 +925,16 @@ struct ipoib_dev_priv *ipoib_intf_alloc(
 	return netdev_priv(dev);
 }
 
-static ssize_t show_pkey(struct device *dev,
-			 struct device_attribute *attr, char *buf)
+static ssize_t show_pkey(struct class_device *cdev, char *buf)
 {
-	struct ipoib_dev_priv *priv = netdev_priv(to_net_dev(dev));
+	struct ipoib_dev_priv *priv =
+		netdev_priv(container_of(cdev, struct net_device, class_dev));
 
 	return sprintf(buf, "0x%04x\n", priv->pkey);
 }
-static DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL);
+static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL);
 
-static ssize_t create_child(struct device *dev,
-			    struct device_attribute *attr,
+static ssize_t create_child(struct class_device *cdev,
 			    const char *buf, size_t count)
 {
 	int pkey;
@@ -953,14 +952,14 @@ static ssize_t create_child(struct devic
 	 */
 	pkey |= 0x8000;
 
-	ret = ipoib_vlan_add(to_net_dev(dev), pkey);
+	ret = ipoib_vlan_add(container_of(cdev, struct net_device, class_dev),
+			     pkey);
 
 	return ret ? ret : count;
 }
-static DEVICE_ATTR(create_child, S_IWUGO, NULL, create_child);
+static CLASS_DEVICE_ATTR(create_child, S_IWUGO, NULL, create_child);
 
-static ssize_t delete_child(struct device *dev,
-			    struct device_attribute *attr,
+static ssize_t delete_child(struct class_device *cdev,
 			    const char *buf, size_t count)
 {
 	int pkey;
@@ -972,16 +971,18 @@ static ssize_t delete_child(struct devic
 	if (pkey < 0 || pkey > 0xffff)
 		return -EINVAL;
 
-	ret = ipoib_vlan_delete(to_net_dev(dev), pkey);
+	ret = ipoib_vlan_delete(container_of(cdev, struct net_device, class_dev),
+				pkey);
 
 	return ret ? ret : count;
 
 }
-static DEVICE_ATTR(delete_child, S_IWUGO, NULL, delete_child);
+static CLASS_DEVICE_ATTR(delete_child, S_IWUGO, NULL, delete_child);
 
 int ipoib_add_pkey_attr(struct net_device *dev)
 {
-	return device_create_file(&dev->dev, &dev_attr_pkey);
+	return class_device_create_file(&dev->class_dev,
+					&class_device_attr_pkey);
 }
 
 static struct net_device *ipoib_add_port(const char *format,
@@ -1049,9 +1050,11 @@ static struct net_device *ipoib_add_port
 
 	if (ipoib_add_pkey_attr(priv->dev))
 		goto sysfs_failed;
-	if (device_create_file(&priv->dev->dev, &dev_attr_create_child))
+	if (class_device_create_file(&priv->dev->class_dev,
+				     &class_device_attr_create_child))
 		goto sysfs_failed;
-	if (device_create_file(&priv->dev->dev, &dev_attr_delete_child))
+	if (class_device_create_file(&priv->dev->class_dev,
+				     &class_device_attr_delete_child))
 		goto sysfs_failed;
 
 	return priv->dev;
diff -puN drivers/infiniband/ulp/ipoib/ipoib_vlan.c~revert-gregkh-driver-network-class_device-to-device drivers/infiniband/ulp/ipoib/ipoib_vlan.c
--- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
@@ -42,15 +42,15 @@
 
 #include "ipoib.h"
 
-static ssize_t show_parent(struct device *d, struct device_attribute *attr,
-			   char *buf)
+static ssize_t show_parent(struct class_device *class_dev, char *buf)
 {
-	struct net_device *dev = to_net_dev(d);
+	struct net_device *dev =
+		container_of(class_dev, struct net_device, class_dev);
 	struct ipoib_dev_priv *priv = netdev_priv(dev);
 
 	return sprintf(buf, "%s\n", priv->parent->name);
 }
-static DEVICE_ATTR(parent, S_IRUGO, show_parent, NULL);
+static CLASS_DEVICE_ATTR(parent, S_IRUGO, show_parent, NULL);
 
 int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
 {
@@ -118,7 +118,8 @@ int ipoib_vlan_add(struct net_device *pd
 	if (ipoib_add_pkey_attr(priv->dev))
 		goto sysfs_failed;
 
-	if (device_create_file(&priv->dev->dev, &dev_attr_parent))
+	if (class_device_create_file(&priv->dev->class_dev,
+				     &class_device_attr_parent))
 		goto sysfs_failed;
 
 	list_add_tail(&priv->list, &ppriv->child_intfs);
diff -puN drivers/net/bonding/bond_sysfs.c~revert-gregkh-driver-network-class_device-to-device drivers/net/bonding/bond_sysfs.c
--- a/drivers/net/bonding/bond_sysfs.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/net/bonding/bond_sysfs.c
@@ -39,7 +39,8 @@
 
 /* #define BONDING_DEBUG 1 */
 #include "bonding.h"
-#define to_dev(obj)	container_of(obj,struct device,kobj)
+#define to_class_dev(obj) container_of(obj,struct class_device,kobj)
+#define to_net_dev(class) container_of(class, struct net_device, class_dev)
 #define to_bond(cd)	((struct bonding *)(to_net_dev(cd)->priv))
 
 /*---------------------------- Declarations -------------------------------*/
@@ -152,7 +153,7 @@ static ssize_t bonding_store_bonds(struc
 				 * If it's > expected, then there's a file open,
 				 * and we have to fail.
 				 */
-				if (atomic_read(&bond->dev->dev.kobj.kref.refcount)
+				if (atomic_read(&bond->dev->class_dev.kobj.kref.refcount)
 							> expected_refcount){
 					rtnl_unlock();
 					printk(KERN_INFO DRV_NAME
@@ -199,13 +200,13 @@ int bond_create_slave_symlinks(struct ne
 	int ret = 0;
 
 	/* first, create a link from the slave back to the master */
-	ret = sysfs_create_link(&(slave->dev.kobj), &(master->dev.kobj),
+	ret = sysfs_create_link(&(slave->class_dev.kobj), &(master->class_dev.kobj),
 				"master");
 	if (ret)
 		return ret;
 	/* next, create a link from the master to the slave */
 	sprintf(linkname,"slave_%s",slave->name);
-	ret = sysfs_create_link(&(master->dev.kobj), &(slave->dev.kobj),
+	ret = sysfs_create_link(&(master->class_dev.kobj), &(slave->class_dev.kobj),
 				linkname);
 	return ret;
 
@@ -215,21 +216,20 @@ void bond_destroy_slave_symlinks(struct 
 {
 	char linkname[IFNAMSIZ+7];
 
-	sysfs_remove_link(&(slave->dev.kobj), "master");
+	sysfs_remove_link(&(slave->class_dev.kobj), "master");
 	sprintf(linkname,"slave_%s",slave->name);
-	sysfs_remove_link(&(master->dev.kobj), linkname);
+	sysfs_remove_link(&(master->class_dev.kobj), linkname);
 }
 
 
 /*
  * Show the slaves in the current bond.
  */
-static ssize_t bonding_show_slaves(struct device *d,
-				   struct device_attribute *attr, char *buf)
+static ssize_t bonding_show_slaves(struct class_device *cd, char *buf)
 {
 	struct slave *slave;
 	int i, res = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	read_lock_bh(&bond->lock);
 	bond_for_each_slave(bond, slave, i) {
@@ -253,16 +253,14 @@ static ssize_t bonding_show_slaves(struc
  * up for this to succeed.
  * This function is largely the same flow as bonding_update_bonds().
  */
-static ssize_t bonding_store_slaves(struct device *d,
-				    struct device_attribute *attr,
-				    const char *buffer, size_t count)
+static ssize_t bonding_store_slaves(struct class_device *cd, const char *buffer, size_t count)
 {
 	char command[IFNAMSIZ + 1] = { 0, };
 	char *ifname;
 	int i, res, found, ret = count;
 	struct slave *slave;
 	struct net_device *dev = NULL;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	/* Quick sanity check -- is the bond interface up? */
 	if (!(bond->dev->flags & IFF_UP)) {
@@ -388,28 +386,25 @@ out:
 	return ret;
 }
 
-static DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves, bonding_store_slaves);
+static CLASS_DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves, bonding_store_slaves);
 
 /*
  * Show and set the bonding mode.  The bond interface must be down to
  * change the mode.
  */
-static ssize_t bonding_show_mode(struct device *d,
-				 struct device_attribute *attr, char *buf)
+static ssize_t bonding_show_mode(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%s %d\n",
 			bond_mode_tbl[bond->params.mode].modename,
 			bond->params.mode) + 1;
 }
 
-static ssize_t bonding_store_mode(struct device *d,
-				  struct device_attribute *attr,
-				  const char *buf, size_t count)
+static ssize_t bonding_store_mode(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->dev->flags & IFF_UP) {
 		printk(KERN_ERR DRV_NAME
@@ -442,18 +437,16 @@ static ssize_t bonding_store_mode(struct
 out:
 	return ret;
 }
-static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR, bonding_show_mode, bonding_store_mode);
+static CLASS_DEVICE_ATTR(mode, S_IRUGO | S_IWUSR, bonding_show_mode, bonding_store_mode);
 
 /*
  * Show and set the bonding transmit hash method.  The bond interface must be down to
  * change the xmit hash policy.
  */
-static ssize_t bonding_show_xmit_hash(struct device *d,
-				      struct device_attribute *attr,
-				      char *buf)
+static ssize_t bonding_show_xmit_hash(struct class_device *cd, char *buf)
 {
 	int count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if ((bond->params.mode != BOND_MODE_XOR) &&
 	    (bond->params.mode != BOND_MODE_8023AD)) {
@@ -468,12 +461,10 @@ static ssize_t bonding_show_xmit_hash(st
 	return count;
 }
 
-static ssize_t bonding_store_xmit_hash(struct device *d,
-				       struct device_attribute *attr,
-				       const char *buf, size_t count)
+static ssize_t bonding_store_xmit_hash(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->dev->flags & IFF_UP) {
 		printk(KERN_ERR DRV_NAME
@@ -509,7 +500,7 @@ static ssize_t bonding_store_xmit_hash(s
 out:
 	return ret;
 }
-static DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR, bonding_show_xmit_hash, bonding_store_xmit_hash);
+static CLASS_DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR, bonding_show_xmit_hash, bonding_store_xmit_hash);
 
 /*
  * Show and set the arp timer interval.  There are two tricky bits
@@ -517,21 +508,17 @@ static DEVICE_ATTR(xmit_hash_policy, S_I
  * MII monitoring.  Second, if the ARP timer isn't running, we must
  * start it.
  */
-static ssize_t bonding_show_arp_interval(struct device *d,
-					 struct device_attribute *attr,
-					 char *buf)
+static ssize_t bonding_show_arp_interval(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%d\n", bond->params.arp_interval) + 1;
 }
 
-static ssize_t bonding_store_arp_interval(struct device *d,
-					  struct device_attribute *attr,
-					  const char *buf, size_t count)
+static ssize_t bonding_store_arp_interval(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (sscanf(buf, "%d", &new_value) != 1) {
 		printk(KERN_ERR DRV_NAME
@@ -603,17 +590,15 @@ static ssize_t bonding_store_arp_interva
 out:
 	return ret;
 }
-static DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR , bonding_show_arp_interval, bonding_store_arp_interval);
+static CLASS_DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR , bonding_show_arp_interval, bonding_store_arp_interval);
 
 /*
  * Show and set the arp targets.
  */
-static ssize_t bonding_show_arp_targets(struct device *d,
-					struct device_attribute *attr,
-					char *buf)
+static ssize_t bonding_show_arp_targets(struct class_device *cd, char *buf)
 {
 	int i, res = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	for (i = 0; i < BOND_MAX_ARP_TARGETS; i++) {
 		if (bond->params.arp_targets[i])
@@ -627,13 +612,11 @@ static ssize_t bonding_show_arp_targets(
 	return res;
 }
 
-static ssize_t bonding_store_arp_targets(struct device *d,
-					 struct device_attribute *attr,
-					 const char *buf, size_t count)
+static ssize_t bonding_store_arp_targets(struct class_device *cd, const char *buf, size_t count)
 {
 	u32 newtarget;
 	int i = 0, done = 0, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 	u32 *targets;
 
 	targets = bond->params.arp_targets;
@@ -711,28 +694,24 @@ static ssize_t bonding_store_arp_targets
 out:
 	return ret;
 }
-static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets);
+static CLASS_DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets);
 
 /*
  * Show and set the up and down delays.  These must be multiples of the
  * MII monitoring value, and are stored internally as the multiplier.
  * Thus, we must translate to MS for the real world.
  */
-static ssize_t bonding_show_downdelay(struct device *d,
-				      struct device_attribute *attr,
-				      char *buf)
+static ssize_t bonding_show_downdelay(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon) + 1;
 }
 
-static ssize_t bonding_store_downdelay(struct device *d,
-				       struct device_attribute *attr,
-				       const char *buf, size_t count)
+static ssize_t bonding_store_downdelay(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (!(bond->params.miimon)) {
 		printk(KERN_ERR DRV_NAME
@@ -773,24 +752,20 @@ static ssize_t bonding_store_downdelay(s
 out:
 	return ret;
 }
-static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR , bonding_show_downdelay, bonding_store_downdelay);
+static CLASS_DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR , bonding_show_downdelay, bonding_store_downdelay);
 
-static ssize_t bonding_show_updelay(struct device *d,
-				    struct device_attribute *attr,
-				    char *buf)
+static ssize_t bonding_show_updelay(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon) + 1;
 
 }
 
-static ssize_t bonding_store_updelay(struct device *d,
-				     struct device_attribute *attr,
-				     const char *buf, size_t count)
+static ssize_t bonding_store_updelay(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (!(bond->params.miimon)) {
 		printk(KERN_ERR DRV_NAME
@@ -831,29 +806,25 @@ static ssize_t bonding_store_updelay(str
 out:
 	return ret;
 }
-static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR , bonding_show_updelay, bonding_store_updelay);
+static CLASS_DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR , bonding_show_updelay, bonding_store_updelay);
 
 /*
  * Show and set the LACP interval.  Interface must be down, and the mode
  * must be set to 802.3ad mode.
  */
-static ssize_t bonding_show_lacp(struct device *d,
-				 struct device_attribute *attr,
-				 char *buf)
+static ssize_t bonding_show_lacp(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%s %d\n",
 		bond_lacp_tbl[bond->params.lacp_fast].modename,
 		bond->params.lacp_fast) + 1;
 }
 
-static ssize_t bonding_store_lacp(struct device *d,
-				  struct device_attribute *attr,
-				  const char *buf, size_t count)
+static ssize_t bonding_store_lacp(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->dev->flags & IFF_UP) {
 		printk(KERN_ERR DRV_NAME
@@ -887,7 +858,7 @@ static ssize_t bonding_store_lacp(struct
 out:
 	return ret;
 }
-static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, bonding_show_lacp, bonding_store_lacp);
+static CLASS_DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, bonding_show_lacp, bonding_store_lacp);
 
 /*
  * Show and set the MII monitor interval.  There are two tricky bits
@@ -895,21 +866,17 @@ static DEVICE_ATTR(lacp_rate, S_IRUGO | 
  * ARP monitoring.  Second, if the timer isn't running, we must
  * start it.
  */
-static ssize_t bonding_show_miimon(struct device *d,
-				   struct device_attribute *attr,
-				   char *buf)
+static ssize_t bonding_show_miimon(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%d\n", bond->params.miimon) + 1;
 }
 
-static ssize_t bonding_store_miimon(struct device *d,
-				    struct device_attribute *attr,
-				    const char *buf, size_t count)
+static ssize_t bonding_store_miimon(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (sscanf(buf, "%d", &new_value) != 1) {
 		printk(KERN_ERR DRV_NAME
@@ -980,7 +947,7 @@ static ssize_t bonding_store_miimon(stru
 out:
 	return ret;
 }
-static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR, bonding_show_miimon, bonding_store_miimon);
+static CLASS_DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR, bonding_show_miimon, bonding_store_miimon);
 
 /*
  * Show and set the primary slave.  The store function is much
@@ -989,12 +956,10 @@ static DEVICE_ATTR(miimon, S_IRUGO | S_I
  * The bond must be a mode that supports a primary for this be
  * set.
  */
-static ssize_t bonding_show_primary(struct device *d,
-				    struct device_attribute *attr,
-				    char *buf)
+static ssize_t bonding_show_primary(struct class_device *cd, char *buf)
 {
 	int count = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->primary_slave)
 		count = sprintf(buf, "%s\n", bond->primary_slave->dev->name) + 1;
@@ -1004,13 +969,11 @@ static ssize_t bonding_show_primary(stru
 	return count;
 }
 
-static ssize_t bonding_store_primary(struct device *d,
-				     struct device_attribute *attr,
-				     const char *buf, size_t count)
+static ssize_t bonding_store_primary(struct class_device *cd, const char *buf, size_t count)
 {
 	int i;
 	struct slave *slave;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	write_lock_bh(&bond->lock);
 	if (!USES_PRIMARY(bond->params.mode)) {
@@ -1049,26 +1012,22 @@ out:
 	write_unlock_bh(&bond->lock);
 	return count;
 }
-static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, bonding_show_primary, bonding_store_primary);
+static CLASS_DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, bonding_show_primary, bonding_store_primary);
 
 /*
  * Show and set the use_carrier flag.
  */
-static ssize_t bonding_show_carrier(struct device *d,
-				    struct device_attribute *attr,
-				    char *buf)
+static ssize_t bonding_show_carrier(struct class_device *cd, char *buf)
 {
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	return sprintf(buf, "%d\n", bond->params.use_carrier) + 1;
 }
 
-static ssize_t bonding_store_carrier(struct device *d,
-				     struct device_attribute *attr,
-				     const char *buf, size_t count)
+static ssize_t bonding_store_carrier(struct class_device *cd, const char *buf, size_t count)
 {
 	int new_value, ret = count;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 
 	if (sscanf(buf, "%d", &new_value) != 1) {
@@ -1090,18 +1049,16 @@ static ssize_t bonding_store_carrier(str
 out:
 	return count;
 }
-static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR, bonding_show_carrier, bonding_store_carrier);
+static CLASS_DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR, bonding_show_carrier, bonding_store_carrier);
 
 
 /*
  * Show and set currently active_slave.
  */
-static ssize_t bonding_show_active_slave(struct device *d,
-					 struct device_attribute *attr,
-					 char *buf)
+static ssize_t bonding_show_active_slave(struct class_device *cd, char *buf)
 {
 	struct slave *curr;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 	int count;
 
 
@@ -1116,15 +1073,13 @@ static ssize_t bonding_show_active_slave
 	return count;
 }
 
-static ssize_t bonding_store_active_slave(struct device *d,
-					  struct device_attribute *attr,
-					  const char *buf, size_t count)
+static ssize_t bonding_store_active_slave(struct class_device *cd, const char *buf, size_t count)
 {
 	int i;
 	struct slave *slave;
         struct slave *old_active = NULL;
         struct slave *new_active = NULL;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	write_lock_bh(&bond->lock);
 	if (!USES_PRIMARY(bond->params.mode)) {
@@ -1186,18 +1141,16 @@ out:
 	return count;
 
 }
-static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR, bonding_show_active_slave, bonding_store_active_slave);
+static CLASS_DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR, bonding_show_active_slave, bonding_store_active_slave);
 
 
 /*
  * Show link status of the bond interface.
  */
-static ssize_t bonding_show_mii_status(struct device *d,
-				       struct device_attribute *attr,
-				       char *buf)
+static ssize_t bonding_show_mii_status(struct class_device *cd, char *buf)
 {
 	struct slave *curr;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	read_lock(&bond->curr_slave_lock);
 	curr = bond->curr_active_slave;
@@ -1205,18 +1158,16 @@ static ssize_t bonding_show_mii_status(s
 
 	return sprintf(buf, "%s\n", (curr) ? "up" : "down") + 1;
 }
-static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
+static CLASS_DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
 
 
 /*
  * Show current 802.3ad aggregator ID.
  */
-static ssize_t bonding_show_ad_aggregator(struct device *d,
-					  struct device_attribute *attr,
-					  char *buf)
+static ssize_t bonding_show_ad_aggregator(struct class_device *cd, char *buf)
 {
 	int count = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->params.mode == BOND_MODE_8023AD) {
 		struct ad_info ad_info;
@@ -1227,18 +1178,16 @@ static ssize_t bonding_show_ad_aggregato
 
 	return count;
 }
-static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL);
+static CLASS_DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL);
 
 
 /*
  * Show number of active 802.3ad ports.
  */
-static ssize_t bonding_show_ad_num_ports(struct device *d,
-					 struct device_attribute *attr,
-					 char *buf)
+static ssize_t bonding_show_ad_num_ports(struct class_device *cd, char *buf)
 {
 	int count = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->params.mode == BOND_MODE_8023AD) {
 		struct ad_info ad_info;
@@ -1249,18 +1198,16 @@ static ssize_t bonding_show_ad_num_ports
 
 	return count;
 }
-static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL);
+static CLASS_DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL);
 
 
 /*
  * Show current 802.3ad actor key.
  */
-static ssize_t bonding_show_ad_actor_key(struct device *d,
-					 struct device_attribute *attr,
-					 char *buf)
+static ssize_t bonding_show_ad_actor_key(struct class_device *cd, char *buf)
 {
 	int count = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->params.mode == BOND_MODE_8023AD) {
 		struct ad_info ad_info;
@@ -1271,18 +1218,16 @@ static ssize_t bonding_show_ad_actor_key
 
 	return count;
 }
-static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL);
+static CLASS_DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL);
 
 
 /*
  * Show current 802.3ad partner key.
  */
-static ssize_t bonding_show_ad_partner_key(struct device *d,
-					   struct device_attribute *attr,
-					   char *buf)
+static ssize_t bonding_show_ad_partner_key(struct class_device *cd, char *buf)
 {
 	int count = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->params.mode == BOND_MODE_8023AD) {
 		struct ad_info ad_info;
@@ -1293,18 +1238,16 @@ static ssize_t bonding_show_ad_partner_k
 
 	return count;
 }
-static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL);
+static CLASS_DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL);
 
 
 /*
  * Show current 802.3ad partner mac.
  */
-static ssize_t bonding_show_ad_partner_mac(struct device *d,
-					   struct device_attribute *attr,
-					   char *buf)
+static ssize_t bonding_show_ad_partner_mac(struct class_device *cd, char *buf)
 {
 	int count = 0;
-	struct bonding *bond = to_bond(d);
+	struct bonding *bond = to_bond(cd);
 
 	if (bond->params.mode == BOND_MODE_8023AD) {
 		struct ad_info ad_info;
@@ -1323,29 +1266,29 @@ static ssize_t bonding_show_ad_partner_m
 
 	return count;
 }
-static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL);
+static CLASS_DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL);
 
 
 
 static struct attribute *per_bond_attrs[] = {
-	&dev_attr_slaves.attr,
-	&dev_attr_mode.attr,
-	&dev_attr_arp_interval.attr,
-	&dev_attr_arp_ip_target.attr,
-	&dev_attr_downdelay.attr,
-	&dev_attr_updelay.attr,
-	&dev_attr_lacp_rate.attr,
-	&dev_attr_xmit_hash_policy.attr,
-	&dev_attr_miimon.attr,
-	&dev_attr_primary.attr,
-	&dev_attr_use_carrier.attr,
-	&dev_attr_active_slave.attr,
-	&dev_attr_mii_status.attr,
-	&dev_attr_ad_aggregator.attr,
-	&dev_attr_ad_num_ports.attr,
-	&dev_attr_ad_actor_key.attr,
-	&dev_attr_ad_partner_key.attr,
-	&dev_attr_ad_partner_mac.attr,
+	&class_device_attr_slaves.attr,
+	&class_device_attr_mode.attr,
+	&class_device_attr_arp_interval.attr,
+	&class_device_attr_arp_ip_target.attr,
+	&class_device_attr_downdelay.attr,
+	&class_device_attr_updelay.attr,
+	&class_device_attr_lacp_rate.attr,
+	&class_device_attr_xmit_hash_policy.attr,
+	&class_device_attr_miimon.attr,
+	&class_device_attr_primary.attr,
+	&class_device_attr_use_carrier.attr,
+	&class_device_attr_active_slave.attr,
+	&class_device_attr_mii_status.attr,
+	&class_device_attr_ad_aggregator.attr,
+	&class_device_attr_ad_num_ports.attr,
+	&class_device_attr_ad_actor_key.attr,
+	&class_device_attr_ad_partner_key.attr,
+	&class_device_attr_ad_partner_mac.attr,
 	NULL,
 };
 
@@ -1370,7 +1313,7 @@ int bond_create_sysfs(void)
 	if (!firstbond)
 		return -ENODEV;
 
-	netdev_class = firstbond->dev->dev.class;
+	netdev_class = firstbond->dev->class_dev.class;
 	if (!netdev_class)
 		return -ENODEV;
 
@@ -1398,13 +1341,13 @@ int bond_create_sysfs_entry(struct bondi
 	struct net_device *dev = bond->dev;
 	int err;
 
-	err = sysfs_create_group(&(dev->dev.kobj), &bonding_group);
+	err = sysfs_create_group(&(dev->class_dev.kobj), &bonding_group);
 	if (err) {
 		printk(KERN_EMERG "eek! didn't create group!\n");
 	}
 
 	if (expected_refcount < 1)
-		expected_refcount = atomic_read(&bond->dev->dev.kobj.kref.refcount);
+		expected_refcount = atomic_read(&bond->dev->class_dev.kobj.kref.refcount);
 
 	return err;
 }
@@ -1415,6 +1358,6 @@ void bond_destroy_sysfs_entry(struct bon
 {
 	struct net_device *dev = bond->dev;
 
-	sysfs_remove_group(&(dev->dev.kobj), &bonding_group);
+	sysfs_remove_group(&(dev->class_dev.kobj), &bonding_group);
 }
 
diff -puN drivers/net/wireless/hostap/hostap_main.c~revert-gregkh-driver-network-class_device-to-device drivers/net/wireless/hostap/hostap_main.c
--- a/drivers/net/wireless/hostap/hostap_main.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/net/wireless/hostap/hostap_main.c
@@ -84,7 +84,7 @@ struct net_device * hostap_add_interface
 	if (strchr(dev->name, '%'))
 		ret = dev_alloc_name(dev, dev->name);
 
-	SET_NETDEV_DEV(dev, mdev->dev.parent);
+	SET_NETDEV_DEV(dev, mdev->class_dev.dev);
 	if (ret >= 0)
 		ret = register_netdevice(dev);
 
diff -puN drivers/net/wireless/orinoco.c~revert-gregkh-driver-network-class_device-to-device drivers/net/wireless/orinoco.c
--- a/drivers/net/wireless/orinoco.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/net/wireless/orinoco.c
@@ -4284,8 +4284,8 @@ static void orinoco_get_drvinfo(struct n
 	strncpy(info->driver, DRIVER_NAME, sizeof(info->driver) - 1);
 	strncpy(info->version, DRIVER_VERSION, sizeof(info->version) - 1);
 	strncpy(info->fw_version, priv->fw_name, sizeof(info->fw_version) - 1);
-	if (dev->dev.parent)
-		strncpy(info->bus_info, dev->dev.parent->bus_id,
+	if (dev->class_dev.dev)
+		strncpy(info->bus_info, dev->class_dev.dev->bus_id,
 			sizeof(info->bus_info) - 1);
 	else
 		snprintf(info->bus_info, sizeof(info->bus_info) - 1,
diff -puN drivers/net/wireless/orinoco_cs.c~revert-gregkh-driver-network-class_device-to-device drivers/net/wireless/orinoco_cs.c
--- a/drivers/net/wireless/orinoco_cs.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/net/wireless/orinoco_cs.c
@@ -343,7 +343,7 @@ orinoco_cs_config(struct pcmcia_device *
 
 	/* Finally, report what we've done */
 	printk(KERN_DEBUG "%s: " DRIVER_NAME " at %s, irq %d, io "
-	       "0x%04x-0x%04x\n", dev->name, dev->dev.parent->bus_id,
+	       "0x%04x-0x%04x\n", dev->name, dev->class_dev.dev->bus_id,
 	       link->irq.AssignedIRQ, link->io.BasePort1,
 	       link->io.BasePort1 + link->io.NumPorts1 - 1);
 
diff -puN drivers/net/wireless/spectrum_cs.c~revert-gregkh-driver-network-class_device-to-device drivers/net/wireless/spectrum_cs.c
--- a/drivers/net/wireless/spectrum_cs.c~revert-gregkh-driver-network-class_device-to-device
+++ a/drivers/net/wireless/spectrum_cs.c
@@ -817,7 +817,7 @@ spectrum_cs_config(struct pcmcia_device 
 
 	/* Finally, report what we've done */
 	printk(KERN_DEBUG "%s: " DRIVER_NAME " at %s, irq %d, io "
-	       "0x%04x-0x%04x\n", dev->name, dev->dev.parent->bus_id,
+	       "0x%04x-0x%04x\n", dev->name, dev->class_dev.dev->bus_id,
 	       link->irq.AssignedIRQ, link->io.BasePort1,
 	       link->io.BasePort1 + link->io.NumPorts1 - 1);
 
diff -puN include/linux/netdevice.h~revert-gregkh-driver-network-class_device-to-device include/linux/netdevice.h
--- a/include/linux/netdevice.h~revert-gregkh-driver-network-class_device-to-device
+++ a/include/linux/netdevice.h
@@ -519,11 +519,10 @@ struct net_device
 #endif /* CONFIG_NET_DIVERT */
 
 	/* class/net/name entry */
-	struct device		dev;
+	struct class_device	class_dev;
 	/* space for optional statistics and wireless sysfs groups */
 	struct attribute_group  *sysfs_groups[3];
 };
-#define to_net_dev(d) container_of(d, struct net_device, dev)
 
 #define	NETDEV_ALIGN		32
 #define	NETDEV_ALIGN_CONST	(NETDEV_ALIGN - 1)
@@ -539,7 +538,7 @@ static inline void *netdev_priv(struct n
 /* 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.parent = (pdev))
+#define SET_NETDEV_DEV(net, pdev)	((net)->class_dev.dev = (pdev))
 
 struct packet_type {
 	__be16			type;	/* This is really htons(ether_type). */
diff -puN net/bridge/br_if.c~revert-gregkh-driver-network-class_device-to-device net/bridge/br_if.c
--- a/net/bridge/br_if.c~revert-gregkh-driver-network-class_device-to-device
+++ a/net/bridge/br_if.c
@@ -282,7 +282,7 @@ static struct net_bridge_port *new_nbp(s
 	kobject_init(&p->kobj);
 	kobject_set_name(&p->kobj, SYSFS_BRIDGE_PORT_ATTR);
 	p->kobj.ktype = &brport_ktype;
-	p->kobj.parent = &(dev->dev.kobj);
+	p->kobj.parent = &(dev->class_dev.kobj);
 	p->kobj.kset = NULL;
 
 	return p;
diff -puN net/bridge/br_sysfs_br.c~revert-gregkh-driver-network-class_device-to-device net/bridge/br_sysfs_br.c
--- a/net/bridge/br_sysfs_br.c~revert-gregkh-driver-network-class_device-to-device
+++ a/net/bridge/br_sysfs_br.c
@@ -21,17 +21,18 @@
 
 #include "br_private.h"
 
-#define to_dev(obj)	container_of(obj, struct device, kobj)
+#define to_class_dev(obj) container_of(obj,struct class_device,kobj)
+#define to_net_dev(class) container_of(class, struct net_device, class_dev)
 #define to_bridge(cd)	((struct net_bridge *)(to_net_dev(cd)->priv))
 
 /*
  * Common code for storing bridge parameters.
  */
-static ssize_t store_bridge_parm(struct device *d,
+static ssize_t store_bridge_parm(struct class_device *cd,
 				 const char *buf, size_t len,
 				 void (*set)(struct net_bridge *, unsigned long))
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	char *endp;
 	unsigned long val;
 
@@ -49,10 +50,9 @@ static ssize_t store_bridge_parm(struct 
 }
 
 
-static ssize_t show_forward_delay(struct device *d,
-				  struct device_attribute *attr, char *buf)
+static ssize_t show_forward_delay(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%lu\n", jiffies_to_clock_t(br->forward_delay));
 }
 
@@ -64,20 +64,18 @@ static void set_forward_delay(struct net
 		br->bridge_forward_delay = delay;
 }
 
-static ssize_t store_forward_delay(struct device *d,
-				   struct device_attribute *attr,
-				   const char *buf, size_t len)
+static ssize_t store_forward_delay(struct class_device *cd, const char *buf,
+				   size_t len)
 {
-	return store_bridge_parm(d, buf, len, set_forward_delay);
+	return store_bridge_parm(cd, buf, len, set_forward_delay);
 }
-static DEVICE_ATTR(forward_delay, S_IRUGO | S_IWUSR,
-		   show_forward_delay, store_forward_delay);
+static CLASS_DEVICE_ATTR(forward_delay, S_IRUGO | S_IWUSR,
+			 show_forward_delay, store_forward_delay);
 
-static ssize_t show_hello_time(struct device *d, struct device_attribute *attr,
-			       char *buf)
+static ssize_t show_hello_time(struct class_device *cd, char *buf)
 {
 	return sprintf(buf, "%lu\n",
-		       jiffies_to_clock_t(to_bridge(d)->hello_time));
+		       jiffies_to_clock_t(to_bridge(cd)->hello_time));
 }
 
 static void set_hello_time(struct net_bridge *br, unsigned long val)
@@ -88,20 +86,19 @@ static void set_hello_time(struct net_br
 		br->bridge_hello_time = t;
 }
 
-static ssize_t store_hello_time(struct device *d,
-				struct device_attribute *attr, const char *buf,
+static ssize_t store_hello_time(struct class_device *cd, const char *buf,
 				size_t len)
 {
-	return store_bridge_parm(d, buf, len, set_hello_time);
+	return store_bridge_parm(cd, buf, len, set_hello_time);
 }
-static DEVICE_ATTR(hello_time, S_IRUGO | S_IWUSR, show_hello_time,
-		   store_hello_time);
 
-static ssize_t show_max_age(struct device *d, struct device_attribute *attr,
-			    char *buf)
+static CLASS_DEVICE_ATTR(hello_time, S_IRUGO | S_IWUSR, show_hello_time,
+			 store_hello_time);
+
+static ssize_t show_max_age(struct class_device *cd, char *buf)
 {
 	return sprintf(buf, "%lu\n",
-		       jiffies_to_clock_t(to_bridge(d)->max_age));
+		       jiffies_to_clock_t(to_bridge(cd)->max_age));
 }
 
 static void set_max_age(struct net_bridge *br, unsigned long val)
@@ -112,17 +109,18 @@ static void set_max_age(struct net_bridg
 		br->bridge_max_age = t;
 }
 
-static ssize_t store_max_age(struct device *d, struct device_attribute *attr,
-			     const char *buf, size_t len)
+static ssize_t store_max_age(struct class_device *cd, const char *buf,
+				size_t len)
 {
-	return store_bridge_parm(d, buf, len, set_max_age);
+	return store_bridge_parm(cd, buf, len, set_max_age);
 }
-static DEVICE_ATTR(max_age, S_IRUGO | S_IWUSR, show_max_age, store_max_age);
 
-static ssize_t show_ageing_time(struct device *d,
-				struct device_attribute *attr, char *buf)
+static CLASS_DEVICE_ATTR(max_age, S_IRUGO | S_IWUSR, show_max_age,
+			 store_max_age);
+
+static ssize_t show_ageing_time(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%lu\n", jiffies_to_clock_t(br->ageing_time));
 }
 
@@ -131,19 +129,17 @@ static void set_ageing_time(struct net_b
 	br->ageing_time = clock_t_to_jiffies(val);
 }
 
-static ssize_t store_ageing_time(struct device *d,
-				 struct device_attribute *attr,
-				 const char *buf, size_t len)
+static ssize_t store_ageing_time(struct class_device *cd, const char *buf,
+				 size_t len)
 {
-	return store_bridge_parm(d, buf, len, set_ageing_time);
+	return store_bridge_parm(cd, buf, len, set_ageing_time);
 }
-static DEVICE_ATTR(ageing_time, S_IRUGO | S_IWUSR, show_ageing_time,
-		   store_ageing_time);
 
-static ssize_t show_stp_state(struct device *d,
-			      struct device_attribute *attr, char *buf)
+static CLASS_DEVICE_ATTR(ageing_time, S_IRUGO | S_IWUSR, show_ageing_time,
+			 store_ageing_time);
+static ssize_t show_stp_state(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%d\n", br->stp_enabled);
 }
 
@@ -152,19 +148,18 @@ static void set_stp_state(struct net_bri
 	br->stp_enabled = val;
 }
 
-static ssize_t store_stp_state(struct device *d,
-			       struct device_attribute *attr, const char *buf,
-			       size_t len)
+static ssize_t store_stp_state(struct class_device *cd,
+			       const char *buf, size_t len)
 {
-	return store_bridge_parm(d, buf, len, set_stp_state);
+	return store_bridge_parm(cd, buf, len, set_stp_state);
 }
-static DEVICE_ATTR(stp_state, S_IRUGO | S_IWUSR, show_stp_state,
-		   store_stp_state);
 
-static ssize_t show_priority(struct device *d, struct device_attribute *attr,
-			     char *buf)
+static CLASS_DEVICE_ATTR(stp_state, S_IRUGO | S_IWUSR, show_stp_state,
+			 store_stp_state);
+
+static ssize_t show_priority(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%d\n",
 		       (br->bridge_id.prio[0] << 8) | br->bridge_id.prio[1]);
 }
@@ -174,107 +169,92 @@ static void set_priority(struct net_brid
 	br_stp_set_bridge_priority(br, (u16) val);
 }
 
-static ssize_t store_priority(struct device *d, struct device_attribute *attr,
+static ssize_t store_priority(struct class_device *cd,
 			       const char *buf, size_t len)
 {
-	return store_bridge_parm(d, buf, len, set_priority);
+	return store_bridge_parm(cd, buf, len, set_priority);
 }
-static DEVICE_ATTR(priority, S_IRUGO | S_IWUSR, show_priority, store_priority);
+static CLASS_DEVICE_ATTR(priority, S_IRUGO | S_IWUSR, show_priority,
+			 store_priority);
 
-static ssize_t show_root_id(struct device *d, struct device_attribute *attr,
-			    char *buf)
+static ssize_t show_root_id(struct class_device *cd, char *buf)
 {
-	return br_show_bridge_id(buf, &to_bridge(d)->designated_root);
+	return br_show_bridge_id(buf, &to_bridge(cd)->designated_root);
 }
-static DEVICE_ATTR(root_id, S_IRUGO, show_root_id, NULL);
+static CLASS_DEVICE_ATTR(root_id, S_IRUGO, show_root_id, NULL);
 
-static ssize_t show_bridge_id(struct device *d, struct device_attribute *attr,
-			      char *buf)
+static ssize_t show_bridge_id(struct class_device *cd, char *buf)
 {
-	return br_show_bridge_id(buf, &to_bridge(d)->bridge_id);
+	return br_show_bridge_id(buf, &to_bridge(cd)->bridge_id);
 }
-static DEVICE_ATTR(bridge_id, S_IRUGO, show_bridge_id, NULL);
+static CLASS_DEVICE_ATTR(bridge_id, S_IRUGO, show_bridge_id, NULL);
 
-static ssize_t show_root_port(struct device *d, struct device_attribute *attr,
-			      char *buf)
+static ssize_t show_root_port(struct class_device *cd, char *buf)
 {
-	return sprintf(buf, "%d\n", to_bridge(d)->root_port);
+	return sprintf(buf, "%d\n", to_bridge(cd)->root_port);
 }
-static DEVICE_ATTR(root_port, S_IRUGO, show_root_port, NULL);
+static CLASS_DEVICE_ATTR(root_port, S_IRUGO, show_root_port, NULL);
 
-static ssize_t show_root_path_cost(struct device *d,
-				   struct device_attribute *attr, char *buf)
+static ssize_t show_root_path_cost(struct class_device *cd, char *buf)
 {
-	return sprintf(buf, "%d\n", to_bridge(d)->root_path_cost);
+	return sprintf(buf, "%d\n", to_bridge(cd)->root_path_cost);
 }
-static DEVICE_ATTR(root_path_cost, S_IRUGO, show_root_path_cost, NULL);
+static CLASS_DEVICE_ATTR(root_path_cost, S_IRUGO, show_root_path_cost, NULL);
 
-static ssize_t show_topology_change(struct device *d,
-				    struct device_attribute *attr, char *buf)
+static ssize_t show_topology_change(struct class_device *cd, char *buf)
 {
-	return sprintf(buf, "%d\n", to_bridge(d)->topology_change);
+	return sprintf(buf, "%d\n", to_bridge(cd)->topology_change);
 }
-static DEVICE_ATTR(topology_change, S_IRUGO, show_topology_change, NULL);
+static CLASS_DEVICE_ATTR(topology_change, S_IRUGO, show_topology_change, NULL);
 
-static ssize_t show_topology_change_detected(struct device *d,
-					     struct device_attribute *attr,
-					     char *buf)
+static ssize_t show_topology_change_detected(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%d\n", br->topology_change_detected);
 }
-static DEVICE_ATTR(topology_change_detected, S_IRUGO,
-		   show_topology_change_detected, NULL);
+static CLASS_DEVICE_ATTR(topology_change_detected, S_IRUGO, show_topology_change_detected, NULL);
 
-static ssize_t show_hello_timer(struct device *d,
-				struct device_attribute *attr, char *buf)
+static ssize_t show_hello_timer(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%ld\n", br_timer_value(&br->hello_timer));
 }
-static DEVICE_ATTR(hello_timer, S_IRUGO, show_hello_timer, NULL);
+static CLASS_DEVICE_ATTR(hello_timer, S_IRUGO, show_hello_timer, NULL);
 
-static ssize_t show_tcn_timer(struct device *d, struct device_attribute *attr,
-			      char *buf)
+static ssize_t show_tcn_timer(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%ld\n", br_timer_value(&br->tcn_timer));
 }
-static DEVICE_ATTR(tcn_timer, S_IRUGO, show_tcn_timer, NULL);
+static CLASS_DEVICE_ATTR(tcn_timer, S_IRUGO, show_tcn_timer, NULL);
 
-static ssize_t show_topology_change_timer(struct device *d,
-					  struct device_attribute *attr,
-					  char *buf)
+static ssize_t show_topology_change_timer(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%ld\n", br_timer_value(&br->topology_change_timer));
 }
-static DEVICE_ATTR(topology_change_timer, S_IRUGO, show_topology_change_timer,
-		   NULL);
+static CLASS_DEVICE_ATTR(topology_change_timer, S_IRUGO, show_topology_change_timer, NULL);
 
-static ssize_t show_gc_timer(struct device *d, struct device_attribute *attr,
-			     char *buf)
+static ssize_t show_gc_timer(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%ld\n", br_timer_value(&br->gc_timer));
 }
-static DEVICE_ATTR(gc_timer, S_IRUGO, show_gc_timer, NULL);
+static CLASS_DEVICE_ATTR(gc_timer, S_IRUGO, show_gc_timer, NULL);
 
-static ssize_t show_group_addr(struct device *d,
-			       struct device_attribute *attr, char *buf)
+static ssize_t show_group_addr(struct class_device *cd, char *buf)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	return sprintf(buf, "%x:%x:%x:%x:%x:%x\n",
 		       br->group_addr[0], br->group_addr[1],
 		       br->group_addr[2], br->group_addr[3],
 		       br->group_addr[4], br->group_addr[5]);
 }
 
-static ssize_t store_group_addr(struct device *d,
-				struct device_attribute *attr,
-				const char *buf, size_t len)
+static ssize_t store_group_addr(struct class_device *cd, const char *buf,
+				    size_t len)
 {
-	struct net_bridge *br = to_bridge(d);
+	struct net_bridge *br = to_bridge(cd);
 	unsigned new_addr[6];
 	int i;
 
@@ -306,28 +286,28 @@ static ssize_t store_group_addr(struct d
 	return len;
 }
 
-static DEVICE_ATTR(group_addr, S_IRUGO | S_IWUSR,
-		   show_group_addr, store_group_addr);
+static CLASS_DEVICE_ATTR(group_addr, S_IRUGO | S_IWUSR,
+			 show_group_addr, store_group_addr);
 
 
 static struct attribute *bridge_attrs[] = {
-	&dev_attr_forward_delay.attr,
-	&dev_attr_hello_time.attr,
-	&dev_attr_max_age.attr,
-	&dev_attr_ageing_time.attr,
-	&dev_attr_stp_state.attr,
-	&dev_attr_priority.attr,
-	&dev_attr_bridge_id.attr,
-	&dev_attr_root_id.attr,
-	&dev_attr_root_path_cost.attr,
-	&dev_attr_root_port.attr,
-	&dev_attr_topology_change.attr,
-	&dev_attr_topology_change_detected.attr,
-	&dev_attr_hello_timer.attr,
-	&dev_attr_tcn_timer.attr,
-	&dev_attr_topology_change_timer.attr,
-	&dev_attr_gc_timer.attr,
-	&dev_attr_group_addr.attr,
+	&class_device_attr_forward_delay.attr,
+	&class_device_attr_hello_time.attr,
+	&class_device_attr_max_age.attr,
+	&class_device_attr_ageing_time.attr,
+	&class_device_attr_stp_state.attr,
+	&class_device_attr_priority.attr,
+	&class_device_attr_bridge_id.attr,
+	&class_device_attr_root_id.attr,
+	&class_device_attr_root_path_cost.attr,
+	&class_device_attr_root_port.attr,
+	&class_device_attr_topology_change.attr,
+	&class_device_attr_topology_change_detected.attr,
+	&class_device_attr_hello_timer.attr,
+	&class_device_attr_tcn_timer.attr,
+	&class_device_attr_topology_change_timer.attr,
+	&class_device_attr_gc_timer.attr,
+	&class_device_attr_group_addr.attr,
 	NULL
 };
 
@@ -345,8 +325,8 @@ static struct attribute_group bridge_gro
 static ssize_t brforward_read(struct kobject *kobj, char *buf,
 			   loff_t off, size_t count)
 {
-	struct device *dev = to_dev(kobj);
-	struct net_bridge *br = to_bridge(dev);
+	struct class_device *cdev = to_class_dev(kobj);
+	struct net_bridge *br = to_bridge(cdev);
 	int n;
 
 	/* must read whole records */
@@ -383,7 +363,7 @@ static struct bin_attribute bridge_forwa
  */
 int br_sysfs_addbr(struct net_device *dev)
 {
-	struct kobject *brobj = &dev->dev.kobj;
+	struct kobject *brobj = &dev->class_dev.kobj;
 	struct net_bridge *br = netdev_priv(dev);
 	int err;
 
@@ -415,9 +395,9 @@ int br_sysfs_addbr(struct net_device *de
 	}
 	return 0;
  out3:
-	sysfs_remove_bin_file(&dev->dev.kobj, &bridge_forward);
+	sysfs_remove_bin_file(&dev->class_dev.kobj, &bridge_forward);
  out2:
-	sysfs_remove_group(&dev->dev.kobj, &bridge_group);
+	sysfs_remove_group(&dev->class_dev.kobj, &bridge_group);
  out1:
 	return err;
 
@@ -425,7 +405,7 @@ int br_sysfs_addbr(struct net_device *de
 
 void br_sysfs_delbr(struct net_device *dev)
 {
-	struct kobject *kobj = &dev->dev.kobj;
+	struct kobject *kobj = &dev->class_dev.kobj;
 	struct net_bridge *br = netdev_priv(dev);
 
 	kobject_unregister(&br->ifobj);
diff -puN net/bridge/br_sysfs_if.c~revert-gregkh-driver-network-class_device-to-device net/bridge/br_sysfs_if.c
--- a/net/bridge/br_sysfs_if.c~revert-gregkh-driver-network-class_device-to-device
+++ a/net/bridge/br_sysfs_if.c
@@ -211,7 +211,7 @@ int br_sysfs_addif(struct net_bridge_por
 	struct brport_attribute **a;
 	int err;
 
-	err = sysfs_create_link(&p->kobj, &br->dev->dev.kobj,
+	err = sysfs_create_link(&p->kobj, &br->dev->class_dev.kobj, 
 				SYSFS_BRIDGE_PORT_LINK);
 	if (err)
 		goto out2;
diff -puN net/core/dev.c~revert-gregkh-driver-network-class_device-to-device net/core/dev.c
--- a/net/core/dev.c~revert-gregkh-driver-network-class_device-to-device
+++ a/net/core/dev.c
@@ -741,7 +741,7 @@ int dev_change_name(struct net_device *d
 	else
 		strlcpy(dev->name, newname, IFNAMSIZ);
 
-	err = device_rename(&dev->dev, dev->name);
+	err = class_device_rename(&dev->class_dev, dev->name);
 	if (!err) {
 		hlist_del(&dev->name_hlist);
 		hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name));
@@ -3251,8 +3251,8 @@ void free_netdev(struct net_device *dev)
 	BUG_ON(dev->reg_state != NETREG_UNREGISTERED);
 	dev->reg_state = NETREG_RELEASED;
 
-	/* will free via device release */
-	put_device(&dev->dev);
+	/* will free via class release */
+	class_device_put(&dev->class_dev);
 #else
 	kfree((char *)dev - dev->padded);
 #endif
diff -puN net/core/net-sysfs.c~revert-gregkh-driver-network-class_device-to-device net/core/net-sysfs.c
--- a/net/core/net-sysfs.c~revert-gregkh-driver-network-class_device-to-device
+++ a/net/core/net-sysfs.c
@@ -18,6 +18,9 @@
 #include <linux/wireless.h>
 #include <net/iw_handler.h>
 
+#define to_class_dev(obj) container_of(obj,struct class_device,kobj)
+#define to_net_dev(class) container_of(class, struct net_device, class_dev)
+
 static const char fmt_hex[] = "%#x\n";
 static const char fmt_long_hex[] = "%#lx\n";
 static const char fmt_dec[] = "%d\n";
@@ -29,11 +32,10 @@ static inline int dev_isalive(const stru
 }
 
 /* use same locking rules as GIF* ioctl's */
-static ssize_t netdev_show(const struct device *dev,
-			   struct device_attribute *attr, char *buf,
+static ssize_t netdev_show(const struct class_device *cd, char *buf,
 			   ssize_t (*format)(const struct net_device *, char *))
 {
-	struct net_device *net = to_net_dev(dev);
+	struct net_device *net = to_net_dev(cd);
 	ssize_t ret = -EINVAL;
 
 	read_lock(&dev_base_lock);
@@ -50,15 +52,14 @@ static ssize_t format_##field(const stru
 {									\
 	return sprintf(buf, format_string, net->field);			\
 }									\
-static ssize_t show_##field(struct device *dev,				\
-			    struct device_attribute *attr, char *buf)	\
+static ssize_t show_##field(struct class_device *cd, char *buf)		\
 {									\
-	return netdev_show(dev, attr, buf, format_##field);		\
+	return netdev_show(cd, buf, format_##field);			\
 }
 
 
 /* use same locking and permission rules as SIF* ioctl's */
-static ssize_t netdev_store(struct device *dev, struct device_attribute *attr,
+static ssize_t netdev_store(struct class_device *dev,
 			    const char *buf, size_t len,
 			    int (*set)(struct net_device *, unsigned long))
 {
@@ -103,8 +104,7 @@ static ssize_t format_addr(char *buf, co
 	return cp - buf;
 }
 
-static ssize_t show_address(struct device *dev, struct device_attribute *attr,
-			    char *buf)
+static ssize_t show_address(struct class_device *dev, char *buf)
 {
 	struct net_device *net = to_net_dev(dev);
 	ssize_t ret = -EINVAL;
@@ -116,8 +116,7 @@ static ssize_t show_address(struct devic
 	return ret;
 }
 
-static ssize_t show_broadcast(struct device *dev,
-			    struct device_attribute *attr, char *buf)
+static ssize_t show_broadcast(struct class_device *dev, char *buf)
 {
 	struct net_device *net = to_net_dev(dev);
 	if (dev_isalive(net))
@@ -125,8 +124,7 @@ static ssize_t show_broadcast(struct dev
 	return -EINVAL;
 }
 
-static ssize_t show_carrier(struct device *dev,
-			    struct device_attribute *attr, char *buf)
+static ssize_t show_carrier(struct class_device *dev, char *buf)
 {
 	struct net_device *netdev = to_net_dev(dev);
 	if (netif_running(netdev)) {
@@ -135,8 +133,7 @@ static ssize_t show_carrier(struct devic
 	return -EINVAL;
 }
 
-static ssize_t show_dormant(struct device *dev,
-			    struct device_attribute *attr, char *buf)
+static ssize_t show_dormant(struct class_device *dev, char *buf)
 {
 	struct net_device *netdev = to_net_dev(dev);
 
@@ -156,8 +153,7 @@ static const char *operstates[] = {
 	"up"
 };
 
-static ssize_t show_operstate(struct device *dev,
-			      struct device_attribute *attr, char *buf)
+static ssize_t show_operstate(struct class_device *dev, char *buf)
 {
 	const struct net_device *netdev = to_net_dev(dev);
 	unsigned char operstate;
@@ -182,10 +178,9 @@ static int change_mtu(struct net_device 
 	return dev_set_mtu(net, (int) new_mtu);
 }
 
-static ssize_t store_mtu(struct device *dev, struct device_attribute *attr,
-			 const char *buf, size_t len)
+static ssize_t store_mtu(struct class_device *dev, const char *buf, size_t len)
 {
-	return netdev_store(dev, attr, buf, len, change_mtu);
+	return netdev_store(dev, buf, len, change_mtu);
 }
 
 NETDEVICE_SHOW(flags, fmt_hex);
@@ -195,10 +190,9 @@ static int change_flags(struct net_devic
 	return dev_change_flags(net, (unsigned) new_flags);
 }
 
-static ssize_t store_flags(struct device *dev, struct device_attribute *attr,
-			   const char *buf, size_t len)
+static ssize_t store_flags(struct class_device *dev, const char *buf, size_t len)
 {
-	return netdev_store(dev, attr, buf, len, change_flags);
+	return netdev_store(dev, buf, len, change_flags);
 }
 
 NETDEVICE_SHOW(tx_queue_len, fmt_ulong);
@@ -209,11 +203,9 @@ static int change_tx_queue_len(struct ne
 	return 0;
 }
 
-static ssize_t store_tx_queue_len(struct device *dev,
-				  struct device_attribute *attr,
-				  const char *buf, size_t len)
+static ssize_t store_tx_queue_len(struct class_device *dev, const char *buf, size_t len)
 {
-	return netdev_store(dev, attr, buf, len, change_tx_queue_len);
+	return netdev_store(dev, buf, len, change_tx_queue_len);
 }
 
 NETDEVICE_SHOW(weight, fmt_dec);
@@ -224,13 +216,12 @@ static int change_weight(struct net_devi
 	return 0;
 }
 
-static ssize_t store_weight(struct device *dev, struct device_attribute *attr,
-			    const char *buf, size_t len)
+static ssize_t store_weight(struct class_device *dev, const char *buf, size_t len)
 {
-	return netdev_store(dev, attr, buf, len, change_weight);
+	return netdev_store(dev, buf, len, change_weight);
 }
 
-static struct device_attribute net_class_attributes[] = {
+static struct class_device_attribute net_class_attributes[] = {
 	__ATTR(addr_len, S_IRUGO, show_addr_len, NULL),
 	__ATTR(iflink, S_IRUGO, show_iflink, NULL),
 	__ATTR(ifindex, S_IRUGO, show_ifindex, NULL),
@@ -251,11 +242,10 @@ static struct device_attribute net_class
 };
 
 /* Show a given an attribute in the statistics group */
-static ssize_t netstat_show(const struct device *d,
-			    struct device_attribute *attr, char *buf,
+static ssize_t netstat_show(const struct class_device *cd, char *buf, 
 			    unsigned long offset)
 {
-	struct net_device *dev = to_net_dev(d);
+	struct net_device *dev = to_net_dev(cd);
 	struct net_device_stats *stats;
 	ssize_t ret = -EINVAL;
 
@@ -275,13 +265,12 @@ static ssize_t netstat_show(const struct
 
 /* generate a read-only statistics attribute */
 #define NETSTAT_ENTRY(name)						\
-static ssize_t show_##name(struct device *d,				\
-			   struct device_attribute *attr, char *buf) 	\
+static ssize_t show_##name(struct class_device *cd, char *buf) 		\
 {									\
-	return netstat_show(d, attr, buf,				\
+	return netstat_show(cd, buf, 					\
 			    offsetof(struct net_device_stats, name));	\
 }									\
-static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
+static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
 
 NETSTAT_ENTRY(rx_packets);
 NETSTAT_ENTRY(tx_packets);
@@ -308,29 +297,29 @@ NETSTAT_ENTRY(rx_compressed);
 NETSTAT_ENTRY(tx_compressed);
 
 static struct attribute *netstat_attrs[] = {
-	&dev_attr_rx_packets.attr,
-	&dev_attr_tx_packets.attr,
-	&dev_attr_rx_bytes.attr,
-	&dev_attr_tx_bytes.attr,
-	&dev_attr_rx_errors.attr,
-	&dev_attr_tx_errors.attr,
-	&dev_attr_rx_dropped.attr,
-	&dev_attr_tx_dropped.attr,
-	&dev_attr_multicast.attr,
-	&dev_attr_collisions.attr,
-	&dev_attr_rx_length_errors.attr,
-	&dev_attr_rx_over_errors.attr,
-	&dev_attr_rx_crc_errors.attr,
-	&dev_attr_rx_frame_errors.attr,
-	&dev_attr_rx_fifo_errors.attr,
-	&dev_attr_rx_missed_errors.attr,
-	&dev_attr_tx_aborted_errors.attr,
-	&dev_attr_tx_carrier_errors.attr,
-	&dev_attr_tx_fifo_errors.attr,
-	&dev_attr_tx_heartbeat_errors.attr,
-	&dev_attr_tx_window_errors.attr,
-	&dev_attr_rx_compressed.attr,
-	&dev_attr_tx_compressed.attr,
+	&class_device_attr_rx_packets.attr,
+	&class_device_attr_tx_packets.attr,
+	&class_device_attr_rx_bytes.attr,
+	&class_device_attr_tx_bytes.attr,
+	&class_device_attr_rx_errors.attr,
+	&class_device_attr_tx_errors.attr,
+	&class_device_attr_rx_dropped.attr,
+	&class_device_attr_tx_dropped.attr,
+	&class_device_attr_multicast.attr,
+	&class_device_attr_collisions.attr,
+	&class_device_attr_rx_length_errors.attr,
+	&class_device_attr_rx_over_errors.attr,
+	&class_device_attr_rx_crc_errors.attr,
+	&class_device_attr_rx_frame_errors.attr,
+	&class_device_attr_rx_fifo_errors.attr,
+	&class_device_attr_rx_missed_errors.attr,
+	&class_device_attr_tx_aborted_errors.attr,
+	&class_device_attr_tx_carrier_errors.attr,
+	&class_device_attr_tx_fifo_errors.attr,
+	&class_device_attr_tx_heartbeat_errors.attr,
+	&class_device_attr_tx_window_errors.attr,
+	&class_device_attr_rx_compressed.attr,
+	&class_device_attr_tx_compressed.attr,
 	NULL
 };
 
@@ -342,11 +331,11 @@ static struct attribute_group netstat_gr
 
 #ifdef WIRELESS_EXT
 /* helper function that does all the locking etc for wireless stats */
-static ssize_t wireless_show(struct device *d, char *buf,
+static ssize_t wireless_show(struct class_device *cd, char *buf,
 			     ssize_t (*format)(const struct iw_statistics *,
 					       char *))
 {
-	struct net_device *dev = to_net_dev(d);
+	struct net_device *dev = to_net_dev(cd);
 	const struct iw_statistics *iw = NULL;
 	ssize_t ret = -EINVAL;
 	
@@ -371,12 +360,11 @@ static ssize_t format_iw_##name(const st
 {									\
 	return sprintf(buf, format_string, iw->field);			\
 }									\
-static ssize_t show_iw_##name(struct device *d,				\
-			      struct device_attribute *attr, char *buf)	\
+static ssize_t show_iw_##name(struct class_device *cd, char *buf)	\
 {									\
-	return wireless_show(d, buf, format_iw_##name);			\
+	return wireless_show(cd, buf, format_iw_##name);		\
 }									\
-static DEVICE_ATTR(name, S_IRUGO, show_iw_##name, NULL)
+static CLASS_DEVICE_ATTR(name, S_IRUGO, show_iw_##name, NULL)
 
 WIRELESS_SHOW(status, status, fmt_hex);
 WIRELESS_SHOW(link, qual.qual, fmt_dec);
@@ -390,16 +378,16 @@ WIRELESS_SHOW(retries, discard.retries, 
 WIRELESS_SHOW(beacon, miss.beacon, fmt_dec);
 
 static struct attribute *wireless_attrs[] = {
-	&dev_attr_status.attr,
-	&dev_attr_link.attr,
-	&dev_attr_level.attr,
-	&dev_attr_noise.attr,
-	&dev_attr_nwid.attr,
-	&dev_attr_crypt.attr,
-	&dev_attr_fragment.attr,
-	&dev_attr_retries.attr,
-	&dev_attr_misc.attr,
-	&dev_attr_beacon.attr,
+	&class_device_attr_status.attr,
+	&class_device_attr_link.attr,
+	&class_device_attr_level.attr,
+	&class_device_attr_noise.attr,
+	&class_device_attr_nwid.attr,
+	&class_device_attr_crypt.attr,
+	&class_device_attr_fragment.attr,
+	&class_device_attr_retries.attr,
+	&class_device_attr_misc.attr,
+	&class_device_attr_beacon.attr,
 	NULL
 };
 
@@ -410,10 +398,10 @@ static struct attribute_group wireless_g
 #endif
 
 #ifdef CONFIG_HOTPLUG
-static int netdev_uevent(struct device *d, char **envp,
+static int netdev_uevent(struct class_device *cd, char **envp,
 			 int num_envp, char *buf, int size)
 {
-	struct net_device *dev = to_net_dev(d);
+	struct net_device *dev = to_net_dev(cd);
 	int i = 0;
 	int n;
 
@@ -433,11 +421,12 @@ static int netdev_uevent(struct device *
 
 /*
  *	netdev_release -- destroy and free a dead device. 
- *	Called when last reference to device kobject is gone.
+ *	Called when last reference to class_device kobject is gone.
  */
-static void netdev_release(struct device *d)
+static void netdev_release(struct class_device *cd)
 {
-	struct net_device *dev = to_net_dev(d);
+	struct net_device *dev 
+		= container_of(cd, struct net_device, class_dev);
 
 	BUG_ON(dev->reg_state != NETREG_RELEASED);
 
@@ -446,31 +435,31 @@ static void netdev_release(struct device
 
 static struct class net_class = {
 	.name = "net",
-	.dev_release = netdev_release,
-	.dev_attrs = net_class_attributes,
+	.release = netdev_release,
+	.class_dev_attrs = net_class_attributes,
 #ifdef CONFIG_HOTPLUG
-	.dev_uevent = netdev_uevent,
+	.uevent = netdev_uevent,
 #endif
 };
 
 void netdev_unregister_sysfs(struct net_device * net)
 {
-	device_del(&(net->dev));
+	class_device_del(&(net->class_dev));
 }
 
 /* Create sysfs entries for network device. */
 int netdev_register_sysfs(struct net_device *net)
 {
-	struct device *dev = &(net->dev);
+	struct class_device *class_dev = &(net->class_dev);
 	struct attribute_group **groups = net->sysfs_groups;
 
-	device_initialize(dev);
-	dev->class = &net_class;
-	dev->platform_data = net;
-	dev->groups = groups;
+	class_device_initialize(class_dev);
+	class_dev->class = &net_class;
+	class_dev->class_data = net;
+	class_dev->groups = groups;
 
 	BUILD_BUG_ON(BUS_ID_SIZE < IFNAMSIZ);
-	strlcpy(dev->bus_id, net->name, BUS_ID_SIZE);
+	strlcpy(class_dev->class_id, net->name, BUS_ID_SIZE);
 
 	if (net->get_stats)
 		*groups++ = &netstat_group;
@@ -481,7 +470,7 @@ int netdev_register_sysfs(struct net_dev
 		*groups++ = &wireless_group;
 #endif
 
-	return device_add(dev);
+	return class_device_add(class_dev);
 }
 
 int netdev_sysfs_init(void)
_

Patches currently in -mm which might be from akpm@xxxxxxxx are

origin.patch
dont-select-config_hotplug.patch
x86_64-e820c-needs-pgtableh.patch
count_vm_events-fix.patch
add-computone-intelliport-plus-serial-hotplug-support.patch
add-specialix-io8-card-support-hotplug-support.patch
fadvise-remove-dead-comments.patch
vt-remove-vt-specific-declarations-and-definitions-from.patch
tty-remove-include-of-screen_infoh-from-ttyh.patch
md-include-sector-number-in-messages-about-corrected-read-errors.patch
md-oops-workaround.patch
disable-debugging-version-of-write_lock.patch
git-acpi.patch
acpi-asus-s3-resume-fix-fix.patch
sony_apci-resume.patch
kauditd_thread-warning-fix.patch
revert-gregkh-driver-class_device_rename-remove.patch
revert-gregkh-driver-network-class_device-to-device.patch
add-__must_check-to-device-management-code.patch
add-config_enable_must_check.patch
v4l-dev2-handle-__must_check.patch
videodev-check-return-values.patch
git-geode-fixup.patch
git-gfs2.patch
git-gfs2-fixup.patch
git-ia64.patch
git-ia64-fixup.patch
git-ieee1394-fixup.patch
git-input.patch
git-input-list_for_each_entry-fix.patch
git-input-list_for_each_entry-fix-fix.patch
git-klibc.patch
git-hdrcleanup-vs-git-klibc-on-ia64.patch
git-hdrcleanup-vs-git-klibc-on-ia64-2.patch
git-libata-all.patch
sata-is-bust-on-s390.patch
e1000-irq-naming-update.patch
8139cp-printk-fix.patch
82596-section-fixes.patch
ac3200-section-fixes.patch
cops-section-fix.patch
cs89x0-section-fix.patch
at1700-section-fix.patch
e2100-section-fix.patch
eepro-section-fix.patch
eexpress-section-fix.patch
es3210-section-fix.patch
eth16i-section-fix.patch
lance-section-fix.patch
lne390-section-fix.patch
ni52-section-fix.patch
ibmtr-section-fix.patch
smctr-section-fix.patch
wd-section-fix.patch
ni65-section-fix.patch
seeq8005-section-fix.patch
winbond-840-section-fix.patch
fealnx-section-fix.patch
sundance-section-fix.patch
drivers-net-ns83820c-add-paramter-to-disable-auto.patch
git-pcmcia-fixup.patch
git-powerpc-briq_panel-Kconfig-fix.patch
git-sas.patch
git-serial.patch
serial-fix-uart_bug_txen-test.patch
revert-gregkh-pci-pci-test-that-drivers-properly-call-pci_set_master.patch
revert-VIA-quirk-fixup-additional-PCI-IDs.patch
revert-PCI-quirk-VIA-IRQ-fixup-should-only-run-for-VIA-southbridges.patch
git-s390-fixup.patch
git-scsi-rc-fixes.patch
NCR_D700-section-fix.patch
areca-raid-linux-scsi-driver.patch
areca-raid-linux-scsi-driver-update7-fix.patch
git-scsi-target-fixup.patch
sparc64-of_device_register-error-checking-fix.patch
pm-usb-hcds-use-pm_event_prethaw-fix.patch
kill-usb-kconfig-warning.patch
rtl8150_disconnect-needs-tasklet_kill.patch
git-supertrak-fixup.patch
bcm43xx-opencoded-locking.patch
sleazy-fpu-feature-x86_64-support.patch
x86_64-wire-up-oops_enter-oops_exit.patch
adix-tree-rcu-lockless-readside-update-tidy.patch
mm-tracking-shared-dirty-pages-checks.patch
mm-tracking-shared-dirty-pages-wimp.patch
convert-i386-numa-kva-space-to-bootmem-tidy.patch
acx1xx-wireless-driver.patch
tiacx-pci-build-fix.patch
tiacx-ia64-fix.patch
tiacx-build-fix.patch
binfmt_elf-consistently-use-loff_t.patch
fdpic-move-roundup-into-linux-kernelh-fix.patch
get_cmos_time-locking-fix.patch
swsusp-warning-fix.patch
swsusp-write-timer.patch
swsusp-write-speedup.patch
swsusp-read-timer.patch
swsusp-read-speedup.patch
swsusp-read-speedup-fix.patch
swsusp-read-speedup-cleanup.patch
swsusp-read-speedup-cleanup-2.patch
uml-timer-initialization-cleanup-fix.patch
uml-move-_kernc-files-fix.patch
deprecate-smbfs-in-favour-of-cifs.patch
edac-new-opteron-athlon64-memory-controller-driver-tidy.patch
x86-microcode-microcode-driver-cleanup-tidy.patch
x86-microcode-add-sysfs-and-hotplug-support-fix.patch
x86-microcode-add-sysfs-and-hotplug-support-fix-fix.patch
add-address_space_operationsbatch_write.patch
add-address_space_operationsbatch_write-fix.patch
fix-weird-logic-in-alloc_fdtable.patch
alloc_fdtable-cleanup.patch
led-class-support-for-soekris-net48xx-fix.patch
led-class-support-for-soekris-net48xx-fix-fix.patch
led-class-support-for-soekris-net48xx-fix-fix-fix.patch
pc8736x_gpio-fix-re-modprobe-errors-fix-finish-cdev-init-tidy.patch
revert-pcmcia-make-ide_cs-work-with-the-memory-space-of-cf-cards-if-io-space-is-not-available.patch
checklist-update.patch
reiserfs-on-demand-bitmap-loading.patch
per-task-delay-accounting-taskstats-interface.patch
per-task-delay-accounting-proc-export-of-aggregated-block-i-o-delays.patch
delay-accounting-taskstats-interface-send-tgid-once.patch
per-task-delay-accounting-taskstats-interface-control-exit-data-through-cpumasks-fix.patch
task-watchers-task-watchers.patch
task-watchers-add-support-for-per-task-watchers.patch
swap_prefetch-vs-zoned-counters.patch
ecryptfs-mmap-operations.patch
ecryptfs-alpha-build-fix.patch
ecryptfs-more-elegant-aes-key-size-manipulation.patch
ecryptfs-get_sb_dev-fix.patch
namespaces-add-nsproxy-dont-include-compileh.patch
namespaces-utsname-switch-to-using-uts-namespaces.patch
namespaces-utsname-use-init_utsname-when-appropriate.patch
namespaces-utsname-implement-utsname-namespaces.patch
namespaces-utsname-sysctl-hack.patch
ipc-namespace-core.patch
readahead-sysctl-parameters-fix.patch
make-copy_from_user_inatomic-not-zero-the-tail-on-i386-vs-reiser4.patch
reiser4-hardirq-include-fix.patch
reiser4-run-truncate_inode_pages-in-reiser4_delete_inode.patch
reiser4-get_sb_dev-fix.patch
reiser4-vs-zoned-allocator.patch
hpt3xx-rework-rate-filtering-tidy.patch
cirrus-logic-framebuffer-i2c-support-fix.patch
genirq-convert-the-i386-architecture-to-irq-chips.patch
genirq-x86_64-irq-reenable-migrating-irqs-to-other-cpus.patch
genirq-msi-simplify-msi-enable-and-disable.patch
genirq-ia64-irq-dynamic-irq-support.patch
genirq-msi-only-build-msi-apicc-on-ia64-fix.patch
genirq-i386-irq-remove-the-msi-assumption-that-irq-==-vector.patch
nr_blockdev_pages-in_interrupt-warning.patch
device-suspend-debug.patch
revert-tty-buffering-comment-out-debug-code.patch
slab-leaks3-default-y.patch
x86-kmap_atomic-debugging.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux