diff options
author | Robert Olsson <robert.olsson@its.uu.se> | 2007-08-28 18:46:58 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:48:36 -0400 |
commit | b163911f8abf89bafb9cc0ec02a9c43af450ea81 (patch) | |
tree | 8d7ff3027f4a43373f67b59fa200cb295e6653de /net/core/pktgen.c | |
parent | 45b270f880d32252ded95865390e69deb714e080 (diff) |
[PKTGEN]: Remove softirq scheduling.
It's not a job for pktgen.
Signed-off-by: Robert Olsson <robert.olsson@its.uu.se>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/pktgen.c')
-rw-r--r-- | net/core/pktgen.c | 35 |
1 files changed, 3 insertions, 32 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 1d6f1c6270b6..84c0edeedf6d 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -167,7 +167,7 @@ | |||
167 | #include <asm/div64.h> /* do_div */ | 167 | #include <asm/div64.h> /* do_div */ |
168 | #include <asm/timex.h> | 168 | #include <asm/timex.h> |
169 | 169 | ||
170 | #define VERSION "pktgen v2.68: Packet Generator for packet performance testing.\n" | 170 | #define VERSION "pktgen v2.69: Packet Generator for packet performance testing.\n" |
171 | 171 | ||
172 | /* The buckets are exponential in 'width' */ | 172 | /* The buckets are exponential in 'width' */ |
173 | #define LAT_BUCKETS_MAX 32 | 173 | #define LAT_BUCKETS_MAX 32 |
@@ -384,7 +384,6 @@ struct pktgen_thread { | |||
384 | struct list_head th_list; | 384 | struct list_head th_list; |
385 | struct task_struct *tsk; | 385 | struct task_struct *tsk; |
386 | char result[512]; | 386 | char result[512]; |
387 | u32 max_before_softirq; /* We'll call do_softirq to prevent starvation. */ | ||
388 | 387 | ||
389 | /* Field for thread to receive "posted" events terminate, stop ifs etc. */ | 388 | /* Field for thread to receive "posted" events terminate, stop ifs etc. */ |
390 | 389 | ||
@@ -1761,9 +1760,6 @@ static int pktgen_thread_show(struct seq_file *seq, void *v) | |||
1761 | 1760 | ||
1762 | BUG_ON(!t); | 1761 | BUG_ON(!t); |
1763 | 1762 | ||
1764 | seq_printf(seq, "Name: %s max_before_softirq: %d\n", | ||
1765 | t->tsk->comm, t->max_before_softirq); | ||
1766 | |||
1767 | seq_printf(seq, "Running: "); | 1763 | seq_printf(seq, "Running: "); |
1768 | 1764 | ||
1769 | if_lock(t); | 1765 | if_lock(t); |
@@ -1796,7 +1792,6 @@ static ssize_t pktgen_thread_write(struct file *file, | |||
1796 | int i = 0, max, len, ret; | 1792 | int i = 0, max, len, ret; |
1797 | char name[40]; | 1793 | char name[40]; |
1798 | char *pg_result; | 1794 | char *pg_result; |
1799 | unsigned long value = 0; | ||
1800 | 1795 | ||
1801 | if (count < 1) { | 1796 | if (count < 1) { |
1802 | // sprintf(pg_result, "Wrong command format"); | 1797 | // sprintf(pg_result, "Wrong command format"); |
@@ -1870,12 +1865,8 @@ static ssize_t pktgen_thread_write(struct file *file, | |||
1870 | } | 1865 | } |
1871 | 1866 | ||
1872 | if (!strcmp(name, "max_before_softirq")) { | 1867 | if (!strcmp(name, "max_before_softirq")) { |
1873 | len = num_arg(&user_buffer[i], 10, &value); | 1868 | sprintf(pg_result, "OK: Note! max_before_softirq is obsoleted -- Do not use"); |
1874 | mutex_lock(&pktgen_thread_lock); | ||
1875 | t->max_before_softirq = value; | ||
1876 | mutex_unlock(&pktgen_thread_lock); | ||
1877 | ret = count; | 1869 | ret = count; |
1878 | sprintf(pg_result, "OK: max_before_softirq=%lu", value); | ||
1879 | goto out; | 1870 | goto out; |
1880 | } | 1871 | } |
1881 | 1872 | ||
@@ -2154,7 +2145,6 @@ static void spin(struct pktgen_dev *pkt_dev, __u64 spin_until_us) | |||
2154 | if (spin_until_us - now > jiffies_to_usecs(1) + 1) | 2145 | if (spin_until_us - now > jiffies_to_usecs(1) + 1) |
2155 | schedule_timeout_interruptible(1); | 2146 | schedule_timeout_interruptible(1); |
2156 | else if (spin_until_us - now > 100) { | 2147 | else if (spin_until_us - now > 100) { |
2157 | do_softirq(); | ||
2158 | if (!pkt_dev->running) | 2148 | if (!pkt_dev->running) |
2159 | return; | 2149 | return; |
2160 | if (need_resched()) | 2150 | if (need_resched()) |
@@ -3524,8 +3514,6 @@ static int pktgen_thread_worker(void *arg) | |||
3524 | struct pktgen_thread *t = arg; | 3514 | struct pktgen_thread *t = arg; |
3525 | struct pktgen_dev *pkt_dev = NULL; | 3515 | struct pktgen_dev *pkt_dev = NULL; |
3526 | int cpu = t->cpu; | 3516 | int cpu = t->cpu; |
3527 | u32 max_before_softirq; | ||
3528 | u32 tx_since_softirq = 0; | ||
3529 | 3517 | ||
3530 | BUG_ON(smp_processor_id() != cpu); | 3518 | BUG_ON(smp_processor_id() != cpu); |
3531 | 3519 | ||
@@ -3533,8 +3521,6 @@ static int pktgen_thread_worker(void *arg) | |||
3533 | 3521 | ||
3534 | pr_debug("pktgen: starting pktgen/%d: pid=%d\n", cpu, current->pid); | 3522 | pr_debug("pktgen: starting pktgen/%d: pid=%d\n", cpu, current->pid); |
3535 | 3523 | ||
3536 | max_before_softirq = t->max_before_softirq; | ||
3537 | |||
3538 | set_current_state(TASK_INTERRUPTIBLE); | 3524 | set_current_state(TASK_INTERRUPTIBLE); |
3539 | 3525 | ||
3540 | set_freezable(); | 3526 | set_freezable(); |
@@ -3553,24 +3539,9 @@ static int pktgen_thread_worker(void *arg) | |||
3553 | 3539 | ||
3554 | __set_current_state(TASK_RUNNING); | 3540 | __set_current_state(TASK_RUNNING); |
3555 | 3541 | ||
3556 | if (pkt_dev) { | 3542 | if (pkt_dev) |
3557 | |||
3558 | pktgen_xmit(pkt_dev); | 3543 | pktgen_xmit(pkt_dev); |
3559 | 3544 | ||
3560 | /* | ||
3561 | * We like to stay RUNNING but must also give | ||
3562 | * others fair share. | ||
3563 | */ | ||
3564 | |||
3565 | tx_since_softirq += pkt_dev->last_ok; | ||
3566 | |||
3567 | if (tx_since_softirq > max_before_softirq) { | ||
3568 | if (local_softirq_pending()) | ||
3569 | do_softirq(); | ||
3570 | tx_since_softirq = 0; | ||
3571 | } | ||
3572 | } | ||
3573 | |||
3574 | if (t->control & T_STOP) { | 3545 | if (t->control & T_STOP) { |
3575 | pktgen_stop(t); | 3546 | pktgen_stop(t); |
3576 | t->control &= ~(T_STOP); | 3547 | t->control &= ~(T_STOP); |