Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next 4/5] irda: Fix parameter extraction stack overflow
From: Samuel Ortiz @ 2010-10-11  0:25 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Samuel Ortiz, stable
In-Reply-To: <cover.1286756123.git.sameo@linux.intel.com>

Cc: stable@kernel.org
Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
---
 net/irda/parameters.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/net/irda/parameters.c b/net/irda/parameters.c
index fc1a205..71cd38c 100644
--- a/net/irda/parameters.c
+++ b/net/irda/parameters.c
@@ -298,6 +298,8 @@ static int irda_extract_string(void *self, __u8 *buf, int len, __u8 pi,
 
 	p.pi = pi;     /* In case handler needs to know */
 	p.pl = buf[1]; /* Extract length of value */
+	if (p.pl > 32)
+		p.pl = 32;
 
 	IRDA_DEBUG(2, "%s(), pi=%#x, pl=%d\n", __func__,
 		   p.pi, p.pl);
@@ -318,7 +320,7 @@ static int irda_extract_string(void *self, __u8 *buf, int len, __u8 pi,
 		   (__u8) str[0], (__u8) str[1]);
 
 	/* Null terminate string */
-	str[p.pl+1] = '\0';
+	str[p.pl] = '\0';
 
 	p.pv.c = str; /* Handler will need to take a copy */
 
-- 
1.7.1


^ permalink raw reply related

* [PATCH net-next 3/5] irda: Test index before read in stir421x_patch_device()
From: Samuel Ortiz @ 2010-10-11  0:25 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Roel Kluin, Samuel Ortiz
In-Reply-To: <cover.1286756123.git.sameo@linux.intel.com>

From: Roel Kluin <roel.kluin@gmail.com>

Test whether index exceeds fw->size before reading the element

Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
---
 drivers/net/irda/irda-usb.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index cce82f1..e4ea619 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -1124,11 +1124,11 @@ static int stir421x_patch_device(struct irda_usb_cb *self)
                  * The actual image starts after the "STMP" keyword
                  * so forward to the firmware header tag
                  */
-                for (i = 0; (fw->data[i] != STIR421X_PATCH_END_OF_HDR_TAG) &&
-			     (i < fw->size); i++) ;
+                for (i = 0; i < fw->size && fw->data[i] !=
+			     STIR421X_PATCH_END_OF_HDR_TAG; i++) ;
                 /* here we check for the out of buffer case */
-                if ((STIR421X_PATCH_END_OF_HDR_TAG == fw->data[i]) &&
-                    (i < STIR421X_PATCH_CODE_OFFSET)) {
+                if (i < STIR421X_PATCH_CODE_OFFSET && i < fw->size &&
+				STIR421X_PATCH_END_OF_HDR_TAG == fw->data[i]) {
                         if (!memcmp(fw->data + i + 1, STIR421X_PATCH_STMP_TAG,
                                     sizeof(STIR421X_PATCH_STMP_TAG) - 1)) {
 
-- 
1.7.1


^ permalink raw reply related

* [PATCH net-next 2/5] irda: Remove BKL instances from irnet
From: Samuel Ortiz @ 2010-10-11  0:24 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Samuel Ortiz
In-Reply-To: <cover.1286756123.git.sameo@linux.intel.com>

The code intends to lock the irnet_socket, so adding a mutex to it allows
for a complet BKL removal.

Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
---
 net/irda/irnet/irnet.h     |    2 +
 net/irda/irnet/irnet_ppp.c |   61 ++++++++++++++++++++++++++++++-------------
 2 files changed, 44 insertions(+), 19 deletions(-)

diff --git a/net/irda/irnet/irnet.h b/net/irda/irnet/irnet.h
index 4300df3..0d82ff5 100644
--- a/net/irda/irnet/irnet.h
+++ b/net/irda/irnet/irnet.h
@@ -458,6 +458,8 @@ typedef struct irnet_socket
   int			disco_index;	/* Last read in the discovery log */
   int			disco_number;	/* Size of the discovery log */
 
+  struct mutex		lock;
+
 } irnet_socket;
 
 /*
diff --git a/net/irda/irnet/irnet_ppp.c b/net/irda/irnet/irnet_ppp.c
index 69f1fa6..0993bd4 100644
--- a/net/irda/irnet/irnet_ppp.c
+++ b/net/irda/irnet/irnet_ppp.c
@@ -480,7 +480,6 @@ dev_irnet_open(struct inode *	inode,
   ap = kzalloc(sizeof(*ap), GFP_KERNEL);
   DABORT(ap == NULL, -ENOMEM, FS_ERROR, "Can't allocate struct irnet...\n");
 
-  lock_kernel();
   /* initialize the irnet structure */
   ap->file = file;
 
@@ -502,18 +501,20 @@ dev_irnet_open(struct inode *	inode,
     {
       DERROR(FS_ERROR, "Can't setup IrDA link...\n");
       kfree(ap);
-      unlock_kernel();
+
       return err;
     }
 
   /* For the control channel */
   ap->event_index = irnet_events.index;	/* Cancel all past events */
 
+  mutex_init(&ap->lock);
+
   /* Put our stuff where we will be able to find it later */
   file->private_data = ap;
 
   DEXIT(FS_TRACE, " - ap=0x%p\n", ap);
-  unlock_kernel();
+
   return 0;
 }
 
@@ -664,7 +665,9 @@ dev_irnet_ioctl(
 	{
 	  DEBUG(FS_INFO, "Entering PPP discipline.\n");
 	  /* PPP channel setup (ap->chan in configued in dev_irnet_open())*/
-	  lock_kernel();
+	  if (mutex_lock_interruptible(&ap->lock))
+		  return -EINTR;
+
 	  err = ppp_register_channel(&ap->chan);
 	  if(err == 0)
 	    {
@@ -677,14 +680,17 @@ dev_irnet_ioctl(
 	    }
 	  else
 	    DERROR(FS_ERROR, "Can't setup PPP channel...\n");
-          unlock_kernel();
+
+          mutex_unlock(&ap->lock);
 	}
       else
 	{
 	  /* In theory, should be N_TTY */
 	  DEBUG(FS_INFO, "Exiting PPP discipline.\n");
 	  /* Disconnect from the generic PPP layer */
-	  lock_kernel();
+	  if (mutex_lock_interruptible(&ap->lock))
+		  return -EINTR;
+
 	  if(ap->ppp_open)
 	    {
 	      ap->ppp_open = 0;
@@ -693,24 +699,31 @@ dev_irnet_ioctl(
 	  else
 	    DERROR(FS_ERROR, "Channel not registered !\n");
 	  err = 0;
-	  unlock_kernel();
+
+	  mutex_unlock(&ap->lock);
 	}
       break;
 
       /* Query PPP channel and unit number */
     case PPPIOCGCHAN:
-      lock_kernel();
+      if (mutex_lock_interruptible(&ap->lock))
+	      return -EINTR;
+
       if(ap->ppp_open && !put_user(ppp_channel_index(&ap->chan),
 						(int __user *)argp))
 	err = 0;
-      unlock_kernel();
+
+      mutex_unlock(&ap->lock);
       break;
     case PPPIOCGUNIT:
-      lock_kernel();
+      if (mutex_lock_interruptible(&ap->lock))
+	      return -EINTR;
+
       if(ap->ppp_open && !put_user(ppp_unit_number(&ap->chan),
 						(int __user *)argp))
         err = 0;
-      unlock_kernel();
+
+      mutex_unlock(&ap->lock);
       break;
 
       /* All these ioctls can be passed both directly and from ppp_generic,
@@ -730,9 +743,12 @@ dev_irnet_ioctl(
       if(!capable(CAP_NET_ADMIN))
 	err = -EPERM;
       else {
-	lock_kernel();
+	if (mutex_lock_interruptible(&ap->lock))
+	      return -EINTR;
+
 	err = ppp_irnet_ioctl(&ap->chan, cmd, arg);
-	unlock_kernel();
+
+	mutex_unlock(&ap->lock);
       }
       break;
 
@@ -740,7 +756,9 @@ dev_irnet_ioctl(
       /* Get termios */
     case TCGETS:
       DEBUG(FS_INFO, "Get termios.\n");
-      lock_kernel();
+      if (mutex_lock_interruptible(&ap->lock))
+	      return -EINTR;
+
 #ifndef TCGETS2
       if(!kernel_termios_to_user_termios((struct termios __user *)argp, &ap->termios))
 	err = 0;
@@ -748,12 +766,15 @@ dev_irnet_ioctl(
       if(kernel_termios_to_user_termios_1((struct termios __user *)argp, &ap->termios))
 	err = 0;
 #endif
-      unlock_kernel();
+
+      mutex_unlock(&ap->lock);
       break;
       /* Set termios */
     case TCSETSF:
       DEBUG(FS_INFO, "Set termios.\n");
-      lock_kernel();
+      if (mutex_lock_interruptible(&ap->lock))
+	      return -EINTR;
+
 #ifndef TCGETS2
       if(!user_termios_to_kernel_termios(&ap->termios, (struct termios __user *)argp))
 	err = 0;
@@ -761,7 +782,8 @@ dev_irnet_ioctl(
       if(!user_termios_to_kernel_termios_1(&ap->termios, (struct termios __user *)argp))
 	err = 0;
 #endif
-      unlock_kernel();
+
+      mutex_unlock(&ap->lock);
       break;
 
       /* Set DTR/RTS */
@@ -784,9 +806,10 @@ dev_irnet_ioctl(
        * We should also worry that we don't accept junk here and that
        * we get rid of our own buffers */
 #ifdef FLUSH_TO_PPP
-      lock_kernel();
+      if (mutex_lock_interruptible(&ap->lock))
+	      return -EINTR;
       ppp_output_wakeup(&ap->chan);
-      unlock_kernel();
+      mutex_unlock(&ap->lock);
 #endif /* FLUSH_TO_PPP */
       err = 0;
       break;
-- 
1.7.1


^ permalink raw reply related

* [PATCH net-next 1/5] irda: Remove BKL instances from af_irda.c
From: Samuel Ortiz @ 2010-10-11  0:24 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Samuel Ortiz
In-Reply-To: <cover.1286756123.git.sameo@linux.intel.com>

Most of the times, lock_kernel() was pointless or could simply be replaced
by lock_sock().

Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
---
 net/irda/af_irda.c |  370 +++++++++++++++++++++++++++------------------------
 1 files changed, 196 insertions(+), 174 deletions(-)

diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
index bf36351..7f09798 100644
--- a/net/irda/af_irda.c
+++ b/net/irda/af_irda.c
@@ -715,14 +715,11 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
 	struct sockaddr_irda saddr;
 	struct sock *sk = sock->sk;
 	struct irda_sock *self = irda_sk(sk);
-	int err;
 
-	lock_kernel();
 	memset(&saddr, 0, sizeof(saddr));
 	if (peer) {
-		err  = -ENOTCONN;
 		if (sk->sk_state != TCP_ESTABLISHED)
-			goto out;
+			return -ENOTCONN;
 
 		saddr.sir_family = AF_IRDA;
 		saddr.sir_lsap_sel = self->dtsap_sel;
@@ -739,10 +736,8 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
 	/* uaddr_len come to us uninitialised */
 	*uaddr_len = sizeof (struct sockaddr_irda);
 	memcpy(uaddr, &saddr, *uaddr_len);
-	err = 0;
-out:
-	unlock_kernel();
-	return err;
+
+	return 0;
 }
 
 /*
@@ -758,7 +753,8 @@ static int irda_listen(struct socket *sock, int backlog)
 
 	IRDA_DEBUG(2, "%s()\n", __func__);
 
-	lock_kernel();
+	lock_sock(sk);
+
 	if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) &&
 	    (sk->sk_type != SOCK_DGRAM))
 		goto out;
@@ -770,7 +766,7 @@ static int irda_listen(struct socket *sock, int backlog)
 		err = 0;
 	}
 out:
-	unlock_kernel();
+	release_sock(sk);
 
 	return err;
 }
@@ -793,7 +789,7 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	if (addr_len != sizeof(struct sockaddr_irda))
 		return -EINVAL;
 
-	lock_kernel();
+	lock_sock(sk);
 #ifdef CONFIG_IRDA_ULTRA
 	/* Special care for Ultra sockets */
 	if ((sk->sk_type == SOCK_DGRAM) &&
@@ -836,7 +832,7 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 
 	err = 0;
 out:
-	unlock_kernel();
+	release_sock(sk);
 	return err;
 }
 
@@ -856,12 +852,13 @@ static int irda_accept(struct socket *sock, struct socket *newsock, int flags)
 
 	IRDA_DEBUG(2, "%s()\n", __func__);
 
-	lock_kernel();
 	err = irda_create(sock_net(sk), newsock, sk->sk_protocol, 0);
 	if (err)
-		goto out;
+		return err;
 
 	err = -EINVAL;
+
+	lock_sock(sk);
 	if (sock->state != SS_UNCONNECTED)
 		goto out;
 
@@ -947,7 +944,7 @@ static int irda_accept(struct socket *sock, struct socket *newsock, int flags)
 	irda_connect_response(new);
 	err = 0;
 out:
-	unlock_kernel();
+	release_sock(sk);
 	return err;
 }
 
@@ -981,7 +978,7 @@ static int irda_connect(struct socket *sock, struct sockaddr *uaddr,
 
 	IRDA_DEBUG(2, "%s(%p)\n", __func__, self);
 
-	lock_kernel();
+	lock_sock(sk);
 	/* Don't allow connect for Ultra sockets */
 	err = -ESOCKTNOSUPPORT;
 	if ((sk->sk_type == SOCK_DGRAM) && (sk->sk_protocol == IRDAPROTO_ULTRA))
@@ -1072,6 +1069,8 @@ static int irda_connect(struct socket *sock, struct sockaddr *uaddr,
 
 	if (sk->sk_state != TCP_ESTABLISHED) {
 		sock->state = SS_UNCONNECTED;
+		if (sk->sk_prot->disconnect(sk, flags))
+			sock->state = SS_DISCONNECTING;
 		err = sock_error(sk);
 		if (!err)
 			err = -ECONNRESET;
@@ -1084,7 +1083,7 @@ static int irda_connect(struct socket *sock, struct sockaddr *uaddr,
 	self->saddr = irttp_get_saddr(self->tsap);
 	err = 0;
 out:
-	unlock_kernel();
+	release_sock(sk);
 	return err;
 }
 
@@ -1231,7 +1230,6 @@ static int irda_release(struct socket *sock)
 	if (sk == NULL)
 		return 0;
 
-	lock_kernel();
 	lock_sock(sk);
 	sk->sk_state       = TCP_CLOSE;
 	sk->sk_shutdown   |= SEND_SHUTDOWN;
@@ -1250,7 +1248,6 @@ static int irda_release(struct socket *sock)
 	/* Destroy networking socket if we are the last reference on it,
 	 * i.e. if(sk->sk_refcnt == 0) -> sk_free(sk) */
 	sock_put(sk);
-	unlock_kernel();
 
 	/* Notes on socket locking and deallocation... - Jean II
 	 * In theory we should put pairs of sock_hold() / sock_put() to
@@ -1298,7 +1295,6 @@ static int irda_sendmsg(struct kiocb *iocb, struct socket *sock,
 
 	IRDA_DEBUG(4, "%s(), len=%zd\n", __func__, len);
 
-	lock_kernel();
 	/* Note : socket.c set MSG_EOR on SEQPACKET sockets */
 	if (msg->msg_flags & ~(MSG_DONTWAIT | MSG_EOR | MSG_CMSG_COMPAT |
 			       MSG_NOSIGNAL)) {
@@ -1306,6 +1302,8 @@ static int irda_sendmsg(struct kiocb *iocb, struct socket *sock,
 		goto out;
 	}
 
+	lock_sock(sk);
+
 	if (sk->sk_shutdown & SEND_SHUTDOWN)
 		goto out_err;
 
@@ -1361,14 +1359,14 @@ static int irda_sendmsg(struct kiocb *iocb, struct socket *sock,
 		goto out_err;
 	}
 
-	unlock_kernel();
+	release_sock(sk);
 	/* Tell client how much data we actually sent */
 	return len;
 
 out_err:
 	err = sk_stream_error(sk, msg->msg_flags, err);
 out:
-	unlock_kernel();
+	release_sock(sk);
 	return err;
 
 }
@@ -1390,14 +1388,10 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
 
 	IRDA_DEBUG(4, "%s()\n", __func__);
 
-	lock_kernel();
-	if ((err = sock_error(sk)) < 0)
-		goto out;
-
 	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
 				flags & MSG_DONTWAIT, &err);
 	if (!skb)
-		goto out;
+		return err;
 
 	skb_reset_transport_header(skb);
 	copied = skb->len;
@@ -1425,12 +1419,8 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
 			irttp_flow_request(self->tsap, FLOW_START);
 		}
 	}
-	unlock_kernel();
-	return copied;
 
-out:
-	unlock_kernel();
-	return err;
+	return copied;
 }
 
 /*
@@ -1448,17 +1438,15 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
 
 	IRDA_DEBUG(3, "%s()\n", __func__);
 
-	lock_kernel();
 	if ((err = sock_error(sk)) < 0)
-		goto out;
+		return err;
 
-	err = -EINVAL;
 	if (sock->flags & __SO_ACCEPTCON)
-		goto out;
+		return -EINVAL;
 
 	err =-EOPNOTSUPP;
 	if (flags & MSG_OOB)
-		goto out;
+		return -EOPNOTSUPP;
 
 	err = 0;
 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
@@ -1500,7 +1488,7 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
 			finish_wait(sk_sleep(sk), &wait);
 
 			if (err)
-				goto out;
+				return err;
 			if (sk->sk_shutdown & RCV_SHUTDOWN)
 				break;
 
@@ -1553,9 +1541,7 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
 		}
 	}
 
-out:
-	unlock_kernel();
-	return err ? : copied;
+	return copied;
 }
 
 /*
@@ -1573,13 +1559,12 @@ static int irda_sendmsg_dgram(struct kiocb *iocb, struct socket *sock,
 	struct sk_buff *skb;
 	int err;
 
-	lock_kernel();
-
 	IRDA_DEBUG(4, "%s(), len=%zd\n", __func__, len);
 
-	err = -EINVAL;
 	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_CMSG_COMPAT))
-		goto out;
+		return -EINVAL;
+
+	lock_sock(sk);
 
 	if (sk->sk_shutdown & SEND_SHUTDOWN) {
 		send_sig(SIGPIPE, current, 0);
@@ -1630,10 +1615,12 @@ static int irda_sendmsg_dgram(struct kiocb *iocb, struct socket *sock,
 		IRDA_DEBUG(0, "%s(), err=%d\n", __func__, err);
 		goto out;
 	}
-	unlock_kernel();
+
+	release_sock(sk);
 	return len;
+
 out:
-	unlock_kernel();
+	release_sock(sk);
 	return err;
 }
 
@@ -1656,10 +1643,11 @@ static int irda_sendmsg_ultra(struct kiocb *iocb, struct socket *sock,
 
 	IRDA_DEBUG(4, "%s(), len=%zd\n", __func__, len);
 
-	lock_kernel();
 	err = -EINVAL;
 	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_CMSG_COMPAT))
-		goto out;
+		return -EINVAL;
+
+	lock_sock(sk);
 
 	err = -EPIPE;
 	if (sk->sk_shutdown & SEND_SHUTDOWN) {
@@ -1732,7 +1720,7 @@ static int irda_sendmsg_ultra(struct kiocb *iocb, struct socket *sock,
 	if (err)
 		IRDA_DEBUG(0, "%s(), err=%d\n", __func__, err);
 out:
-	unlock_kernel();
+	release_sock(sk);
 	return err ? : len;
 }
 #endif /* CONFIG_IRDA_ULTRA */
@@ -1747,7 +1735,7 @@ static int irda_shutdown(struct socket *sock, int how)
 
 	IRDA_DEBUG(1, "%s(%p)\n", __func__, self);
 
-	lock_kernel();
+	lock_sock(sk);
 
 	sk->sk_state       = TCP_CLOSE;
 	sk->sk_shutdown   |= SEND_SHUTDOWN;
@@ -1769,7 +1757,7 @@ static int irda_shutdown(struct socket *sock, int how)
 	self->daddr = DEV_ADDR_ANY;	/* Until we get re-connected */
 	self->saddr = 0x0;		/* so IrLMP assign us any link */
 
-	unlock_kernel();
+	release_sock(sk);
 
 	return 0;
 }
@@ -1786,7 +1774,6 @@ static unsigned int irda_poll(struct file * file, struct socket *sock,
 
 	IRDA_DEBUG(4, "%s()\n", __func__);
 
-	lock_kernel();
 	poll_wait(file, sk_sleep(sk), wait);
 	mask = 0;
 
@@ -1834,20 +1821,8 @@ static unsigned int irda_poll(struct file * file, struct socket *sock,
 	default:
 		break;
 	}
-	unlock_kernel();
-	return mask;
-}
 
-static unsigned int irda_datagram_poll(struct file *file, struct socket *sock,
-			   poll_table *wait)
-{
-	int err;
-
-	lock_kernel();
-	err = datagram_poll(file, sock, wait);
-	unlock_kernel();
-
-	return err;
+	return mask;
 }
 
 /*
@@ -1860,7 +1835,6 @@ static int irda_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 
 	IRDA_DEBUG(4, "%s(), cmd=%#x\n", __func__, cmd);
 
-	lock_kernel();
 	err = -EINVAL;
 	switch (cmd) {
 	case TIOCOUTQ: {
@@ -1903,7 +1877,6 @@ static int irda_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 		IRDA_DEBUG(1, "%s(), doing device ioctl!\n", __func__);
 		err = -ENOIOCTLCMD;
 	}
-	unlock_kernel();
 
 	return err;
 }
@@ -1927,7 +1900,7 @@ static int irda_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned lon
  *    Set some options for the socket
  *
  */
-static int __irda_setsockopt(struct socket *sock, int level, int optname,
+static int irda_setsockopt(struct socket *sock, int level, int optname,
 			   char __user *optval, unsigned int optlen)
 {
 	struct sock *sk = sock->sk;
@@ -1935,13 +1908,15 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 	struct irda_ias_set    *ias_opt;
 	struct ias_object      *ias_obj;
 	struct ias_attrib *	ias_attr;	/* Attribute in IAS object */
-	int opt, free_ias = 0;
+	int opt, free_ias = 0, err = 0;
 
 	IRDA_DEBUG(2, "%s(%p)\n", __func__, self);
 
 	if (level != SOL_IRLMP)
 		return -ENOPROTOOPT;
 
+	lock_sock(sk);
+
 	switch (optname) {
 	case IRLMP_IAS_SET:
 		/* The user want to add an attribute to an existing IAS object
@@ -1951,17 +1926,22 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		 * create the right attribute...
 		 */
 
-		if (optlen != sizeof(struct irda_ias_set))
-			return -EINVAL;
+		if (optlen != sizeof(struct irda_ias_set)) {
+			err = -EINVAL;
+			goto out;
+		}
 
 		ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC);
-		if (ias_opt == NULL)
-			return -ENOMEM;
+		if (ias_opt == NULL) {
+			err = -ENOMEM;
+			goto out;
+		}
 
 		/* Copy query to the driver. */
 		if (copy_from_user(ias_opt, optval, optlen)) {
 			kfree(ias_opt);
-			return -EFAULT;
+			err = -EFAULT;
+			goto out;
 		}
 
 		/* Find the object we target.
@@ -1971,7 +1951,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		if(ias_opt->irda_class_name[0] == '\0') {
 			if(self->ias_obj == NULL) {
 				kfree(ias_opt);
-				return -EINVAL;
+				err = -EINVAL;
+				goto out;
 			}
 			ias_obj = self->ias_obj;
 		} else
@@ -1983,7 +1964,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		if((!capable(CAP_NET_ADMIN)) &&
 		   ((ias_obj == NULL) || (ias_obj != self->ias_obj))) {
 			kfree(ias_opt);
-			return -EPERM;
+			err = -EPERM;
+			goto out;
 		}
 
 		/* If the object doesn't exist, create it */
@@ -1993,7 +1975,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 						   jiffies);
 			if (ias_obj == NULL) {
 				kfree(ias_opt);
-				return -ENOMEM;
+				err = -ENOMEM;
+				goto out;
 			}
 			free_ias = 1;
 		}
@@ -2005,7 +1988,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 				kfree(ias_obj->name);
 				kfree(ias_obj);
 			}
-			return -EINVAL;
+			err = -EINVAL;
+			goto out;
 		}
 
 		/* Look at the type */
@@ -2028,7 +2012,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 					kfree(ias_obj);
 				}
 
-				return -EINVAL;
+				err = -EINVAL;
+				goto out;
 			}
 			/* Add an octet sequence attribute */
 			irias_add_octseq_attrib(
@@ -2060,7 +2045,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 				kfree(ias_obj->name);
 				kfree(ias_obj);
 			}
-			return -EINVAL;
+			err = -EINVAL;
+			goto out;
 		}
 		irias_insert_object(ias_obj);
 		kfree(ias_opt);
@@ -2071,17 +2057,22 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		 * object is not owned by the kernel and delete it.
 		 */
 
-		if (optlen != sizeof(struct irda_ias_set))
-			return -EINVAL;
+		if (optlen != sizeof(struct irda_ias_set)) {
+			err = -EINVAL;
+			goto out;
+		}
 
 		ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC);
-		if (ias_opt == NULL)
-			return -ENOMEM;
+		if (ias_opt == NULL) {
+			err = -ENOMEM;
+			goto out;
+		}
 
 		/* Copy query to the driver. */
 		if (copy_from_user(ias_opt, optval, optlen)) {
 			kfree(ias_opt);
-			return -EFAULT;
+			err = -EFAULT;
+			goto out;
 		}
 
 		/* Find the object we target.
@@ -2094,7 +2085,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 			ias_obj = irias_find_object(ias_opt->irda_class_name);
 		if(ias_obj == (struct ias_object *) NULL) {
 			kfree(ias_opt);
-			return -EINVAL;
+			err = -EINVAL;
+			goto out;
 		}
 
 		/* Only ROOT can mess with the global IAS database.
@@ -2103,7 +2095,8 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		if((!capable(CAP_NET_ADMIN)) &&
 		   ((ias_obj == NULL) || (ias_obj != self->ias_obj))) {
 			kfree(ias_opt);
-			return -EPERM;
+			err = -EPERM;
+			goto out;
 		}
 
 		/* Find the attribute (in the object) we target */
@@ -2111,14 +2104,16 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 					     ias_opt->irda_attrib_name);
 		if(ias_attr == (struct ias_attrib *) NULL) {
 			kfree(ias_opt);
-			return -EINVAL;
+			err = -EINVAL;
+			goto out;
 		}
 
 		/* Check is the user space own the object */
 		if(ias_attr->value->owner != IAS_USER_ATTR) {
 			IRDA_DEBUG(1, "%s(), attempting to delete a kernel attribute\n", __func__);
 			kfree(ias_opt);
-			return -EPERM;
+			err = -EPERM;
+			goto out;
 		}
 
 		/* Remove the attribute (and maybe the object) */
@@ -2126,11 +2121,15 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		kfree(ias_opt);
 		break;
 	case IRLMP_MAX_SDU_SIZE:
-		if (optlen < sizeof(int))
-			return -EINVAL;
+		if (optlen < sizeof(int)) {
+			err = -EINVAL;
+			goto out;
+		}
 
-		if (get_user(opt, (int __user *)optval))
-			return -EFAULT;
+		if (get_user(opt, (int __user *)optval)) {
+			err = -EFAULT;
+			goto out;
+		}
 
 		/* Only possible for a seqpacket service (TTP with SAR) */
 		if (sk->sk_type != SOCK_SEQPACKET) {
@@ -2140,16 +2139,21 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		} else {
 			IRDA_WARNING("%s: not allowed to set MAXSDUSIZE for this socket type!\n",
 				     __func__);
-			return -ENOPROTOOPT;
+			err = -ENOPROTOOPT;
+			goto out;
 		}
 		break;
 	case IRLMP_HINTS_SET:
-		if (optlen < sizeof(int))
-			return -EINVAL;
+		if (optlen < sizeof(int)) {
+			err = -EINVAL;
+			goto out;
+		}
 
 		/* The input is really a (__u8 hints[2]), easier as an int */
-		if (get_user(opt, (int __user *)optval))
-			return -EFAULT;
+		if (get_user(opt, (int __user *)optval)) {
+			err = -EFAULT;
+			goto out;
+		}
 
 		/* Unregister any old registration */
 		if (self->skey)
@@ -2163,12 +2167,16 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 		 * making a discovery (nodes which don't match any hint
 		 * bit in the mask are not reported).
 		 */
-		if (optlen < sizeof(int))
-			return -EINVAL;
+		if (optlen < sizeof(int)) {
+			err = -EINVAL;
+			goto out;
+		}
 
 		/* The input is really a (__u8 hints[2]), easier as an int */
-		if (get_user(opt, (int __user *)optval))
-			return -EFAULT;
+		if (get_user(opt, (int __user *)optval)) {
+			err = -EFAULT;
+			goto out;
+		}
 
 		/* Set the new hint mask */
 		self->mask.word = (__u16) opt;
@@ -2180,19 +2188,12 @@ static int __irda_setsockopt(struct socket *sock, int level, int optname,
 
 		break;
 	default:
-		return -ENOPROTOOPT;
+		err = -ENOPROTOOPT;
+		break;
 	}
-	return 0;
-}
 
-static int irda_setsockopt(struct socket *sock, int level, int optname,
-			   char __user *optval, unsigned int optlen)
-{
-	int err;
-
-	lock_kernel();
-	err = __irda_setsockopt(sock, level, optname, optval, optlen);
-	unlock_kernel();
+out:
+	release_sock(sk);
 
 	return err;
 }
@@ -2249,7 +2250,7 @@ static int irda_extract_ias_value(struct irda_ias_set *ias_opt,
 /*
  * Function irda_getsockopt (sock, level, optname, optval, optlen)
  */
-static int __irda_getsockopt(struct socket *sock, int level, int optname,
+static int irda_getsockopt(struct socket *sock, int level, int optname,
 			   char __user *optval, int __user *optlen)
 {
 	struct sock *sk = sock->sk;
@@ -2262,7 +2263,7 @@ static int __irda_getsockopt(struct socket *sock, int level, int optname,
 	int daddr = DEV_ADDR_ANY;	/* Dest address for IAS queries */
 	int val = 0;
 	int len = 0;
-	int err;
+	int err = 0;
 	int offset, total;
 
 	IRDA_DEBUG(2, "%s(%p)\n", __func__, self);
@@ -2276,15 +2277,18 @@ static int __irda_getsockopt(struct socket *sock, int level, int optname,
 	if(len < 0)
 		return -EINVAL;
 
+	lock_sock(sk);
+
 	switch (optname) {
 	case IRLMP_ENUMDEVICES:
 		/* Ask lmp for the current discovery log */
 		discoveries = irlmp_get_discoveries(&list.len, self->mask.word,
 						    self->nslots);
 		/* Check if the we got some results */
-		if (discoveries == NULL)
-			return -EAGAIN;		/* Didn't find any devices */
-		err = 0;
+		if (discoveries == NULL) {
+			err = -EAGAIN;
+			goto out;		/* Didn't find any devices */
+		}
 
 		/* Write total list length back to client */
 		if (copy_to_user(optval, &list,
@@ -2297,8 +2301,7 @@ static int __irda_getsockopt(struct socket *sock, int level, int optname,
 			sizeof(struct irda_device_info);
 
 		/* Copy the list itself - watch for overflow */
-		if(list.len > 2048)
-		{
+		if (list.len > 2048) {
 			err = -EINVAL;
 			goto bed;
 		}
@@ -2314,17 +2317,20 @@ static int __irda_getsockopt(struct socket *sock, int level, int optname,
 bed:
 		/* Free up our buffer */
 		kfree(discoveries);
-		if (err)
-			return err;
 		break;
 	case IRLMP_MAX_SDU_SIZE:
 		val = self->max_data_size;
 		len = sizeof(int);
-		if (put_user(len, optlen))
-			return -EFAULT;
+		if (put_user(len, optlen)) {
+			err = -EFAULT;
+			goto out;
+		}
+
+		if (copy_to_user(optval, &val, len)) {
+			err = -EFAULT;
+			goto out;
+		}
 
-		if (copy_to_user(optval, &val, len))
-			return -EFAULT;
 		break;
 	case IRLMP_IAS_GET:
 		/* The user want an object from our local IAS database.
@@ -2332,17 +2338,22 @@ bed:
 		 * that we found */
 
 		/* Check that the user has allocated the right space for us */
-		if (len != sizeof(struct irda_ias_set))
-			return -EINVAL;
+		if (len != sizeof(struct irda_ias_set)) {
+			err = -EINVAL;
+			goto out;
+		}
 
 		ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC);
-		if (ias_opt == NULL)
-			return -ENOMEM;
+		if (ias_opt == NULL) {
+			err = -ENOMEM;
+			goto out;
+		}
 
 		/* Copy query to the driver. */
 		if (copy_from_user(ias_opt, optval, len)) {
 			kfree(ias_opt);
-			return -EFAULT;
+			err = -EFAULT;
+			goto out;
 		}
 
 		/* Find the object we target.
@@ -2355,7 +2366,8 @@ bed:
 			ias_obj = irias_find_object(ias_opt->irda_class_name);
 		if(ias_obj == (struct ias_object *) NULL) {
 			kfree(ias_opt);
-			return -EINVAL;
+			err = -EINVAL;
+			goto out;
 		}
 
 		/* Find the attribute (in the object) we target */
@@ -2363,21 +2375,23 @@ bed:
 					     ias_opt->irda_attrib_name);
 		if(ias_attr == (struct ias_attrib *) NULL) {
 			kfree(ias_opt);
-			return -EINVAL;
+			err = -EINVAL;
+			goto out;
 		}
 
 		/* Translate from internal to user structure */
 		err = irda_extract_ias_value(ias_opt, ias_attr->value);
 		if(err) {
 			kfree(ias_opt);
-			return err;
+			goto out;
 		}
 
 		/* Copy reply to the user */
 		if (copy_to_user(optval, ias_opt,
 				 sizeof(struct irda_ias_set))) {
 			kfree(ias_opt);
-			return -EFAULT;
+			err = -EFAULT;
+			goto out;
 		}
 		/* Note : don't need to put optlen, we checked it */
 		kfree(ias_opt);
@@ -2388,17 +2402,22 @@ bed:
 		 * then wait for the answer to come back. */
 
 		/* Check that the user has allocated the right space for us */
-		if (len != sizeof(struct irda_ias_set))
-			return -EINVAL;
+		if (len != sizeof(struct irda_ias_set)) {
+			err = -EINVAL;
+			goto out;
+		}
 
 		ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC);
-		if (ias_opt == NULL)
-			return -ENOMEM;
+		if (ias_opt == NULL) {
+			err = -ENOMEM;
+			goto out;
+		}
 
 		/* Copy query to the driver. */
 		if (copy_from_user(ias_opt, optval, len)) {
 			kfree(ias_opt);
-			return -EFAULT;
+			err = -EFAULT;
+			goto out;
 		}
 
 		/* At this point, there are two cases...
@@ -2419,7 +2438,8 @@ bed:
 			daddr = ias_opt->daddr;
 			if((!daddr) || (daddr == DEV_ADDR_ANY)) {
 				kfree(ias_opt);
-				return -EINVAL;
+				err = -EINVAL;
+				goto out;
 			}
 		}
 
@@ -2428,7 +2448,8 @@ bed:
 			IRDA_WARNING("%s: busy with a previous query\n",
 				     __func__);
 			kfree(ias_opt);
-			return -EBUSY;
+			err = -EBUSY;
+			goto out;
 		}
 
 		self->iriap = iriap_open(LSAP_ANY, IAS_CLIENT, self,
@@ -2436,7 +2457,8 @@ bed:
 
 		if (self->iriap == NULL) {
 			kfree(ias_opt);
-			return -ENOMEM;
+			err = -ENOMEM;
+			goto out;
 		}
 
 		/* Treat unexpected wakeup as disconnect */
@@ -2455,7 +2477,8 @@ bed:
 			 * we can free it regardless! */
 			kfree(ias_opt);
 			/* Treat signals as disconnect */
-			return -EHOSTUNREACH;
+			err = -EHOSTUNREACH;
+			goto out;
 		}
 
 		/* Check what happened */
@@ -2465,9 +2488,11 @@ bed:
 			/* Requested object/attribute doesn't exist */
 			if((self->errno == IAS_CLASS_UNKNOWN) ||
 			   (self->errno == IAS_ATTRIB_UNKNOWN))
-				return -EADDRNOTAVAIL;
+				err = -EADDRNOTAVAIL;
 			else
-				return -EHOSTUNREACH;
+				err = -EHOSTUNREACH;
+
+			goto out;
 		}
 
 		/* Translate from internal to user structure */
@@ -2476,14 +2501,15 @@ bed:
 			irias_delete_value(self->ias_result);
 		if (err) {
 			kfree(ias_opt);
-			return err;
+			goto out;
 		}
 
 		/* Copy reply to the user */
 		if (copy_to_user(optval, ias_opt,
 				 sizeof(struct irda_ias_set))) {
 			kfree(ias_opt);
-			return -EFAULT;
+			err = -EFAULT;
+			goto out;
 		}
 		/* Note : don't need to put optlen, we checked it */
 		kfree(ias_opt);
@@ -2504,11 +2530,15 @@ bed:
 		 */
 
 		/* Check that the user is passing us an int */
-		if (len != sizeof(int))
-			return -EINVAL;
+		if (len != sizeof(int)) {
+			err = -EINVAL;
+			goto out;
+		}
 		/* Get timeout in ms (max time we block the caller) */
-		if (get_user(val, (int __user *)optval))
-			return -EFAULT;
+		if (get_user(val, (int __user *)optval)) {
+			err = -EFAULT;
+			goto out;
+		}
 
 		/* Tell IrLMP we want to be notified */
 		irlmp_update_client(self->ckey, self->mask.word,
@@ -2520,8 +2550,6 @@ bed:
 
 		/* Wait until a node is discovered */
 		if (!self->cachedaddr) {
-			int ret = 0;
-
 			IRDA_DEBUG(1, "%s(), nothing discovered yet, going to sleep...\n", __func__);
 
 			/* Set watchdog timer to expire in <val> ms. */
@@ -2534,7 +2562,7 @@ bed:
 			/* Wait for IR-LMP to call us back */
 			__wait_event_interruptible(self->query_wait,
 			      (self->cachedaddr != 0 || self->errno == -ETIME),
-						   ret);
+						   err);
 
 			/* If watchdog is still activated, kill it! */
 			if(timer_pending(&(self->watchdog)))
@@ -2542,8 +2570,8 @@ bed:
 
 			IRDA_DEBUG(1, "%s(), ...waking up !\n", __func__);
 
-			if (ret != 0)
-				return ret;
+			if (err != 0)
+				goto out;
 		}
 		else
 			IRDA_DEBUG(1, "%s(), found immediately !\n",
@@ -2566,25 +2594,19 @@ bed:
 		 * If the user want more details, he should query
 		 * the whole discovery log and pick one device...
 		 */
-		if (put_user(daddr, (int __user *)optval))
-			return -EFAULT;
+		if (put_user(daddr, (int __user *)optval)) {
+			err = -EFAULT;
+			goto out;
+		}
 
 		break;
 	default:
-		return -ENOPROTOOPT;
+		err = -ENOPROTOOPT;
 	}
 
-	return 0;
-}
-
-static int irda_getsockopt(struct socket *sock, int level, int optname,
-			   char __user *optval, int __user *optlen)
-{
-	int err;
+out:
 
-	lock_kernel();
-	err = __irda_getsockopt(sock, level, optname, optval, optlen);
-	unlock_kernel();
+	release_sock(sk);
 
 	return err;
 }
@@ -2628,7 +2650,7 @@ static const struct proto_ops irda_seqpacket_ops = {
 	.socketpair =	sock_no_socketpair,
 	.accept =	irda_accept,
 	.getname =	irda_getname,
-	.poll =		irda_datagram_poll,
+	.poll =		datagram_poll,
 	.ioctl =	irda_ioctl,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl =	irda_compat_ioctl,
@@ -2652,7 +2674,7 @@ static const struct proto_ops irda_dgram_ops = {
 	.socketpair =	sock_no_socketpair,
 	.accept =	irda_accept,
 	.getname =	irda_getname,
-	.poll =		irda_datagram_poll,
+	.poll =		datagram_poll,
 	.ioctl =	irda_ioctl,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl =	irda_compat_ioctl,
@@ -2677,7 +2699,7 @@ static const struct proto_ops irda_ultra_ops = {
 	.socketpair =	sock_no_socketpair,
 	.accept =	sock_no_accept,
 	.getname =	irda_getname,
-	.poll =		irda_datagram_poll,
+	.poll =		datagram_poll,
 	.ioctl =	irda_ioctl,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl =	irda_compat_ioctl,
-- 
1.7.1


^ permalink raw reply related

* [GIT PULL net-next-2.6] IrDA 2.6.37 updates
From: Samuel Ortiz @ 2010-10-11  0:24 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Samuel Ortiz

Hi Dave,

I have 5 pending IrDA patches for the next merge window.
The bulk of it is made of the BKL removal for irda, along with a couple of
security fixes.

The following changes since commit 7b738b55b2ec0e95a5030037c45b3c312e385789:

  sundance: get_stats proper locking (2010-10-09 09:22:54 -0700)

are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git for-davem

Roel Kluin (1):
  irda: Test index before read in stir421x_patch_device()

Samuel Ortiz (4):
  irda: Remove BKL instances from af_irda.c
  irda: Remove BKL instances from irnet
  irda: Fix parameter extraction stack overflow
  irda: Fix heap memory corruption in iriap.c

 drivers/net/irda/irda-usb.c |    8 +-
 net/irda/af_irda.c          |  370 +++++++++++++++++++++++--------------------
 net/irda/iriap.c            |    3 +-
 net/irda/irnet/irnet.h      |    2 +
 net/irda/irnet/irnet_ppp.c  |   61 +++++---
 net/irda/parameters.c       |    4 +-
 6 files changed, 249 insertions(+), 199 deletions(-)


^ permalink raw reply

* [PATCH net-next 4/5] bnx2x: do not deal with power if no capability
From: Dmitry Kravkov @ 2010-10-10 22:30 UTC (permalink / raw)
  To: davem, netdev; +Cc: vladz, eilong


Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/bnx2x/bnx2x_cmn.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index 3f0540c..9a3208e 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -1520,6 +1520,12 @@ int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state)
 {
 	u16 pmcsr;
 
+	/* If there is no power capability, silently succeed */
+	if (!bp->pm_cap) {
+		DP(NETIF_MSG_HW, "No power capability. Breaking.\n");
+		return 0;
+	}
+
 	pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, &pmcsr);
 
 	switch (state) {
-- 
1.7.1





^ permalink raw reply related

* [PATCH net-next 5/5] bnx2x: Use correct FW constant for header padding
From: Dmitry Kravkov @ 2010-10-10 22:30 UTC (permalink / raw)
  To: davem, netdev; +Cc: vladz, eilong


the value of the constant is the same, but it's clearer to use original
constant provided by HSI

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/bnx2x/bnx2x_cmn.c |    2 +-
 drivers/net/bnx2x/bnx2x_cmn.h |    2 --
 2 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index 9a3208e..29ed500 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -830,7 +830,7 @@ void bnx2x_init_rx_rings(struct bnx2x *bp)
 	int i, j;
 
 	bp->rx_buf_size = bp->dev->mtu + ETH_OVREHEAD + BNX2X_RX_ALIGN +
-		BNX2X_FW_IP_HDR_ALIGN_PAD;
+		IP_HEADER_ALIGNMENT_PADDING;
 
 	DP(NETIF_MSG_IFUP,
 	   "mtu %d  rx_buf_size %d\n", bp->dev->mtu, bp->rx_buf_size);
diff --git a/drivers/net/bnx2x/bnx2x_cmn.h b/drivers/net/bnx2x/bnx2x_cmn.h
index 7f52cec..5bfe0ab 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/bnx2x/bnx2x_cmn.h
@@ -1032,6 +1032,4 @@ static inline void storm_memset_cmng(struct bnx2x *bp,
 void bnx2x_acquire_phy_lock(struct bnx2x *bp);
 void bnx2x_release_phy_lock(struct bnx2x *bp);
 
-#define BNX2X_FW_IP_HDR_ALIGN_PAD	2 /* FW places hdr with this padding */
-
 #endif /* BNX2X_CMN_H */
-- 
1.7.1





^ permalink raw reply related

* [PATCH net-next 2/5] bnx2x: save cycles in setting gso_size
From: Dmitry Kravkov @ 2010-10-10 22:27 UTC (permalink / raw)
  To: davem, netdev; +Cc: vladz, eilong

From: Vladislav Zolotarov <vladz@broadcom.com>

the field needs to be set to ANY non-zero value in order to enable forwarding.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/bnx2x/bnx2x_cmn.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index cb2a3d6..ddf90e1 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -277,8 +277,7 @@ static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,
 
 	/* This is needed in order to enable forwarding support */
 	if (frag_size)
-		skb_shinfo(skb)->gso_size = min((u32)SGE_PAGE_SIZE,
-					       max(frag_size, (u32)len_on_bd));
+		skb_shinfo(skb)->gso_size = 1;
 
 #ifdef BNX2X_STOP_ON_ERROR
 	if (pages > min_t(u32, 8, MAX_SKB_FRAGS)*SGE_PAGE_SIZE*PAGES_PER_SGE) {
-- 
1.7.1





^ permalink raw reply related

* [PATCH net-next 3/5] bnx2x: remove redundant commands during error handling
From: Dmitry Kravkov @ 2010-10-10 22:29 UTC (permalink / raw)
  To: davem, netdev; +Cc: vladz, eilong


Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/bnx2x/bnx2x_cmn.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index ddf90e1..3f0540c 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -1288,8 +1288,6 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
 	if (rc) {
 		BNX2X_ERR("HW init failed, aborting\n");
 		bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
-		bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0);
-		bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
 		goto load_error2;
 	}
 
-- 
1.7.1





^ permalink raw reply related

* [PATCH net-next 1/5] bnx2x: Optimized the branching in the bnx2x_rx_int()
From: Dmitry Kravkov @ 2010-10-10 22:26 UTC (permalink / raw)
  To: davem, netdev; +Cc: vladz, eilong

From: Vladislav Zolotarov <vladz@broadcom.com>

Optimized the branching in the bnx2x_rx_int() based on the fact
that FP CQE will always have at least one of START or STOP flags set,
so if not both bits are set and START bit is not set,
then it's a STOP bit that is set.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/bnx2x/bnx2x_cmn.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index 97ef674..cb2a3d6 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -507,8 +507,11 @@ int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
 			len = le16_to_cpu(cqe->fast_path_cqe.pkt_len);
 			pad = cqe->fast_path_cqe.placement_offset;
 
-			/* If CQE is marked both TPA_START and TPA_END
-			   it is a non-TPA CQE */
+			/* - If CQE is marked both TPA_START and TPA_END it is
+			 *   a non-TPA CQE.
+			 * - FP CQE will always have either TPA_START or/and
+			 *   TPA_STOP flags set.
+			 */
 			if ((!fp->disable_tpa) &&
 			    (TPA_TYPE(cqe_fp_flags) !=
 					(TPA_TYPE_START | TPA_TYPE_END))) {
@@ -526,9 +529,7 @@ int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
 					bnx2x_set_skb_rxhash(bp, cqe, skb);
 
 					goto next_rx;
-				}
-
-				if (TPA_TYPE(cqe_fp_flags) == TPA_TYPE_END) {
+				} else { /* TPA_STOP */
 					DP(NETIF_MSG_RX_STATUS,
 					   "calling tpa_stop on queue %d\n",
 					   queue);
-- 
1.7.1





^ permalink raw reply related

* [PATCH net-next 0/5] bnx2x: patch series
From: Dmitry Kravkov @ 2010-10-10 22:22 UTC (permalink / raw)
  To: davem, netdev; +Cc: vladz, eilong

Hi Dave,

Please consider applying the series of small patches to net-next
It includes several enhancements in fast path and removes some unnecessary code


Thanks
Dmitry





^ permalink raw reply

* Re: [RFC PATCH net-next] drivers/net Documentation/networking: Create directory intel_wired_lan
From: Stephen Hemminger @ 2010-10-10 21:44 UTC (permalink / raw)
  To: Joe Perches
  Cc: e1000-devel, Bruce Allan, Jesse Brandeburg, linux-kernel,
	Greg Rose, John Ronciak, Jeff Kirsher, netdev, PJ
In-Reply-To: <1286743352.11039.165.camel@Joe-Laptop>

On Sun, 10 Oct 2010 13:42:32 -0700
Joe Perches <joe@perches.com> wrote:

> Perhaps it's better to move drivers from the very populated
> drivers/net directory into vendor specific directories similar
> to the Atheros approach used for drivers/net/wireless/ath/
> 
> Move intel drivers and Documentation to separate directories
> Create drivers/net/intel_wired_lan/Kconfig.<speed> and Makefile
> Modify drivers/net/Kconfig and Makefile
> Update MAINTAINERS
> 
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
>  .../networking/{ => intel_wired_lan}/e100.txt      |    0
>  .../networking/{ => intel_wired_lan}/e1000.txt     |    0
>  .../networking/{ => intel_wired_lan}/igb.txt       |    0
>  .../networking/{ => intel_wired_lan}/igbvf.txt     |    0
>  .../networking/{ => intel_wired_lan}/ixgb.txt      |    0
>  .../networking/{ => intel_wired_lan}/ixgbe.txt     |    0
>  .../networking/{ => intel_wired_lan}/ixgbevf.txt   |    0
>  MAINTAINERS                                        |   18 +--
>  drivers/net/Kconfig                                |  214 +-------------------
>  drivers/net/Makefile                               |    8 -
>  drivers/net/intel_wired_lan/Kconfig.100            |   25 +++
>  drivers/net/intel_wired_lan/Kconfig.1000           |  102 ++++++++++
>  drivers/net/intel_wired_lan/Kconfig.10000          |   81 ++++++++
>  drivers/net/intel_wired_lan/Makefile               |    9 +
>  drivers/net/{ => intel_wired_lan}/e100.c           |    0
>  drivers/net/{ => intel_wired_lan}/e1000/Makefile   |    0
>  drivers/net/{ => intel_wired_lan}/e1000/e1000.h    |    0
>  .../{ => intel_wired_lan}/e1000/e1000_ethtool.c    |    0
>  drivers/net/{ => intel_wired_lan}/e1000/e1000_hw.c |    0
>  drivers/net/{ => intel_wired_lan}/e1000/e1000_hw.h |    0
>  .../net/{ => intel_wired_lan}/e1000/e1000_main.c   |    0
>  .../net/{ => intel_wired_lan}/e1000/e1000_osdep.h  |    0
>  .../net/{ => intel_wired_lan}/e1000/e1000_param.c  |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/82571.c   |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/Makefile  |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/defines.h |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/e1000.h   |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/es2lan.c  |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/ethtool.c |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/hw.h      |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/ich8lan.c |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/lib.c     |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/netdev.c  |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/param.c   |    0
>  drivers/net/{ => intel_wired_lan}/e1000e/phy.c     |    0
>  drivers/net/{ => intel_wired_lan}/igb/Makefile     |    0
>  .../net/{ => intel_wired_lan}/igb/e1000_82575.c    |    0
>  .../net/{ => intel_wired_lan}/igb/e1000_82575.h    |    0
>  .../net/{ => intel_wired_lan}/igb/e1000_defines.h  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_hw.h   |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_mac.c  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_mac.h  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_mbx.c  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_mbx.h  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_nvm.c  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_nvm.h  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_phy.c  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_phy.h  |    0
>  drivers/net/{ => intel_wired_lan}/igb/e1000_regs.h |    0
>  drivers/net/{ => intel_wired_lan}/igb/igb.h        |    0
>  .../net/{ => intel_wired_lan}/igb/igb_ethtool.c    |    0
>  drivers/net/{ => intel_wired_lan}/igb/igb_main.c   |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/Makefile   |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/defines.h  |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/ethtool.c  |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/igbvf.h    |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/mbx.c      |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/mbx.h      |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/netdev.c   |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/regs.h     |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/vf.c       |    0
>  drivers/net/{ => intel_wired_lan}/igbvf/vf.h       |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/Makefile    |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb.h      |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb_ee.c   |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb_ee.h   |    0
>  .../net/{ => intel_wired_lan}/ixgb/ixgb_ethtool.c  |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb_hw.c   |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb_hw.h   |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb_ids.h  |    0
>  drivers/net/{ => intel_wired_lan}/ixgb/ixgb_main.c |    0
>  .../net/{ => intel_wired_lan}/ixgb/ixgb_osdep.h    |    0
>  .../net/{ => intel_wired_lan}/ixgb/ixgb_param.c    |    0
>  drivers/net/{ => intel_wired_lan}/ixgbe/Makefile   |    0
>  drivers/net/{ => intel_wired_lan}/ixgbe/ixgbe.h    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_82598.c  |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_82599.c  |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_common.c |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_common.h |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_dcb.c    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_dcb.h    |    0
>  .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82598.c  |    0
>  .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82598.h  |    0
>  .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82599.c  |    0
>  .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82599.h  |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_dcb_nl.c |    0
>  .../{ => intel_wired_lan}/ixgbe/ixgbe_ethtool.c    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_fcoe.c   |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_fcoe.h   |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_main.c   |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_mbx.c    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_mbx.h    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_phy.c    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_phy.h    |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_sriov.c  |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_sriov.h  |    0
>  .../net/{ => intel_wired_lan}/ixgbe/ixgbe_type.h   |    0
>  drivers/net/{ => intel_wired_lan}/ixgbevf/Makefile |    0
>  .../net/{ => intel_wired_lan}/ixgbevf/defines.h    |    0
>  .../net/{ => intel_wired_lan}/ixgbevf/ethtool.c    |    0
>  .../net/{ => intel_wired_lan}/ixgbevf/ixgbevf.h    |    0
>  .../{ => intel_wired_lan}/ixgbevf/ixgbevf_main.c   |    0
>  drivers/net/{ => intel_wired_lan}/ixgbevf/mbx.c    |    0
>  drivers/net/{ => intel_wired_lan}/ixgbevf/mbx.h    |    0
>  drivers/net/{ => intel_wired_lan}/ixgbevf/regs.h   |    0
>  drivers/net/{ => intel_wired_lan}/ixgbevf/vf.c     |    0
>  drivers/net/{ => intel_wired_lan}/ixgbevf/vf.h     |    0
>  107 files changed, 224 insertions(+), 233 deletions(-)
> 
> diff --git a/Documentation/networking/e100.txt b/Documentation/networking/intel_wired_lan/e100.txt
> similarity index 100%
> rename from Documentation/networking/e100.txt
> rename to Documentation/networking/intel_wired_lan/e100.txt
> diff --git a/Documentation/networking/e1000.txt b/Documentation/networking/intel_wired_lan/e1000.txt
> similarity index 100%
> rename from Documentation/networking/e1000.txt
> rename to Documentation/networking/intel_wired_lan/e1000.txt
> diff --git a/Documentation/networking/igb.txt b/Documentation/networking/intel_wired_lan/igb.txt
> similarity index 100%
> rename from Documentation/networking/igb.txt
> rename to Documentation/networking/intel_wired_lan/igb.txt
> diff --git a/Documentation/networking/igbvf.txt b/Documentation/networking/intel_wired_lan/igbvf.txt
> similarity index 100%
> rename from Documentation/networking/igbvf.txt
> rename to Documentation/networking/intel_wired_lan/igbvf.txt
> diff --git a/Documentation/networking/ixgb.txt b/Documentation/networking/intel_wired_lan/ixgb.txt
> similarity index 100%
> rename from Documentation/networking/ixgb.txt
> rename to Documentation/networking/intel_wired_lan/ixgb.txt
> diff --git a/Documentation/networking/ixgbe.txt b/Documentation/networking/intel_wired_lan/ixgbe.txt
> similarity index 100%
> rename from Documentation/networking/ixgbe.txt
> rename to Documentation/networking/intel_wired_lan/ixgbe.txt
> diff --git a/Documentation/networking/ixgbevf.txt b/Documentation/networking/intel_wired_lan/ixgbevf.txt
> similarity index 100%
> rename from Documentation/networking/ixgbevf.txt
> rename to Documentation/networking/intel_wired_lan/ixgbevf.txt
> diff --git a/MAINTAINERS b/MAINTAINERS
> index ba8603c..b086404 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3096,22 +3096,8 @@ M:	John Ronciak <john.ronciak@intel.com>
>  L:	e1000-devel@lists.sourceforge.net
>  W:	http://e1000.sourceforge.net/
>  S:	Supported
> -F:	Documentation/networking/e100.txt
> -F:	Documentation/networking/e1000.txt
> -F:	Documentation/networking/e1000e.txt
> -F:	Documentation/networking/igb.txt
> -F:	Documentation/networking/igbvf.txt
> -F:	Documentation/networking/ixgb.txt
> -F:	Documentation/networking/ixgbe.txt
> -F:	Documentation/networking/ixgbevf.txt
> -F:	drivers/net/e100.c
> -F:	drivers/net/e1000/
> -F:	drivers/net/e1000e/
> -F:	drivers/net/igb/
> -F:	drivers/net/igbvf/
> -F:	drivers/net/ixgb/
> -F:	drivers/net/ixgbe/
> -F:	drivers/net/ixgbevf/
> +F:	Documentation/networking/intel_wired_lan/
> +F:	drivers/net/intel_wired_lan/
>  
>  INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
>  L:	linux-wireless@vger.kernel.org
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 13d01f3..4d6448d 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -1495,32 +1495,6 @@ config TC35815
>  	depends on NET_PCI && PCI && MIPS
>  	select PHYLIB
>  
> -config E100
> -	tristate "Intel(R) PRO/100+ support"
> -	depends on NET_PCI && PCI
> -	select MII
> -	---help---
> -	  This driver supports Intel(R) PRO/100 family of adapters.
> -	  To verify that your adapter is supported, find the board ID number 
> -	  on the adapter. Look for a label that has a barcode and a number 
> -	  in the format 123456-001 (six digits hyphen three digits). 
> -
> -	  Use the above information and the Adapter & Driver ID Guide at:
> -
> -	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -          to identify the adapter.
> -
> -	  For the latest Intel PRO/100 network driver for Linux, see:
> -
> -	  <http://appsr.intel.com/scripts-df/support_intel.asp>
> -
> -	  More specific information on configuring the driver is in 
> -	  <file:Documentation/networking/e100.txt>.
> -
> -	  To compile this driver as a module, choose M here. The module
> -	  will be called e100.
> -
>  config LNE390
>  	tristate "Mylex EISA LNE390A/B support (EXPERIMENTAL)"
>  	depends on NET_PCI && EISA && EXPERIMENTAL
> @@ -1995,6 +1969,8 @@ source "drivers/net/fs_enet/Kconfig"
>  
>  source "drivers/net/octeon/Kconfig"
>  
> +source "drivers/net/intel_wired_lan/Kconfig.100"
> +
>  endif # NET_ETHERNET
>  
>  #
> @@ -2059,45 +2035,7 @@ config DL2K
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called dl2k.
>  
> -config E1000
> -	tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
> -	depends on PCI
> -	---help---
> -	  This driver supports Intel(R) PRO/1000 gigabit ethernet family of
> -	  adapters.  For more information on how to identify your adapter, go 
> -	  to the Adapter & Driver ID Guide at:
> -
> -	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -	  For general information and support, go to the Intel support
> -	  website at:
> -
> -	  <http://support.intel.com>
> -
> -	  More specific information on configuring the driver is in 
> -	  <file:Documentation/networking/e1000.txt>.
> -
> -	  To compile this driver as a module, choose M here. The module
> -	  will be called e1000.
> -
> -config E1000E
> -	tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
> -	depends on PCI && (!SPARC32 || BROKEN)
> -	---help---
> -	  This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
> -	  ethernet family of adapters. For PCI or PCI-X e1000 adapters,
> -	  use the regular e1000 driver For more information on how to
> -	  identify your adapter, go to the Adapter & Driver ID Guide at:
> -
> -	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -	  For general information and support, go to the Intel support
> -	  website at:
> -
> -	  <http://support.intel.com>
> -
> -	  To compile this driver as a module, choose M here. The module
> -	  will be called e1000e.
> +source "drivers/net/intel_wired_lan/Kconfig.1000"
>  
>  config IP1000
>  	tristate "IP1000 Gigabit Ethernet support"
> @@ -2109,57 +2047,6 @@ config IP1000
>  	  To compile this driver as a module, choose M here: the module
>  	  will be called ipg.  This is recommended.
>  
> -config IGB
> -       tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
> -       depends on PCI
> -       ---help---
> -         This driver supports Intel(R) 82575/82576 gigabit ethernet family of
> -         adapters.  For more information on how to identify your adapter, go
> -         to the Adapter & Driver ID Guide at:
> -
> -         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -         For general information and support, go to the Intel support
> -         website at:
> -
> -         <http://support.intel.com>
> -
> -         More specific information on configuring the driver is in
> -         <file:Documentation/networking/e1000.txt>.
> -
> -         To compile this driver as a module, choose M here. The module
> -         will be called igb.
> -
> -config IGB_DCA
> -	bool "Direct Cache Access (DCA) Support"
> -	default y
> -	depends on IGB && DCA && !(IGB=y && DCA=m)
> -	---help---
> -	  Say Y here if you want to use Direct Cache Access (DCA) in the
> -	  driver.  DCA is a method for warming the CPU cache before data
> -	  is used, with the intent of lessening the impact of cache misses.
> -
> -config IGBVF
> -       tristate "Intel(R) 82576 Virtual Function Ethernet support"
> -       depends on PCI
> -       ---help---
> -         This driver supports Intel(R) 82576 virtual functions.  For more
> -         information on how to identify your adapter, go to the Adapter &
> -         Driver ID Guide at:
> -
> -         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -         For general information and support, go to the Intel support
> -         website at:
> -
> -         <http://support.intel.com>
> -
> -         More specific information on configuring the driver is in
> -         <file:Documentation/networking/e1000.txt>.
> -
> -         To compile this driver as a module, choose M here. The module
> -         will be called igbvf.
> -
>  source "drivers/net/ixp2000/Kconfig"
>  
>  config MYRI_SBUS
> @@ -2515,17 +2402,6 @@ config S6GMAC
>  
>  source "drivers/net/stmmac/Kconfig"
>  
> -config PCH_GBE
> -	tristate "PCH Gigabit Ethernet"
> -	depends on PCI
> -	---help---
> -	  This is a gigabit ethernet driver for Topcliff PCH.
> -	  Topcliff PCH is the platform controller hub that is used in Intel's
> -	  general embedded platform.
> -	  Topcliff PCH has Gigabit Ethernet interface.
> -	  Using this interface, it is able to access system devices connected
> -	  to Gigabit Ethernet.
> -	  This driver enables Gigabit Ethernet function.
>  
>  endif # NETDEV_1000
>  
> @@ -2659,94 +2535,14 @@ config EHEA
>  	  To compile the driver as a module, choose M here. The module
>  	  will be called ehea.
>  
> +source "drivers/net/intel_wired_lan/Kconfig.10000"
> +
>  config ENIC
>  	tristate "Cisco VIC Ethernet NIC Support"
>  	depends on PCI && INET
>  	help
>  	  This enables the support for the Cisco VIC Ethernet card.
>  
> -config IXGBE
> -	tristate "Intel(R) 10GbE PCI Express adapters support"
> -	depends on PCI && INET
> -	select MDIO
> -	---help---
> -	  This driver supports Intel(R) 10GbE PCI Express family of
> -	  adapters.  For more information on how to identify your adapter, go
> -	  to the Adapter & Driver ID Guide at:
> -
> -	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -	  For general information and support, go to the Intel support
> -	  website at:
> -
> -	  <http://support.intel.com>
> -
> -	  To compile this driver as a module, choose M here. The module
> -	  will be called ixgbe.
> -
> -config IXGBE_DCA
> -	bool "Direct Cache Access (DCA) Support"
> -	default y
> -	depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
> -	---help---
> -	  Say Y here if you want to use Direct Cache Access (DCA) in the
> -	  driver.  DCA is a method for warming the CPU cache before data
> -	  is used, with the intent of lessening the impact of cache misses.
> -
> -config IXGBE_DCB
> -	bool "Data Center Bridging (DCB) Support"
> -	default n
> -	depends on IXGBE && DCB
> -	---help---
> -	  Say Y here if you want to use Data Center Bridging (DCB) in the
> -	  driver.
> -
> -	  If unsure, say N.
> -
> -config IXGBEVF
> -       tristate "Intel(R) 82599 Virtual Function Ethernet support"
> -       depends on PCI_MSI
> -       ---help---
> -         This driver supports Intel(R) 82599 virtual functions.  For more
> -         information on how to identify your adapter, go to the Adapter &
> -         Driver ID Guide at:
> -
> -         <http://support.intel.com/support/network/sb/CS-008441.htm>
> -
> -         For general information and support, go to the Intel support
> -         website at:
> -
> -         <http://support.intel.com>
> -
> -         More specific information on configuring the driver is in
> -         <file:Documentation/networking/ixgbevf.txt>.
> -
> -         To compile this driver as a module, choose M here. The module
> -         will be called ixgbevf.  MSI-X interrupt support is required
> -         for this driver to work correctly.
> -
> -config IXGB
> -	tristate "Intel(R) PRO/10GbE support"
> -	depends on PCI
> -	---help---
> -	  This driver supports Intel(R) PRO/10GbE family of adapters for
> -	  PCI-X type cards. For PCI-E type cards, use the "ixgbe" driver
> -	  instead. For more information on how to identify your adapter, go
> -	  to the Adapter & Driver ID Guide at:
> -
> -	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> -
> -	  For general information and support, go to the Intel support
> -	  website at:
> -
> -	  <http://support.intel.com>
> -
> -	  More specific information on configuring the driver is in 
> -	  <file:Documentation/networking/ixgb.txt>.
> -
> -	  To compile this driver as a module, choose M here. The module
> -	  will be called ixgb.
> -
>  config S2IO
>  	tristate "S2IO 10Gbe XFrame NIC"
>  	depends on PCI
> diff --git a/drivers/net/Makefile b/drivers/net/Makefile
> index b8bf93d..e457b3c 100644
> --- a/drivers/net/Makefile
> +++ b/drivers/net/Makefile
> @@ -8,14 +8,7 @@ obj-$(CONFIG_PHYLIB) += phy/
>  
>  obj-$(CONFIG_TI_DAVINCI_EMAC) += davinci_emac.o
>  
> -obj-$(CONFIG_E1000) += e1000/
> -obj-$(CONFIG_E1000E) += e1000e/
>  obj-$(CONFIG_IBM_NEW_EMAC) += ibm_newemac/
> -obj-$(CONFIG_IGB) += igb/
> -obj-$(CONFIG_IGBVF) += igbvf/
> -obj-$(CONFIG_IXGBE) += ixgbe/
> -obj-$(CONFIG_IXGBEVF) += ixgbevf/
> -obj-$(CONFIG_IXGB) += ixgb/
>  obj-$(CONFIG_IP1000) += ipg.o
>  obj-$(CONFIG_CHELSIO_T1) += chelsio/
>  obj-$(CONFIG_CHELSIO_T3) += cxgb3/
> @@ -68,7 +61,6 @@ obj-$(CONFIG_VORTEX) += 3c59x.o
>  obj-$(CONFIG_TYPHOON) += typhoon.o
>  obj-$(CONFIG_NE2K_PCI) += ne2k-pci.o 8390.o
>  obj-$(CONFIG_PCNET32) += pcnet32.o
> -obj-$(CONFIG_E100) += e100.o
>  obj-$(CONFIG_TLAN) += tlan.o
>  obj-$(CONFIG_EPIC100) += epic100.o
>  obj-$(CONFIG_SMSC9420) += smsc9420.o
> diff --git a/drivers/net/intel_wired_lan/Kconfig.100 b/drivers/net/intel_wired_lan/Kconfig.100
> new file mode 100644
> index 0000000..6651ae9
> --- /dev/null
> +++ b/drivers/net/intel_wired_lan/Kconfig.100
> @@ -0,0 +1,25 @@
> +config E100
> +	tristate "Intel(R) PRO/100+ support"
> +	depends on NET_PCI && PCI
> +	select MII
> +	---help---
> +	  This driver supports Intel(R) PRO/100 family of adapters.
> +	  To verify that your adapter is supported, find the board ID number
> +	  on the adapter. Look for a label that has a barcode and a number
> +	  in the format 123456-001 (six digits hyphen three digits).
> +
> +	  Use the above information and the Adapter & Driver ID Guide at:
> +
> +	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +          to identify the adapter.
> +
> +	  For the latest Intel PRO/100 network driver for Linux, see:
> +
> +	  <http://appsr.intel.com/scripts-df/support_intel.asp>
> +
> +	  More specific information on configuring the driver is in
> +	  <file:Documentation/networking/intel_wired_lan/e100.txt>.
> +
> +	  To compile this driver as a module, choose M here. The module
> +	  will be called e100.
> diff --git a/drivers/net/intel_wired_lan/Kconfig.1000 b/drivers/net/intel_wired_lan/Kconfig.1000
> new file mode 100644
> index 0000000..4a7e13a
> --- /dev/null
> +++ b/drivers/net/intel_wired_lan/Kconfig.1000
> @@ -0,0 +1,102 @@
> +config E1000
> +	tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
> +	depends on PCI
> +	---help---
> +	  This driver supports Intel(R) PRO/1000 gigabit ethernet family of
> +	  adapters.  For more information on how to identify your adapter, go
> +	  to the Adapter & Driver ID Guide at:
> +
> +	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +	  For general information and support, go to the Intel support
> +	  website at:
> +
> +	  <http://support.intel.com>
> +
> +	  More specific information on configuring the driver is in
> +	  <file:Documentation/networking/intel_wired_lan/e1000.txt>.
> +
> +	  To compile this driver as a module, choose M here. The module
> +	  will be called e1000.
> +
> +config E1000E
> +	tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
> +	depends on PCI && (!SPARC32 || BROKEN)
> +	---help---
> +	  This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
> +	  ethernet family of adapters. For PCI or PCI-X e1000 adapters,
> +	  use the regular e1000 driver For more information on how to
> +	  identify your adapter, go to the Adapter & Driver ID Guide at:
> +
> +	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +	  For general information and support, go to the Intel support
> +	  website at:
> +
> +	  <http://support.intel.com>
> +
> +	  To compile this driver as a module, choose M here. The module
> +	  will be called e1000e.
> +
> +config IGB
> +       tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
> +       depends on PCI
> +       ---help---
> +         This driver supports Intel(R) 82575/82576 gigabit ethernet family of
> +         adapters.  For more information on how to identify your adapter, go
> +         to the Adapter & Driver ID Guide at:
> +
> +         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +         For general information and support, go to the Intel support
> +         website at:
> +
> +         <http://support.intel.com>
> +
> +         More specific information on configuring the driver is in
> +         <file:Documentation/networking/intel_wired_lan/e1000.txt>.
> +
> +         To compile this driver as a module, choose M here. The module
> +         will be called igb.
> +
> +config IGB_DCA
> +	bool "Direct Cache Access (DCA) Support"
> +	default y
> +	depends on IGB && DCA && !(IGB=y && DCA=m)
> +	---help---
> +	  Say Y here if you want to use Direct Cache Access (DCA) in the
> +	  driver.  DCA is a method for warming the CPU cache before data
> +	  is used, with the intent of lessening the impact of cache misses.
> +
> +config IGBVF
> +       tristate "Intel(R) 82576 Virtual Function Ethernet support"
> +       depends on PCI
> +       ---help---
> +         This driver supports Intel(R) 82576 virtual functions.  For more
> +         information on how to identify your adapter, go to the Adapter &
> +         Driver ID Guide at:
> +
> +         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +         For general information and support, go to the Intel support
> +         website at:
> +
> +         <http://support.intel.com>
> +
> +         More specific information on configuring the driver is in
> +         <file:Documentation/networking/intel_wired_lan/e1000.txt>.
> +
> +         To compile this driver as a module, choose M here. The module
> +         will be called igbvf.
> +
> +config PCH_GBE
> +	tristate "PCH Gigabit Ethernet"
> +	depends on PCI
> +	---help---
> +	  This is a gigabit ethernet driver for Topcliff PCH.
> +	  Topcliff PCH is the platform controller hub that is used in Intel's
> +	  general embedded platform.
> +	  Topcliff PCH has Gigabit Ethernet interface.
> +	  Using this interface, it is able to access system devices connected
> +	  to Gigabit Ethernet.
> +	  This driver enables Gigabit Ethernet function.
> diff --git a/drivers/net/intel_wired_lan/Kconfig.10000 b/drivers/net/intel_wired_lan/Kconfig.10000
> new file mode 100644
> index 0000000..ef35ebd
> --- /dev/null
> +++ b/drivers/net/intel_wired_lan/Kconfig.10000
> @@ -0,0 +1,81 @@
> +config IXGBE
> +	tristate "Intel(R) 10GbE PCI Express adapters support"
> +	depends on PCI && INET
> +	select MDIO
> +	---help---
> +	  This driver supports Intel(R) 10GbE PCI Express family of
> +	  adapters.  For more information on how to identify your adapter, go
> +	  to the Adapter & Driver ID Guide at:
> +
> +	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +	  For general information and support, go to the Intel support
> +	  website at:
> +
> +	  <http://support.intel.com>
> +
> +	  To compile this driver as a module, choose M here. The module
> +	  will be called ixgbe.
> +
> +config IXGBE_DCA
> +	bool "Direct Cache Access (DCA) Support"
> +	default y
> +	depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
> +	---help---
> +	  Say Y here if you want to use Direct Cache Access (DCA) in the
> +	  driver.  DCA is a method for warming the CPU cache before data
> +	  is used, with the intent of lessening the impact of cache misses.
> +
> +config IXGBE_DCB
> +	bool "Data Center Bridging (DCB) Support"
> +	default n
> +	depends on IXGBE && DCB
> +	---help---
> +	  Say Y here if you want to use Data Center Bridging (DCB) in the
> +	  driver.
> +
> +	  If unsure, say N.
> +
> +config IXGBEVF
> +       tristate "Intel(R) 82599 Virtual Function Ethernet support"
> +       depends on PCI_MSI
> +       ---help---
> +         This driver supports Intel(R) 82599 virtual functions.  For more
> +         information on how to identify your adapter, go to the Adapter &
> +         Driver ID Guide at:
> +
> +         <http://support.intel.com/support/network/sb/CS-008441.htm>
> +
> +         For general information and support, go to the Intel support
> +         website at:
> +
> +         <http://support.intel.com>
> +
> +         More specific information on configuring the driver is in
> +         <file:Documentation/networking/intel_wired_lan/ixgbevf.txt>.
> +
> +         To compile this driver as a module, choose M here. The module
> +         will be called ixgbevf.  MSI-X interrupt support is required
> +         for this driver to work correctly.
> +
> +config IXGB
> +	tristate "Intel(R) PRO/10GbE support"
> +	depends on PCI
> +	---help---
> +	  This driver supports Intel(R) PRO/10GbE family of adapters for
> +	  PCI-X type cards. For PCI-E type cards, use the "ixgbe" driver
> +	  instead. For more information on how to identify your adapter, go
> +	  to the Adapter & Driver ID Guide at:
> +
> +	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
> +
> +	  For general information and support, go to the Intel support
> +	  website at:
> +
> +	  <http://support.intel.com>
> +
> +	  More specific information on configuring the driver is in
> +	  <file:Documentation/networking/intel_wired_lan/ixgb.txt>.
> +
> +	  To compile this driver as a module, choose M here. The module
> +	  will be called ixgb.
> diff --git a/drivers/net/intel_wired_lan/Makefile b/drivers/net/intel_wired_lan/Makefile
> new file mode 100644
> index 0000000..87d7ba0
> --- /dev/null
> +++ b/drivers/net/intel_wired_lan/Makefile
> @@ -0,0 +1,9 @@
> +obj-$(CONFIG_E1000) += e1000/
> +obj-$(CONFIG_E1000E) += e1000e/
> +obj-$(CONFIG_IGB) += igb/
> +obj-$(CONFIG_IGBVF) += igbvf/
> +obj-$(CONFIG_IXGBE) += ixgbe/
> +obj-$(CONFIG_IXGBEVF) += ixgbevf/
> +obj-$(CONFIG_IXGB) += ixgb/
> +
> +obj-$(CONFIG_E100) += e100.o
> diff --git a/drivers/net/e100.c b/drivers/net/intel_wired_lan/e100.c
> similarity index 100%
> rename from drivers/net/e100.c
> rename to drivers/net/intel_wired_lan/e100.c
> diff --git a/drivers/net/e1000/Makefile b/drivers/net/intel_wired_lan/e1000/Makefile
> similarity index 100%
> rename from drivers/net/e1000/Makefile
> rename to drivers/net/intel_wired_lan/e1000/Makefile
> diff --git a/drivers/net/e1000/e1000.h b/drivers/net/intel_wired_lan/e1000/e1000.h
> similarity index 100%
> rename from drivers/net/e1000/e1000.h
> rename to drivers/net/intel_wired_lan/e1000/e1000.h
> diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/intel_wired_lan/e1000/e1000_ethtool.c
> similarity index 100%
> rename from drivers/net/e1000/e1000_ethtool.c
> rename to drivers/net/intel_wired_lan/e1000/e1000_ethtool.c
> diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/intel_wired_lan/e1000/e1000_hw.c
> similarity index 100%
> rename from drivers/net/e1000/e1000_hw.c
> rename to drivers/net/intel_wired_lan/e1000/e1000_hw.c
> diff --git a/drivers/net/e1000/e1000_hw.h b/drivers/net/intel_wired_lan/e1000/e1000_hw.h
> similarity index 100%
> rename from drivers/net/e1000/e1000_hw.h
> rename to drivers/net/intel_wired_lan/e1000/e1000_hw.h
> diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/intel_wired_lan/e1000/e1000_main.c
> similarity index 100%
> rename from drivers/net/e1000/e1000_main.c
> rename to drivers/net/intel_wired_lan/e1000/e1000_main.c
> diff --git a/drivers/net/e1000/e1000_osdep.h b/drivers/net/intel_wired_lan/e1000/e1000_osdep.h
> similarity index 100%
> rename from drivers/net/e1000/e1000_osdep.h
> rename to drivers/net/intel_wired_lan/e1000/e1000_osdep.h
> diff --git a/drivers/net/e1000/e1000_param.c b/drivers/net/intel_wired_lan/e1000/e1000_param.c
> similarity index 100%
> rename from drivers/net/e1000/e1000_param.c
> rename to drivers/net/intel_wired_lan/e1000/e1000_param.c
> diff --git a/drivers/net/e1000e/82571.c b/drivers/net/intel_wired_lan/e1000e/82571.c
> similarity index 100%
> rename from drivers/net/e1000e/82571.c
> rename to drivers/net/intel_wired_lan/e1000e/82571.c
> diff --git a/drivers/net/e1000e/Makefile b/drivers/net/intel_wired_lan/e1000e/Makefile
> similarity index 100%
> rename from drivers/net/e1000e/Makefile
> rename to drivers/net/intel_wired_lan/e1000e/Makefile
> diff --git a/drivers/net/e1000e/defines.h b/drivers/net/intel_wired_lan/e1000e/defines.h
> similarity index 100%
> rename from drivers/net/e1000e/defines.h
> rename to drivers/net/intel_wired_lan/e1000e/defines.h
> diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/intel_wired_lan/e1000e/e1000.h
> similarity index 100%
> rename from drivers/net/e1000e/e1000.h
> rename to drivers/net/intel_wired_lan/e1000e/e1000.h
> diff --git a/drivers/net/e1000e/es2lan.c b/drivers/net/intel_wired_lan/e1000e/es2lan.c
> similarity index 100%
> rename from drivers/net/e1000e/es2lan.c
> rename to drivers/net/intel_wired_lan/e1000e/es2lan.c
> diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/intel_wired_lan/e1000e/ethtool.c
> similarity index 100%
> rename from drivers/net/e1000e/ethtool.c
> rename to drivers/net/intel_wired_lan/e1000e/ethtool.c
> diff --git a/drivers/net/e1000e/hw.h b/drivers/net/intel_wired_lan/e1000e/hw.h
> similarity index 100%
> rename from drivers/net/e1000e/hw.h
> rename to drivers/net/intel_wired_lan/e1000e/hw.h
> diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/intel_wired_lan/e1000e/ich8lan.c
> similarity index 100%
> rename from drivers/net/e1000e/ich8lan.c
> rename to drivers/net/intel_wired_lan/e1000e/ich8lan.c
> diff --git a/drivers/net/e1000e/lib.c b/drivers/net/intel_wired_lan/e1000e/lib.c
> similarity index 100%
> rename from drivers/net/e1000e/lib.c
> rename to drivers/net/intel_wired_lan/e1000e/lib.c
> diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/intel_wired_lan/e1000e/netdev.c
> similarity index 100%
> rename from drivers/net/e1000e/netdev.c
> rename to drivers/net/intel_wired_lan/e1000e/netdev.c
> diff --git a/drivers/net/e1000e/param.c b/drivers/net/intel_wired_lan/e1000e/param.c
> similarity index 100%
> rename from drivers/net/e1000e/param.c
> rename to drivers/net/intel_wired_lan/e1000e/param.c
> diff --git a/drivers/net/e1000e/phy.c b/drivers/net/intel_wired_lan/e1000e/phy.c
> similarity index 100%
> rename from drivers/net/e1000e/phy.c
> rename to drivers/net/intel_wired_lan/e1000e/phy.c
> diff --git a/drivers/net/igb/Makefile b/drivers/net/intel_wired_lan/igb/Makefile
> similarity index 100%
> rename from drivers/net/igb/Makefile
> rename to drivers/net/intel_wired_lan/igb/Makefile
> diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/intel_wired_lan/igb/e1000_82575.c
> similarity index 100%
> rename from drivers/net/igb/e1000_82575.c
> rename to drivers/net/intel_wired_lan/igb/e1000_82575.c
> diff --git a/drivers/net/igb/e1000_82575.h b/drivers/net/intel_wired_lan/igb/e1000_82575.h
> similarity index 100%
> rename from drivers/net/igb/e1000_82575.h
> rename to drivers/net/intel_wired_lan/igb/e1000_82575.h
> diff --git a/drivers/net/igb/e1000_defines.h b/drivers/net/intel_wired_lan/igb/e1000_defines.h
> similarity index 100%
> rename from drivers/net/igb/e1000_defines.h
> rename to drivers/net/intel_wired_lan/igb/e1000_defines.h
> diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/intel_wired_lan/igb/e1000_hw.h
> similarity index 100%
> rename from drivers/net/igb/e1000_hw.h
> rename to drivers/net/intel_wired_lan/igb/e1000_hw.h
> diff --git a/drivers/net/igb/e1000_mac.c b/drivers/net/intel_wired_lan/igb/e1000_mac.c
> similarity index 100%
> rename from drivers/net/igb/e1000_mac.c
> rename to drivers/net/intel_wired_lan/igb/e1000_mac.c
> diff --git a/drivers/net/igb/e1000_mac.h b/drivers/net/intel_wired_lan/igb/e1000_mac.h
> similarity index 100%
> rename from drivers/net/igb/e1000_mac.h
> rename to drivers/net/intel_wired_lan/igb/e1000_mac.h
> diff --git a/drivers/net/igb/e1000_mbx.c b/drivers/net/intel_wired_lan/igb/e1000_mbx.c
> similarity index 100%
> rename from drivers/net/igb/e1000_mbx.c
> rename to drivers/net/intel_wired_lan/igb/e1000_mbx.c
> diff --git a/drivers/net/igb/e1000_mbx.h b/drivers/net/intel_wired_lan/igb/e1000_mbx.h
> similarity index 100%
> rename from drivers/net/igb/e1000_mbx.h
> rename to drivers/net/intel_wired_lan/igb/e1000_mbx.h
> diff --git a/drivers/net/igb/e1000_nvm.c b/drivers/net/intel_wired_lan/igb/e1000_nvm.c
> similarity index 100%
> rename from drivers/net/igb/e1000_nvm.c
> rename to drivers/net/intel_wired_lan/igb/e1000_nvm.c
> diff --git a/drivers/net/igb/e1000_nvm.h b/drivers/net/intel_wired_lan/igb/e1000_nvm.h
> similarity index 100%
> rename from drivers/net/igb/e1000_nvm.h
> rename to drivers/net/intel_wired_lan/igb/e1000_nvm.h
> diff --git a/drivers/net/igb/e1000_phy.c b/drivers/net/intel_wired_lan/igb/e1000_phy.c
> similarity index 100%
> rename from drivers/net/igb/e1000_phy.c
> rename to drivers/net/intel_wired_lan/igb/e1000_phy.c
> diff --git a/drivers/net/igb/e1000_phy.h b/drivers/net/intel_wired_lan/igb/e1000_phy.h
> similarity index 100%
> rename from drivers/net/igb/e1000_phy.h
> rename to drivers/net/intel_wired_lan/igb/e1000_phy.h
> diff --git a/drivers/net/igb/e1000_regs.h b/drivers/net/intel_wired_lan/igb/e1000_regs.h
> similarity index 100%
> rename from drivers/net/igb/e1000_regs.h
> rename to drivers/net/intel_wired_lan/igb/e1000_regs.h
> diff --git a/drivers/net/igb/igb.h b/drivers/net/intel_wired_lan/igb/igb.h
> similarity index 100%
> rename from drivers/net/igb/igb.h
> rename to drivers/net/intel_wired_lan/igb/igb.h
> diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/intel_wired_lan/igb/igb_ethtool.c
> similarity index 100%
> rename from drivers/net/igb/igb_ethtool.c
> rename to drivers/net/intel_wired_lan/igb/igb_ethtool.c
> diff --git a/drivers/net/igb/igb_main.c b/drivers/net/intel_wired_lan/igb/igb_main.c
> similarity index 100%
> rename from drivers/net/igb/igb_main.c
> rename to drivers/net/intel_wired_lan/igb/igb_main.c
> diff --git a/drivers/net/igbvf/Makefile b/drivers/net/intel_wired_lan/igbvf/Makefile
> similarity index 100%
> rename from drivers/net/igbvf/Makefile
> rename to drivers/net/intel_wired_lan/igbvf/Makefile
> diff --git a/drivers/net/igbvf/defines.h b/drivers/net/intel_wired_lan/igbvf/defines.h
> similarity index 100%
> rename from drivers/net/igbvf/defines.h
> rename to drivers/net/intel_wired_lan/igbvf/defines.h
> diff --git a/drivers/net/igbvf/ethtool.c b/drivers/net/intel_wired_lan/igbvf/ethtool.c
> similarity index 100%
> rename from drivers/net/igbvf/ethtool.c
> rename to drivers/net/intel_wired_lan/igbvf/ethtool.c
> diff --git a/drivers/net/igbvf/igbvf.h b/drivers/net/intel_wired_lan/igbvf/igbvf.h
> similarity index 100%
> rename from drivers/net/igbvf/igbvf.h
> rename to drivers/net/intel_wired_lan/igbvf/igbvf.h
> diff --git a/drivers/net/igbvf/mbx.c b/drivers/net/intel_wired_lan/igbvf/mbx.c
> similarity index 100%
> rename from drivers/net/igbvf/mbx.c
> rename to drivers/net/intel_wired_lan/igbvf/mbx.c
> diff --git a/drivers/net/igbvf/mbx.h b/drivers/net/intel_wired_lan/igbvf/mbx.h
> similarity index 100%
> rename from drivers/net/igbvf/mbx.h
> rename to drivers/net/intel_wired_lan/igbvf/mbx.h
> diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/intel_wired_lan/igbvf/netdev.c
> similarity index 100%
> rename from drivers/net/igbvf/netdev.c
> rename to drivers/net/intel_wired_lan/igbvf/netdev.c
> diff --git a/drivers/net/igbvf/regs.h b/drivers/net/intel_wired_lan/igbvf/regs.h
> similarity index 100%
> rename from drivers/net/igbvf/regs.h
> rename to drivers/net/intel_wired_lan/igbvf/regs.h
> diff --git a/drivers/net/igbvf/vf.c b/drivers/net/intel_wired_lan/igbvf/vf.c
> similarity index 100%
> rename from drivers/net/igbvf/vf.c
> rename to drivers/net/intel_wired_lan/igbvf/vf.c
> diff --git a/drivers/net/igbvf/vf.h b/drivers/net/intel_wired_lan/igbvf/vf.h
> similarity index 100%
> rename from drivers/net/igbvf/vf.h
> rename to drivers/net/intel_wired_lan/igbvf/vf.h
> diff --git a/drivers/net/ixgb/Makefile b/drivers/net/intel_wired_lan/ixgb/Makefile
> similarity index 100%
> rename from drivers/net/ixgb/Makefile
> rename to drivers/net/intel_wired_lan/ixgb/Makefile
> diff --git a/drivers/net/ixgb/ixgb.h b/drivers/net/intel_wired_lan/ixgb/ixgb.h
> similarity index 100%
> rename from drivers/net/ixgb/ixgb.h
> rename to drivers/net/intel_wired_lan/ixgb/ixgb.h
> diff --git a/drivers/net/ixgb/ixgb_ee.c b/drivers/net/intel_wired_lan/ixgb/ixgb_ee.c
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_ee.c
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_ee.c
> diff --git a/drivers/net/ixgb/ixgb_ee.h b/drivers/net/intel_wired_lan/ixgb/ixgb_ee.h
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_ee.h
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_ee.h
> diff --git a/drivers/net/ixgb/ixgb_ethtool.c b/drivers/net/intel_wired_lan/ixgb/ixgb_ethtool.c
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_ethtool.c
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_ethtool.c
> diff --git a/drivers/net/ixgb/ixgb_hw.c b/drivers/net/intel_wired_lan/ixgb/ixgb_hw.c
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_hw.c
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_hw.c
> diff --git a/drivers/net/ixgb/ixgb_hw.h b/drivers/net/intel_wired_lan/ixgb/ixgb_hw.h
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_hw.h
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_hw.h
> diff --git a/drivers/net/ixgb/ixgb_ids.h b/drivers/net/intel_wired_lan/ixgb/ixgb_ids.h
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_ids.h
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_ids.h
> diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/intel_wired_lan/ixgb/ixgb_main.c
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_main.c
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_main.c
> diff --git a/drivers/net/ixgb/ixgb_osdep.h b/drivers/net/intel_wired_lan/ixgb/ixgb_osdep.h
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_osdep.h
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_osdep.h
> diff --git a/drivers/net/ixgb/ixgb_param.c b/drivers/net/intel_wired_lan/ixgb/ixgb_param.c
> similarity index 100%
> rename from drivers/net/ixgb/ixgb_param.c
> rename to drivers/net/intel_wired_lan/ixgb/ixgb_param.c
> diff --git a/drivers/net/ixgbe/Makefile b/drivers/net/intel_wired_lan/ixgbe/Makefile
> similarity index 100%
> rename from drivers/net/ixgbe/Makefile
> rename to drivers/net/intel_wired_lan/ixgbe/Makefile
> diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe.h
> diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_82598.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_82598.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_82598.c
> diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_82599.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_82599.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_82599.c
> diff --git a/drivers/net/ixgbe/ixgbe_common.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_common.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_common.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_common.c
> diff --git a/drivers/net/ixgbe/ixgbe_common.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_common.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_common.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_common.h
> diff --git a/drivers/net/ixgbe/ixgbe_dcb.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.c
> diff --git a/drivers/net/ixgbe/ixgbe_dcb.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.h
> diff --git a/drivers/net/ixgbe/ixgbe_dcb_82598.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb_82598.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.c
> diff --git a/drivers/net/ixgbe/ixgbe_dcb_82598.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb_82598.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.h
> diff --git a/drivers/net/ixgbe/ixgbe_dcb_82599.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb_82599.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.c
> diff --git a/drivers/net/ixgbe/ixgbe_dcb_82599.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb_82599.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.h
> diff --git a/drivers/net/ixgbe/ixgbe_dcb_nl.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_nl.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_dcb_nl.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_nl.c
> diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_ethtool.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_ethtool.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_ethtool.c
> diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_fcoe.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.c
> diff --git a/drivers/net/ixgbe/ixgbe_fcoe.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_fcoe.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.h
> diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_main.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_main.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_main.c
> diff --git a/drivers/net/ixgbe/ixgbe_mbx.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_mbx.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.c
> diff --git a/drivers/net/ixgbe/ixgbe_mbx.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_mbx.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.h
> diff --git a/drivers/net/ixgbe/ixgbe_phy.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_phy.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.c
> diff --git a/drivers/net/ixgbe/ixgbe_phy.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_phy.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.h
> diff --git a/drivers/net/ixgbe/ixgbe_sriov.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.c
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_sriov.c
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.c
> diff --git a/drivers/net/ixgbe/ixgbe_sriov.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_sriov.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.h
> diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_type.h
> similarity index 100%
> rename from drivers/net/ixgbe/ixgbe_type.h
> rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_type.h
> diff --git a/drivers/net/ixgbevf/Makefile b/drivers/net/intel_wired_lan/ixgbevf/Makefile
> similarity index 100%
> rename from drivers/net/ixgbevf/Makefile
> rename to drivers/net/intel_wired_lan/ixgbevf/Makefile
> diff --git a/drivers/net/ixgbevf/defines.h b/drivers/net/intel_wired_lan/ixgbevf/defines.h
> similarity index 100%
> rename from drivers/net/ixgbevf/defines.h
> rename to drivers/net/intel_wired_lan/ixgbevf/defines.h
> diff --git a/drivers/net/ixgbevf/ethtool.c b/drivers/net/intel_wired_lan/ixgbevf/ethtool.c
> similarity index 100%
> rename from drivers/net/ixgbevf/ethtool.c
> rename to drivers/net/intel_wired_lan/ixgbevf/ethtool.c
> diff --git a/drivers/net/ixgbevf/ixgbevf.h b/drivers/net/intel_wired_lan/ixgbevf/ixgbevf.h
> similarity index 100%
> rename from drivers/net/ixgbevf/ixgbevf.h
> rename to drivers/net/intel_wired_lan/ixgbevf/ixgbevf.h
> diff --git a/drivers/net/ixgbevf/ixgbevf_main.c b/drivers/net/intel_wired_lan/ixgbevf/ixgbevf_main.c
> similarity index 100%
> rename from drivers/net/ixgbevf/ixgbevf_main.c
> rename to drivers/net/intel_wired_lan/ixgbevf/ixgbevf_main.c
> diff --git a/drivers/net/ixgbevf/mbx.c b/drivers/net/intel_wired_lan/ixgbevf/mbx.c
> similarity index 100%
> rename from drivers/net/ixgbevf/mbx.c
> rename to drivers/net/intel_wired_lan/ixgbevf/mbx.c
> diff --git a/drivers/net/ixgbevf/mbx.h b/drivers/net/intel_wired_lan/ixgbevf/mbx.h
> similarity index 100%
> rename from drivers/net/ixgbevf/mbx.h
> rename to drivers/net/intel_wired_lan/ixgbevf/mbx.h
> diff --git a/drivers/net/ixgbevf/regs.h b/drivers/net/intel_wired_lan/ixgbevf/regs.h
> similarity index 100%
> rename from drivers/net/ixgbevf/regs.h
> rename to drivers/net/intel_wired_lan/ixgbevf/regs.h
> diff --git a/drivers/net/ixgbevf/vf.c b/drivers/net/intel_wired_lan/ixgbevf/vf.c
> similarity index 100%
> rename from drivers/net/ixgbevf/vf.c
> rename to drivers/net/intel_wired_lan/ixgbevf/vf.c
> diff --git a/drivers/net/ixgbevf/vf.h b/drivers/net/intel_wired_lan/ixgbevf/vf.h
> similarity index 100%
> rename from drivers/net/ixgbevf/vf.h
> rename to drivers/net/intel_wired_lan/ixgbevf/vf.h

Seems like it would introduce more confusion and trouble.


-- 

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply

* [RFC PATCH net-next] drivers/net Documentation/networking: Create directory intel_wired_lan
From: Joe Perches @ 2010-10-10 20:42 UTC (permalink / raw)
  To: Jeff Kirsher
  Cc: Don, e1000-devel, Bruce Allan, Jesse Brandeburg, linux-kernel,
	Greg Rose, John Ronciak, netdev

Perhaps it's better to move drivers from the very populated
drivers/net directory into vendor specific directories similar
to the Atheros approach used for drivers/net/wireless/ath/

Move intel drivers and Documentation to separate directories
Create drivers/net/intel_wired_lan/Kconfig.<speed> and Makefile
Modify drivers/net/Kconfig and Makefile
Update MAINTAINERS

Signed-off-by: Joe Perches <joe@perches.com>
---
 .../networking/{ => intel_wired_lan}/e100.txt      |    0
 .../networking/{ => intel_wired_lan}/e1000.txt     |    0
 .../networking/{ => intel_wired_lan}/igb.txt       |    0
 .../networking/{ => intel_wired_lan}/igbvf.txt     |    0
 .../networking/{ => intel_wired_lan}/ixgb.txt      |    0
 .../networking/{ => intel_wired_lan}/ixgbe.txt     |    0
 .../networking/{ => intel_wired_lan}/ixgbevf.txt   |    0
 MAINTAINERS                                        |   18 +--
 drivers/net/Kconfig                                |  214 +-------------------
 drivers/net/Makefile                               |    8 -
 drivers/net/intel_wired_lan/Kconfig.100            |   25 +++
 drivers/net/intel_wired_lan/Kconfig.1000           |  102 ++++++++++
 drivers/net/intel_wired_lan/Kconfig.10000          |   81 ++++++++
 drivers/net/intel_wired_lan/Makefile               |    9 +
 drivers/net/{ => intel_wired_lan}/e100.c           |    0
 drivers/net/{ => intel_wired_lan}/e1000/Makefile   |    0
 drivers/net/{ => intel_wired_lan}/e1000/e1000.h    |    0
 .../{ => intel_wired_lan}/e1000/e1000_ethtool.c    |    0
 drivers/net/{ => intel_wired_lan}/e1000/e1000_hw.c |    0
 drivers/net/{ => intel_wired_lan}/e1000/e1000_hw.h |    0
 .../net/{ => intel_wired_lan}/e1000/e1000_main.c   |    0
 .../net/{ => intel_wired_lan}/e1000/e1000_osdep.h  |    0
 .../net/{ => intel_wired_lan}/e1000/e1000_param.c  |    0
 drivers/net/{ => intel_wired_lan}/e1000e/82571.c   |    0
 drivers/net/{ => intel_wired_lan}/e1000e/Makefile  |    0
 drivers/net/{ => intel_wired_lan}/e1000e/defines.h |    0
 drivers/net/{ => intel_wired_lan}/e1000e/e1000.h   |    0
 drivers/net/{ => intel_wired_lan}/e1000e/es2lan.c  |    0
 drivers/net/{ => intel_wired_lan}/e1000e/ethtool.c |    0
 drivers/net/{ => intel_wired_lan}/e1000e/hw.h      |    0
 drivers/net/{ => intel_wired_lan}/e1000e/ich8lan.c |    0
 drivers/net/{ => intel_wired_lan}/e1000e/lib.c     |    0
 drivers/net/{ => intel_wired_lan}/e1000e/netdev.c  |    0
 drivers/net/{ => intel_wired_lan}/e1000e/param.c   |    0
 drivers/net/{ => intel_wired_lan}/e1000e/phy.c     |    0
 drivers/net/{ => intel_wired_lan}/igb/Makefile     |    0
 .../net/{ => intel_wired_lan}/igb/e1000_82575.c    |    0
 .../net/{ => intel_wired_lan}/igb/e1000_82575.h    |    0
 .../net/{ => intel_wired_lan}/igb/e1000_defines.h  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_hw.h   |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_mac.c  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_mac.h  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_mbx.c  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_mbx.h  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_nvm.c  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_nvm.h  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_phy.c  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_phy.h  |    0
 drivers/net/{ => intel_wired_lan}/igb/e1000_regs.h |    0
 drivers/net/{ => intel_wired_lan}/igb/igb.h        |    0
 .../net/{ => intel_wired_lan}/igb/igb_ethtool.c    |    0
 drivers/net/{ => intel_wired_lan}/igb/igb_main.c   |    0
 drivers/net/{ => intel_wired_lan}/igbvf/Makefile   |    0
 drivers/net/{ => intel_wired_lan}/igbvf/defines.h  |    0
 drivers/net/{ => intel_wired_lan}/igbvf/ethtool.c  |    0
 drivers/net/{ => intel_wired_lan}/igbvf/igbvf.h    |    0
 drivers/net/{ => intel_wired_lan}/igbvf/mbx.c      |    0
 drivers/net/{ => intel_wired_lan}/igbvf/mbx.h      |    0
 drivers/net/{ => intel_wired_lan}/igbvf/netdev.c   |    0
 drivers/net/{ => intel_wired_lan}/igbvf/regs.h     |    0
 drivers/net/{ => intel_wired_lan}/igbvf/vf.c       |    0
 drivers/net/{ => intel_wired_lan}/igbvf/vf.h       |    0
 drivers/net/{ => intel_wired_lan}/ixgb/Makefile    |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb.h      |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb_ee.c   |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb_ee.h   |    0
 .../net/{ => intel_wired_lan}/ixgb/ixgb_ethtool.c  |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb_hw.c   |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb_hw.h   |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb_ids.h  |    0
 drivers/net/{ => intel_wired_lan}/ixgb/ixgb_main.c |    0
 .../net/{ => intel_wired_lan}/ixgb/ixgb_osdep.h    |    0
 .../net/{ => intel_wired_lan}/ixgb/ixgb_param.c    |    0
 drivers/net/{ => intel_wired_lan}/ixgbe/Makefile   |    0
 drivers/net/{ => intel_wired_lan}/ixgbe/ixgbe.h    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_82598.c  |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_82599.c  |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_common.c |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_common.h |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_dcb.c    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_dcb.h    |    0
 .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82598.c  |    0
 .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82598.h  |    0
 .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82599.c  |    0
 .../{ => intel_wired_lan}/ixgbe/ixgbe_dcb_82599.h  |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_dcb_nl.c |    0
 .../{ => intel_wired_lan}/ixgbe/ixgbe_ethtool.c    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_fcoe.c   |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_fcoe.h   |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_main.c   |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_mbx.c    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_mbx.h    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_phy.c    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_phy.h    |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_sriov.c  |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_sriov.h  |    0
 .../net/{ => intel_wired_lan}/ixgbe/ixgbe_type.h   |    0
 drivers/net/{ => intel_wired_lan}/ixgbevf/Makefile |    0
 .../net/{ => intel_wired_lan}/ixgbevf/defines.h    |    0
 .../net/{ => intel_wired_lan}/ixgbevf/ethtool.c    |    0
 .../net/{ => intel_wired_lan}/ixgbevf/ixgbevf.h    |    0
 .../{ => intel_wired_lan}/ixgbevf/ixgbevf_main.c   |    0
 drivers/net/{ => intel_wired_lan}/ixgbevf/mbx.c    |    0
 drivers/net/{ => intel_wired_lan}/ixgbevf/mbx.h    |    0
 drivers/net/{ => intel_wired_lan}/ixgbevf/regs.h   |    0
 drivers/net/{ => intel_wired_lan}/ixgbevf/vf.c     |    0
 drivers/net/{ => intel_wired_lan}/ixgbevf/vf.h     |    0
 107 files changed, 224 insertions(+), 233 deletions(-)

diff --git a/Documentation/networking/e100.txt b/Documentation/networking/intel_wired_lan/e100.txt
similarity index 100%
rename from Documentation/networking/e100.txt
rename to Documentation/networking/intel_wired_lan/e100.txt
diff --git a/Documentation/networking/e1000.txt b/Documentation/networking/intel_wired_lan/e1000.txt
similarity index 100%
rename from Documentation/networking/e1000.txt
rename to Documentation/networking/intel_wired_lan/e1000.txt
diff --git a/Documentation/networking/igb.txt b/Documentation/networking/intel_wired_lan/igb.txt
similarity index 100%
rename from Documentation/networking/igb.txt
rename to Documentation/networking/intel_wired_lan/igb.txt
diff --git a/Documentation/networking/igbvf.txt b/Documentation/networking/intel_wired_lan/igbvf.txt
similarity index 100%
rename from Documentation/networking/igbvf.txt
rename to Documentation/networking/intel_wired_lan/igbvf.txt
diff --git a/Documentation/networking/ixgb.txt b/Documentation/networking/intel_wired_lan/ixgb.txt
similarity index 100%
rename from Documentation/networking/ixgb.txt
rename to Documentation/networking/intel_wired_lan/ixgb.txt
diff --git a/Documentation/networking/ixgbe.txt b/Documentation/networking/intel_wired_lan/ixgbe.txt
similarity index 100%
rename from Documentation/networking/ixgbe.txt
rename to Documentation/networking/intel_wired_lan/ixgbe.txt
diff --git a/Documentation/networking/ixgbevf.txt b/Documentation/networking/intel_wired_lan/ixgbevf.txt
similarity index 100%
rename from Documentation/networking/ixgbevf.txt
rename to Documentation/networking/intel_wired_lan/ixgbevf.txt
diff --git a/MAINTAINERS b/MAINTAINERS
index ba8603c..b086404 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3096,22 +3096,8 @@ M:	John Ronciak <john.ronciak@intel.com>
 L:	e1000-devel@lists.sourceforge.net
 W:	http://e1000.sourceforge.net/
 S:	Supported
-F:	Documentation/networking/e100.txt
-F:	Documentation/networking/e1000.txt
-F:	Documentation/networking/e1000e.txt
-F:	Documentation/networking/igb.txt
-F:	Documentation/networking/igbvf.txt
-F:	Documentation/networking/ixgb.txt
-F:	Documentation/networking/ixgbe.txt
-F:	Documentation/networking/ixgbevf.txt
-F:	drivers/net/e100.c
-F:	drivers/net/e1000/
-F:	drivers/net/e1000e/
-F:	drivers/net/igb/
-F:	drivers/net/igbvf/
-F:	drivers/net/ixgb/
-F:	drivers/net/ixgbe/
-F:	drivers/net/ixgbevf/
+F:	Documentation/networking/intel_wired_lan/
+F:	drivers/net/intel_wired_lan/
 
 INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
 L:	linux-wireless@vger.kernel.org
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 13d01f3..4d6448d 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1495,32 +1495,6 @@ config TC35815
 	depends on NET_PCI && PCI && MIPS
 	select PHYLIB
 
-config E100
-	tristate "Intel(R) PRO/100+ support"
-	depends on NET_PCI && PCI
-	select MII
-	---help---
-	  This driver supports Intel(R) PRO/100 family of adapters.
-	  To verify that your adapter is supported, find the board ID number 
-	  on the adapter. Look for a label that has a barcode and a number 
-	  in the format 123456-001 (six digits hyphen three digits). 
-
-	  Use the above information and the Adapter & Driver ID Guide at:
-
-	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-          to identify the adapter.
-
-	  For the latest Intel PRO/100 network driver for Linux, see:
-
-	  <http://appsr.intel.com/scripts-df/support_intel.asp>
-
-	  More specific information on configuring the driver is in 
-	  <file:Documentation/networking/e100.txt>.
-
-	  To compile this driver as a module, choose M here. The module
-	  will be called e100.
-
 config LNE390
 	tristate "Mylex EISA LNE390A/B support (EXPERIMENTAL)"
 	depends on NET_PCI && EISA && EXPERIMENTAL
@@ -1995,6 +1969,8 @@ source "drivers/net/fs_enet/Kconfig"
 
 source "drivers/net/octeon/Kconfig"
 
+source "drivers/net/intel_wired_lan/Kconfig.100"
+
 endif # NET_ETHERNET
 
 #
@@ -2059,45 +2035,7 @@ config DL2K
 	  To compile this driver as a module, choose M here: the
 	  module will be called dl2k.
 
-config E1000
-	tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
-	depends on PCI
-	---help---
-	  This driver supports Intel(R) PRO/1000 gigabit ethernet family of
-	  adapters.  For more information on how to identify your adapter, go 
-	  to the Adapter & Driver ID Guide at:
-
-	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-	  For general information and support, go to the Intel support
-	  website at:
-
-	  <http://support.intel.com>
-
-	  More specific information on configuring the driver is in 
-	  <file:Documentation/networking/e1000.txt>.
-
-	  To compile this driver as a module, choose M here. The module
-	  will be called e1000.
-
-config E1000E
-	tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
-	depends on PCI && (!SPARC32 || BROKEN)
-	---help---
-	  This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
-	  ethernet family of adapters. For PCI or PCI-X e1000 adapters,
-	  use the regular e1000 driver For more information on how to
-	  identify your adapter, go to the Adapter & Driver ID Guide at:
-
-	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-	  For general information and support, go to the Intel support
-	  website at:
-
-	  <http://support.intel.com>
-
-	  To compile this driver as a module, choose M here. The module
-	  will be called e1000e.
+source "drivers/net/intel_wired_lan/Kconfig.1000"
 
 config IP1000
 	tristate "IP1000 Gigabit Ethernet support"
@@ -2109,57 +2047,6 @@ config IP1000
 	  To compile this driver as a module, choose M here: the module
 	  will be called ipg.  This is recommended.
 
-config IGB
-       tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
-       depends on PCI
-       ---help---
-         This driver supports Intel(R) 82575/82576 gigabit ethernet family of
-         adapters.  For more information on how to identify your adapter, go
-         to the Adapter & Driver ID Guide at:
-
-         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-         For general information and support, go to the Intel support
-         website at:
-
-         <http://support.intel.com>
-
-         More specific information on configuring the driver is in
-         <file:Documentation/networking/e1000.txt>.
-
-         To compile this driver as a module, choose M here. The module
-         will be called igb.
-
-config IGB_DCA
-	bool "Direct Cache Access (DCA) Support"
-	default y
-	depends on IGB && DCA && !(IGB=y && DCA=m)
-	---help---
-	  Say Y here if you want to use Direct Cache Access (DCA) in the
-	  driver.  DCA is a method for warming the CPU cache before data
-	  is used, with the intent of lessening the impact of cache misses.
-
-config IGBVF
-       tristate "Intel(R) 82576 Virtual Function Ethernet support"
-       depends on PCI
-       ---help---
-         This driver supports Intel(R) 82576 virtual functions.  For more
-         information on how to identify your adapter, go to the Adapter &
-         Driver ID Guide at:
-
-         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-         For general information and support, go to the Intel support
-         website at:
-
-         <http://support.intel.com>
-
-         More specific information on configuring the driver is in
-         <file:Documentation/networking/e1000.txt>.
-
-         To compile this driver as a module, choose M here. The module
-         will be called igbvf.
-
 source "drivers/net/ixp2000/Kconfig"
 
 config MYRI_SBUS
@@ -2515,17 +2402,6 @@ config S6GMAC
 
 source "drivers/net/stmmac/Kconfig"
 
-config PCH_GBE
-	tristate "PCH Gigabit Ethernet"
-	depends on PCI
-	---help---
-	  This is a gigabit ethernet driver for Topcliff PCH.
-	  Topcliff PCH is the platform controller hub that is used in Intel's
-	  general embedded platform.
-	  Topcliff PCH has Gigabit Ethernet interface.
-	  Using this interface, it is able to access system devices connected
-	  to Gigabit Ethernet.
-	  This driver enables Gigabit Ethernet function.
 
 endif # NETDEV_1000
 
@@ -2659,94 +2535,14 @@ config EHEA
 	  To compile the driver as a module, choose M here. The module
 	  will be called ehea.
 
+source "drivers/net/intel_wired_lan/Kconfig.10000"
+
 config ENIC
 	tristate "Cisco VIC Ethernet NIC Support"
 	depends on PCI && INET
 	help
 	  This enables the support for the Cisco VIC Ethernet card.
 
-config IXGBE
-	tristate "Intel(R) 10GbE PCI Express adapters support"
-	depends on PCI && INET
-	select MDIO
-	---help---
-	  This driver supports Intel(R) 10GbE PCI Express family of
-	  adapters.  For more information on how to identify your adapter, go
-	  to the Adapter & Driver ID Guide at:
-
-	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-	  For general information and support, go to the Intel support
-	  website at:
-
-	  <http://support.intel.com>
-
-	  To compile this driver as a module, choose M here. The module
-	  will be called ixgbe.
-
-config IXGBE_DCA
-	bool "Direct Cache Access (DCA) Support"
-	default y
-	depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
-	---help---
-	  Say Y here if you want to use Direct Cache Access (DCA) in the
-	  driver.  DCA is a method for warming the CPU cache before data
-	  is used, with the intent of lessening the impact of cache misses.
-
-config IXGBE_DCB
-	bool "Data Center Bridging (DCB) Support"
-	default n
-	depends on IXGBE && DCB
-	---help---
-	  Say Y here if you want to use Data Center Bridging (DCB) in the
-	  driver.
-
-	  If unsure, say N.
-
-config IXGBEVF
-       tristate "Intel(R) 82599 Virtual Function Ethernet support"
-       depends on PCI_MSI
-       ---help---
-         This driver supports Intel(R) 82599 virtual functions.  For more
-         information on how to identify your adapter, go to the Adapter &
-         Driver ID Guide at:
-
-         <http://support.intel.com/support/network/sb/CS-008441.htm>
-
-         For general information and support, go to the Intel support
-         website at:
-
-         <http://support.intel.com>
-
-         More specific information on configuring the driver is in
-         <file:Documentation/networking/ixgbevf.txt>.
-
-         To compile this driver as a module, choose M here. The module
-         will be called ixgbevf.  MSI-X interrupt support is required
-         for this driver to work correctly.
-
-config IXGB
-	tristate "Intel(R) PRO/10GbE support"
-	depends on PCI
-	---help---
-	  This driver supports Intel(R) PRO/10GbE family of adapters for
-	  PCI-X type cards. For PCI-E type cards, use the "ixgbe" driver
-	  instead. For more information on how to identify your adapter, go
-	  to the Adapter & Driver ID Guide at:
-
-	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
-	  For general information and support, go to the Intel support
-	  website at:
-
-	  <http://support.intel.com>
-
-	  More specific information on configuring the driver is in 
-	  <file:Documentation/networking/ixgb.txt>.
-
-	  To compile this driver as a module, choose M here. The module
-	  will be called ixgb.
-
 config S2IO
 	tristate "S2IO 10Gbe XFrame NIC"
 	depends on PCI
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index b8bf93d..e457b3c 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -8,14 +8,7 @@ obj-$(CONFIG_PHYLIB) += phy/
 
 obj-$(CONFIG_TI_DAVINCI_EMAC) += davinci_emac.o
 
-obj-$(CONFIG_E1000) += e1000/
-obj-$(CONFIG_E1000E) += e1000e/
 obj-$(CONFIG_IBM_NEW_EMAC) += ibm_newemac/
-obj-$(CONFIG_IGB) += igb/
-obj-$(CONFIG_IGBVF) += igbvf/
-obj-$(CONFIG_IXGBE) += ixgbe/
-obj-$(CONFIG_IXGBEVF) += ixgbevf/
-obj-$(CONFIG_IXGB) += ixgb/
 obj-$(CONFIG_IP1000) += ipg.o
 obj-$(CONFIG_CHELSIO_T1) += chelsio/
 obj-$(CONFIG_CHELSIO_T3) += cxgb3/
@@ -68,7 +61,6 @@ obj-$(CONFIG_VORTEX) += 3c59x.o
 obj-$(CONFIG_TYPHOON) += typhoon.o
 obj-$(CONFIG_NE2K_PCI) += ne2k-pci.o 8390.o
 obj-$(CONFIG_PCNET32) += pcnet32.o
-obj-$(CONFIG_E100) += e100.o
 obj-$(CONFIG_TLAN) += tlan.o
 obj-$(CONFIG_EPIC100) += epic100.o
 obj-$(CONFIG_SMSC9420) += smsc9420.o
diff --git a/drivers/net/intel_wired_lan/Kconfig.100 b/drivers/net/intel_wired_lan/Kconfig.100
new file mode 100644
index 0000000..6651ae9
--- /dev/null
+++ b/drivers/net/intel_wired_lan/Kconfig.100
@@ -0,0 +1,25 @@
+config E100
+	tristate "Intel(R) PRO/100+ support"
+	depends on NET_PCI && PCI
+	select MII
+	---help---
+	  This driver supports Intel(R) PRO/100 family of adapters.
+	  To verify that your adapter is supported, find the board ID number
+	  on the adapter. Look for a label that has a barcode and a number
+	  in the format 123456-001 (six digits hyphen three digits).
+
+	  Use the above information and the Adapter & Driver ID Guide at:
+
+	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+          to identify the adapter.
+
+	  For the latest Intel PRO/100 network driver for Linux, see:
+
+	  <http://appsr.intel.com/scripts-df/support_intel.asp>
+
+	  More specific information on configuring the driver is in
+	  <file:Documentation/networking/intel_wired_lan/e100.txt>.
+
+	  To compile this driver as a module, choose M here. The module
+	  will be called e100.
diff --git a/drivers/net/intel_wired_lan/Kconfig.1000 b/drivers/net/intel_wired_lan/Kconfig.1000
new file mode 100644
index 0000000..4a7e13a
--- /dev/null
+++ b/drivers/net/intel_wired_lan/Kconfig.1000
@@ -0,0 +1,102 @@
+config E1000
+	tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
+	depends on PCI
+	---help---
+	  This driver supports Intel(R) PRO/1000 gigabit ethernet family of
+	  adapters.  For more information on how to identify your adapter, go
+	  to the Adapter & Driver ID Guide at:
+
+	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+	  For general information and support, go to the Intel support
+	  website at:
+
+	  <http://support.intel.com>
+
+	  More specific information on configuring the driver is in
+	  <file:Documentation/networking/intel_wired_lan/e1000.txt>.
+
+	  To compile this driver as a module, choose M here. The module
+	  will be called e1000.
+
+config E1000E
+	tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
+	depends on PCI && (!SPARC32 || BROKEN)
+	---help---
+	  This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
+	  ethernet family of adapters. For PCI or PCI-X e1000 adapters,
+	  use the regular e1000 driver For more information on how to
+	  identify your adapter, go to the Adapter & Driver ID Guide at:
+
+	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+	  For general information and support, go to the Intel support
+	  website at:
+
+	  <http://support.intel.com>
+
+	  To compile this driver as a module, choose M here. The module
+	  will be called e1000e.
+
+config IGB
+       tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
+       depends on PCI
+       ---help---
+         This driver supports Intel(R) 82575/82576 gigabit ethernet family of
+         adapters.  For more information on how to identify your adapter, go
+         to the Adapter & Driver ID Guide at:
+
+         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+         For general information and support, go to the Intel support
+         website at:
+
+         <http://support.intel.com>
+
+         More specific information on configuring the driver is in
+         <file:Documentation/networking/intel_wired_lan/e1000.txt>.
+
+         To compile this driver as a module, choose M here. The module
+         will be called igb.
+
+config IGB_DCA
+	bool "Direct Cache Access (DCA) Support"
+	default y
+	depends on IGB && DCA && !(IGB=y && DCA=m)
+	---help---
+	  Say Y here if you want to use Direct Cache Access (DCA) in the
+	  driver.  DCA is a method for warming the CPU cache before data
+	  is used, with the intent of lessening the impact of cache misses.
+
+config IGBVF
+       tristate "Intel(R) 82576 Virtual Function Ethernet support"
+       depends on PCI
+       ---help---
+         This driver supports Intel(R) 82576 virtual functions.  For more
+         information on how to identify your adapter, go to the Adapter &
+         Driver ID Guide at:
+
+         <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+         For general information and support, go to the Intel support
+         website at:
+
+         <http://support.intel.com>
+
+         More specific information on configuring the driver is in
+         <file:Documentation/networking/intel_wired_lan/e1000.txt>.
+
+         To compile this driver as a module, choose M here. The module
+         will be called igbvf.
+
+config PCH_GBE
+	tristate "PCH Gigabit Ethernet"
+	depends on PCI
+	---help---
+	  This is a gigabit ethernet driver for Topcliff PCH.
+	  Topcliff PCH is the platform controller hub that is used in Intel's
+	  general embedded platform.
+	  Topcliff PCH has Gigabit Ethernet interface.
+	  Using this interface, it is able to access system devices connected
+	  to Gigabit Ethernet.
+	  This driver enables Gigabit Ethernet function.
diff --git a/drivers/net/intel_wired_lan/Kconfig.10000 b/drivers/net/intel_wired_lan/Kconfig.10000
new file mode 100644
index 0000000..ef35ebd
--- /dev/null
+++ b/drivers/net/intel_wired_lan/Kconfig.10000
@@ -0,0 +1,81 @@
+config IXGBE
+	tristate "Intel(R) 10GbE PCI Express adapters support"
+	depends on PCI && INET
+	select MDIO
+	---help---
+	  This driver supports Intel(R) 10GbE PCI Express family of
+	  adapters.  For more information on how to identify your adapter, go
+	  to the Adapter & Driver ID Guide at:
+
+	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+	  For general information and support, go to the Intel support
+	  website at:
+
+	  <http://support.intel.com>
+
+	  To compile this driver as a module, choose M here. The module
+	  will be called ixgbe.
+
+config IXGBE_DCA
+	bool "Direct Cache Access (DCA) Support"
+	default y
+	depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
+	---help---
+	  Say Y here if you want to use Direct Cache Access (DCA) in the
+	  driver.  DCA is a method for warming the CPU cache before data
+	  is used, with the intent of lessening the impact of cache misses.
+
+config IXGBE_DCB
+	bool "Data Center Bridging (DCB) Support"
+	default n
+	depends on IXGBE && DCB
+	---help---
+	  Say Y here if you want to use Data Center Bridging (DCB) in the
+	  driver.
+
+	  If unsure, say N.
+
+config IXGBEVF
+       tristate "Intel(R) 82599 Virtual Function Ethernet support"
+       depends on PCI_MSI
+       ---help---
+         This driver supports Intel(R) 82599 virtual functions.  For more
+         information on how to identify your adapter, go to the Adapter &
+         Driver ID Guide at:
+
+         <http://support.intel.com/support/network/sb/CS-008441.htm>
+
+         For general information and support, go to the Intel support
+         website at:
+
+         <http://support.intel.com>
+
+         More specific information on configuring the driver is in
+         <file:Documentation/networking/intel_wired_lan/ixgbevf.txt>.
+
+         To compile this driver as a module, choose M here. The module
+         will be called ixgbevf.  MSI-X interrupt support is required
+         for this driver to work correctly.
+
+config IXGB
+	tristate "Intel(R) PRO/10GbE support"
+	depends on PCI
+	---help---
+	  This driver supports Intel(R) PRO/10GbE family of adapters for
+	  PCI-X type cards. For PCI-E type cards, use the "ixgbe" driver
+	  instead. For more information on how to identify your adapter, go
+	  to the Adapter & Driver ID Guide at:
+
+	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+	  For general information and support, go to the Intel support
+	  website at:
+
+	  <http://support.intel.com>
+
+	  More specific information on configuring the driver is in
+	  <file:Documentation/networking/intel_wired_lan/ixgb.txt>.
+
+	  To compile this driver as a module, choose M here. The module
+	  will be called ixgb.
diff --git a/drivers/net/intel_wired_lan/Makefile b/drivers/net/intel_wired_lan/Makefile
new file mode 100644
index 0000000..87d7ba0
--- /dev/null
+++ b/drivers/net/intel_wired_lan/Makefile
@@ -0,0 +1,9 @@
+obj-$(CONFIG_E1000) += e1000/
+obj-$(CONFIG_E1000E) += e1000e/
+obj-$(CONFIG_IGB) += igb/
+obj-$(CONFIG_IGBVF) += igbvf/
+obj-$(CONFIG_IXGBE) += ixgbe/
+obj-$(CONFIG_IXGBEVF) += ixgbevf/
+obj-$(CONFIG_IXGB) += ixgb/
+
+obj-$(CONFIG_E100) += e100.o
diff --git a/drivers/net/e100.c b/drivers/net/intel_wired_lan/e100.c
similarity index 100%
rename from drivers/net/e100.c
rename to drivers/net/intel_wired_lan/e100.c
diff --git a/drivers/net/e1000/Makefile b/drivers/net/intel_wired_lan/e1000/Makefile
similarity index 100%
rename from drivers/net/e1000/Makefile
rename to drivers/net/intel_wired_lan/e1000/Makefile
diff --git a/drivers/net/e1000/e1000.h b/drivers/net/intel_wired_lan/e1000/e1000.h
similarity index 100%
rename from drivers/net/e1000/e1000.h
rename to drivers/net/intel_wired_lan/e1000/e1000.h
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/intel_wired_lan/e1000/e1000_ethtool.c
similarity index 100%
rename from drivers/net/e1000/e1000_ethtool.c
rename to drivers/net/intel_wired_lan/e1000/e1000_ethtool.c
diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/intel_wired_lan/e1000/e1000_hw.c
similarity index 100%
rename from drivers/net/e1000/e1000_hw.c
rename to drivers/net/intel_wired_lan/e1000/e1000_hw.c
diff --git a/drivers/net/e1000/e1000_hw.h b/drivers/net/intel_wired_lan/e1000/e1000_hw.h
similarity index 100%
rename from drivers/net/e1000/e1000_hw.h
rename to drivers/net/intel_wired_lan/e1000/e1000_hw.h
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/intel_wired_lan/e1000/e1000_main.c
similarity index 100%
rename from drivers/net/e1000/e1000_main.c
rename to drivers/net/intel_wired_lan/e1000/e1000_main.c
diff --git a/drivers/net/e1000/e1000_osdep.h b/drivers/net/intel_wired_lan/e1000/e1000_osdep.h
similarity index 100%
rename from drivers/net/e1000/e1000_osdep.h
rename to drivers/net/intel_wired_lan/e1000/e1000_osdep.h
diff --git a/drivers/net/e1000/e1000_param.c b/drivers/net/intel_wired_lan/e1000/e1000_param.c
similarity index 100%
rename from drivers/net/e1000/e1000_param.c
rename to drivers/net/intel_wired_lan/e1000/e1000_param.c
diff --git a/drivers/net/e1000e/82571.c b/drivers/net/intel_wired_lan/e1000e/82571.c
similarity index 100%
rename from drivers/net/e1000e/82571.c
rename to drivers/net/intel_wired_lan/e1000e/82571.c
diff --git a/drivers/net/e1000e/Makefile b/drivers/net/intel_wired_lan/e1000e/Makefile
similarity index 100%
rename from drivers/net/e1000e/Makefile
rename to drivers/net/intel_wired_lan/e1000e/Makefile
diff --git a/drivers/net/e1000e/defines.h b/drivers/net/intel_wired_lan/e1000e/defines.h
similarity index 100%
rename from drivers/net/e1000e/defines.h
rename to drivers/net/intel_wired_lan/e1000e/defines.h
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/intel_wired_lan/e1000e/e1000.h
similarity index 100%
rename from drivers/net/e1000e/e1000.h
rename to drivers/net/intel_wired_lan/e1000e/e1000.h
diff --git a/drivers/net/e1000e/es2lan.c b/drivers/net/intel_wired_lan/e1000e/es2lan.c
similarity index 100%
rename from drivers/net/e1000e/es2lan.c
rename to drivers/net/intel_wired_lan/e1000e/es2lan.c
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/intel_wired_lan/e1000e/ethtool.c
similarity index 100%
rename from drivers/net/e1000e/ethtool.c
rename to drivers/net/intel_wired_lan/e1000e/ethtool.c
diff --git a/drivers/net/e1000e/hw.h b/drivers/net/intel_wired_lan/e1000e/hw.h
similarity index 100%
rename from drivers/net/e1000e/hw.h
rename to drivers/net/intel_wired_lan/e1000e/hw.h
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/intel_wired_lan/e1000e/ich8lan.c
similarity index 100%
rename from drivers/net/e1000e/ich8lan.c
rename to drivers/net/intel_wired_lan/e1000e/ich8lan.c
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/intel_wired_lan/e1000e/lib.c
similarity index 100%
rename from drivers/net/e1000e/lib.c
rename to drivers/net/intel_wired_lan/e1000e/lib.c
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/intel_wired_lan/e1000e/netdev.c
similarity index 100%
rename from drivers/net/e1000e/netdev.c
rename to drivers/net/intel_wired_lan/e1000e/netdev.c
diff --git a/drivers/net/e1000e/param.c b/drivers/net/intel_wired_lan/e1000e/param.c
similarity index 100%
rename from drivers/net/e1000e/param.c
rename to drivers/net/intel_wired_lan/e1000e/param.c
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/intel_wired_lan/e1000e/phy.c
similarity index 100%
rename from drivers/net/e1000e/phy.c
rename to drivers/net/intel_wired_lan/e1000e/phy.c
diff --git a/drivers/net/igb/Makefile b/drivers/net/intel_wired_lan/igb/Makefile
similarity index 100%
rename from drivers/net/igb/Makefile
rename to drivers/net/intel_wired_lan/igb/Makefile
diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/intel_wired_lan/igb/e1000_82575.c
similarity index 100%
rename from drivers/net/igb/e1000_82575.c
rename to drivers/net/intel_wired_lan/igb/e1000_82575.c
diff --git a/drivers/net/igb/e1000_82575.h b/drivers/net/intel_wired_lan/igb/e1000_82575.h
similarity index 100%
rename from drivers/net/igb/e1000_82575.h
rename to drivers/net/intel_wired_lan/igb/e1000_82575.h
diff --git a/drivers/net/igb/e1000_defines.h b/drivers/net/intel_wired_lan/igb/e1000_defines.h
similarity index 100%
rename from drivers/net/igb/e1000_defines.h
rename to drivers/net/intel_wired_lan/igb/e1000_defines.h
diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/intel_wired_lan/igb/e1000_hw.h
similarity index 100%
rename from drivers/net/igb/e1000_hw.h
rename to drivers/net/intel_wired_lan/igb/e1000_hw.h
diff --git a/drivers/net/igb/e1000_mac.c b/drivers/net/intel_wired_lan/igb/e1000_mac.c
similarity index 100%
rename from drivers/net/igb/e1000_mac.c
rename to drivers/net/intel_wired_lan/igb/e1000_mac.c
diff --git a/drivers/net/igb/e1000_mac.h b/drivers/net/intel_wired_lan/igb/e1000_mac.h
similarity index 100%
rename from drivers/net/igb/e1000_mac.h
rename to drivers/net/intel_wired_lan/igb/e1000_mac.h
diff --git a/drivers/net/igb/e1000_mbx.c b/drivers/net/intel_wired_lan/igb/e1000_mbx.c
similarity index 100%
rename from drivers/net/igb/e1000_mbx.c
rename to drivers/net/intel_wired_lan/igb/e1000_mbx.c
diff --git a/drivers/net/igb/e1000_mbx.h b/drivers/net/intel_wired_lan/igb/e1000_mbx.h
similarity index 100%
rename from drivers/net/igb/e1000_mbx.h
rename to drivers/net/intel_wired_lan/igb/e1000_mbx.h
diff --git a/drivers/net/igb/e1000_nvm.c b/drivers/net/intel_wired_lan/igb/e1000_nvm.c
similarity index 100%
rename from drivers/net/igb/e1000_nvm.c
rename to drivers/net/intel_wired_lan/igb/e1000_nvm.c
diff --git a/drivers/net/igb/e1000_nvm.h b/drivers/net/intel_wired_lan/igb/e1000_nvm.h
similarity index 100%
rename from drivers/net/igb/e1000_nvm.h
rename to drivers/net/intel_wired_lan/igb/e1000_nvm.h
diff --git a/drivers/net/igb/e1000_phy.c b/drivers/net/intel_wired_lan/igb/e1000_phy.c
similarity index 100%
rename from drivers/net/igb/e1000_phy.c
rename to drivers/net/intel_wired_lan/igb/e1000_phy.c
diff --git a/drivers/net/igb/e1000_phy.h b/drivers/net/intel_wired_lan/igb/e1000_phy.h
similarity index 100%
rename from drivers/net/igb/e1000_phy.h
rename to drivers/net/intel_wired_lan/igb/e1000_phy.h
diff --git a/drivers/net/igb/e1000_regs.h b/drivers/net/intel_wired_lan/igb/e1000_regs.h
similarity index 100%
rename from drivers/net/igb/e1000_regs.h
rename to drivers/net/intel_wired_lan/igb/e1000_regs.h
diff --git a/drivers/net/igb/igb.h b/drivers/net/intel_wired_lan/igb/igb.h
similarity index 100%
rename from drivers/net/igb/igb.h
rename to drivers/net/intel_wired_lan/igb/igb.h
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/intel_wired_lan/igb/igb_ethtool.c
similarity index 100%
rename from drivers/net/igb/igb_ethtool.c
rename to drivers/net/intel_wired_lan/igb/igb_ethtool.c
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/intel_wired_lan/igb/igb_main.c
similarity index 100%
rename from drivers/net/igb/igb_main.c
rename to drivers/net/intel_wired_lan/igb/igb_main.c
diff --git a/drivers/net/igbvf/Makefile b/drivers/net/intel_wired_lan/igbvf/Makefile
similarity index 100%
rename from drivers/net/igbvf/Makefile
rename to drivers/net/intel_wired_lan/igbvf/Makefile
diff --git a/drivers/net/igbvf/defines.h b/drivers/net/intel_wired_lan/igbvf/defines.h
similarity index 100%
rename from drivers/net/igbvf/defines.h
rename to drivers/net/intel_wired_lan/igbvf/defines.h
diff --git a/drivers/net/igbvf/ethtool.c b/drivers/net/intel_wired_lan/igbvf/ethtool.c
similarity index 100%
rename from drivers/net/igbvf/ethtool.c
rename to drivers/net/intel_wired_lan/igbvf/ethtool.c
diff --git a/drivers/net/igbvf/igbvf.h b/drivers/net/intel_wired_lan/igbvf/igbvf.h
similarity index 100%
rename from drivers/net/igbvf/igbvf.h
rename to drivers/net/intel_wired_lan/igbvf/igbvf.h
diff --git a/drivers/net/igbvf/mbx.c b/drivers/net/intel_wired_lan/igbvf/mbx.c
similarity index 100%
rename from drivers/net/igbvf/mbx.c
rename to drivers/net/intel_wired_lan/igbvf/mbx.c
diff --git a/drivers/net/igbvf/mbx.h b/drivers/net/intel_wired_lan/igbvf/mbx.h
similarity index 100%
rename from drivers/net/igbvf/mbx.h
rename to drivers/net/intel_wired_lan/igbvf/mbx.h
diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/intel_wired_lan/igbvf/netdev.c
similarity index 100%
rename from drivers/net/igbvf/netdev.c
rename to drivers/net/intel_wired_lan/igbvf/netdev.c
diff --git a/drivers/net/igbvf/regs.h b/drivers/net/intel_wired_lan/igbvf/regs.h
similarity index 100%
rename from drivers/net/igbvf/regs.h
rename to drivers/net/intel_wired_lan/igbvf/regs.h
diff --git a/drivers/net/igbvf/vf.c b/drivers/net/intel_wired_lan/igbvf/vf.c
similarity index 100%
rename from drivers/net/igbvf/vf.c
rename to drivers/net/intel_wired_lan/igbvf/vf.c
diff --git a/drivers/net/igbvf/vf.h b/drivers/net/intel_wired_lan/igbvf/vf.h
similarity index 100%
rename from drivers/net/igbvf/vf.h
rename to drivers/net/intel_wired_lan/igbvf/vf.h
diff --git a/drivers/net/ixgb/Makefile b/drivers/net/intel_wired_lan/ixgb/Makefile
similarity index 100%
rename from drivers/net/ixgb/Makefile
rename to drivers/net/intel_wired_lan/ixgb/Makefile
diff --git a/drivers/net/ixgb/ixgb.h b/drivers/net/intel_wired_lan/ixgb/ixgb.h
similarity index 100%
rename from drivers/net/ixgb/ixgb.h
rename to drivers/net/intel_wired_lan/ixgb/ixgb.h
diff --git a/drivers/net/ixgb/ixgb_ee.c b/drivers/net/intel_wired_lan/ixgb/ixgb_ee.c
similarity index 100%
rename from drivers/net/ixgb/ixgb_ee.c
rename to drivers/net/intel_wired_lan/ixgb/ixgb_ee.c
diff --git a/drivers/net/ixgb/ixgb_ee.h b/drivers/net/intel_wired_lan/ixgb/ixgb_ee.h
similarity index 100%
rename from drivers/net/ixgb/ixgb_ee.h
rename to drivers/net/intel_wired_lan/ixgb/ixgb_ee.h
diff --git a/drivers/net/ixgb/ixgb_ethtool.c b/drivers/net/intel_wired_lan/ixgb/ixgb_ethtool.c
similarity index 100%
rename from drivers/net/ixgb/ixgb_ethtool.c
rename to drivers/net/intel_wired_lan/ixgb/ixgb_ethtool.c
diff --git a/drivers/net/ixgb/ixgb_hw.c b/drivers/net/intel_wired_lan/ixgb/ixgb_hw.c
similarity index 100%
rename from drivers/net/ixgb/ixgb_hw.c
rename to drivers/net/intel_wired_lan/ixgb/ixgb_hw.c
diff --git a/drivers/net/ixgb/ixgb_hw.h b/drivers/net/intel_wired_lan/ixgb/ixgb_hw.h
similarity index 100%
rename from drivers/net/ixgb/ixgb_hw.h
rename to drivers/net/intel_wired_lan/ixgb/ixgb_hw.h
diff --git a/drivers/net/ixgb/ixgb_ids.h b/drivers/net/intel_wired_lan/ixgb/ixgb_ids.h
similarity index 100%
rename from drivers/net/ixgb/ixgb_ids.h
rename to drivers/net/intel_wired_lan/ixgb/ixgb_ids.h
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/intel_wired_lan/ixgb/ixgb_main.c
similarity index 100%
rename from drivers/net/ixgb/ixgb_main.c
rename to drivers/net/intel_wired_lan/ixgb/ixgb_main.c
diff --git a/drivers/net/ixgb/ixgb_osdep.h b/drivers/net/intel_wired_lan/ixgb/ixgb_osdep.h
similarity index 100%
rename from drivers/net/ixgb/ixgb_osdep.h
rename to drivers/net/intel_wired_lan/ixgb/ixgb_osdep.h
diff --git a/drivers/net/ixgb/ixgb_param.c b/drivers/net/intel_wired_lan/ixgb/ixgb_param.c
similarity index 100%
rename from drivers/net/ixgb/ixgb_param.c
rename to drivers/net/intel_wired_lan/ixgb/ixgb_param.c
diff --git a/drivers/net/ixgbe/Makefile b/drivers/net/intel_wired_lan/ixgbe/Makefile
similarity index 100%
rename from drivers/net/ixgbe/Makefile
rename to drivers/net/intel_wired_lan/ixgbe/Makefile
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe.h
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_82598.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_82598.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_82598.c
diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_82599.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_82599.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_82599.c
diff --git a/drivers/net/ixgbe/ixgbe_common.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_common.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_common.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_common.c
diff --git a/drivers/net/ixgbe/ixgbe_common.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_common.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_common.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_common.h
diff --git a/drivers/net/ixgbe/ixgbe_dcb.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.c
diff --git a/drivers/net/ixgbe/ixgbe_dcb.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb.h
diff --git a/drivers/net/ixgbe/ixgbe_dcb_82598.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb_82598.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.c
diff --git a/drivers/net/ixgbe/ixgbe_dcb_82598.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb_82598.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82598.h
diff --git a/drivers/net/ixgbe/ixgbe_dcb_82599.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb_82599.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.c
diff --git a/drivers/net/ixgbe/ixgbe_dcb_82599.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb_82599.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_82599.h
diff --git a/drivers/net/ixgbe/ixgbe_dcb_nl.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_nl.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_dcb_nl.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_dcb_nl.c
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_ethtool.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_ethtool.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_ethtool.c
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_fcoe.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.c
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_fcoe.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_fcoe.h
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_main.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_main.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_main.c
diff --git a/drivers/net/ixgbe/ixgbe_mbx.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_mbx.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.c
diff --git a/drivers/net/ixgbe/ixgbe_mbx.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_mbx.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_mbx.h
diff --git a/drivers/net/ixgbe/ixgbe_phy.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_phy.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.c
diff --git a/drivers/net/ixgbe/ixgbe_phy.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_phy.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_phy.h
diff --git a/drivers/net/ixgbe/ixgbe_sriov.c b/drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.c
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_sriov.c
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.c
diff --git a/drivers/net/ixgbe/ixgbe_sriov.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_sriov.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_sriov.h
diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/intel_wired_lan/ixgbe/ixgbe_type.h
similarity index 100%
rename from drivers/net/ixgbe/ixgbe_type.h
rename to drivers/net/intel_wired_lan/ixgbe/ixgbe_type.h
diff --git a/drivers/net/ixgbevf/Makefile b/drivers/net/intel_wired_lan/ixgbevf/Makefile
similarity index 100%
rename from drivers/net/ixgbevf/Makefile
rename to drivers/net/intel_wired_lan/ixgbevf/Makefile
diff --git a/drivers/net/ixgbevf/defines.h b/drivers/net/intel_wired_lan/ixgbevf/defines.h
similarity index 100%
rename from drivers/net/ixgbevf/defines.h
rename to drivers/net/intel_wired_lan/ixgbevf/defines.h
diff --git a/drivers/net/ixgbevf/ethtool.c b/drivers/net/intel_wired_lan/ixgbevf/ethtool.c
similarity index 100%
rename from drivers/net/ixgbevf/ethtool.c
rename to drivers/net/intel_wired_lan/ixgbevf/ethtool.c
diff --git a/drivers/net/ixgbevf/ixgbevf.h b/drivers/net/intel_wired_lan/ixgbevf/ixgbevf.h
similarity index 100%
rename from drivers/net/ixgbevf/ixgbevf.h
rename to drivers/net/intel_wired_lan/ixgbevf/ixgbevf.h
diff --git a/drivers/net/ixgbevf/ixgbevf_main.c b/drivers/net/intel_wired_lan/ixgbevf/ixgbevf_main.c
similarity index 100%
rename from drivers/net/ixgbevf/ixgbevf_main.c
rename to drivers/net/intel_wired_lan/ixgbevf/ixgbevf_main.c
diff --git a/drivers/net/ixgbevf/mbx.c b/drivers/net/intel_wired_lan/ixgbevf/mbx.c
similarity index 100%
rename from drivers/net/ixgbevf/mbx.c
rename to drivers/net/intel_wired_lan/ixgbevf/mbx.c
diff --git a/drivers/net/ixgbevf/mbx.h b/drivers/net/intel_wired_lan/ixgbevf/mbx.h
similarity index 100%
rename from drivers/net/ixgbevf/mbx.h
rename to drivers/net/intel_wired_lan/ixgbevf/mbx.h
diff --git a/drivers/net/ixgbevf/regs.h b/drivers/net/intel_wired_lan/ixgbevf/regs.h
similarity index 100%
rename from drivers/net/ixgbevf/regs.h
rename to drivers/net/intel_wired_lan/ixgbevf/regs.h
diff --git a/drivers/net/ixgbevf/vf.c b/drivers/net/intel_wired_lan/ixgbevf/vf.c
similarity index 100%
rename from drivers/net/ixgbevf/vf.c
rename to drivers/net/intel_wired_lan/ixgbevf/vf.c
diff --git a/drivers/net/ixgbevf/vf.h b/drivers/net/intel_wired_lan/ixgbevf/vf.h
similarity index 100%
rename from drivers/net/ixgbevf/vf.h
rename to drivers/net/intel_wired_lan/ixgbevf/vf.h



------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

^ permalink raw reply related

* 2.6.36-rc7-git2: Reported regressions 2.6.34 -> 2.6.35
From: Rafael J. Wysocki @ 2010-10-10 19:10 UTC (permalink / raw)
  To: Linux Kernel Mailing List
  Cc: Maciej Rutecki, Florian Mickler, Andrew Morton, Linus Torvalds,
	Kernel Testers List, Network Development, Linux ACPI,
	Linux PM List, Linux SCSI List, Linux Wireless List, DRI

This message contains a list of some post-2.6.34 regressions introduced before
2.6.35, for which there are no fixes in the mainline known to the tracking team.
If any of them have been fixed already, please let us know.

If you know of any other unresolved post-2.6.34 regressions, please let us know
either and we'll add them to the list.  Also, please let us know if any
of the entries below are invalid.

Each entry from the list will be sent additionally in an automatic reply to
this message with CCs to the people involved in reporting and handling the
issue.


Listed regressions statistics:

  Date          Total  Pending  Unresolved
  ----------------------------------------
  2010-10-10      143       23          19
  2010-10-03      141       21          17
  2010-09-26      139       24          21
  2010-09-20      137       27          25
  2010-09-12      135       26          25
  2010-08-30      124       38          34
  2010-08-01      100       27          23
  2010-07-23       94       33          25
  2010-07-09       79       45          37
  2010-06-21       46       37          26
  2010-06-09       15       13          10


Unresolved regressions
----------------------

Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=20002
Subject		: x86_64 2.6.35.* kernels and Intel Xeon X5550
Submitter	: Marc Aurele La France <tsi-yfeSBMgouQgsA/PxXw9srA@public.gmane.org>
Date		: 2010-10-07 17:17 (4 days old)
Message-ID	: <alpine.WNT.2.00.1010071055420.1672-cSzHzCuodXHqpRUuEh95rXpLNouqQFXg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128647187628706&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19792
Subject		: 2.6.35.6 fails to suspend (pxa2xx-mci.0)
Submitter	: Sven Neumann <s.neumann-5g8ninUHluJWk0Htik3J/w@public.gmane.org>
Date		: 2010-10-04 7:30 (7 days old)
Message-ID	: <1286177435.2140.5.camel@sven>
References	: http://marc.info/?l=linux-kernel&m=128617869729382&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19612
Subject		: Computer fails to hibernate - problem idling SMP CPU's
Submitter	:  <tempo444z-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-10-02 22:26 (9 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19302
Subject		: PROBLEM: kernel crash on USB-modem (Huawei E1750) hangup.
Submitter	: O01eg <O01eg-o+MxOtu4lMCHXe+LvDLADg@public.gmane.org>
Date		: 2010-09-26 19:50 (15 days old)
Message-ID	: <op.vjnn1up1yohvy1@localhost>
References	: http://marc.info/?l=linux-kernel&m=128553111709569&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=18522
Subject		: cdrom drive doesn't detect removal
Submitter	: Maxim Levitsky <maximlevitsky-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-09-12 9:49 (29 days old)
First-Bad-Commit: http://git.kernel.org/linus/6b4517a7913a09d3259bb1d21c9cb300f12294bd
Message-ID	: <1284284969.2928.18.camel@maxim-laptop>
References	: http://marc.info/?l=linux-kernel&m=128428499013930&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=17812
Subject		: Kernel completely frozen when memory is full
Submitter	: Mickey86 <mikael.cordon-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-09-05 13:09 (36 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=17261
Subject		: Freezes on bootup
Submitter	: Dan Dart <dandart-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
Date		: 2010-08-29 09:00 (43 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16891
Subject		: Kernel panic while loading intel module during boot
Submitter	: Anisse Astier <anisse-fwwRqrJYcP2HXe+LvDLADg@public.gmane.org>
Date		: 2010-08-24 13:19 (48 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16691
Subject		: IPW5100: iwlagn broken with 2.6.34.x to 2.6.35.2 update
Submitter	: Can Celasun <dcelasun-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-08-21 08:28 (51 days old)
References	: http://www.spinics.net/lists/linux-wireless/msg57237.html


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16614
Subject		: [2.6.35] usb 2.0 em28xx  kernel panic general protection fault: 0000 [#1] SMP          RIP: 0010:[<ffffffffa004fbc5>]  [<ffffffffa004fbc5>] em28xx_isoc_copy_vbi+0x62e/0x812 [em28xx]
Submitter	: Sander Eikelenboom <linux-6SM94LqRVpn6gRhOQ7JHfg@public.gmane.org>
Date		: 2010-08-10 22:12 (62 days old)
Message-ID	: <61936849.20100811001257-6SM94LqRVpn6gRhOQ7JHfg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128152075830927&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16562
Subject		: 2.6.35: cpu_idle bug report / on i7 870 cpu (x86_64)
Submitter	: Justin Piszcz <jpiszcz-BP4nVm5VUdNhbmWW9KSYcQ@public.gmane.org>
Date		: 2010-08-06 22:09 (66 days old)
Message-ID	: <alpine.DEB.2.00.1008061800530.5241-0qmrozcXWo8bm2hyYBkBBg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128113260904048&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16549
Subject		: 2.6.35: suspicious rcu_dereference_check() usage
Submitter	: Vladislav Bolkhovitin <vst-d+Crzxg7Rs0@public.gmane.org>
Date		: 2010-08-04 10:56 (68 days old)
Message-ID	: <4C594740.1090608-d+Crzxg7Rs0@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128091938215177&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16525
Subject		: unexpected high load since 2.6.35
Submitter	: MadLoisae-hi6Y0CQ0nG0@public.gmane.org <MadLoisae-hi6Y0CQ0nG0@public.gmane.org>
Date		: 2010-08-02 20:53 (70 days old)
Message-ID	: <4C573041.1070103-hi6Y0CQ0nG0@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128078243726655&w=2
		  http://lkml.org/lkml/2010/9/14/105
		  http://lkml.org/lkml/2010/9/27/328


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16515
Subject		: [bisected] Radeon rv280 can't boot on kernel 2.6.35.
Submitter	: Albert Gall <ss3vdr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-08-04 16:10 (68 days old)
First-Bad-Commit: http://git.kernel.org/linus/https://bugzilla.kernel.org/attachment.cgi?id=27350
Handled-By	: Alex Deucher <alexdeucher-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16488
Subject		: [i915] Framebuffer ID error after suspend/hibernate leading to X crash
Submitter	: Milan Bouchet-Valat <nalimilan-pqIVbhRXszc@public.gmane.org>
Date		: 2010-08-01 08:55 (71 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16458
Subject		: Bluetooth disabled after resume
Submitter	: AttilaN <attila123456-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-07-25 09:33 (78 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16380
Subject		: Loop devices act strangely in 2.6.35
Submitter	: Artem S. Tashkinov <t.artem-VInPYn6yXxRWk0Htik3J/w@public.gmane.org>
Date		: 2010-07-13 23:21 (90 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16265
Subject		: Why is kslowd accumulating so much CPU time?
Submitter	: Theodore Ts'o <tytso-3s7WtUTddSA@public.gmane.org>
Date		: 2010-06-09 18:36 (124 days old)
First-Bad-Commit: http://git.kernel.org/linus/fbf81762e385d3d45acad057b654d56972acf58c
Message-ID	: <E1OMQ88-0002a1-Gb-UK71uKi2zisAobODsErMgNi2O/JbrIOy@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=127610857819033&w=4
		  http://bugs.freedesktop.org/show_bug.cgi?id=29536
Handled-By	: Chris Wilson <chris-Y6uKTt2uX1cEflXRtASbqLVCufUGDwFn@public.gmane.org>


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16221
Subject		: 2.6.35-rc2-git5 -- [drm:drm_mode_getfb] *ERROR* invalid framebuffer id
Submitter	: Miles Lane <miles.lane-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-06-11 20:31 (122 days old)
Message-ID	: <AANLkTim0jVRyqkwlGOcrg_XTvUQwcBYfWJX-aRzkkrLG-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=127628828119623&w=2


Regressions with patches
------------------------

Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=17772
Subject		: Unable to locate IOAPIC for GSI *
Submitter	: zersaa <zersaa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-09-04 21:28 (37 days old)
Handled-By	: Eric W. Biederman <ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
Patch		: https://patchwork.kernel.org/patch/104501/


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16462
Subject		: unable to connect to hidden SSID AP on legal channel 13
Submitter	: Daniel J Blueman <daniel.blueman-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-07-25 17:06 (78 days old)
Handled-By	: Johannes Berg <johannes.berg-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Patch		: https://bugzilla.kernel.org/attachment.cgi?id=31862


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16312
Subject		: WARNING: at fs/fs-writeback.c:1127 __mark_inode_dirty
Submitter	: Zdenek Kabelac <zdenek.kabelac-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-06-28 9:40 (105 days old)
Message-ID	: <AANLkTin24fr5O4_q5Xbo9Y_NKkEmtcp6Hgmr9_4qXaFz-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=127771804806465&w=2
		  http://lkml.indiana.edu/hypermail/linux/kernel/1007.3/00884.html
Handled-By	: Jan Kara <jack-AlSwsSmVLrQ@public.gmane.org>
		  Jan Kara <jack-AlSwsSmVLrQ@public.gmane.org>
Patch		: https://bugzilla.kernel.org/attachment.cgi?id=30282


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16228
Subject		: BUG/boot failure on Dell Precision T3500 (pci/ahci_stop_engine)
Submitter	: Brian Bloniarz <brian.bloniarz-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-06-16 17:57 (117 days old)
Handled-By	: Bjorn Helgaas <bjorn.helgaas-VXdhtT5mjnY@public.gmane.org>
Patch		: https://patchwork.kernel.org/patch/189182/
		  https://patchwork.kernel.org/patch/189232/
		  https://patchwork.kernel.org/patch/189242/
		  https://patchwork.kernel.org/patch/189252/


For details, please visit the bug entries and follow the links given in
references.

As you can see, there is a Bugzilla entry for each of the listed regressions.
There also is a Bugzilla entry used for tracking the regressions introduced
between 2.6.34 and 2.6.35, unresolved as well as resolved, at:

http://bugzilla.kernel.org/show_bug.cgi?id=16055

Please let the tracking team know if there are any Bugzilla entries that
should be added to the list in there.

Thanks!

^ permalink raw reply

* 2.6.36-rc7-git2: Reported regressions from 2.6.35
From: Rafael J. Wysocki @ 2010-10-10 17:46 UTC (permalink / raw)
  To: Linux Kernel Mailing List
  Cc: Maciej Rutecki, Florian Mickler, Andrew Morton, Linus Torvalds,
	Kernel Testers List, Network Development, Linux ACPI,
	Linux PM List, Linux SCSI List, Linux Wireless List, DRI

This message contains a list of some regressions from 2.6.35,
for which there are no fixes in the mainline known to the tracking team.
If any of them have been fixed already, please let us know.

If you know of any other unresolved regressions from 2.6.35, please let us
know either and we'll add them to the list.  Also, please let us know
if any of the entries below are invalid.

Each entry from the list will be sent additionally in an automatic reply
to this message with CCs to the people involved in reporting and handling
the issue.


Listed regressions statistics:

  Date          Total  Pending  Unresolved
  ----------------------------------------
  2010-10-10       56       16          15
  2010-10-03       52       16          14
  2010-09-26       46       15          13
  2010-09-20       38       15          15
  2010-09-12       28       14          13
  2010-08-30       21       16          15


Unresolved regressions
----------------------

Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19862
Subject		: [REGRESSION] no sound on T60 laptop (HDA Intel)
Submitter	: Miklos Szeredi <miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org>
Date		: 2010-10-05 9:25 (6 days old)
Message-ID	: <E1P33mT-0003qa-Fv-8f8m9JG5TPIdUIPVzhDTVZP2KDSNp7ea@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128627079921512&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19802
Subject		: [drm:init_ring_common] *ERROR* render ring head not reset to zero
Submitter	: Thomas Meyer <thomas-VsYtu1Qij5c@public.gmane.org>
Date		: 2010-10-04 20:31 (7 days old)
Message-ID	: <201010042231.20320.thomas-VsYtu1Qij5c@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128622441331199&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19782
Subject		: 2.6.36-rc6-git2 -- BUG dentry: Poison overwritten (after resume from hibernation)
Submitter	: Miles Lane <miles.lane-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-10-03 3:54 (8 days old)
Message-ID	: <AANLkTimrqtzBHAZSuDhEs_3CKA6pCbM35b1BtKH=MvC_-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128607809314079&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19632
Subject		: 2.6.36-rc6: modprobe Not tainted warning
Submitter	: Heinz Diehl <htd-iEI8Y0CNJBYdnm+yROfE0A@public.gmane.org>
Date		: 2010-09-30 18:25 (11 days old)
Message-ID	: <20100930182516.GA15089-iEI8Y0CNJBYdnm+yROfE0A@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128587114004680&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19392
Subject		: WARNING: at drivers/net/wireless/ath/ath5k/base.c:3475 ath5k_bss_info_changed+0x44/0x168 [ath5k]()
Submitter	: Justin Mattock <justinmattock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-09-28 22:30 (13 days old)
Message-ID	: <AANLkTim5WCGKPvEkOkO_YnMF9pg8mvLfQoFBNUFpfa_k-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128571307018635&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19372
Subject		: 2.6.36-rc6: WARNING: at drivers/gpu/drm/radeon/radeon_fence.c:235 radeon_fence_wait+0x35a/0x3c0
Submitter	: Alexey Dobriyan <adobriyan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-09-29 21:29 (12 days old)
Message-ID	: <20100929212923.GA5578-y0M6fkzdUYllgR+Ck+lCww@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128579579400315&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19142
Subject		: Screen flickers when switching from the console to X
Submitter	: Andrey Rahmatullin <wrar-u2l5PoMzF/Vg9hUCZPvPmw@public.gmane.org>
Date		: 2010-09-27 12:05 (14 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19072
Subject		: [2.6.36-rc regression] occasional complete system hangs on sparc64 SMP
Submitter	: Mikael Pettersson <mikpe-1zs4UD6AkMk@public.gmane.org>
Date		: 2010-09-23 17:02 (18 days old)
Message-ID	: <19611.34846.813757.309183-tgku4HJDRZih8lFjZTKsyTAV6s6igYVG@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128526136531048&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19052
Subject		: 2.6.36-rc5-git1 -- [drm:i915_report_and_clear_eir] *ERROR* EIR stuck: 0x00000010, masking
Submitter	: Miles Lane <miles.lane-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date		: 2010-09-22 23:47 (19 days old)
Message-ID	: <AANLkTikWQjUQjFJU9MO1+XbSLAEE-GARz+S+Dz2Fgu4h-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128519926626322&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=19002
Subject		: Radeon rv730 AGP/KMS/DRM kernel lockup
Submitter	: Duncan <1i5t5.duncan-j9pdmedNgrk@public.gmane.org>
Date		: 2010-09-23 16:48 (18 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=17361
Subject		: Random kmemcheck errors and kernel freeze on 2.6.36-rc*
Submitter	: Christian Casteyde <casteyde.christian-GANU6spQydw@public.gmane.org>
Date		: 2010-08-29 19:59 (43 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=17121
Subject		: Two blank rectangles more than 10 cm long when booting
Submitter	: Eric Valette <eric.valette-GANU6spQydw@public.gmane.org>
Date		: 2010-08-26 17:24 (46 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=17061
Subject		: 2.6.36-rc1 on zaurus: bluetooth regression
Submitter	: Pavel Machek <pavel-+ZI9xUNit7I@public.gmane.org>
Date		: 2010-08-21 15:24 (51 days old)
Message-ID	: <20100821152445.GA1536-+ZI9xUNit7I@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128240433828087&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16971
Subject		: qla4xxx compile failure on 32-bit PowerPC: missing readq and writeq
Submitter	: Meelis Roos <mroos-Y27EyoLml9s@public.gmane.org>
Date		: 2010-08-19 21:03 (53 days old)
Message-ID	: <alpine.SOC.1.00.1008192359310.19654-ptEonEWSGqKptlylMvRsHA@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128225184900892&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=16951
Subject		: hackbench regression with 2.6.36-rc1
Submitter	: Zhang, Yanmin <yanmin_zhang-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Date		: 2010-08-18 6:18 (54 days old)
Message-ID	: <1282112318.21202.8.camel-sz7BYL/Y5Hu/P+R7jlPCFVaTQe2KTcn/@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128211235904910&w=2


Regressions with patches
------------------------

Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=18742
Subject		: PROBLEM: Kernel panic on 2.6.36-rc4 when loading intel_ips on Core i3 laptop
Submitter	: infernix <infernix-ZHiucA87ovfk1uMJSBkQmQ@public.gmane.org>
Date		: 2010-09-15 14:35 (26 days old)
Message-ID	: <4C90D998.6050103-ZHiucA87ovfk1uMJSBkQmQ@public.gmane.org>
References	: http://marc.info/?l=linux-kernel&m=128456187928496&w=2
Handled-By	: Jesse Barnes <jbarnes-Y1mF5jBUw70BENJcbMCuUQ@public.gmane.org>
Patch		: https://bugzilla.kernel.org/attachment.cgi?id=31112


For details, please visit the bug entries and follow the links given in
references.

As you can see, there is a Bugzilla entry for each of the listed regressions.
There also is a Bugzilla entry used for tracking the regressions from 2.6.35,
unresolved as well as resolved, at:

http://bugzilla.kernel.org/show_bug.cgi?id=16444

Please let the tracking team know if there are any Bugzilla entries that
should be added to the list in there.

Thanks!

^ permalink raw reply

* [PATCH] IPv4: Remove check for ipv4_is_lbcast() that will always return false
From: Andy Walls @ 2010-10-10 16:10 UTC (permalink / raw)
  To: netdev
  Cc: linux-kernel, David S. Miller, Alexey Kuznetsov, James Morris,
	Patrick McHardy

In making an IPv4 routing decision, packets with an all 1's broadcast
destination are accepted as input packets, before being checked for being a
martian.  Remove the martian check for the all 1's broadcast destination
address.  Make the initial check for the all 1's broadcast destination
address easier to read.

Signed-off-by: Andy Walls <awalls@md.metrocast.net>


diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index ac6559c..2b8c071 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2124,7 +2124,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32
            ipv4_is_loopback(saddr))
                goto martian_source;
 
-       if (daddr == htonl(0xFFFFFFFF) || (saddr == 0 && daddr == 0))
+       if (ipv4_is_lbcast(daddr) || (saddr == 0 && daddr == 0))
                goto brd_input;
 
        /* Accept zero addresses only to limited broadcast;
@@ -2133,8 +2133,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32
        if (ipv4_is_zeronet(saddr))
                goto martian_source;
 
-       if (ipv4_is_lbcast(daddr) || ipv4_is_zeronet(daddr) ||
-           ipv4_is_loopback(daddr))
+       if (ipv4_is_zeronet(daddr) || ipv4_is_loopback(daddr))
                goto martian_destination;
 
        /*



^ permalink raw reply related

* Re: [PATCH 4/5] rds: stop including asm-generic/bitops/le.h directly
From: Akinobu Mita @ 2010-10-10 15:09 UTC (permalink / raw)
  To: David Miller
  Cc: andy.grover, linux-kernel, linux-arch, arnd, akpm, rds-devel,
	netdev, Alexander Graf
In-Reply-To: <20101008.115900.245387221.davem@davemloft.net>

2010/10/9 David Miller <davem@davemloft.net>:
> From: Andy Grover <andy.grover@oracle.com>
> Date: Fri, 08 Oct 2010 11:55:55 -0700
>
>> On 10/08/2010 03:03 AM, Akinobu Mita wrote:
>>> asm-generic/bitops/le.h is only intended to be included directly from
>>> asm-generic/bitops/ext2-non-atomic.h or asm-generic/bitops/minix-le.h
>>> which implements generic ext2 or minix bit operations.
>>>
>>> This stops including asm-generic/bitops/le.h directly and use ext2
>>> non-atomic bit operations instead.
>>>
>>> An alternative approach is introducing little endian bit operations
>>> in linux/bitops.h. But it needs to touch more files than this change
>>> does.
>>
>>> -    generic___set_le_bit(off, (void *)map->m_page_addrs[i]);
>>> +    ext2_set_bit(off, (void *)map->m_page_addrs[i]);
>>
>> I'd like a solution that doesn't have rds calling a function starting
>> with ext2_. Seems wrong.
>
> Agreed.

OK, I'll rewrite the patch series to take the alternative approach.

^ permalink raw reply

* Re: kvm networking todo wiki
From: Dragos Tatulea @ 2010-10-10 11:37 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Sridhar Samudrala, David Stevens, sri, Anthony Liguori,
	Rusty Russell, Krishna Kumar2, Shirley Ma, Xin, Xiaohui, jdike,
	herbert, lmr, akong, kvm, qemu-devel, netdev
In-Reply-To: <20100926112112.GB18408@redhat.com>

Hi,

> More importantly: anyone's going to work on this?

I'd like to work on this. Might need some assistance though.

Thanks,
Dragos

^ permalink raw reply

* Re: kvm networking todo wiki
From: Michael S. Tsirkin @ 2010-10-10 11:35 UTC (permalink / raw)
  To: Dragos Tatulea
  Cc: Sridhar Samudrala, David Stevens, sri, Anthony Liguori,
	Rusty Russell, Krishna Kumar2, Shirley Ma, Xin, Xiaohui, jdike,
	herbert, lmr, akong, kvm, qemu-devel, netdev
In-Reply-To: <AANLkTikzU6g2pYKoyXOWfGPE64VZusPaYdn+TQ14tE7_@mail.gmail.com>

On Sun, Oct 10, 2010 at 01:37:45PM +0200, Dragos Tatulea wrote:
> Hi,
> 
> > More importantly: anyone's going to work on this?
> 
> I'd like to work on this. Might need some assistance though.
> 
> Thanks,
> Dragos

Cool, you can add this info to the wiki.
Thanks!

-- 
MST

^ permalink raw reply

* Re: tbf/htb qdisc limitations
From: Jarek Poplawski @ 2010-10-10 11:23 UTC (permalink / raw)
  To: Steven Brudenell; +Cc: netdev
In-Reply-To: <AANLkTik6_C5pzx=yS=C0VQR2xfg0S57AZAn9WYiGvxe5@mail.gmail.com>

Steven Brudenell wrote:
> hi folks,
> 
> i was disappointed recently to find that i can't set the "burst"
> parameters very high on the tbf or htb qdiscs. the actual limit of the
> burst parameters varies, according to the rate parameter. at the
> relatively low rate i want to set, i want to have the burst parameter
> be several gigabytes, but i'm actually limited to only a few
> megabytes.
> 
> (motivation: a fully-automated way to stay inside the monthly transfer
> limits imposed by many ISPs these days, without resorting to a
> constant rate limit. for example, comcast limits its customers to
> 250GB/month, which is about 101KB/s; many cellular data plans in the
> US limit to 5GB/month =~ 2KB/s).

I'm not sure you checked how the "burst" works, and doubt it could
help you here. Anyway, do you think: rate 2KB/s with burst 5GB
config would be useful for you?

> 
> i'll gladly code a patch, but i'd like the list's advice on whether
> this is necessary, and a little bit about how to proceed:
> 
> 1) what is the purpose of the "rate tables" used in these qdiscs --
> why use them in favor of dividing bytes by time to compute a rate? i
> assume the answer has something to do with restrictions on using
> floating point math (maybe even integer division?) at different places
> / interruptability states in the kernel. maybe this is documented on
> kernelnewbies somewhere but i couldn't find it.
> 
> 2) is there an established procedure for versioning a netlink
> interface? today the netlink interface for tbf and htb is horribly
> implementation-coupled (the "burst" parameters need to be munged
> according to the "rate" parameters and kernel tick rate). i think i
> would need to change these interfaces in order to change the
> accounting implementation in the corresponding qdisc. however, i
> probably want to remain compatible with old userspace.

My proposal is you don't bother with 1) and 2), but first do the
hack in tbf or htb directly, using or omitting rate tables, how
you like, and test this idea.

But it seems the right way is to collect monthly stats with some
userspace tool and change qdisc config dynamically. You might
look at network admins' lists for small ISPs exemplary scripts
doing such nasty things to their users, or have a look at ppp
accounting tools.
 
Jarek P.

^ permalink raw reply

* Re: [Bugme-new] [Bug 19692] New: linux-2.6.36-rc5 crash with gianfar ethernet at full line rate traffic
From: Jarek Poplawski @ 2010-10-10 10:32 UTC (permalink / raw)
  To: emin ak
  Cc: Andrew Morton, netdev, bugzilla-daemon, bugme-daemon,
	Anton Vorontsov
In-Reply-To: <AANLkTi=EsfQbkt-YycXfuVpBDviCxKFuUdz4qZTXV+eG@mail.gmail.com>

On Sat, Oct 09, 2010 at 03:10:25PM +0300, emin ak wrote:
> Hi Jarek,
> My test setup is at my office so that I will try your patch on Monday
> immediately and turn you the results.

No need to hurry, especially on Mondays, but thanks for the info.

Jarek P.

^ permalink raw reply

* Re: [PATCH] Add IRQF_SAMPLE_RANDOM Flag to forcedeth
From: Eric Dumazet @ 2010-10-10  8:57 UTC (permalink / raw)
  To: Patrick Simmons; +Cc: David Miller, bhutchings, netdev
In-Reply-To: <4CB13195.2070007@netscape.net>

Le samedi 09 octobre 2010 à 21:23 -0600, Patrick Simmons a écrit :
> On 10/09/10 21:15, David Miller wrote:
> > From: Ben Hutchings<bhutchings@solarflare.com>
> > Date: Sun, 10 Oct 2010 02:09:24 +0100
> >
> >> Patrick Simmons wrote:
> >>> This patch adds the IRQF_SAMPLE_RANDOM flag to the forcedeth driver,
> >>> allowing the interrupt timing for forcedeth to be used for entropy
> >>> generation.  This should help /dev/random generate more secure random
> >>> numbers on machines using this driver.
> >> [...]
> >>
> >> We don't enable this for network drivers any more because:
> >>
> >> 1. At high packet rates, interrupt moderation makes interrupts very
> >> regular.
> >> 2. At low packet rates, a malicious sender can control the interrupt
> >> timing.
> >
> > Agreed on all counts, I'm not applying this patch.
> 
> It's enabled for other network drivers, which is where I got the idea 
> from.  Has anyone actually done an experiment to see whether these two 
> concerns are valid?

Several attemps in the past tried to go into one direction or another

(Add the flag to some driver, then remove it from others)

Please read commit 9d9b8fb0e5ebf4b0398e579
http://lkml.org/lkml/2009/4/6/283

A third reason not adding is : At moderate packet rates, _no_ entropy is
feeded at all because add_interrupt_randomness()/add_timer_randomness is
_very_ conservative, with first, second-order and third-order estimates.

credit_entropy_bits() is called with 0 bit

Adding this stuff has a high cost, I can see it in profiles on machines
with tg3 nics. I often remove the IRQF_SAMPLE_RANDOM flag localy.




^ permalink raw reply

* [PATCH net-next V2] igb: fix stats handling
From: Eric Dumazet @ 2010-10-10  8:14 UTC (permalink / raw)
  To: Tantilov, Emil S
  Cc: Kirsher, Jeffrey T, Jesper Dangaard Brouer, Duyck, Alexander H,
	Jesper Dangaard Brouer, David S. Miller, netdev, Wyborny, Carolyn
In-Reply-To: <EA929A9653AAE14F841771FB1DE5A1366027AC5DB5@rrsmsx501.amr.corp.intel.com>

Le samedi 09 octobre 2010 à 17:57 -0600, Tantilov, Emil S a écrit :
> Eric Dumazet wrote:
> > Le mercredi 06 octobre 2010 à 05:28 +0200, Eric Dumazet a écrit :
> > 
> >> I'll let Intel guys doing the backporting work, but for old kernels,
> >> you'll probably need to use "unsigned long" instead of "u64"
> >> 
> >> My plan is :
> >> 
> >> - Provide 64bit counters even on 32bit arch
> >> - with proper synchro (include/linux/u64_stats_sync.h)
> >> - Add a spinlock so we can apply Jesper patch.
> > 
> > Here is the net-next-2.6 patch, I am currently enable to test it, the
> > dev machine with IGB NIC cannot be restarted until tomorrow, my son
> > Nicolas is currently using it ;)
> > 
> > Could you and/or Jesper test it, possibly on 32 and 64 bit kernels ?
> > 
> > Thanks !
> > 
> > [PATCH net-next] igb: fix stats handling
> > 
> > There are currently some problems with igb.
> > 
> > - On 32bit arches, maintaining 64bit counters without proper
> > synchronization between writers and readers.
> > 
> > - Stats updated every two seconds, as reported by Jesper.
> >    (Jesper provided a patch for this)
> > 
> > - Potential problem between worker thread and ethtool -S
> > 
> > This patch uses u64_stats_sync, and convert everything to be 64bit
> > safe, 
> > SMP safe, even on 32bit arches.
> > 
> > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> > ---
> >  drivers/net/igb/igb.h         |    7 +-
> >  drivers/net/igb/igb_ethtool.c |   10 +-
> >  drivers/net/igb/igb_main.c    |  111 +++++++++++++++++++++++---------
> >  3 files changed, 94 insertions(+), 34 deletions(-)
> 
> This patch is causing a hang when testing with 2 sessions in a while loop reading /proc/net/dev/ and ethtool -S. I think even just reading /proc/net/dev/ is sufficient, but have not confirmed it yet. I have seen the hang somewhere between 15 min to an hour. Without the patch same test ran 24+ hours without issues.
> 
> There was no trace on the screen, I got this with magic sysrq:
> 
> [15388.393579] SysRq : Show Regs 
> [15388.397341] Modules linked in: igb [last unloaded: scsi_wait_scan] [15388.404846]  
> [15388.406889] Pid: 16218, comm: kworker/4:1 Not tainted 2.6.36-rc3-net-next-igb-100810+ #2 S5520HC/S5520HC 
> [15388.418393] EIP: 0060:[<c13fead2>] EFLAGS: 00000297 CPU: 4 
> [15388.424908] EIP is at _raw_spin_lock+0x13/0x19 
> [15388.430257] EAX: f6eab55c EBX: f6eab380 ECX: 00000001 EDX: 00004e4a [15388.437629] ESI: f6eab000 EDI: f6eab41c EBP: f3d9bf4c ESP: f3d9bf4c [15388.445011]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 
> [15388.451422] Process kworker/4:1 (pid: 16218, ti=f3d9a000 task=f5ce0ed0 task.ti=f3d9a000) 
> [15388.461173] Stack: 
> [15388.463796]  f3d9bf64 f8586c57 f3d9bf5c f6eab41c f6901e00 c8703cc0 f3d9bf90 c1041379 
> [15388.473116] <0> 00000004 00000000 f8586b16 00000000 c8707b05 c8707b00 f6901e00 c8703cc4 
> [15388.483379] <0> c8703cc0 f3d9bfb8 c1042879 c16bb640 c8703cc4 00000c54 c16bb640 f6901e10 
> [15388.494219] Call Trace: 
> [15388.497336]  [<f8586c57>] ? igb_watchdog_task+0x141/0x21a [igb] 
> [15388.504336]  [<c1041379>] ? process_one_work+0x18e/0x265 
> [15388.510643]  [<f8586b16>] ? igb_watchdog_task+0x0/0x21a [igb] 
> [15388.517455]  [<c1042879>] ? worker_thread+0xf3/0x1ef 
> [15388.523384]  [<c1042786>] ? worker_thread+0x0/0x1ef 
> [15388.529222]  [<c104506b>] ? kthread+0x62/0x67 
> [15388.534475]  [<c1045009>] ? kthread+0x0/0x67 
> [15388.539623]  [<c1002d36>] ? kernel_thread_helper+0x6/0x10 
> [15388.546034] Code: 00 75 05 f0 66 0f b1 0a 0f 94 c1 0f b6 c1 85 c0 0f 95 c0 0f b6 c0 5d c3 55 ba 00 01 00 00 89 e5 f0 66 0f c1 10 38 f2 74 06 f3 90 <8a> 10 eb f6 5d c3 55 89 e5 9c 59 fa ba 00 01 00 00 f0 66 0f c1
> 
> Thanks,
> Emil
> 

Hi Emil, thanks for testing.

It seems one one the u64_stats_sync invariant is not met.

I believe problem comes from "restart_queue"

This one can be updated in // by two cpus.

So we can lose one of the u64_stats_update_begin() /
u64_stats_update_end() increment and freeze a reader.

So igb had a previous bug here, un-noticed :)

restart_queue can be updated by start_xmit() (so only one cpu can be
there, because of txqueue lock serialization), but it also can be
updated by the igb_clean_tx_irq() function (one cpu there too).

One solution to this problem is to use two separate counters, with two
separate syncp.

[PATCH net-next V2] igb: fix stats handling

There are currently some problems with igb.

- On 32bit arches, maintaining 64bit counters without proper
synchronization between writers and readers.

- Stats updated every two seconds, as reported by Jesper.
   (Jesper provided a patch for this)

- Potential problem between worker thread and ethtool -S

This patch uses u64_stats_sync, and convert everything to be 64bit safe,
SMP safe, even on 32bit arches. It integrates Jesper idea of providing
accurate stats at the time user reads them.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
---
V2: Add a second restart_queue field, with separate syncp, because
original restart_queue was potentially udpated by two cpus.
   Corrected igb_get_ethtool_stats() to also use appropriate syncp,
   and do the sum of two restart_queue fields.

 drivers/net/igb/igb.h         |    9 ++
 drivers/net/igb/igb_ethtool.c |   52 ++++++++++----
 drivers/net/igb/igb_main.c    |  113 +++++++++++++++++++++++---------
 3 files changed, 129 insertions(+), 45 deletions(-)

diff --git a/drivers/net/igb/igb.h b/drivers/net/igb/igb.h
index 44e0ff1..edab9c4 100644
--- a/drivers/net/igb/igb.h
+++ b/drivers/net/igb/igb.h
@@ -159,6 +159,7 @@ struct igb_tx_queue_stats {
 	u64 packets;
 	u64 bytes;
 	u64 restart_queue;
+	u64 restart_queue2;
 };
 
 struct igb_rx_queue_stats {
@@ -210,11 +211,14 @@ struct igb_ring {
 		/* TX */
 		struct {
 			struct igb_tx_queue_stats tx_stats;
+			struct u64_stats_sync tx_syncp;
+			struct u64_stats_sync tx_syncp2;
 			bool detect_tx_hung;
 		};
 		/* RX */
 		struct {
 			struct igb_rx_queue_stats rx_stats;
+			struct u64_stats_sync rx_syncp;
 			u32 rx_buffer_len;
 		};
 	};
@@ -288,6 +292,9 @@ struct igb_adapter {
 	struct timecompare compare;
 	struct hwtstamp_config hwtstamp_config;
 
+	spinlock_t stats64_lock;
+	struct rtnl_link_stats64 stats64;
+
 	/* structs defined in e1000_hw.h */
 	struct e1000_hw hw;
 	struct e1000_hw_stats stats;
@@ -357,7 +364,7 @@ extern netdev_tx_t igb_xmit_frame_ring_adv(struct sk_buff *, struct igb_ring *);
 extern void igb_unmap_and_free_tx_resource(struct igb_ring *,
 					   struct igb_buffer *);
 extern void igb_alloc_rx_buffers_adv(struct igb_ring *, int);
-extern void igb_update_stats(struct igb_adapter *);
+extern void igb_update_stats(struct igb_adapter *, struct rtnl_link_stats64 *);
 extern bool igb_has_link(struct igb_adapter *adapter);
 extern void igb_set_ethtool_ops(struct net_device *);
 extern void igb_power_up_link(struct igb_adapter *);
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c
index 26bf6a1..a70e16b 100644
--- a/drivers/net/igb/igb_ethtool.c
+++ b/drivers/net/igb/igb_ethtool.c
@@ -90,8 +90,8 @@ static const struct igb_stats igb_gstrings_stats[] = {
 
 #define IGB_NETDEV_STAT(_net_stat) { \
 	.stat_string = __stringify(_net_stat), \
-	.sizeof_stat = FIELD_SIZEOF(struct net_device_stats, _net_stat), \
-	.stat_offset = offsetof(struct net_device_stats, _net_stat) \
+	.sizeof_stat = FIELD_SIZEOF(struct rtnl_link_stats64, _net_stat), \
+	.stat_offset = offsetof(struct rtnl_link_stats64, _net_stat) \
 }
 static const struct igb_stats igb_gstrings_net_stats[] = {
 	IGB_NETDEV_STAT(rx_errors),
@@ -111,8 +111,9 @@ static const struct igb_stats igb_gstrings_net_stats[] = {
 	(sizeof(igb_gstrings_net_stats) / sizeof(struct igb_stats))
 #define IGB_RX_QUEUE_STATS_LEN \
 	(sizeof(struct igb_rx_queue_stats) / sizeof(u64))
-#define IGB_TX_QUEUE_STATS_LEN \
-	(sizeof(struct igb_tx_queue_stats) / sizeof(u64))
+
+#define IGB_TX_QUEUE_STATS_LEN 3 /* packets, bytes, restart_queue */
+
 #define IGB_QUEUE_STATS_LEN \
 	((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues * \
 	  IGB_RX_QUEUE_STATS_LEN) + \
@@ -2070,12 +2071,14 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
 				  struct ethtool_stats *stats, u64 *data)
 {
 	struct igb_adapter *adapter = netdev_priv(netdev);
-	struct net_device_stats *net_stats = &netdev->stats;
-	u64 *queue_stat;
-	int i, j, k;
+	struct rtnl_link_stats64 *net_stats = &adapter->stats64;
+	unsigned int start;
+	struct igb_ring *ring;
+	int i, j;
 	char *p;
 
-	igb_update_stats(adapter);
+	spin_lock(&adapter->stats64_lock);
+	igb_update_stats(adapter, net_stats);
 
 	for (i = 0; i < IGB_GLOBAL_STATS_LEN; i++) {
 		p = (char *)adapter + igb_gstrings_stats[i].stat_offset;
@@ -2088,15 +2091,36 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
 			sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
 	}
 	for (j = 0; j < adapter->num_tx_queues; j++) {
-		queue_stat = (u64 *)&adapter->tx_ring[j]->tx_stats;
-		for (k = 0; k < IGB_TX_QUEUE_STATS_LEN; k++, i++)
-			data[i] = queue_stat[k];
+		u64	restart2;
+
+		ring = adapter->tx_ring[j];
+		do {
+			start = u64_stats_fetch_begin_bh(&ring->tx_syncp);
+			data[i]   = ring->tx_stats.packets;
+			data[i+1] = ring->tx_stats.bytes;
+			data[i+2] = ring->tx_stats.restart_queue;
+		} while (u64_stats_fetch_retry_bh(&ring->tx_syncp, start));
+		do {
+			start = u64_stats_fetch_begin_bh(&ring->tx_syncp2);
+			restart2  = ring->tx_stats.restart_queue2;
+		} while (u64_stats_fetch_retry_bh(&ring->tx_syncp2, start));
+		data[i+2] += restart2;
+
+		i += IGB_TX_QUEUE_STATS_LEN;
 	}
 	for (j = 0; j < adapter->num_rx_queues; j++) {
-		queue_stat = (u64 *)&adapter->rx_ring[j]->rx_stats;
-		for (k = 0; k < IGB_RX_QUEUE_STATS_LEN; k++, i++)
-			data[i] = queue_stat[k];
+		ring = adapter->rx_ring[j];
+		do {
+			start = u64_stats_fetch_begin_bh(&ring->rx_syncp);
+			data[i]   = ring->rx_stats.packets;
+			data[i+1] = ring->rx_stats.bytes;
+			data[i+2] = ring->rx_stats.drops;
+			data[i+3] = ring->rx_stats.csum_err;
+			data[i+4] = ring->rx_stats.alloc_failed;
+		} while (u64_stats_fetch_retry_bh(&ring->rx_syncp, start));
+		i += IGB_RX_QUEUE_STATS_LEN;
 	}
+	spin_unlock(&adapter->stats64_lock);
 }
 
 static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 55edcb7..c8f1249 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -96,7 +96,6 @@ static int igb_setup_all_rx_resources(struct igb_adapter *);
 static void igb_free_all_tx_resources(struct igb_adapter *);
 static void igb_free_all_rx_resources(struct igb_adapter *);
 static void igb_setup_mrqc(struct igb_adapter *);
-void igb_update_stats(struct igb_adapter *);
 static int igb_probe(struct pci_dev *, const struct pci_device_id *);
 static void __devexit igb_remove(struct pci_dev *pdev);
 static int igb_sw_init(struct igb_adapter *);
@@ -113,7 +112,8 @@ static void igb_update_phy_info(unsigned long);
 static void igb_watchdog(unsigned long);
 static void igb_watchdog_task(struct work_struct *);
 static netdev_tx_t igb_xmit_frame_adv(struct sk_buff *skb, struct net_device *);
-static struct net_device_stats *igb_get_stats(struct net_device *);
+static struct rtnl_link_stats64 *igb_get_stats64(struct net_device *dev,
+						 struct rtnl_link_stats64 *stats);
 static int igb_change_mtu(struct net_device *, int);
 static int igb_set_mac(struct net_device *, void *);
 static void igb_set_uta(struct igb_adapter *adapter);
@@ -1536,7 +1536,9 @@ void igb_down(struct igb_adapter *adapter)
 	netif_carrier_off(netdev);
 
 	/* record the stats before reset*/
-	igb_update_stats(adapter);
+	spin_lock(&adapter->stats64_lock);
+	igb_update_stats(adapter, &adapter->stats64);
+	spin_unlock(&adapter->stats64_lock);
 
 	adapter->link_speed = 0;
 	adapter->link_duplex = 0;
@@ -1689,7 +1691,7 @@ static const struct net_device_ops igb_netdev_ops = {
 	.ndo_open		= igb_open,
 	.ndo_stop		= igb_close,
 	.ndo_start_xmit		= igb_xmit_frame_adv,
-	.ndo_get_stats		= igb_get_stats,
+	.ndo_get_stats64	= igb_get_stats64,
 	.ndo_set_rx_mode	= igb_set_rx_mode,
 	.ndo_set_multicast_list	= igb_set_rx_mode,
 	.ndo_set_mac_address	= igb_set_mac,
@@ -2276,6 +2278,7 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
 	adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
 	adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
 
+	spin_lock_init(&adapter->stats64_lock);
 #ifdef CONFIG_PCI_IOV
 	if (hw->mac.type == e1000_82576)
 		adapter->vfs_allocated_count = (max_vfs > 7) ? 7 : max_vfs;
@@ -3483,7 +3486,9 @@ static void igb_watchdog_task(struct work_struct *work)
 		}
 	}
 
-	igb_update_stats(adapter);
+	spin_lock(&adapter->stats64_lock);
+	igb_update_stats(adapter, &adapter->stats64);
+	spin_unlock(&adapter->stats64_lock);
 
 	for (i = 0; i < adapter->num_tx_queues; i++) {
 		struct igb_ring *tx_ring = adapter->tx_ring[i];
@@ -3550,6 +3555,8 @@ static void igb_update_ring_itr(struct igb_q_vector *q_vector)
 	int new_val = q_vector->itr_val;
 	int avg_wire_size = 0;
 	struct igb_adapter *adapter = q_vector->adapter;
+	struct igb_ring *ring;
+	unsigned int packets;
 
 	/* For non-gigabit speeds, just fix the interrupt rate at 4000
 	 * ints/sec - ITR timer value of 120 ticks.
@@ -3559,16 +3566,21 @@ static void igb_update_ring_itr(struct igb_q_vector *q_vector)
 		goto set_itr_val;
 	}
 
-	if (q_vector->rx_ring && q_vector->rx_ring->total_packets) {
-		struct igb_ring *ring = q_vector->rx_ring;
-		avg_wire_size = ring->total_bytes / ring->total_packets;
+	ring = q_vector->rx_ring;
+	if (ring) {
+		packets = ACCESS_ONCE(ring->total_packets);
+
+		if (packets) 
+			avg_wire_size = ring->total_bytes / packets;
 	}
 
-	if (q_vector->tx_ring && q_vector->tx_ring->total_packets) {
-		struct igb_ring *ring = q_vector->tx_ring;
-		avg_wire_size = max_t(u32, avg_wire_size,
-		                      (ring->total_bytes /
-		                       ring->total_packets));
+	ring = q_vector->tx_ring;
+	if (ring) {
+		packets = ACCESS_ONCE(ring->total_packets);
+
+		if (packets)
+			avg_wire_size = max_t(u32, avg_wire_size,
+			                      ring->total_bytes / packets);
 	}
 
 	/* if avg_wire_size isn't set no work was done */
@@ -4077,7 +4089,11 @@ static int __igb_maybe_stop_tx(struct igb_ring *tx_ring, int size)
 
 	/* A reprieve! */
 	netif_wake_subqueue(netdev, tx_ring->queue_index);
-	tx_ring->tx_stats.restart_queue++;
+
+	u64_stats_update_begin(&tx_ring->tx_syncp2);
+	tx_ring->tx_stats.restart_queue2++;
+	u64_stats_update_end(&tx_ring->tx_syncp2);
+
 	return 0;
 }
 
@@ -4214,16 +4230,22 @@ static void igb_reset_task(struct work_struct *work)
 }
 
 /**
- * igb_get_stats - Get System Network Statistics
+ * igb_get_stats64 - Get System Network Statistics
  * @netdev: network interface device structure
+ * @stats: rtnl_link_stats64 pointer
  *
- * Returns the address of the device statistics structure.
- * The statistics are actually updated from the timer callback.
  **/
-static struct net_device_stats *igb_get_stats(struct net_device *netdev)
+static struct rtnl_link_stats64 *igb_get_stats64(struct net_device *netdev,
+						 struct rtnl_link_stats64 *stats)
 {
-	/* only return the current stats */
-	return &netdev->stats;
+	struct igb_adapter *adapter = netdev_priv(netdev);
+
+	spin_lock(&adapter->stats64_lock);
+	igb_update_stats(adapter, &adapter->stats64);
+	memcpy(stats, &adapter->stats64, sizeof(*stats));
+	spin_unlock(&adapter->stats64_lock);
+
+	return stats;
 }
 
 /**
@@ -4305,15 +4327,17 @@ static int igb_change_mtu(struct net_device *netdev, int new_mtu)
  * @adapter: board private structure
  **/
 
-void igb_update_stats(struct igb_adapter *adapter)
+void igb_update_stats(struct igb_adapter *adapter,
+		      struct rtnl_link_stats64 *net_stats)
 {
-	struct net_device_stats *net_stats = igb_get_stats(adapter->netdev);
 	struct e1000_hw *hw = &adapter->hw;
 	struct pci_dev *pdev = adapter->pdev;
 	u32 reg, mpc;
 	u16 phy_tmp;
 	int i;
 	u64 bytes, packets;
+	unsigned int start;
+	u64 _bytes, _packets;
 
 #define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
 
@@ -4331,10 +4355,17 @@ void igb_update_stats(struct igb_adapter *adapter)
 	for (i = 0; i < adapter->num_rx_queues; i++) {
 		u32 rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0x0FFF;
 		struct igb_ring *ring = adapter->rx_ring[i];
+
 		ring->rx_stats.drops += rqdpc_tmp;
 		net_stats->rx_fifo_errors += rqdpc_tmp;
-		bytes += ring->rx_stats.bytes;
-		packets += ring->rx_stats.packets;
+		
+		do {
+			start = u64_stats_fetch_begin_bh(&ring->rx_syncp);
+			_bytes = ring->rx_stats.bytes;
+			_packets = ring->rx_stats.packets;
+		} while (u64_stats_fetch_retry_bh(&ring->rx_syncp, start));
+		bytes += _bytes;
+		packets += _packets;
 	}
 
 	net_stats->rx_bytes = bytes;
@@ -4344,8 +4375,13 @@ void igb_update_stats(struct igb_adapter *adapter)
 	packets = 0;
 	for (i = 0; i < adapter->num_tx_queues; i++) {
 		struct igb_ring *ring = adapter->tx_ring[i];
-		bytes += ring->tx_stats.bytes;
-		packets += ring->tx_stats.packets;
+		do {
+			start = u64_stats_fetch_begin_bh(&ring->tx_syncp);
+			_bytes = ring->tx_stats.bytes;
+			_packets = ring->tx_stats.packets;
+		} while (u64_stats_fetch_retry_bh(&ring->tx_syncp, start));
+		bytes += _bytes;
+		packets += _packets;
 	}
 	net_stats->tx_bytes = bytes;
 	net_stats->tx_packets = packets;
@@ -5397,7 +5433,10 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
 		if (__netif_subqueue_stopped(netdev, tx_ring->queue_index) &&
 		    !(test_bit(__IGB_DOWN, &adapter->state))) {
 			netif_wake_subqueue(netdev, tx_ring->queue_index);
+
+			u64_stats_update_begin(&tx_ring->tx_syncp);
 			tx_ring->tx_stats.restart_queue++;
+			u64_stats_update_end(&tx_ring->tx_syncp);
 		}
 	}
 
@@ -5437,8 +5476,10 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
 	}
 	tx_ring->total_bytes += total_bytes;
 	tx_ring->total_packets += total_packets;
+	u64_stats_update_begin(&tx_ring->tx_syncp);
 	tx_ring->tx_stats.bytes += total_bytes;
 	tx_ring->tx_stats.packets += total_packets;
+	u64_stats_update_end(&tx_ring->tx_syncp);
 	return count < tx_ring->count;
 }
 
@@ -5480,9 +5521,11 @@ static inline void igb_rx_checksum_adv(struct igb_ring *ring,
 		 * packets, (aka let the stack check the crc32c)
 		 */
 		if ((skb->len == 60) &&
-		    (ring->flags & IGB_RING_FLAG_RX_SCTP_CSUM))
+		    (ring->flags & IGB_RING_FLAG_RX_SCTP_CSUM)) {
+			u64_stats_update_begin(&ring->rx_syncp);
 			ring->rx_stats.csum_err++;
-
+			u64_stats_update_end(&ring->rx_syncp);
+		}
 		/* let the stack verify checksum errors */
 		return;
 	}
@@ -5669,8 +5712,10 @@ next_desc:
 
 	rx_ring->total_packets += total_packets;
 	rx_ring->total_bytes += total_bytes;
+	u64_stats_update_begin(&rx_ring->rx_syncp);
 	rx_ring->rx_stats.packets += total_packets;
 	rx_ring->rx_stats.bytes += total_bytes;
+	u64_stats_update_end(&rx_ring->rx_syncp);
 	return cleaned;
 }
 
@@ -5698,8 +5743,10 @@ void igb_alloc_rx_buffers_adv(struct igb_ring *rx_ring, int cleaned_count)
 		if ((bufsz < IGB_RXBUFFER_1024) && !buffer_info->page_dma) {
 			if (!buffer_info->page) {
 				buffer_info->page = netdev_alloc_page(netdev);
-				if (!buffer_info->page) {
+				if (unlikely(!buffer_info->page)) {
+					u64_stats_update_begin(&rx_ring->rx_syncp);
 					rx_ring->rx_stats.alloc_failed++;
+					u64_stats_update_end(&rx_ring->rx_syncp);
 					goto no_buffers;
 				}
 				buffer_info->page_offset = 0;
@@ -5714,7 +5761,9 @@ void igb_alloc_rx_buffers_adv(struct igb_ring *rx_ring, int cleaned_count)
 			if (dma_mapping_error(rx_ring->dev,
 					      buffer_info->page_dma)) {
 				buffer_info->page_dma = 0;
+				u64_stats_update_begin(&rx_ring->rx_syncp);
 				rx_ring->rx_stats.alloc_failed++;
+				u64_stats_update_end(&rx_ring->rx_syncp);
 				goto no_buffers;
 			}
 		}
@@ -5722,8 +5771,10 @@ void igb_alloc_rx_buffers_adv(struct igb_ring *rx_ring, int cleaned_count)
 		skb = buffer_info->skb;
 		if (!skb) {
 			skb = netdev_alloc_skb_ip_align(netdev, bufsz);
-			if (!skb) {
+			if (unlikely(!skb)) {
+				u64_stats_update_begin(&rx_ring->rx_syncp);
 				rx_ring->rx_stats.alloc_failed++;
+				u64_stats_update_end(&rx_ring->rx_syncp);
 				goto no_buffers;
 			}
 
@@ -5737,7 +5788,9 @@ void igb_alloc_rx_buffers_adv(struct igb_ring *rx_ring, int cleaned_count)
 			if (dma_mapping_error(rx_ring->dev,
 					      buffer_info->dma)) {
 				buffer_info->dma = 0;
+				u64_stats_update_begin(&rx_ring->rx_syncp);
 				rx_ring->rx_stats.alloc_failed++;
+				u64_stats_update_end(&rx_ring->rx_syncp);
 				goto no_buffers;
 			}
 		}



^ permalink raw reply related

* Documenting UNIX domain autobind
From: Michael Kerrisk @ 2010-10-10  5:48 UTC (permalink / raw)
  To: Tetsuo Handa; +Cc: netdev, mzxreary

Hello Tetsuo,

I'm the Linux man-pages mainatiner. I write to you because I see that
you recently (http://kerneltrap.org/mailarchive/linux-netdev/2010/8/30/6284106/thread#mid-6284106)
did some work patchiing Linux unix_autobind(), so you may know the
answer to this question. But, also others on the CC may know.

I recently noticed this feature in the kernel, and so added some
documentation to the unix(7) man page. That text reads as follows:

   Autobind Feature
       If a bind() call specifies addrlen as  sizeof(sa_family_t),  or
       the  SO_PASSCRED  socket option was specified for a socket that
       was not explicitly bound to an  address,  then  the  socket  is
       autobound  to  an  abstract address.  The address consists of a
       null byte followed by 5 bytes in the  character  set  [0-9a-f].
       (Thus, there is a limit of 2^20 autobind addresses.)

I think this text correctly documents the technical details (but let
me know if you see errors). What is lacking is an explanation of why
this feature exists. Is someone able to explain where this feature is
used and why?

thanks,

Michael

-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Author of "The Linux Programming Interface"; http://man7.org/tlpi/

^ permalink raw reply

* Re: [PATCH] Add IRQF_SAMPLE_RANDOM Flag to forcedeth
From: Patrick Simmons @ 2010-10-10  3:23 UTC (permalink / raw)
  To: David Miller; +Cc: bhutchings, netdev
In-Reply-To: <20101009.201501.214209347.davem@davemloft.net>

On 10/09/10 21:15, David Miller wrote:
> From: Ben Hutchings<bhutchings@solarflare.com>
> Date: Sun, 10 Oct 2010 02:09:24 +0100
>
>> Patrick Simmons wrote:
>>> This patch adds the IRQF_SAMPLE_RANDOM flag to the forcedeth driver,
>>> allowing the interrupt timing for forcedeth to be used for entropy
>>> generation.  This should help /dev/random generate more secure random
>>> numbers on machines using this driver.
>> [...]
>>
>> We don't enable this for network drivers any more because:
>>
>> 1. At high packet rates, interrupt moderation makes interrupts very
>> regular.
>> 2. At low packet rates, a malicious sender can control the interrupt
>> timing.
>
> Agreed on all counts, I'm not applying this patch.

It's enabled for other network drivers, which is where I got the idea 
from.  Has anyone actually done an experiment to see whether these two 
concerns are valid?

--Patrick

-- 
If I'm not here, I've gone out to find myself.  If I get back before I 
return, please keep me here.

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox