Messages in this thread Patch in this message | | | From | qianjun.kernel@gmail ... | Subject | [PATCH V7 1/4] softirq: Use sched_clock() based timeout | Date | Tue, 15 Sep 2020 19:56:06 +0800 |
| |
From: jun qian <qianjun.kernel@gmail.com>
Replace the jiffies based timeout with a sched_clock() based one.
Signed-off-by: jun qian <qianjun.kernel@gmail.com> --- kernel/softirq.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/kernel/softirq.c b/kernel/softirq.c index c4201b7f..0db77ab 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -25,6 +25,7 @@ #include <linux/smpboot.h> #include <linux/tick.h> #include <linux/irq.h> +#include <linux/sched/clock.h> #define CREATE_TRACE_POINTS #include <trace/events/irq.h> @@ -210,7 +211,7 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) * we want to handle softirqs as soon as possible, but they * should not be able to lock up the box. */ -#define MAX_SOFTIRQ_TIME msecs_to_jiffies(2) +#define MAX_SOFTIRQ_TIME (2 * NSEC_PER_MSEC) #define MAX_SOFTIRQ_RESTART 10 #ifdef CONFIG_TRACE_IRQFLAGS @@ -248,7 +249,7 @@ static inline void lockdep_softirq_end(bool in_hardirq) { } asmlinkage __visible void __softirq_entry __do_softirq(void) { - unsigned long end = jiffies + MAX_SOFTIRQ_TIME; + u64 start = sched_clock(); unsigned long old_flags = current->flags; int max_restart = MAX_SOFTIRQ_RESTART; struct softirq_action *h; @@ -307,7 +308,7 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) pending = local_softirq_pending(); if (pending) { - if (time_before(jiffies, end) && !need_resched() && + if (sched_clock() - start < MAX_SOFTIRQ_TIME && !need_resched() && --max_restart) goto restart; -- 1.8.3.1
| |