Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 04 Jan 2001 21:09:16 +0300
From:      nms@otdel-1.org
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   kern/24073: oltr driver set work memory at wrong phase
Message-ID:  <auto-000000670465@otdel-1.org>
Resent-Message-ID: <200101041810.f04IA1T72691@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         24073
>Category:       kern
>Synopsis:       oltr driver set work memory at wrong phase
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 04 10:10:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Nikolai Saoukh
>Release:        FreeBSD 4.2-STABLE i386
>Organization:
>Environment:

	

>Description:

oltr driver set work memory at wrong intialization phase.
Actually this bug affects OC-3540 & OC-3129 cards only.

>How-To-Repeat:

	

>Fix:

--- src/sys/contrib/dev/oltr/if_oltr.c.orig	Tue Oct 10 04:47:12 2000
+++ src/sys/contrib/dev/oltr/if_oltr.c	Mon Oct 23 20:49:53 2000
@@ -289,7 +289,7 @@
 oltr_pci_attach(device_t dev)
 {
         int 			i, s, rc = 0, rid,
-				scratch_size, work_size;
+				scratch_size;
 	int			media = IFM_TOKEN|IFM_TOK_UTP16;
 	u_long 			command;
 	char 			PCIConfigHeader[64];
@@ -339,26 +339,6 @@
 		goto config_failed;
 	}
 
-	switch(sc->config.type) {
-	case TRLLD_ADAPTER_PCI4:        /* OC-3139 */
-		work_size = 32 * 1024;
-		break;
-	case TRLLD_ADAPTER_PCI7:        /* OC-3540 */
-		work_size = 256;
-		break;
-	default:
-		work_size = 0;
-	}
-
-	if (work_size) {
-		if ((sc->work_memory = malloc(work_size, M_DEVBUF, M_NOWAIT)) == NULL) {
-			device_printf(dev, "failed to allocate work memory.\n");
-		} else {
-		TRlldAddMemory(sc->TRlldAdapter, sc->work_memory,
-		    vtophys(sc->work_memory), work_size);
-		}
-	}
-
 	/*
 	 * Allocate RX/TX Pools
 	 */
@@ -545,7 +525,7 @@
 static void
 oltr_pci_attach(pcici_t config_id, int unit)
 {
-        int 			i, s, rc = 0, scratch_size, work_size;
+        int 			i, s, rc = 0, scratch_size;
 	int			media = IFM_TOKEN|IFM_TOK_UTP16;
 	u_long 			command;
 	char 			PCIConfigHeader[64];
@@ -600,26 +580,6 @@
 		goto config_failed;
 	}
 
-	switch(sc->config.type) {
-	case TRLLD_ADAPTER_PCI4:        /* OC-3139 */
-		work_size = 32 * 1024;
-		break;
-	case TRLLD_ADAPTER_PCI7:        /* OC-3540 */
-		work_size = 256;
-		break;
-	default:
-		work_size = 0;
-	}
-
-	if (work_size) {
-		if ((sc->work_memory = malloc(work_size, M_DEVBUF, M_NOWAIT)) == NULL) {
-			printf("oltr%d: failed to allocate work memory.\n", unit);
-		} else {
-		TRlldAddMemory(sc->TRlldAdapter, sc->work_memory,
-		    vtophys(sc->work_memory), work_size);
-		}
-	}
-
 	/*
 	 * Allocate RX/TX Pools
 	 */
@@ -843,6 +803,7 @@
 	struct ifnet		*ifp = &sc->arpcom.ac_if;
 	struct ifmedia		*ifm = &sc->ifmedia;
 	int			poll = 0, i, rc = 0, s;
+	int			work_size;
 
 	/*
 	 * Check adapter state, don't allow multiple inits
@@ -880,6 +841,26 @@
 	}
 	sc->state = OL_INIT;
 
+	switch(sc->config.type) {
+	case TRLLD_ADAPTER_PCI4:        /* OC-3139 */
+		work_size = 32 * 1024;
+		break;
+	case TRLLD_ADAPTER_PCI7:        /* OC-3540 */
+		work_size = 256;
+		break;
+	default:
+		work_size = 0;
+	}
+
+	if (work_size) {
+		if ((sc->work_memory = malloc(work_size, M_DEVBUF, M_NOWAIT)) == NULL) {
+			printf("oltr%d: failed to allocate work memory (%d octets).\n", sc->unit, work_size);
+		} else {
+		TRlldAddMemory(sc->TRlldAdapter, sc->work_memory,
+		    vtophys(sc->work_memory), work_size);
+		}
+	}
+
 	switch(IFM_SUBTYPE(ifm->ifm_media)) {
 	case IFM_AUTO:
 		rc = TRlldSetSpeed(sc->TRlldAdapter, 0); /* TRLLD_SPEED_AUTO */
@@ -992,7 +973,7 @@
 			(void)splx(s);
 			return;
 		default:
-			printf("oltr%d: unkown open error (%d)\n", sc->unit, rc);
+			printf("oltr%d: unknown open error (%d)\n", sc->unit, rc);
 			(void)splx(s);
 			return;
 	}

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?auto-000000670465>