Date: Sat, 3 Jul 2010 05:59:06 GMT From: Alexandre Fiveg <afiveg@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 180425 for review Message-ID: <201007030559.o635x6n3055511@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@180425?ac=10 Change 180425 by afiveg@cottonmouth on 2010/07/03 05:58:58 Multithreading done! ringmap works in -current corectly! Proofed with tcpdump Affected files ... .. //depot/projects/soc2010/ringmap/current/contrib/libpcap/pcap-bpf.c#6 edit .. //depot/projects/soc2010/ringmap/current/contrib/libpcap/pcap-int.h#6 edit .. //depot/projects/soc2010/ringmap/current/contrib/libpcap/pcap.c#8 edit .. //depot/projects/soc2010/ringmap/current/contrib/libpcap/ringmap_pcap.c#13 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82540.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82542.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.h#7 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_defines.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_hw.h#9 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.c#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_regs.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.c#10 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.h#8 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.c#8 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.h#6 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.c#21 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#19 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.c#20 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.h#18 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_e1000.h#10 edit .. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#24 edit .. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#24 edit .. //depot/projects/soc2010/ringmap/scripts/build_ringmap.sh#8 edit .. //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#9 edit .. //depot/projects/soc2010/ringmap/scripts/tailf_ringmap_msgs.sh#4 edit Differences ... ==== //depot/projects/soc2010/ringmap/current/contrib/libpcap/pcap-bpf.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/contrib/libpcap/pcap-int.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/contrib/libpcap/pcap.c#8 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/contrib/libpcap/ringmap_pcap.c#13 (text+ko) ==== @@ -382,7 +382,6 @@ out: SW_INCR_TAIL(ring); - ring->slot[curr_slot].is_ok = 0; ring->slot[curr_slot].filtered = 0; } ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82540.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82542.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.h#7 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_defines.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_hw.h#9 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.c#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_regs.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.c#10 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.h#8 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.c#8 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.h#6 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.c#21 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#19 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.c#20 (text+ko) ==== @@ -32,6 +32,7 @@ void rm_8254_sync_tail(device_t, struct ring *); void rm_8254_sync_head(device_t); void rm_8254_delayed_interrupt_per_packet(device_t, int); +struct ring * rm_8254_find_next(struct adapter *); struct ring *rm_8254_alloc_ring(device_t); extern devclass_t em_devclass; @@ -110,7 +111,7 @@ struct adapter *adapter = (struct adapter *)context; struct capt_instance *ci = NULL; -// RINGMAP_INTR(start); + RINGMAP_INTR(start); RINGMAP_LOCK(adapter->rm); @@ -120,7 +121,7 @@ #endif if (ci->ring != NULL) { /* TODO: find the next ring */ - rm_8254_sync_tail(adapter->dev, ci->ring); + rm_8254_sync_tail(adapter->dev, rm_8254_find_next(adapter)); #ifdef RINGMAP_TIMESTAMP getmicrotime(&ci->ring->last_ts); #endif @@ -129,9 +130,29 @@ RINGMAP_UNLOCK(adapter->rm); -// RINGMAP_INTR(end); + RINGMAP_INTR(end); } +struct ring * +rm_8254_find_next(struct adapter *adapter) +{ + unsigned int rdh, rdt, dist, min_dist = SLOTS_NUMBER; + struct ringmap *rm = adapter->rm; + struct capt_instance *ci = NULL, *min_ci = NULL; + + rdh = RINGMAP_HW_READ_HEAD(adapter); + + SLIST_FOREACH(ci, &rm->instance_list, next_instance) { + rdt = ci->ring->userrp; + dist = R_DISTANCE(rdh, rdt); + if (dist <= min_dist) { + dist = min_dist; + min_ci = ci; + } + } + + return (min_ci->ring); +} void rm_8254_delayed_interrupt_per_packet(device_t dev, int slot_num) ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.h#18 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_e1000.h#10 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#24 (text+ko) ==== @@ -350,28 +350,19 @@ devfs_get_cdevpriv((void **)&ci); #ifdef __RINGMAP_DEB - printf("[%s] currthread->proc->pid: %d \n", __func__, curthread->td_proc->p_pid); printf("[%s] ci->td->proc->pid: %d\n", __func__, ci->td->td_proc->p_pid); - printf("[%s] Ring Kernel Addr:0x%X\n", __func__, (unsigned int)ci->ring); #endif -// if (ci->ring != NULL) -// contigfree(ci->ring, sizeof(struct ring), M_DEVBUF); -// ci->ring = NULL; -// -// /* Remove the capturing instance from list */ -// SLIST_REMOVE(&rm->instance_list, ci, capt_instance, next_instance); -// FREE(ci, M_DEVBUF); -// ci = NULL; -// rm->open_cnt--; + + rm->open_cnt--; +#ifdef __RINGMAP_DEB SLIST_FOREACH(ki, &rm->instance_list, next_instance) { -#ifdef __RINGMAP_DEB printf("[%s] Aufter dealocation: ", __func__); printf("[%s] ki->td->proc->pid: %d\n", __func__, ki->td->td_proc->p_pid); printf("[%s] Ring Kernel Addr:0x%X\n", __func__, (unsigned int)ki->ring); + } #endif - } RINGMAP_UNLOCK(rm); @@ -433,7 +424,7 @@ struct ringmap *ringmap = NULL; struct capt_instance *ci; -// RINGMAP_IOCTL(start); + RINGMAP_IOCTL(start); ringmap = get_ringmap_p(get_device_p(cdev)); if ( ringmap == NULL ){ @@ -464,7 +455,7 @@ /* Sleep and wait for new packets */ case IOCTL_SLEEP_WAIT: -// RINGMAP_IOCTL(Sleep and wait for new packets); + RINGMAP_IOCTL(Sleep and wait for new packets); ci->ring->user_wait_kern++; ringmap->funcs->sync_head_tail(ringmap->dev, ci->ring); @@ -493,7 +484,7 @@ return (ENODEV); } -// RINGMAP_IOCTL(end); + RINGMAP_IOCTL(end); return (err); } ==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#24 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/scripts/build_ringmap.sh#8 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#9 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/scripts/tailf_ringmap_msgs.sh#4 (text+ko) ====
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007030559.o635x6n3055511>