Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [PATCH V7 4/4] softirq: Allow early break the softirq processing loop | Date | Sat, 26 Sep 2020 00:37:37 +0200 |
| |
On Fri, Sep 25 2020 at 01:08, Frederic Weisbecker wrote:
> On Thu, Sep 24, 2020 at 05:37:42PM +0200, Thomas Gleixner wrote: >> Subject: softirq; Prevent starvation of higher softirq vectors >> From: Thomas Gleixner <tglx@linutronix.de> >> Date: Thu, 24 Sep 2020 10:40:24 +0200 >> >> From: Thomas Gleixner <tglx@linutronix.de> >> >> The early termination of the softirq processing loop can lead to starvation >> of the higher numbered soft interrupt vectors because each run starts at >> the lowest bit. If the loop terminates then the already processed bits can >> be raised again before the next loop starts. If these lower bits run into >> the termination again, then a re-raise might starve the higher bits forever. >> >> To prevent this, store the leftovers of the previous run in the upper 16 >> bit of the local softirq_pending storage and ensure that these are >> processed before any newly raised bits are handled. >> >> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> >> --- >> kernel/softirq.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++-------- >> 1 file changed, 50 insertions(+), 8 deletions(-) >> >> --- a/kernel/softirq.c >> +++ b/kernel/softirq.c >> @@ -259,11 +259,23 @@ static inline bool __softirq_needs_break >> return need_resched() || __softirq_timeout(tbreak); >> } >> >> +/* >> + * local_softirq_pending() is split into two 16 bit words. The low word >> + * contains the bits set by raise_softirq(), the high word contains pending >> + * bits which have not been processed in an early terminated run. This is >> + * required to prevent starvation of the higher numbered softirqs. >> + */ >> +#define SIRQ_PREV_SHIFT 16 > > Note that in the case of x86, irq_start.__softirq_pending is a u16. > > The origin is there: 9aee5f8a7e30330d0a8f4c626dc924ca5590aba5 > "x86/irq: Demote irq_cpustat_t::__softirq_pending to u16"
Bah, crap. I knew I that and wanted to fix it up but then forgot.
Thanks for reminding me of my slowly upcoming alzheimer!
| |