mirror of
https://github.com/openbsd/src.git
synced 2026-06-18 15:23:33 +02:00
Pre-allocate the bus dma maps for the rxbufs to avoid calling
bus_dmamap_create(9) from interrupt context. ok mglocker@
This commit is contained in:
+8
-8
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: qwz.c,v 1.31 2026/05/19 09:29:08 kirill Exp $ */
|
||||
/* $OpenBSD: qwz.c,v 1.32 2026/05/19 20:32:59 kettenis Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2023 Stefan Sperling <stsp@openbsd.org>
|
||||
@@ -8392,6 +8392,8 @@ qwz_dp_cc_desc_init(struct qwz_softc *sc)
|
||||
struct ath12k_tx_desc_info *tx_descs, **tx_desc_addr;
|
||||
uint32_t i, j, pool_id, tx_spt_page;
|
||||
uint32_t ppt_idx;
|
||||
const bus_size_t size = DP_RX_BUFFER_SIZE;
|
||||
int ret;
|
||||
|
||||
#ifdef notyet
|
||||
spin_lock_bh(&dp->rx_desc_lock);
|
||||
@@ -8418,6 +8420,11 @@ qwz_dp_cc_desc_init(struct qwz_softc *sc)
|
||||
TAILQ_INSERT_TAIL(&dp->rx_desc_free_list,
|
||||
&rx_descs[j], entry);
|
||||
|
||||
ret = bus_dmamap_create(sc->sc_dmat, size, 1, size,
|
||||
0, BUS_DMA_WAITOK, &rx_descs[j].map);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Update descriptor VA in SPT */
|
||||
rx_desc_addr = ath12k_dp_cc_get_desc_addr_ptr(sc, ppt_idx, j);
|
||||
*rx_desc_addr = &rx_descs[j];
|
||||
@@ -13387,13 +13394,6 @@ qwz_dp_rxbufs_replenish(struct qwz_softc *sc,
|
||||
if (rx_desc == NULL)
|
||||
goto fail_free_mbuf;
|
||||
|
||||
if (rx_desc->map == NULL) {
|
||||
ret = bus_dmamap_create(sc->sc_dmat, size, 1,
|
||||
size, 0, BUS_DMA_NOWAIT, &rx_desc->map);
|
||||
if (ret)
|
||||
goto fail_free_mbuf;
|
||||
}
|
||||
|
||||
ret = bus_dmamap_load_mbuf(sc->sc_dmat, rx_desc->map, m,
|
||||
BUS_DMA_READ | BUS_DMA_NOWAIT);
|
||||
if (ret) {
|
||||
|
||||
Reference in New Issue
Block a user