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>
