Date: Tue, 26 Mar 2002 10:32:09 -0500 From: Andrew Heybey <ath@niksun.com> To: freebsd-stable@freebsd.org Subject: if_le crashes 4.5-RELEASE kernel: PR 25650 and PR 18641 [PATCH] Message-ID: <200203261532.g2QFW9O02203@celis.niksun.com>
next in thread | raw e-mail | index | archive | help
When you ifconfig an "le" NIC card with an address, it makes
4.5-RELEASE crash. This problem is discussed in PRs 25650 and PR
18641, though PR 25650 is marked as "closed: fixed".
Presumably, it would also panic a -CURRENT kernel though I do not
currently run CURRENT.
I have fixed the problem (at least it works for me) using the included
patch (against RELENG_4_5_0_RELEASE src/sys/i386/isa/if_le.c). I
followed-up PR 18641 with the patch, and PR 25650 with a pointer to
18641.
I know this hardware is ancient, but there is no particular reason to
have it not work. I have tested the patch with:
le0 at port 0x300-0x31f iomem 0xd0000-0xd07ff irq 5 on isa0
le0: DE205-AC ethernet address 08:00:2b:9f:39:d4
andrew
Index: if_le.c
===================================================================
RCS file: /usr/local/repos/fbsdcvs/src/sys/i386/isa/if_le.c,v
retrieving revision 1.56.2.3
diff -u -u -r1.56.2.3 if_le.c
--- if_le.c 2001/11/02 17:48:00 1.56.2.3
+++ if_le.c 2002/03/26 15:29:44
@@ -191,7 +191,6 @@
*/
struct le_softc {
struct arpcom le_ac; /* Common Ethernet/ARP Structure */
- void (*if_init) __P((le_softc_t *));/* Interface init routine */
void (*if_reset) __P((le_softc_t *));/* Interface reset routine */
caddr_t le_membase; /* Starting memory address (virtual) */
unsigned le_iobase; /* Starting I/O base address */
@@ -336,19 +335,23 @@
struct ifnet *ifp = &sc->le_if;
dvp->id_ointr = le_intr;
- ifp->if_softc = sc;
- ifp->if_mtu = ETHERMTU;
+
printf("%s%d: %s ethernet address %6D\n",
ifp->if_name, ifp->if_unit,
sc->le_prodname,
sc->le_ac.ac_enaddr, ":");
+ ifp->if_softc = sc;
+ ifp->if_mtu = ETHERMTU;
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+ ifp->if_timer = 0;
ifp->if_output = ether_output;
ifp->if_ioctl = le_ioctl;
+ ifp->if_watchdog = 0;
ifp->if_type = IFT_ETHER;
- ifp->if_addrlen = 6;
- ifp->if_hdrlen = 14;
+ ifp->if_addrlen = ETHER_ADDR_LEN;
+ ifp->if_hdrlen = ETHER_HDR_LEN;
+ ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
ether_ifattach(ifp, ETHER_BPF_SUPPORTED);
@@ -446,7 +449,7 @@
break;
case SIOCSIFFLAGS: {
- sc->if_init(sc);
+ sc->le_if.if_init(sc);
break;
}
@@ -455,7 +458,7 @@
/*
* Update multicast listeners
*/
- sc->if_init(sc);
+ sc->le_if.if_init(sc);
error = 0;
break;
@@ -613,7 +616,7 @@
#define LEMAC_32K_MODE(mbase) (((mbase) >= 0x14) && ((mbase) <= 0x1F))
#define LEMAC_2K_MODE(mbase) ( (mbase) >= 0x40)
-static void lemac_init(le_softc_t *sc);
+static void lemac_init(void *xsc);
static void lemac_start(struct ifnet *ifp);
static void lemac_reset(le_softc_t *sc);
static void lemac_intr(le_softc_t *sc);
@@ -688,7 +691,7 @@
/*
* Try to reset the unit
*/
- sc->if_init = lemac_init;
+ sc->le_if.if_init = lemac_init;
sc->le_if.if_start = lemac_start;
sc->if_reset = lemac_reset;
sc->lemac_memmode = 2;
@@ -778,8 +781,9 @@
static void
lemac_init(
- le_softc_t *sc)
+ void *xsc)
{
+ le_softc_t *sc = (le_softc_t *)xsc;
int s;
if ((sc->le_flags & IFF_UP) == 0)
@@ -1138,7 +1142,7 @@
static int lance_init_ring(le_softc_t *sc, ln_ring_t *rp, lance_ring_t *ri,
unsigned ndescs, unsigned bufoffset,
unsigned descoffset);
-static void lance_init(le_softc_t *sc);
+static void lance_init(void *xsc);
static void lance_reset(le_softc_t *sc);
static void lance_intr(le_softc_t *sc);
static int lance_rx_intr(le_softc_t *sc);
@@ -1360,7 +1364,7 @@
return 0;
sc->if_reset = lance_reset;
- sc->if_init = lance_init;
+ sc->le_if.if_init = lance_init;
sc->le_if.if_start = lance_start;
DEPCA_WRNICSR(sc, DEPCA_NICSR_SHE | DEPCA_NICSR_ENABINTR);
sc->if_reset(sc);
@@ -1580,8 +1584,9 @@
static void
lance_init(
- le_softc_t *sc)
+ void *xsc)
{
+ le_softc_t *sc = (le_softc_t *)xsc;
lance_ring_t *ri;
lance_descinfo_t *di;
ln_desc_t desc;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203261532.g2QFW9O02203>
