Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Jul 2010 13:04:32 GMT
From:      Alexandre Fiveg <afiveg@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 181596 for review
Message-ID:  <201007301304.o6UD4Whg071576@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@181596?ac=10

Change 181596 by afiveg@ringmap-2 on 2010/07/30 13:04:11

	The coherence problem is not solved. I will start from the begining with ixgbe.

Affected files ...

.. //depot/projects/soc2010/ringmap/current/contrib/libpcap/ringmap_pcap.c#27 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.c#12 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.h#11 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_8259.h#10 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_ixgbe.c#11 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#41 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#41 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap_kernel.h#11 edit
.. //depot/projects/soc2010/ringmap/scripts/build_ringmap.sh#22 edit
.. //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#23 edit
.. //depot/projects/soc2010/ringmap/scripts/tailf_ringmap_msgs.sh#17 edit
.. //depot/projects/soc2010/ringmap/tests/ringmap/close.c#10 edit
.. //depot/projects/soc2010/ringmap/tests/ringmap/ioctl.c#10 edit
.. //depot/projects/soc2010/ringmap/tests/ringmap/main.c#12 edit
.. //depot/projects/soc2010/ringmap/tests/ringmap/mmap.c#12 edit
.. //depot/projects/soc2010/ringmap/tests/ringmap/open.c#12 edit
.. //depot/projects/soc2010/ringmap/tests/ringmap/tests.h#10 edit

Differences ...

==== //depot/projects/soc2010/ringmap/current/contrib/libpcap/ringmap_pcap.c#27 (text+ko) ====

@@ -247,18 +247,14 @@
 		return (-2);
 	}
 
-again: 
-
+	while ( RING_IS_EMPTY(ring) ) {
 
-	if ( RING_IS_EMPTY(ring) ) {
-
 #if (__RINGMAP_DEB)
 		PRINT_RING_PTRS(ring);
 		RINGMAP_FUNC_DEBUG(Ring is empty. Sleep...);
 #endif 
 		/* Sleep and wait for new incoming packets */
 		ioctl(ringmap_cdev_fd, IOCTL_SLEEP_WAIT);
-		goto again;
 	}
 
 #if (__RINGMAP_DEB)

==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.c#12 (text+ko) ====

@@ -3474,12 +3474,16 @@
 			}
 			rxbuf->m_pack = mp;
 #endif
-			bus_dmamap_sync(rxr->ptag, rxbuf->pmap,
-			    BUS_DMASYNC_PREREAD);
 #ifndef RINGMAP
 			rxr->rx_base[i].read.pkt_addr =
 			    htole64(pseg[0].ds_addr);
 #else 
+
+			rxbuf->m_pack->m_pkthdr.len = rxbuf->m_pack->m_len = 
+				adapter->rx_mbuf_sz;
+
+			rxbuf->m_pack->m_flags |= M_PKTHDR;
+
 			bus_dmamap_load_mbuf_sg(rxr->ptag,
 			    rxbuf->pmap, rxbuf->m_pack, pseg, &nsegs, BUS_DMA_NOWAIT);
 
@@ -3490,7 +3494,13 @@
 					__func__, i, (unsigned int)rxbuf->m_pack);
 			printf("[%s] pckt phys addr [%d] : 0x%llX\n", 
 					__func__, i, rxr->rx_base[i].read.pkt_addr);
-#endif 
+
+#endif 		
+
+			bus_dmamap_sync(rxr->ptag, rxbuf->pmap,
+			    BUS_DMASYNC_PREREAD);
+
+
 #ifndef RINGMAP
 		}
 #endif 
@@ -4180,6 +4190,15 @@
 		mp = rbuf->m_pack;
 
 #ifdef RINGMAP
+		if (pmap_change_attr((vm_offset_t)mp, 
+				PAGE_SIZE, PAT_UNCACHEABLE) != 0) {
+			RINGMAP_ERROR(Can not change page attributes);
+		}
+		if (pmap_change_attr((vm_offset_t)mp->m_data, 
+				PAGE_SIZE, PAT_UNCACHEABLE) != 0) {
+			RINGMAP_ERROR(Can not change page attributes);
+		}
+
 		bus_dmamap_sync(rxr->ptag, rbuf->pmap, 
 				BUS_DMASYNC_POSTREAD);
 

==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.h#11 (text+ko) ====


==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_8259.h#10 (text+ko) ====


==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_ixgbe.c#11 (text+ko) ====

@@ -167,7 +167,6 @@
 	struct ixgbe_rx_buf	*rxbuf;
 	struct ringmap *rm = adapter->rm;;
 	struct capt_object *co = NULL;
-	char c;
 
 	RINGMAP_INTR(start);
 
@@ -207,9 +206,6 @@
 					que->rxr->rx_base[slot_num].read.pkt_addr);
 			printf("---------------------------------------------------- \n");
 #endif
-			/* touch the packet buffer */
-			c = rxbuf->m_pack->m_data[30]; 
-			rxbuf->m_pack->m_data[30] = rxbuf->m_pack->m_data[30];
 		}
 	}
 

==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#41 (text+ko) ====

@@ -503,10 +503,11 @@
 			 * come the new packets. It means, before we are going to sleep
 			 * it makes a sence to check if we really must do it :)
 			 */
-			if (RING_IS_EMPTY(co->ring)) {
+			while (RING_IS_EMPTY(co->ring)) {
 				RINGMAP_IOCTL(Sleep and wait for new packets);
 
-				err_sleep = tsleep(co->ring, (PRI_MAX_ITHD) | PCATCH, "ioctl", 0);
+				err_sleep = tsleep(co->ring, 
+						(PRI_MAX_ITHD) | PCATCH, "ioctl", 0);
 			}
 		break;
 

==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#41 (text+ko) ====

@@ -1,3 +1,5 @@
+#define RING_SAFTY_MARGIN	2
+
 /* 
  * value for number of descriptors (a.k.a. slots in the ringbuffer)
  */
@@ -213,10 +215,10 @@
 	(SW_TAIL(ringp)) = R_MODULO(SW_TAIL(ringp) + 1);
 
 #define RING_IS_EMPTY(ringp)				\
-	((SW_TAIL_TO_HEAD_DIST(ringp)) == 1)
+	((SW_TAIL_TO_HEAD_DIST(ringp)) <= RING_SAFTY_MARGIN)
 
 #define RING_NOT_EMPTY(ringp)				\
-	((SW_TAIL_TO_HEAD_DIST(ringp)) != 1)
+	((SW_TAIL_TO_HEAD_DIST(ringp)) > RING_SAFTY_MARGIN)
 
 #define RING_IS_FULL(ringp)					\
 	((SW_HEAD_TO_TAIL_DIST(ringp)) == 0)
@@ -285,7 +287,7 @@
 
 
 #define PRINT_PKT_BYTES(pktp, i)										\
-   printf("=+= [%s] SOME BYTES FROM PKT: %hhd %hhd %hhd %hhd %hhd %hhd %hhd\n", 	\
+   printf("=+= [%s] SOME BYTES FROM PKT: %hhu %hhu %hhu %hhu %hhu %hhu %hhu\n", 	\
 	   __func__, pktp[0], pktp[1], pktp[2], pktp[30], pktp[31], pktp[32], pktp[33]);
 
 #define PRINT_PACKET_ADDR(ring, i)	\

==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap_kernel.h#11 (text+ko) ====


==== //depot/projects/soc2010/ringmap/scripts/build_ringmap.sh#22 (text+ko) ====


==== //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#23 (text+ko) ====


==== //depot/projects/soc2010/ringmap/scripts/tailf_ringmap_msgs.sh#17 (text+ko) ====


==== //depot/projects/soc2010/ringmap/tests/ringmap/close.c#10 (text+ko) ====


==== //depot/projects/soc2010/ringmap/tests/ringmap/ioctl.c#10 (text+ko) ====


==== //depot/projects/soc2010/ringmap/tests/ringmap/main.c#12 (text+ko) ====


==== //depot/projects/soc2010/ringmap/tests/ringmap/mmap.c#12 (text+ko) ====


==== //depot/projects/soc2010/ringmap/tests/ringmap/open.c#12 (text+ko) ====


==== //depot/projects/soc2010/ringmap/tests/ringmap/tests.h#10 (text+ko) ====




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