Messages in this thread |  | | Date | Mon, 09 Apr 2001 17:26:27 +0200 | | From | Manfred Spraul <> | | Subject | Re: [PATCH] Re: softirq buggy |
| |
Andrea Arcangeli wrote: > > your cpu_is_idle will return 0 in the need_resched != 0 check even if the cpu > is idle (because of the -1 trick for avoiding the SMP-IPI to notify the cpu). > Fixed.
> The issue you are addressing is quite londstanding and it is not only related > to the loop with an idle cpu. > > This is the way I prefer to fix it: > > ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/patches/v2.4/2.4.4pre1/ksoftirqd-1 > The return path to user space checks for pending softirqs. A delay of 1/HZ is only possible if the cpu loops in kernel space without returning to user space - and the functions that can loop check 'current->need_resched'. That means that either cpu_is_idle() must be renamed to schedule_required() and all 'need_resched' users should use that function, or something like your patch.
Is a full thread really necessary? Just setting 'need_resched' should be enough, schedule() checks for pending softirqs. And do you have a rough idea how often that new thread is scheduled under load?
Btw, you don't schedule the ksoftirqd thread if do_softirq() returns from the 'if(in_interrupt())' check. I assume that this is the most common case of delayed softirq processing:
; in process context spin_lock_bh(); ; hw interrupt arrives ; do_softirq returns immediately spin_unlock_bh();
-- Manfred - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |