PERFORCE change 180344 for review
Alexandre Fiveg
afiveg at FreeBSD.org
Wed Jun 30 16:02:27 UTC 2010
http://p4web.freebsd.org/@@180344?ac=10
Change 180344 by afiveg at cottonmouth on 2010/06/30 16:02:23
setting taskqueue_run() in order to wait for delayed tasks in the taskqueue. I am not sure it is a best solution :(
Affected files ...
.. //depot/projects/soc2010/ringmap/current/contrib/libpcap/ringmap_pcap.c#9 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.c#17 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#15 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.c#16 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.h#14 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#20 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#20 edit
.. //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#5 edit
Differences ...
==== //depot/projects/soc2010/ringmap/current/contrib/libpcap/ringmap_pcap.c#9 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.c#17 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#15 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.c#16 (text+ko) ====
@@ -2,6 +2,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/conf.h>
+#include <sys/queue.h>
#include <sys/taskqueue.h>
#include <machine/bus.h>
@@ -52,12 +53,15 @@
/* Disable interrupts of adapter */
rm_8254_disable_intr(dev);
- /* Check whether we have some tasks in queue */
- taskqueue_drain(adapter->tq, &adapter->rxtx_task);
+ /*
+ * Check whether we have some tasks in the queue. It should be done
+ * because we want to free the memory regions that could be accessed
+ * from the delayed interrupt tasks
+ */
+ taskqueue_run(adapter->tq);
if (ring != NULL){
contigfree(ring, sizeof(struct ring), M_DEVBUF);
- ring = NULL;
} else {
RINGMAP_ERROR(The pointer to ring structure is NULL);
}
@@ -94,7 +98,7 @@
* Before continue look whether any delayed interrupt tasks are
* in the taskqueue.
*/
- taskqueue_drain(adapter->tq, &adapter->rxtx_task);
+ taskqueue_run(adapter->tq);
/* Set ring fields in the initial state */
ring->kern_wait_user = 0;
@@ -155,7 +159,9 @@
struct adapter *adapter;
adapter = (struct adapter *)device_get_softc(dev);
- RINGMAP_HW_SYNC_TAIL(adapter, ring); /* SW_TAIL ==> HW_TAIL */
+ if (ring != NULL) {
+ RINGMAP_HW_SYNC_TAIL(adapter, ring); /* SW_TAIL ==> HW_TAIL */
+ }
}
@@ -165,7 +171,9 @@
struct adapter *adapter;
adapter = (struct adapter *)device_get_softc(dev);
- RINGMAP_HW_SYNC_HEAD(adapter, ring); /* SW_TAIL ==> HW_HEAD */
+ if (ring != NULL) {
+ RINGMAP_HW_SYNC_HEAD(adapter, ring); /* SW_TAIL ==> HW_HEAD */
+ }
}
@@ -180,9 +188,6 @@
/* count interrupts */
adapter->rm->ring->interrupts_counter++;
-#if (RINGMAP_INTR_DEB)
- rm_8254_print_ring_pointers(adapter);
-#endif
}
@@ -198,11 +203,16 @@
* TODO: we want multithreading, it means we should later
* sync not one ring but many rings, each per thread
*/
- rm_8254_sync_tail(adapter->dev, adapter->rm->ring);
+
+ if (adapter->rm != NULL) {
+ rm_8254_sync_tail(adapter->dev, adapter->rm->ring);
+ }
#ifdef RINGMAP_TIMESTAMP
- getmicrotime(&adapter->rm->ring->last_ts);
+ if (adapter->rm->ring != NULL) {
+ getmicrotime(&adapter->rm->ring->last_ts);
+ }
#endif
RINGMAP_INTR(end);
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.h#14 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#20 (text+ko) ====
@@ -326,6 +326,7 @@
if (rm->ring != NULL){
rm->funcs->free_ring(rm->dev, rm->ring);
+ rm->ring = NULL;
}
RINGMAP_FUNC_DEBUG(end);
==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#20 (text+ko) ====
@@ -442,7 +442,7 @@
#define PRINT_SLOT(ring, i, arg) \
if (((ring) != NULL) && ((arg) != NULL) && ((i) < SLOTS_NUMBER)){ \
printf("\n=+= =============================\n"); \
- printf("=+= Kernel slot: %d \n", (ring)->cur_slot_kern); \
+ printf("=+= Slot Number: %d \n", (i)); \
printf("=+= Intrr num: %llu\n", (ring)->slot[(i)].intr_num); \
printf("=+= Time stamp: %llu\n", (unsigned long long)(((ring)->slot[(i)].ts.tv_sec*1000000 + (ring)->slot[(i)].ts.tv_usec))); \
printf("=+= Accepted: %d\n", (ring)->slot[(i)].is_ok); \
==== //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#5 (text+ko) ====
More information about the p4-projects
mailing list