Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH] X25: Add ITU-T facilites
From: Arnaldo Carvalho de Melo @ 2005-10-18 15:37 UTC (permalink / raw)
  To: YOSHIFUJI Hideaki / ?$B5HF#1QL@
  Cc: ahendry, eis, linux-x25, linux-kernel, netdev
In-Reply-To: <20051018.152318.68554424.yoshfuji@linux-ipv6.org>

Em Tue, Oct 18, 2005 at 03:23:18PM +0900, YOSHIFUJI Hideaki / ?$B5HF#1QL@ escreveu:
> In article <1129615767.3695.15.camel@localhost.localdomain> (at Tue, 18 Oct 2005 16:09:27 +1000), Andrew Hendry <ahendry@tusc.com.au> says:
> 
> > +/* 
> > +*     ITU DTE facilities
> > +*     Only the called and calling address
> > +*     extension are currently implemented.
> > +*     The rest are in place to avoid the struct
> > +*     changing size if someone needs them later
> > ++ */
> > +struct x25_dte_facilities {
> > +	unsigned int    calling_len, called_len;
> > +	char            calling_ae[20];
> > +	char            called_ae[20];
> > +	unsigned char   min_throughput;
> > +	unsigned short  delay_cumul;
> > +	unsigned short  delay_target;
> > +	unsigned short  delay_max;
> > +	unsigned char   expedited;
> > +};
> 
> Why don't you use fixed size members?
> And we can eliminate 8bit hole.
> 
> struct x25_dte_facilities {
>      u32             calling_len
>      u32             called_len;

I guess the two above can be 'u8' as they refer to calling_ae and called_ae
that at most will be '20'?

>      u8              calling_ae[20];
>      u8              called_ae[20];

- Arnaldo

^ permalink raw reply

* Re: [PATCH] X25: Add ITU-T facilites
From: linux-os (Dick Johnson) @ 2005-10-18 15:48 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: YOSHIFUJI Hideaki / ?$B5HF#1QL@, ahendry, eis, linux-x25,
	linux-kernel, netdev
In-Reply-To: <20051018153702.GC23167@mandriva.com>


On Tue, 18 Oct 2005, Arnaldo Carvalho de Melo wrote:

> Em Tue, Oct 18, 2005 at 03:23:18PM +0900, YOSHIFUJI Hideaki / ?$B5HF#1QL@ escreveu:
>> In article <1129615767.3695.15.camel@localhost.localdomain> (at Tue, 18 Oct 2005 16:09:27 +1000), Andrew Hendry <ahendry@tusc.com.au> says:
>>
>>> +/*
>>> +*     ITU DTE facilities
>>> +*     Only the called and calling address
>>> +*     extension are currently implemented.
>>> +*     The rest are in place to avoid the struct
>>> +*     changing size if someone needs them later
>>> ++ */
>>> +struct x25_dte_facilities {
>>> +	unsigned int    calling_len, called_len;
>>> +	char            calling_ae[20];
>>> +	char            called_ae[20];
>>> +	unsigned char   min_throughput;
>>> +	unsigned short  delay_cumul;
>>> +	unsigned short  delay_target;
>>> +	unsigned short  delay_max;
>>> +	unsigned char   expedited;
>>> +};
>>
>> Why don't you use fixed size members?
>> And we can eliminate 8bit hole.
>>
>> struct x25_dte_facilities {
>>      u32             calling_len
>>      u32             called_len;
>
> I guess the two above can be 'u8' as they refer to calling_ae and called_ae
> that at most will be '20'?
>
>>      u8              calling_ae[20];
>>      u8              called_ae[20];
>
> - Arnaldo

At the very least put the 32-bit in the beginning and 8-bit stuff at
the end so natural alignment occurs where possible.

Cheers,
Dick Johnson
Penguin : Linux version 2.6.13.4 on an i686 machine (5589.46 BogoMips).
Warning : 98.36% of all statistics are fiction.
.

****************************************************************
The information transmitted in this message is confidential and may be privileged.  Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited.  If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.

^ permalink raw reply

* Re: [BUG]NULL pointer dereference in ipv6_get_saddr()
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2005-10-18 16:21 UTC (permalink / raw)
  To: yanzheng; +Cc: netdev, linux-kernel, yoshfuji
In-Reply-To: <435512F5.1040502@21cn.com>

In article <435512F5.1040502@21cn.com> (at Tue, 18 Oct 2005 23:21:25 +0800), Yan Zheng <yanzheng@21cn.com> says:

> When I use command "ip -f inet6 route get fec0::1", kernel Oops occurs.
> I found it's due to ip_route_output return address of ip6_null_entry, ip6_null_entry.rt6i_idev is NULL.

I think this is already fixed in head.
I don't remember if we pushed this to stable...

--yoshfuji

^ permalink raw reply

* [PATCH] ipconfig.c: fix "dhcp server takes precedence over bootp header one"
From: Maxime Bizon @ 2005-10-18 17:05 UTC (permalink / raw)
  To: davem; +Cc: netdev


Hello,

I was unable to use nfs root with a dhcp server that does not fill the
"saddr" field in the bootp header (kernel then tries RPC on 0.0.0.0).

The ipconfig code states that the dhcp server_id takes precedence over
bootp header, but I think the check is misplaced as it is done only for
DHCPOFFER.

The following patch fixes the problem.


Signed-off-by: Maxime Bizon <mbizon@freebox.fr>

--- linux-2.6.13.4/net/ipv4/ipconfig.c.orig	2005-10-18 18:11:54.000000000 +0200
+++ linux-2.6.13.4/net/ipv4/ipconfig.c	2005-10-18 18:22:18.000000000 +0200
@@ -959,13 +959,6 @@
 				printk(" by server %u.%u.%u.%u\n",
 				       NIPQUAD(ic_servaddr));
 #endif
-				/* The DHCP indicated server address takes
-				 * precedence over the bootp header one if
-				 * they are different.
-				 */
-				if ((server_id != INADDR_NONE) &&
-				    (b->server_ip != server_id))
-					b->server_ip = ic_servaddr;
 				break;
 
 			case DHCPACK:
@@ -982,6 +975,14 @@
 				goto drop_unlock;
 			};
 
+			/* The DHCP indicated server address takes
+			 * precedence over the bootp header one if
+			 * they are different.
+			 */
+			if ((server_id != INADDR_NONE) &&
+			    (b->server_ip != server_id))
+				b->server_ip = ic_servaddr;
+
 			ic_dhcp_msgtype = mt;
 
 		}

-- 
Maxime

^ permalink raw reply

* [PATCH] AX.25: Use constant instead of magic number.
From: Ralf Baechle @ 2005-10-18 20:39 UTC (permalink / raw)
  To: David S. Miller
  Cc: Arnaldo Carvalho de Melo, dann frazier, chrisw, netdev,
	linux-hams

Signed-off-by: Ralf Baechle DL5RB <ralf@linux-mips.org>

 net/rose/rose_route.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

Index: net-git/net/rose/rose_route.c
===================================================================
--- net-git.orig/net/rose/rose_route.c
+++ net-git/net/rose/rose_route.c
@@ -727,7 +727,7 @@ int rose_rt_ioctl(unsigned int cmd, void
 		}
 		if (rose_route.mask > 10) /* Mask can't be more than 10 digits */
 			return -EINVAL;
-		if (rose_route.ndigis > 8) /* No more than 8 digipeats */
+		if (rose_route.ndigis > AX25_MAX_DIGIS)
 			return -EINVAL;
 		err = rose_add_node(&rose_route, dev);
 		dev_put(dev);

^ permalink raw reply

* [patch 2.6.14-rc4] orinoco: remove redundance skb length check before padding
From: John W. Linville @ 2005-10-19  1:30 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, proski, hermes, orinoco-devel

Checking the skb->len value before calling skb_padto is redundant.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/wireless/orinoco.c |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c
--- a/drivers/net/wireless/orinoco.c
+++ b/drivers/net/wireless/orinoco.c
@@ -505,11 +505,9 @@ static int orinoco_xmit(struct sk_buff *
 
 	/* Check packet length, pad short packets, round up odd length */
 	len = max_t(int, ALIGN(skb->len, 2), ETH_ZLEN);
-	if (skb->len < len) {
-		skb = skb_padto(skb, len);
-		if (skb == NULL)
-			goto fail;
-	}
+	skb = skb_padto(skb, len);
+	if (skb == NULL)
+		goto fail;
 	len -= ETH_HLEN;
 
 	eh = (struct ethhdr *)skb->data;

^ permalink raw reply

* [patch 2.6.14-rc4] bonding: cleanup comment for mode 1 IGMP xmit hack
From: John W. Linville @ 2005-10-19  1:30 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, ctindel, fubar, bonding-devel

Expand comment explaining MAC address selection for replicated IGMP
frames transmitted in bonding mode 1 (active-backup).  Also, a small
whitespace cleanup.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/bonding/bond_main.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4242,8 +4242,8 @@ out:
 }
 
 static void bond_activebackup_xmit_copy(struct sk_buff *skb,
-                                         struct bonding *bond,
-                                         struct slave *slave)
+                                        struct bonding *bond,
+                                        struct slave *slave)
 {
 	struct sk_buff *skb2 = skb_copy(skb, GFP_ATOMIC);
 	struct ethhdr *eth_data;
@@ -4259,7 +4259,11 @@ static void bond_activebackup_xmit_copy(
 	skb2->mac.raw = (unsigned char *)skb2->data;
 	eth_data = eth_hdr(skb2);
 
-	/* Pick an appropriate source MAC address */
+	/* Pick an appropriate source MAC address
+	 *	-- use slave's perm MAC addr, unless used by bond
+	 *	-- otherwise, borrow active slave's perm MAC addr
+	 *	   since that will not be used
+	 */
 	hwaddr = slave->perm_hwaddr;
 	if (!memcmp(eth_data->h_source, hwaddr, ETH_ALEN))
 		hwaddr = bond->curr_active_slave->perm_hwaddr;

^ permalink raw reply

* [patch 2.6.14-rc4 0/3] sk98lin: neuter and prepare for removal
From: John W. Linville @ 2005-10-19  1:30 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, shemminger, mlindner, rroesler

These patches take steps towards removing sk98lin from the upstream
kernel.

	-- Remove sk98lin's MODULE_DEVICE_TABLE to avoid
	confusing userland tools about which driver to load;

	-- Mark sk98lin as Obsolete in the MAINTAINERS file; and,

	-- Add sk98lin to the feature-removal-schedule.txt file in the
	Documentation directory.

I accept the possibility that I may be jumping the gun on this.
However, I think it is worth opening this discussion.

Patches to follow...

^ permalink raw reply

* [patch 2.6.14-rc4] b44: alternate allocation option for DMA descriptors
From: John W. Linville @ 2005-10-19  1:30 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, pp

This is a (final?) hack to support the odd DMA allocation requirements
of the b44 hardware.  The b44 hardware has a 30-bit DMA mask.  On x86,
anything less than a 32-bit DMA mask forces allocations into the 16MB
GFP_DMA range.  The memory there is somewhat limited, often resulting
in an inability to initialize the b44 driver.

This hack uses streaming DMA allocation APIs in order to provide an
alternative in case the GFP_DMA allocation fails.  It is somewhat ugly,
but not much worse than the similar existing hacks to support SKB
allocations in the same driver.  FWIW, I have received positive
feedback on this from several Fedora users.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/b44.c |  134 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 drivers/net/b44.h |    2 
 2 files changed, 128 insertions(+), 8 deletions(-)

diff --git a/drivers/net/b44.c b/drivers/net/b44.c
--- a/drivers/net/b44.c
+++ b/drivers/net/b44.c
@@ -106,6 +106,29 @@ static int b44_poll(struct net_device *d
 static void b44_poll_controller(struct net_device *dev);
 #endif
 
+static int dma_desc_align_mask;
+static int dma_desc_sync_size;
+
+static inline void b44_sync_dma_desc_for_device(struct pci_dev *pdev,
+                                                dma_addr_t dma_base,
+                                                unsigned long offset,
+                                                enum dma_data_direction dir)
+{
+	dma_sync_single_range_for_device(&pdev->dev, dma_base,
+	                                 offset & dma_desc_align_mask,
+	                                 dma_desc_sync_size, dir);
+}
+
+static inline void b44_sync_dma_desc_for_cpu(struct pci_dev *pdev,
+                                             dma_addr_t dma_base,
+                                             unsigned long offset,
+                                             enum dma_data_direction dir)
+{
+	dma_sync_single_range_for_cpu(&pdev->dev, dma_base,
+	                              offset & dma_desc_align_mask,
+	                              dma_desc_sync_size, dir);
+}
+
 static inline unsigned long br32(const struct b44 *bp, unsigned long reg)
 {
 	return readl(bp->regs + reg);
@@ -668,6 +691,11 @@ static int b44_alloc_rx_skb(struct b44 *
 	dp->ctrl = cpu_to_le32(ctrl);
 	dp->addr = cpu_to_le32((u32) mapping + bp->rx_offset + bp->dma_offset);
 
+	if (bp->flags & B44_FLAG_RX_RING_HACK)
+		b44_sync_dma_desc_for_device(bp->pdev, bp->rx_ring_dma,
+		                             dest_idx * sizeof(dp),
+		                             DMA_BIDIRECTIONAL);
+
 	return RX_PKT_BUF_SZ;
 }
 
@@ -692,6 +720,11 @@ static void b44_recycle_rx(struct b44 *b
 	pci_unmap_addr_set(dest_map, mapping,
 			   pci_unmap_addr(src_map, mapping));
 
+	if (bp->flags & B44_FLAG_RX_RING_HACK)
+		b44_sync_dma_desc_for_cpu(bp->pdev, bp->rx_ring_dma,
+		                          src_idx * sizeof(src_desc),
+		                          DMA_BIDIRECTIONAL);
+
 	ctrl = src_desc->ctrl;
 	if (dest_idx == (B44_RX_RING_SIZE - 1))
 		ctrl |= cpu_to_le32(DESC_CTRL_EOT);
@@ -700,8 +733,14 @@ static void b44_recycle_rx(struct b44 *b
 
 	dest_desc->ctrl = ctrl;
 	dest_desc->addr = src_desc->addr;
+
 	src_map->skb = NULL;
 
+	if (bp->flags & B44_FLAG_RX_RING_HACK)
+		b44_sync_dma_desc_for_device(bp->pdev, bp->rx_ring_dma,
+		                             dest_idx * sizeof(dest_desc),
+		                             DMA_BIDIRECTIONAL);
+
 	pci_dma_sync_single_for_device(bp->pdev, src_desc->addr,
 				       RX_PKT_BUF_SZ,
 				       PCI_DMA_FROMDEVICE);
@@ -959,6 +998,11 @@ static int b44_start_xmit(struct sk_buff
 	bp->tx_ring[entry].ctrl = cpu_to_le32(ctrl);
 	bp->tx_ring[entry].addr = cpu_to_le32((u32) mapping+bp->dma_offset);
 
+	if (bp->flags & B44_FLAG_TX_RING_HACK)
+		b44_sync_dma_desc_for_device(bp->pdev, bp->tx_ring_dma,
+		                             entry * sizeof(bp->tx_ring[0]),
+		                             DMA_TO_DEVICE);
+
 	entry = NEXT_TX(entry);
 
 	bp->tx_prod = entry;
@@ -1064,6 +1108,16 @@ static void b44_init_rings(struct b44 *b
 	memset(bp->rx_ring, 0, B44_RX_RING_BYTES);
 	memset(bp->tx_ring, 0, B44_TX_RING_BYTES);
 
+	if (bp->flags & B44_FLAG_RX_RING_HACK)
+		dma_sync_single_for_device(&bp->pdev->dev, bp->rx_ring_dma,
+		                           DMA_TABLE_BYTES,
+		                           PCI_DMA_BIDIRECTIONAL);
+
+	if (bp->flags & B44_FLAG_TX_RING_HACK)
+		dma_sync_single_for_device(&bp->pdev->dev, bp->tx_ring_dma,
+		                           DMA_TABLE_BYTES,
+		                           PCI_DMA_TODEVICE);
+
 	for (i = 0; i < bp->rx_pending; i++) {
 		if (b44_alloc_rx_skb(bp, -1, i) < 0)
 			break;
@@ -1085,14 +1139,28 @@ static void b44_free_consistent(struct b
 		bp->tx_buffers = NULL;
 	}
 	if (bp->rx_ring) {
-		pci_free_consistent(bp->pdev, DMA_TABLE_BYTES,
-				    bp->rx_ring, bp->rx_ring_dma);
+		if (bp->flags & B44_FLAG_RX_RING_HACK) {
+			dma_unmap_single(&bp->pdev->dev, bp->rx_ring_dma,
+				         DMA_TABLE_BYTES,
+				         DMA_BIDIRECTIONAL);
+			kfree(bp->rx_ring);
+		} else
+			pci_free_consistent(bp->pdev, DMA_TABLE_BYTES,
+					    bp->rx_ring, bp->rx_ring_dma);
 		bp->rx_ring = NULL;
+		bp->flags &= ~B44_FLAG_RX_RING_HACK;
 	}
 	if (bp->tx_ring) {
-		pci_free_consistent(bp->pdev, DMA_TABLE_BYTES,
-				    bp->tx_ring, bp->tx_ring_dma);
+		if (bp->flags & B44_FLAG_TX_RING_HACK) {
+			dma_unmap_single(&bp->pdev->dev, bp->tx_ring_dma,
+				         DMA_TABLE_BYTES,
+				         DMA_TO_DEVICE);
+			kfree(bp->tx_ring);
+		} else
+			pci_free_consistent(bp->pdev, DMA_TABLE_BYTES,
+					    bp->tx_ring, bp->tx_ring_dma);
 		bp->tx_ring = NULL;
+		bp->flags &= ~B44_FLAG_TX_RING_HACK;
 	}
 }
 
@@ -1118,12 +1186,56 @@ static int b44_alloc_consistent(struct b
 
 	size = DMA_TABLE_BYTES;
 	bp->rx_ring = pci_alloc_consistent(bp->pdev, size, &bp->rx_ring_dma);
-	if (!bp->rx_ring)
-		goto out_err;
+	if (!bp->rx_ring) {
+		/* Allocation may have failed due to pci_alloc_consistent
+		   insisting on use of GFP_DMA, which is more restrictive
+		   than necessary...  */
+		struct dma_desc *rx_ring;
+		dma_addr_t rx_ring_dma;
+
+		if (!(rx_ring = (struct dma_desc *)kmalloc(size, GFP_KERNEL)))
+			goto out_err;
+
+		memset(rx_ring, 0, size);
+		rx_ring_dma = dma_map_single(&bp->pdev->dev, rx_ring,
+		                             DMA_TABLE_BYTES,
+		                             DMA_BIDIRECTIONAL);
+
+		if (rx_ring_dma + size > B44_DMA_MASK) {
+			kfree(rx_ring);
+			goto out_err;
+		}
+
+		bp->rx_ring = rx_ring;
+		bp->rx_ring_dma = rx_ring_dma;
+		bp->flags |= B44_FLAG_RX_RING_HACK;
+	}
 
 	bp->tx_ring = pci_alloc_consistent(bp->pdev, size, &bp->tx_ring_dma);
-	if (!bp->tx_ring)
-		goto out_err;
+	if (!bp->tx_ring) {
+		/* Allocation may have failed due to pci_alloc_consistent
+		   insisting on use of GFP_DMA, which is more restrictive
+		   than necessary...  */
+		struct dma_desc *tx_ring;
+		dma_addr_t tx_ring_dma;
+
+		if (!(tx_ring = (struct dma_desc *)kmalloc(size, GFP_KERNEL)))
+			goto out_err;
+
+		memset(tx_ring, 0, size);
+		tx_ring_dma = dma_map_single(&bp->pdev->dev, tx_ring,
+		                             DMA_TABLE_BYTES,
+		                             DMA_TO_DEVICE);
+
+		if (tx_ring_dma + size > B44_DMA_MASK) {
+			kfree(tx_ring);
+			goto out_err;
+		}
+
+		bp->tx_ring = tx_ring;
+		bp->tx_ring_dma = tx_ring_dma;
+		bp->flags |= B44_FLAG_TX_RING_HACK;
+	}
 
 	return 0;
 
@@ -1971,6 +2083,12 @@ static struct pci_driver b44_driver = {
 
 static int __init b44_init(void)
 {
+	unsigned int dma_desc_align_size = dma_get_cache_alignment();
+
+	/* Setup paramaters for syncing RX/TX DMA descriptors */
+	dma_desc_align_mask = ~(dma_desc_align_size - 1);
+	dma_desc_sync_size = max(dma_desc_align_size, sizeof(struct dma_desc));
+
 	return pci_module_init(&b44_driver);
 }
 
diff --git a/drivers/net/b44.h b/drivers/net/b44.h
--- a/drivers/net/b44.h
+++ b/drivers/net/b44.h
@@ -400,6 +400,8 @@ struct b44 {
 #define B44_FLAG_ADV_100HALF	0x04000000
 #define B44_FLAG_ADV_100FULL	0x08000000
 #define B44_FLAG_INTERNAL_PHY	0x10000000
+#define B44_FLAG_RX_RING_HACK	0x20000000
+#define B44_FLAG_TX_RING_HACK	0x40000000
 
 	u32			rx_offset;
 

^ permalink raw reply

* [patch 2.6.14-rc4] bonding: fix typos in bonding documentation
From: John W. Linville @ 2005-10-19  1:30 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, ctindel, fubar, bonding-devel

Fix some simple typos in the bonding.txt file.  The typos are in areas
relating to loading the bonding driver multiple times.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 Documentation/networking/bonding.txt |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt
--- a/Documentation/networking/bonding.txt
+++ b/Documentation/networking/bonding.txt
@@ -777,7 +777,7 @@ doing so is the same as described in the
 Manually" section, below.
 
 	NOTE: It has been observed that some Red Hat supplied kernels
-are apparently unable to rename modules at load time (the "-obonding1"
+are apparently unable to rename modules at load time (the "-o bond1"
 part).  Attempts to pass that option to modprobe will produce an
 "Operation not permitted" error.  This has been reported on some
 Fedora Core kernels, and has been seen on RHEL 4 as well.  On kernels
@@ -883,7 +883,8 @@ the above does not work, and the second 
 its options.  In that case, the second options line can be substituted
 as follows:
 
-install bonding1 /sbin/modprobe bonding -obond1 mode=balance-alb miimon=50
+install bond1 /sbin/modprobe --ignore-install bonding -o bond1 \
+	mode=balance-alb miimon=50
 
 	This may be repeated any number of times, specifying a new and
 unique name in place of bond1 for each subsequent instance.

^ permalink raw reply

* [patch 2.6.14-rc4 1/3] sk98lin: remove MODULE_DEVICE_TABLE to avoid conflicts w/ skge
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, shemminger, mlindner, rroesler
In-Reply-To: <10182005213059.12304@bilbo.tuxdriver.com>

The skge driver claims support for the identical list of hardware
supported by the in-kernel sk98lin driver.  This can confuse userland
tools which pick modules based on the PCI ID lists exported through
MODULE_DEVICE_TABLE.

This patch removes the MODULE_DEVICE_TABLE line from sk98lin.  The
driver can still be loaded manually if necessary or desireable.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/sk98lin/skge.c |    2 --
 1 files changed, 2 deletions(-)

diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c
--- a/drivers/net/sk98lin/skge.c
+++ b/drivers/net/sk98lin/skge.c
@@ -5227,8 +5227,6 @@ static struct pci_device_id skge_pci_tbl
 	{ 0 }
 };
 
-MODULE_DEVICE_TABLE(pci, skge_pci_tbl);
-
 static struct pci_driver skge_driver = {
 	.name		= "sk98lin",
 	.id_table	= skge_pci_tbl,

^ permalink raw reply

* [patch 2.6.14-rc3] 8139too: fix resume for Realtek 8100B/8139D
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik

Add "HasHltClk" flag for RTL-8100B/8139D hardware in order to fix
problems resuming from suspend-to-RAM.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/8139too.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
--- a/drivers/net/8139too.c
+++ b/drivers/net/8139too.c
@@ -552,7 +552,8 @@ const static struct {
 
 	{ "RTL-8100B/8139D",
 	  HW_REVID(1, 1, 1, 0, 1, 0, 1),
-	  HasLWake,
+	  HasHltClk /* XXX undocumented? */
+	| HasLWake,
 	},
 
 	{ "RTL-8101",

^ permalink raw reply

* [patch 2.6.14-rc4 2/3] MAINTAINERS: mark the sk98lin driver as obsolete
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, shemminger, mlindner, rroesler
In-Reply-To: <10182005213100.12360@bilbo.tuxdriver.com>

The sk98lin and skge drivers cover the same set of hardware, and the
skge driver enjoys community support.  This patch marks the sk98lin
driver as obsolete.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 MAINTAINERS |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/MAINTAINERS b/MAINTAINERS
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1592,7 +1592,7 @@ M: 	mlindner@syskonnect.de
 P:	Ralph Roesler
 M: 	rroesler@syskonnect.de
 W: 	http://www.syskonnect.com
-S: 	Supported
+S: 	Obsolete
 
 MAESTRO PCI SOUND DRIVERS
 P:	Zach Brown

^ permalink raw reply

* [patch 2.6.14-rc4 3/3] Documentation: add sk98lin to the feature-removal-schedule
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, shemminger, mlindner, rroesler
In-Reply-To: <10182005213100.12420@bilbo.tuxdriver.com>

The sk98lin and skge drivers cover the same set of hardware, yet the
sk98lin driver is barely maintained.  This patch schedules sk98lin
for removal early next year.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 Documentation/feature-removal-schedule.txt |    9 +++++++++
 1 files changed, 9 insertions(+)

diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt
--- a/Documentation/feature-removal-schedule.txt
+++ b/Documentation/feature-removal-schedule.txt
@@ -95,3 +95,12 @@ Why:	This interface has been obsoleted b
 	to link against API-compatible library on top of libnfnetlink_queue 
 	instead of the current 'libipq'.
 Who:	Harald Welte <laforge@netfilter.org>
+
+---------------------------
+
+What:	sk98lin driver
+When:	April 2006
+Why:	This driver has been essentially unmaintained for some time.
+	Internally it is a mess, and the original authors are unwilling to
+	correct it.  Now the skge driver covers all the same hardware.
+Who:	John W. Linville <linville@tuxdriver.com>

^ permalink raw reply

* [patch 2.6.14-rc3 1/3] sundance: remove if (1) { ... } block in sundance_probe1
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik
In-Reply-To: <10182005213101.12694@bilbo.tuxdriver.com>

Remove an if (1) { ... } block in sundance_probe1.  Its purpose seems
to be only to allow for delaring some extra local variables.  But, it also
adds ugly indentation without adding any meaning to the code.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/sundance.c |   48 +++++++++++++++++++++++-------------------------
 1 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c
--- a/drivers/net/sundance.c
+++ b/drivers/net/sundance.c
@@ -518,6 +518,7 @@ static int __devinit sundance_probe1 (st
 #else
 	int bar = 1;
 #endif
+	int phy, phy_idx = 0;
 
 
 /* when built into the kernel, we only print version if device is found */
@@ -605,33 +606,30 @@ static int __devinit sundance_probe1 (st
 			printk("%2.2x:", dev->dev_addr[i]);
 	printk("%2.2x, IRQ %d.\n", dev->dev_addr[i], irq);
 
-	if (1) {
-		int phy, phy_idx = 0;
-		np->phys[0] = 1;		/* Default setting */
-		np->mii_preamble_required++;
-		for (phy = 1; phy < 32 && phy_idx < MII_CNT; phy++) {
-			int mii_status = mdio_read(dev, phy, MII_BMSR);
-			if (mii_status != 0xffff  &&  mii_status != 0x0000) {
-				np->phys[phy_idx++] = phy;
-				np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE);
-				if ((mii_status & 0x0040) == 0)
-					np->mii_preamble_required++;
-				printk(KERN_INFO "%s: MII PHY found at address %d, status "
-					   "0x%4.4x advertising %4.4x.\n",
-					   dev->name, phy, mii_status, np->mii_if.advertising);
-			}
-		}
-		np->mii_preamble_required--;
-
-		if (phy_idx == 0) {
-			printk(KERN_INFO "%s: No MII transceiver found, aborting.  ASIC status %x\n",
-				   dev->name, ioread32(ioaddr + ASICCtrl));
-			goto err_out_unregister;
-		}
-
-		np->mii_if.phy_id = np->phys[0];
+	np->phys[0] = 1;		/* Default setting */
+	np->mii_preamble_required++;
+	for (phy = 1; phy < 32 && phy_idx < MII_CNT; phy++) {
+		int mii_status = mdio_read(dev, phy, MII_BMSR);
+		if (mii_status != 0xffff  &&  mii_status != 0x0000) {
+			np->phys[phy_idx++] = phy;
+			np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE);
+			if ((mii_status & 0x0040) == 0)
+				np->mii_preamble_required++;
+			printk(KERN_INFO "%s: MII PHY found at address %d, status "
+				   "0x%4.4x advertising %4.4x.\n",
+				   dev->name, phy, mii_status, np->mii_if.advertising);
+		}
+	}
+	np->mii_preamble_required--;
+
+	if (phy_idx == 0) {
+		printk(KERN_INFO "%s: No MII transceiver found, aborting.  ASIC status %x\n",
+			   dev->name, ioread32(ioaddr + ASICCtrl));
+		goto err_out_unregister;
 	}
 
+	np->mii_if.phy_id = np->phys[0];
+
 	/* Parse override configuration */
 	np->an_enable = 1;
 	if (card_idx < MAX_UNITS) {

^ permalink raw reply

* [patch 2.6.14-rc3 2/3] sundance: probe PHYs from MII address 0
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik
In-Reply-To: <10182005213101.12750@bilbo.tuxdriver.com>

Probe for PHYs starting at MII address 0 instead of MII address 1.
This covers the entire range of MII addresses.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/sundance.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c
--- a/drivers/net/sundance.c
+++ b/drivers/net/sundance.c
@@ -608,7 +608,7 @@ static int __devinit sundance_probe1 (st
 
 	np->phys[0] = 1;		/* Default setting */
 	np->mii_preamble_required++;
-	for (phy = 1; phy < 32 && phy_idx < MII_CNT; phy++) {
+	for (phy = 0; phy < 32 && phy_idx < MII_CNT; phy++) {
 		int mii_status = mdio_read(dev, phy, MII_BMSR);
 		if (mii_status != 0xffff  &&  mii_status != 0x0000) {
 			np->phys[phy_idx++] = phy;

^ permalink raw reply

* [patch 2.6.14-rc3] epic100: fix counting of work_done in epic_poll
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik

work_done is overwritten each time through the rx_action loop in
epic_poll.  This screws-up the NAPI accounting if the loop is executed
more than once.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/epic100.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/epic100.c b/drivers/net/epic100.c
--- a/drivers/net/epic100.c
+++ b/drivers/net/epic100.c
@@ -1334,7 +1334,7 @@ static void epic_rx_err(struct net_devic
 static int epic_poll(struct net_device *dev, int *budget)
 {
 	struct epic_private *ep = dev->priv;
-	int work_done, orig_budget;
+	int work_done = 0, orig_budget;
 	long ioaddr = dev->base_addr;
 
 	orig_budget = (*budget > dev->quota) ? dev->quota : *budget;
@@ -1343,7 +1343,7 @@ rx_action:
 
 	epic_tx(dev, ep);
 
-	work_done = epic_rx(dev, *budget);
+	work_done += epic_rx(dev, *budget);
 
 	epic_rx_err(dev, ep);
 

^ permalink raw reply

* [patch 2.6.14-rc3 0/3] misc fixes/cleanups for sundance
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik

Just a little cleanup from me, and some fixes snarfed from the
ICPlus (chip vendor) version of the driver.

	-- Get rid of if (1) { ... } block in sundance_probe1

	-- Change PHY probing to start from MII address 0

	-- Expand the mask used when resetting the chip

Patches to follow...

^ permalink raw reply

* [patch 2.6.14-rc4] via-rhine: change mdelay to msleep and remove from ISR path
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik, rl

Get rid of the mdelay call in rhine_disable_linkmon.  The function
is called from the via-rhine versions of mdio_read and mdio_write.
Those functions are indirectly called from rhine_check_media and
rhine_tx_timeout, both of which can be called in interrupt context.

So, create tx_timeout_task and check_media_task as instances of struct
work_struct inside of rhine_private.  Then, change rhine_tx_timeout to
invoke schedule_work for tx_timeout_task (i.e. rhine_tx_timeout_task),
moving the work to process context.  Also, change rhine_error (invoked
from rhine_interrupt) to invoke schedule_work for check_media_task
(i.e. rhine_check_media_task), which simply calls rhine_check media
in process context.  Finally, add a call to flush_scheduled_work in
rhine_close to avoid any resource conflicts with pending work items.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/via-rhine.c |   34 +++++++++++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
--- a/drivers/net/via-rhine.c
+++ b/drivers/net/via-rhine.c
@@ -490,6 +490,8 @@ struct rhine_private {
 	u8 tx_thresh, rx_thresh;
 
 	struct mii_if_info mii_if;
+	struct work_struct tx_timeout_task;
+	struct work_struct check_media_task;
 	void __iomem *base;
 };
 
@@ -497,6 +499,8 @@ static int  mdio_read(struct net_device 
 static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
 static int  rhine_open(struct net_device *dev);
 static void rhine_tx_timeout(struct net_device *dev);
+static void rhine_tx_timeout_task(struct net_device *dev);
+static void rhine_check_media_task(struct net_device *dev);
 static int  rhine_start_tx(struct sk_buff *skb, struct net_device *dev);
 static irqreturn_t rhine_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
 static void rhine_tx(struct net_device *dev);
@@ -850,6 +854,12 @@ static int __devinit rhine_init_one(stru
 	if (rp->quirks & rqRhineI)
 		dev->features |= NETIF_F_SG|NETIF_F_HW_CSUM;
 
+	INIT_WORK(&rp->tx_timeout_task,
+		  (void (*)(void *))rhine_tx_timeout_task, dev);
+
+	INIT_WORK(&rp->check_media_task,
+		  (void (*)(void *))rhine_check_media_task, dev);
+
 	/* dev->name not defined before register_netdev()! */
 	rc = register_netdev(dev);
 	if (rc)
@@ -1076,6 +1086,11 @@ static void rhine_check_media(struct net
 		   ioaddr + ChipCmd1);
 }
 
+static void rhine_check_media_task(struct net_device *dev)
+{
+	rhine_check_media(dev, 0);
+}
+
 static void init_registers(struct net_device *dev)
 {
 	struct rhine_private *rp = netdev_priv(dev);
@@ -1129,8 +1144,8 @@ static void rhine_disable_linkmon(void _
 	if (quirks & rqRhineI) {
 		iowrite8(0x01, ioaddr + MIIRegAddr);	// MII_BMSR
 
-		/* Can be called from ISR. Evil. */
-		mdelay(1);
+		/* Do not call from ISR! */
+		msleep(1);
 
 		/* 0x80 must be set immediately before turning it off */
 		iowrite8(0x80, ioaddr + MIICmd);
@@ -1220,6 +1235,16 @@ static int rhine_open(struct net_device 
 static void rhine_tx_timeout(struct net_device *dev)
 {
 	struct rhine_private *rp = netdev_priv(dev);
+
+	/*
+	 * Move bulk of work outside of interrupt context
+	 */
+	schedule_work(&rp->tx_timeout_task);
+}
+
+static void rhine_tx_timeout_task(struct net_device *dev)
+{
+	struct rhine_private *rp = netdev_priv(dev);
 	void __iomem *ioaddr = rp->base;
 
 	printk(KERN_WARNING "%s: Transmit timed out, status %4.4x, PHY status "
@@ -1625,7 +1650,7 @@ static void rhine_error(struct net_devic
 	spin_lock(&rp->lock);
 
 	if (intr_status & IntrLinkChange)
-		rhine_check_media(dev, 0);
+		schedule_work(&rp->check_media_task);
 	if (intr_status & IntrStatsMax) {
 		rp->stats.rx_crc_errors += ioread16(ioaddr + RxCRCErrs);
 		rp->stats.rx_missed_errors += ioread16(ioaddr + RxMissed);
@@ -1872,6 +1897,9 @@ static int rhine_close(struct net_device
 	spin_unlock_irq(&rp->lock);
 
 	free_irq(rp->pdev->irq, dev);
+
+	flush_scheduled_work();
+
 	free_rbufs(dev);
 	free_tbufs(dev);
 	free_ring(dev);

^ permalink raw reply

* [patch 2.6.14-rc3 3/3] sundance: expand reset mask
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev; +Cc: jgarzik
In-Reply-To: <10182005213101.12810@bilbo.tuxdriver.com>

Expand the mask used when reseting the chip to include the GlobalReset
bit.  This fix comes from ICPlus and seems to be required for some
cards.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/sundance.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c
--- a/drivers/net/sundance.c
+++ b/drivers/net/sundance.c
@@ -690,7 +690,7 @@ static int __devinit sundance_probe1 (st
 	/* Reset the chip to erase previous misconfiguration. */
 	if (netif_msg_hw(np))
 		printk("ASIC Control is %x.\n", ioread32(ioaddr + ASICCtrl));
-	iowrite16(0x007f, ioaddr + ASICCtrl + 2);
+	iowrite16(0x00ff, ioaddr + ASICCtrl + 2);
 	if (netif_msg_hw(np))
 		printk("ASIC Control is now %x.\n", ioread32(ioaddr + ASICCtrl));
 

^ permalink raw reply

* [patch 2.6.14-rc4] e1000: Driver version, white space, comments, device id & other
From: John W. Linville @ 2005-10-19  1:31 UTC (permalink / raw)
  To: linux-kernel, netdev
  Cc: jgarzik, john.ronciak, ganesh.venkatesan, mallikarjuna.chilakala

From: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>

Driver version, white space, comments, device id & other

Originally posted on 8/31 (and perhaps before)...I think it has not
been committed because the patch from that posting was damaged.  I'm
reposting to make sure it gets in... :-)

Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
Signed-off-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com>
Signed-off-by: John Ronciak <john.ronciak@intel.com>

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---

 drivers/net/e1000/e1000_main.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -43,7 +43,7 @@ char e1000_driver_string[] = "Intel(R) P
 #else
 #define DRIVERNAPI "-NAPI"
 #endif
-#define DRV_VERSION		"6.0.60-k2"DRIVERNAPI
+#define DRV_VERSION "6.1.16-k2"DRIVERNAPI
 char e1000_driver_version[] = DRV_VERSION;
 char e1000_copyright[] = "Copyright (c) 1999-2005 Intel Corporation.";
 
@@ -80,6 +80,9 @@ static struct pci_device_id e1000_pci_tb
 	INTEL_E1000_ETHERNET_DEVICE(0x1026),
 	INTEL_E1000_ETHERNET_DEVICE(0x1027),
 	INTEL_E1000_ETHERNET_DEVICE(0x1028),
+	INTEL_E1000_ETHERNET_DEVICE(0x105E),
+	INTEL_E1000_ETHERNET_DEVICE(0x105F),
+	INTEL_E1000_ETHERNET_DEVICE(0x1060),
 	INTEL_E1000_ETHERNET_DEVICE(0x1075),
 	INTEL_E1000_ETHERNET_DEVICE(0x1076),
 	INTEL_E1000_ETHERNET_DEVICE(0x1077),
@@ -88,10 +91,13 @@ static struct pci_device_id e1000_pci_tb
 	INTEL_E1000_ETHERNET_DEVICE(0x107A),
 	INTEL_E1000_ETHERNET_DEVICE(0x107B),
 	INTEL_E1000_ETHERNET_DEVICE(0x107C),
+	INTEL_E1000_ETHERNET_DEVICE(0x107D),
+	INTEL_E1000_ETHERNET_DEVICE(0x107E),
+	INTEL_E1000_ETHERNET_DEVICE(0x107F),
 	INTEL_E1000_ETHERNET_DEVICE(0x108A),
 	INTEL_E1000_ETHERNET_DEVICE(0x108B),
 	INTEL_E1000_ETHERNET_DEVICE(0x108C),
-	INTEL_E1000_ETHERNET_DEVICE(0x1099),
+	INTEL_E1000_ETHERNET_DEVICE(0x109A),
 	/* required last entry */
 	{0,}
 };
@@ -366,8 +372,7 @@ e1000_down(struct e1000_adapter *adapter
 	e1000_clean_tx_ring(adapter);
 	e1000_clean_rx_ring(adapter);
 
-	/* If WoL is not enabled
-	 * and management mode is not IAMT
+	/* If WoL is not enabled and management mode is not IAMT
 	 * Power down the PHY so no link is implied when interface is down */
 	if(!adapter->wol && adapter->hw.mac_type >= e1000_82540 &&
 	   adapter->hw.media_type == e1000_media_type_copper &&

^ permalink raw reply

* Re: [patch 2.6.14-rc4 0/3] sk98lin: neuter and prepare for removal
From: Stephen Hemminger @ 2005-10-19  1:38 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-kernel, netdev, jgarzik, mlindner, rroesler
In-Reply-To: <10182005213059.12304@bilbo.tuxdriver.com>

John W. Linville wrote:

>These patches take steps towards removing sk98lin from the upstream
>kernel.
>
>	-- Remove sk98lin's MODULE_DEVICE_TABLE to avoid
>	confusing userland tools about which driver to load;
>
>	-- Mark sk98lin as Obsolete in the MAINTAINERS file; and,
>
>	-- Add sk98lin to the feature-removal-schedule.txt file in the
>	Documentation directory.
>
>I accept the possibility that I may be jumping the gun on this.
>However, I think it is worth opening this discussion.
>
>Patches to follow...
>  
>
I applaud the initiative, but this it is too premature to obsolete the 
existing driver. There may be lots of chip versions and other variables 
that make
the existing driver a better choice.  Maybe eepro100 is a better target
for removal right now.

^ permalink raw reply

* Re: [patch 2.6.14-rc4 0/3] sk98lin: neuter and prepare for removal
From: John W. Linville @ 2005-10-19  1:41 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: linux-kernel, netdev, jgarzik, mlindner, rroesler
In-Reply-To: <4355A390.9090309@osdl.org>

On Tue, Oct 18, 2005 at 06:38:24PM -0700, Stephen Hemminger wrote:
> John W. Linville wrote:
> 
> >These patches take steps towards removing sk98lin from the upstream
> >kernel.
> >
> >	-- Remove sk98lin's MODULE_DEVICE_TABLE to avoid
> >	confusing userland tools about which driver to load;

> I applaud the initiative, but this it is too premature to obsolete the 
> existing driver. There may be lots of chip versions and other variables 
> that make
> the existing driver a better choice.  Maybe eepro100 is a better target
> for removal right now.

That's cool...but I still think the first one (removing the
MODULE_DEVICE_TABLE) is worthwhile.  At least that gets more testers
for skge.

What do you think?

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply

* Re: [patch 2.6.14-rc4] e1000: Driver version, white space, comments, device id & other
From: Jeff Garzik @ 2005-10-19  2:24 UTC (permalink / raw)
  To: John W. Linville
  Cc: linux-kernel, netdev, john.ronciak, ganesh.venkatesan,
	mallikarjuna.chilakala
In-Reply-To: <10182005213103.13099@bilbo.tuxdriver.com>

John W. Linville wrote:
> From: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
> 
> Driver version, white space, comments, device id & other
> 
> Originally posted on 8/31 (and perhaps before)...I think it has not
> been committed because the patch from that posting was damaged.  I'm
> reposting to make sure it gets in... :-)
> 
> Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
> Signed-off-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com>
> Signed-off-by: John Ronciak <john.ronciak@intel.com>
> 
> Signed-off-by: John W. Linville <linville@tuxdriver.com>

patch is ok, but doesn't apply to 'upstream' branch of netdev-2.6.git, 
which has several e1000 patches in it.

	Jeff

^ permalink raw reply

* Re: [patch 2.6.14-rc4] via-rhine: change mdelay to msleep and remove from ISR path
From: Jeff Garzik @ 2005-10-19  2:26 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-kernel, netdev, rl
In-Reply-To: <10182005213102.12948@bilbo.tuxdriver.com>

applied

^ 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