This message generated a parse failure. Raw output follows here. Please use 'back' to navigate. From devnull@lkml.org Tue Jun 4 21:22:20 2024 Received: from entropy.muc.muohio.edu (IDENT:root@entropy.muc.muohio.edu [134.53.213.10]) by herbie.ucs.indiana.edu (8.9.3/8.9.3) with ESMTP id BAA04225 for ; Tue, 20 Apr 1999 01:58:41 -0500 (EST) Received: from vger.rutgers.edu (vger.rutgers.edu [128.6.190.2]) by entropy.muc.muohio.edu (8.8.7/8.8.7) with ESMTP id CAA08763; Tue, 20 Apr 1999 02:57:07 -0400 Received: by vger.rutgers.edu via listexpand id <154484-7495>; Mon, 19 Apr 1999 23:35:06 -0400 Received: by vger.rutgers.edu id <155501-7494>; Mon, 19 Apr 1999 22:29:24 -0400 Received: from chaos.analogic.com ([204.178.40.224]:1110 "EHLO chaos.analogic.com" ident: "SOCKWRITE-65") by vger.rutgers.edu with ESMTP id <156023-7495>; Mon, 19 Apr 1999 20:16:40 -0400 Received: (from root@localhost) by chaos.analogic.com (8.9.3/8.7.3) id UAA07256; Mon, 19 Apr 1999 20:43:17 -0400 Date: Mon, 19 Apr 1999 20:43:17 -0400 (EDT) From: "Richard B. Johnson" Reply-To: root@chaos.analogic.com To: Linux kernel Subject: Intel EtherExpress 3c59x.c [patch] Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-linux-kernel@vger.rutgers.edu Precedence: bulk X-Loop: majordomo@vger.rutgers.edu X-Orcpt: rfc822;linux-kernel-outgoing-dig It is possible for two 100 mb/s SMP machines that use the built-in Intel EtherExpress network interface, to lock up when they are both `ping -f` each other. The following simple patch fixes it for me (standard disclaimer). --- linux-2.2.6/drivers/net/3c59x.c.orig Mon Apr 19 19:15:39 1999 +++ linux-2.2.6/drivers/net/3c59x.c Mon Apr 19 19:27:23 1999 @@ -500,6 +500,7 @@ static void set_rx_mode(struct device *dev); static int vortex_ioctl(struct device *dev, struct ifreq *rq, int cmd); +static spinlock_t xmit_lock; /* This driver uses 'options' to pass the media type, full-duplex flag, etc. */ /* Option count limit only -- unlimited interfaces are supported. */ @@ -1430,7 +1431,6 @@ } - static int vortex_start_xmit(struct sk_buff *skb, struct device *dev) { @@ -1525,9 +1525,7 @@ vp->tx_ring[entry].addr = cpu_to_le32(virt_to_bus(skb->data)); vp->tx_ring[entry].length = cpu_to_le32(skb->len | LAST_FRAG); vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded); - - save_flags(flags); - cli(); + spin_lock_irqsave(&xmit_lock, flags); outw(DownStall, ioaddr + EL3_CMD); /* Wait for the stall to complete. */ for (i = 600; i >= 0 ; i--) @@ -1539,7 +1537,7 @@ queued_packet++; } outw(DownUnstall, ioaddr + EL3_CMD); - restore_flags(flags); + spin_unlock_irqrestore(&xmit_lock, flags); vp->cur_tx++; if (vp->cur_tx - vp->dirty_tx > TX_RING_SIZE - 1) Cheers, Dick Johnson ***** FILE SYSTEM WAS MODIFIED ***** Penguin : Linux version 2.2.6 on an i686 machine (400.59 BogoMips). Warning : It's hard to remain at the trailing edge of technology. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/