Page MenuHomeFreeBSD

D28428.id83187.diff
No OneTemporary

D28428.id83187.diff

diff --git a/sys/dev/cxgb/cxgb_sge.c b/sys/dev/cxgb/cxgb_sge.c
--- a/sys/dev/cxgb/cxgb_sge.c
+++ b/sys/dev/cxgb/cxgb_sge.c
@@ -322,7 +322,8 @@
int *nbytes = &ci->nbytes;
if ((*nbytes == 0) || ((*nbytes + m->m_len <= 10500) &&
- (*count < 7) && (m->m_next == NULL))) {
+ (*count < 7) && (m->m_next == NULL) &&
+ ((mtod(m, vm_offset_t) & PAGE_MASK) + m->m_len <= PAGE_SIZE))) {
*count += 1;
*nbytes += m->m_len;
return (1);
diff --git a/sys/dev/cxgb/sys/mvec.h b/sys/dev/cxgb/sys/mvec.h
--- a/sys/dev/cxgb/sys/mvec.h
+++ b/sys/dev/cxgb/sys/mvec.h
@@ -33,20 +33,6 @@
#define _MVEC_H_
#include <machine/bus.h>
-static __inline void
-busdma_map_mbuf_fast(bus_dma_tag_t tag, bus_dmamap_t map,
- struct mbuf *m, bus_dma_segment_t *seg)
-{
-#if defined(__i386__) || defined(__amd64__)
- seg->ds_addr = pmap_kextract(mtod(m, vm_offset_t));
- seg->ds_len = m->m_len;
-#else
- int nsegstmp;
-
- bus_dmamap_load_mbuf_sg(tag, map, m, seg, &nsegstmp, 0);
-#endif
-}
-
int busdma_map_sg_collapse(bus_dma_tag_t tag, bus_dmamap_t map,
struct mbuf **m, bus_dma_segment_t *segs, int *nsegs);
void busdma_map_sg_vec(bus_dma_tag_t tag, bus_dmamap_t map,
diff --git a/sys/dev/cxgb/sys/uipc_mvec.c b/sys/dev/cxgb/sys/uipc_mvec.c
--- a/sys/dev/cxgb/sys/uipc_mvec.c
+++ b/sys/dev/cxgb/sys/uipc_mvec.c
@@ -65,26 +65,7 @@
retry:
psegs = segs;
seg_count = 0;
- if (n->m_next == NULL) {
- busdma_map_mbuf_fast(tag, map, n, segs);
- *nsegs = 1;
- return (0);
- }
-#if defined(__i386__) || defined(__amd64__)
- while (n && seg_count < TX_MAX_SEGS) {
- /*
- * firmware doesn't like empty segments
- */
- if (__predict_true(n->m_len != 0)) {
- seg_count++;
- busdma_map_mbuf_fast(tag, map, n, psegs);
- psegs++;
- }
- n = n->m_next;
- }
-#else
err = bus_dmamap_load_mbuf_sg(tag, map, *m, segs, &seg_count, 0);
-#endif
if (seg_count == 0) {
if (cxgb_debug)
printf("empty segment chain\n");
@@ -117,8 +98,9 @@
busdma_map_sg_vec(bus_dma_tag_t tag, bus_dmamap_t map,
struct mbuf *m, bus_dma_segment_t *segs, int *nsegs)
{
+ int n = 0;
- for (*nsegs = 0; m != NULL ; segs++, *nsegs += 1, m = m->m_nextpkt)
- busdma_map_mbuf_fast(tag, map, m, segs);
+ for (*nsegs = 0; m != NULL; segs += n, *nsegs += n, m = m->m_nextpkt)
+ bus_dmamap_load_mbuf_sg(tag, map, m, segs, &n, 0);
}

File Metadata

Mime Type
text/plain
Expires
Wed, Aug 26, 6:37 AM (6 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37272902
Default Alt Text
D28428.id83187.diff (2 KB)

Event Timeline