Commit 6c7baa52 authored by Robert Olsson's avatar Robert Olsson Committed by Linus Torvalds

[PKTGEN]: Bug fixes, bump to version 2.56.

- Fix printing of running list, do not stop at first
  not-running device, instead scan them all.
- Do not free SKB before final access via show_results()
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5ff974d9
...@@ -148,7 +148,7 @@ ...@@ -148,7 +148,7 @@
#include <asm/timex.h> #include <asm/timex.h>
#define VERSION "pktgen v2.54: Packet Generator for packet performance testing.\n" #define VERSION "pktgen v2.56: Packet Generator for packet performance testing.\n"
/* #define PG_DEBUG(a) a */ /* #define PG_DEBUG(a) a */
#define PG_DEBUG(a) #define PG_DEBUG(a)
...@@ -167,9 +167,6 @@ ...@@ -167,9 +167,6 @@
#define F_TXSIZE_RND (1<<6) /* Transmit size is random */ #define F_TXSIZE_RND (1<<6) /* Transmit size is random */
#define F_IPV6 (1<<7) /* Interface in IPV6 Mode */ #define F_IPV6 (1<<7) /* Interface in IPV6 Mode */
#define L_PUSH(t, i) {i->next = t; t=i;}
#define L_POP(t, i) {i=t; if(i) t = i->next;}
/* Thread control flag bits */ /* Thread control flag bits */
#define T_TERMINATE (1<<0) #define T_TERMINATE (1<<0)
#define T_STOP (1<<1) /* Stop run */ #define T_STOP (1<<1) /* Stop run */
...@@ -1366,19 +1363,15 @@ static int proc_thread_read(char *buf , char **start, off_t offset, ...@@ -1366,19 +1363,15 @@ static int proc_thread_read(char *buf , char **start, off_t offset,
p += sprintf(p, "Running: "); p += sprintf(p, "Running: ");
if_lock(t); if_lock(t);
pkt_dev = t->if_list; for(pkt_dev = t->if_list;pkt_dev; pkt_dev = pkt_dev->next)
while (pkt_dev && pkt_dev->running) { if(pkt_dev->running)
p += sprintf(p, "%s ", pkt_dev->ifname); p += sprintf(p, "%s ", pkt_dev->ifname);
pkt_dev = pkt_dev->next;
}
p += sprintf(p, "\nStopped: "); p += sprintf(p, "\nStopped: ");
pkt_dev = t->if_list; for(pkt_dev = t->if_list;pkt_dev; pkt_dev = pkt_dev->next)
while (pkt_dev && !pkt_dev->running) { if(!pkt_dev->running)
p += sprintf(p, "%s ", pkt_dev->ifname); p += sprintf(p, "%s ", pkt_dev->ifname);
pkt_dev = pkt_dev->next;
}
if (t->result[0]) if (t->result[0])
p += sprintf(p, "\nResult: %s\n", t->result); p += sprintf(p, "\nResult: %s\n", t->result);
...@@ -2393,7 +2386,7 @@ static void pktgen_stop_all_threads_ifs(void) ...@@ -2393,7 +2386,7 @@ static void pktgen_stop_all_threads_ifs(void)
thread_unlock(); thread_unlock();
} }
static int running(struct pktgen_thread *t ) static int thread_is_running(struct pktgen_thread *t )
{ {
struct pktgen_dev *next; struct pktgen_dev *next;
int res = 0; int res = 0;
...@@ -2415,7 +2408,7 @@ static int pktgen_wait_thread_run(struct pktgen_thread *t ) ...@@ -2415,7 +2408,7 @@ static int pktgen_wait_thread_run(struct pktgen_thread *t )
if_lock(t); if_lock(t);
while(running(t)) { while(thread_is_running(t)) {
if_unlock(t); if_unlock(t);
interruptible_sleep_on_timeout(&queue, HZ/10); interruptible_sleep_on_timeout(&queue, HZ/10);
...@@ -2520,14 +2513,16 @@ static int pktgen_stop_device(struct pktgen_dev *pkt_dev) ...@@ -2520,14 +2513,16 @@ static int pktgen_stop_device(struct pktgen_dev *pkt_dev)
return -EINVAL; return -EINVAL;
} }
if (pkt_dev->skb)
kfree_skb(pkt_dev->skb);
pkt_dev->stopped_at = getCurUs(); pkt_dev->stopped_at = getCurUs();
pkt_dev->running = 0; pkt_dev->running = 0;
show_results(pkt_dev, skb_shinfo(pkt_dev->skb)->nr_frags); show_results(pkt_dev, skb_shinfo(pkt_dev->skb)->nr_frags);
if (pkt_dev->skb)
kfree_skb(pkt_dev->skb);
pkt_dev->skb = NULL;
return 0; return 0;
} }
...@@ -2860,10 +2855,10 @@ static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread *t, const char* i ...@@ -2860,10 +2855,10 @@ static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread *t, const char* i
for(pkt_dev=t->if_list; pkt_dev; pkt_dev = pkt_dev->next ) { for(pkt_dev=t->if_list; pkt_dev; pkt_dev = pkt_dev->next ) {
if (strcmp(pkt_dev->ifname, ifname) == 0) { if (strcmp(pkt_dev->ifname, ifname) == 0) {
goto out; break;
} }
} }
out:
if_unlock(t); if_unlock(t);
PG_DEBUG(printk("pktgen: find_dev(%s) returning %p\n", ifname,pkt_dev)); PG_DEBUG(printk("pktgen: find_dev(%s) returning %p\n", ifname,pkt_dev));
return pkt_dev; return pkt_dev;
...@@ -2884,8 +2879,7 @@ static int add_dev_to_thread(struct pktgen_thread *t, struct pktgen_dev *pkt_dev ...@@ -2884,8 +2879,7 @@ static int add_dev_to_thread(struct pktgen_thread *t, struct pktgen_dev *pkt_dev
rv = -EBUSY; rv = -EBUSY;
goto out; goto out;
} }
pkt_dev->next =t->if_list; t->if_list=pkt_dev;
L_PUSH(t->if_list, pkt_dev);
pkt_dev->pg_thread = t; pkt_dev->pg_thread = t;
pkt_dev->running = 0; pkt_dev->running = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment