Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Apr 2008 00:43:53 +0300
From:      quad <agile.quad@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   [bfe] [panic] Serious error: bfe failed to map RX buffer
Message-ID:  <1733112647.20080417004353@gmail.com>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
Hi,

   FreeBSD amd64 7.0-RELEASE, ULE, SMP.

   On heavy loads bfe network driver after few messages

   Serious error: bfe failed to map RX buffer
   Serious error: bfe failed to map RX buffer
   Serious error: bfe failed to map RX buffer
   ...
   
   make kernel panic.

   Here patch.

-- 
Best regards,
 Oleg Dolgov                          mailto:agile.quad@gmail.com
[-- Attachment #2 --]
--- if_bfe_orig.c	2008-04-17 00:26:43.559375000 +0300
+++ if_bfe.c	2008-04-17 00:33:03.121875000 +0300
@@ -648,10 +648,12 @@
 	struct bfe_data *r;
 	u_int32_t ctrl;
 	int error;
+	int allocated;
 
 	if ((c < 0) || (c >= BFE_RX_LIST_CNT))
 		return (EINVAL);
 
+	allocated = (m == NULL);
 	if(m == NULL) {
 		m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
 		if(m == NULL)
@@ -671,8 +673,11 @@
 	r = &sc->bfe_rx_ring[c];
 	error = bus_dmamap_load(sc->bfe_tag, r->bfe_map, mtod(m, void *),
 			MCLBYTES, bfe_dma_map_desc, d, BUS_DMA_NOWAIT);
-	if (error)
-		printf("Serious error: bfe failed to map RX buffer\n");
+	if (error) {
+		if (allocated)
+			m_free(m);
+		return (error);
+	}
 	bus_dmamap_sync(sc->bfe_tag, r->bfe_map, BUS_DMASYNC_PREWRITE);
 
 	ctrl = ETHER_MAX_LEN + 32;

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1733112647.20080417004353>