summaryrefslogtreecommitdiffstats
path: root/sys/pci
diff options
context:
space:
mode:
authormux <mux@FreeBSD.org>2003-02-19 18:33:29 +0000
committermux <mux@FreeBSD.org>2003-02-19 18:33:29 +0000
commit1fe37e43e300d53b7f91e99c64116556ef9187cd (patch)
treebf30c9acf5698aaa1cf0a8995447c165a59f686d /sys/pci
parente06f00b3e7d6ef123428256bf21dfacc205d4077 (diff)
downloadFreeBSD-src-1fe37e43e300d53b7f91e99c64116556ef9187cd.zip
FreeBSD-src-1fe37e43e300d53b7f91e99c64116556ef9187cd.tar.gz
Fix panic on sparc64 introduced in my last commit. I really
wish the busdma APIs were more consistent accross architectures. We should probably move all the other DMA map creations in xl_attach() where we can really handle them failing, since xl_init() is void and shouldn't fail. Pointy hat to: mux Tested by: Anders Andersson <anders@hack.org>
Diffstat (limited to 'sys/pci')
-rw-r--r--sys/pci/if_xl.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/pci/if_xl.c b/sys/pci/if_xl.c
index e4c7ad6..7920792 100644
--- a/sys/pci/if_xl.c
+++ b/sys/pci/if_xl.c
@@ -1544,6 +1544,11 @@ xl_attach(dev)
goto fail_txmap;
}
+ /* We need a spare DMA map for the RX ring. */
+ error = bus_dmamap_create(sc->xl_mtag, 0, &sc->xl_tmpmap);
+ if (error)
+ return(error);
+
/*
* Figure out the card type. 3c905B adapters have the
* 'supportsNoTxLength' bit set in the capabilities
@@ -1781,6 +1786,7 @@ xl_detach(dev)
bus_release_resource(dev, SYS_RES_MEMORY,
XL_PCI_FUNCMEM, sc->xl_fres);
bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res);
+ bus_dmamap_destroy(sc->xl_mtag, sc->xl_tmpmap);
bus_dmamap_unload(sc->xl_ldata.xl_rx_tag, sc->xl_ldata.xl_rx_dmamap);
bus_dmamap_unload(sc->xl_ldata.xl_tx_tag, sc->xl_ldata.xl_tx_dmamap);
bus_dmamem_free(sc->xl_ldata.xl_rx_tag, sc->xl_ldata.xl_rx_list,
@@ -1893,10 +1899,6 @@ xl_list_rx_init(sc)
cd = &sc->xl_cdata;
ld = &sc->xl_ldata;
- error = bus_dmamap_create(sc->xl_mtag, 0, &sc->xl_tmpmap);
- if (error)
- return(error);
-
for (i = 0; i < XL_RX_LIST_CNT; i++) {
cd->xl_rx_chain[i].xl_ptr = &ld->xl_rx_list[i];
error = bus_dmamap_create(sc->xl_mtag, 0,
@@ -3201,7 +3203,6 @@ xl_stop(sc)
sc->xl_cdata.xl_rx_chain[i].xl_mbuf = NULL;
}
}
- bus_dmamap_destroy(sc->xl_mtag, sc->xl_tmpmap);
bzero(sc->xl_ldata.xl_rx_list, XL_RX_LIST_SZ);
/*
* Free the TX list buffers.
OpenPOWER on IntegriCloud