diff options
| author | Marcin Wojtas <mw@FreeBSD.org> | 2017-11-09 13:36:42 +0000 |
|---|---|---|
| committer | Marcin Wojtas <mw@FreeBSD.org> | 2017-11-09 13:36:42 +0000 |
| commit | 4727bda6f2e975a24ba6ec7a7a77cf73bf169edb (patch) | |
| tree | e8a2b872e4cad728f8523439a5141eb339d4126e /sys/dev/ena | |
| parent | 3cfadb28c3f6f21cb937f7331bfa066c0edda29c (diff) | |
Notes
Diffstat (limited to 'sys/dev/ena')
| -rw-r--r-- | sys/dev/ena/ena.c | 18 | ||||
| -rw-r--r-- | sys/dev/ena/ena.h | 1 | ||||
| -rw-r--r-- | sys/dev/ena/ena_sysctl.c | 3 |
3 files changed, 17 insertions, 5 deletions
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c index 172557a2e879c..049ebcb334bcf 100644 --- a/sys/dev/ena/ena.c +++ b/sys/dev/ena/ena.c @@ -549,7 +549,7 @@ ena_setup_rx_dma_tag(struct ena_adapter *adapter) BUS_SPACE_MAXADDR, /* highaddr of excl window */ NULL, NULL, /* filter, filterarg */ MJUM16BYTES, /* maxsize */ - 1, /* nsegments */ + adapter->max_rx_sgl_size, /* nsegments */ MJUM16BYTES, /* maxsegsize */ 0, /* flags */ NULL, /* lockfunc */ @@ -950,6 +950,7 @@ ena_alloc_rx_mbuf(struct ena_adapter *adapter, struct ena_com_buf *ena_buf; bus_dma_segment_t segs[1]; int nsegs, error; + int mlen; /* if previous allocated frag is not used */ if (unlikely(rx_info->mbuf != NULL)) @@ -959,11 +960,18 @@ ena_alloc_rx_mbuf(struct ena_adapter *adapter, rx_info->mbuf = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, MJUM16BYTES); if (unlikely(rx_info->mbuf == NULL)) { - counter_u64_add(rx_ring->rx_stats.mbuf_alloc_fail, 1); - return (ENOMEM); + counter_u64_add(rx_ring->rx_stats.mjum_alloc_fail, 1); + rx_info->mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); + if (unlikely(rx_info->mbuf == NULL)) { + counter_u64_add(rx_ring->rx_stats.mbuf_alloc_fail, 1); + return (ENOMEM); + } + mlen = MCLBYTES; + } else { + mlen = MJUM16BYTES; } /* Set mbuf length*/ - rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = MJUM16BYTES; + rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = mlen; /* Map packets for DMA */ ena_trace(ENA_DBG | ENA_RSC | ENA_RXPTH, @@ -983,7 +991,7 @@ ena_alloc_rx_mbuf(struct ena_adapter *adapter, ena_buf = &rx_info->ena_buf; ena_buf->paddr = segs[0].ds_addr; - ena_buf->len = MJUM16BYTES; + ena_buf->len = mlen; ena_trace(ENA_DBG | ENA_RSC | ENA_RXPTH, "ALLOC RX BUF: mbuf %p, rx_info %p, len %d, paddr %#jx\n", diff --git a/sys/dev/ena/ena.h b/sys/dev/ena/ena.h index da0213401ad38..e2ef456e7b3e3 100644 --- a/sys/dev/ena/ena.h +++ b/sys/dev/ena/ena.h @@ -215,6 +215,7 @@ struct ena_stats_rx { counter_u64_t bytes; counter_u64_t refil_partial; counter_u64_t bad_csum; + counter_u64_t mjum_alloc_fail; counter_u64_t mbuf_alloc_fail; counter_u64_t dma_mapping_err; counter_u64_t bad_desc_num; diff --git a/sys/dev/ena/ena_sysctl.c b/sys/dev/ena/ena_sysctl.c index ac0de69168103..81331a79ecf5b 100644 --- a/sys/dev/ena/ena_sysctl.c +++ b/sys/dev/ena/ena_sysctl.c @@ -200,6 +200,9 @@ ena_sysctl_add_stats(struct ena_adapter *adapter) "mbuf_alloc_fail", CTLFLAG_RD, &rx_stats->mbuf_alloc_fail, "Failed mbuf allocs"); SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, + "mjum_alloc_fail", CTLFLAG_RD, + &rx_stats->mjum_alloc_fail, "Failed jumbo mbuf allocs"); + SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, "dma_mapping_err", CTLFLAG_RD, &rx_stats->dma_mapping_err, "DMA mapping errors"); SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, |
