• A
    hrtimer: Implement support for softirq based hrtimers · 5da70160
    Anna-Maria Gleixner 提交于
    hrtimer callbacks are always invoked in hard interrupt context. Several
    users in tree require soft interrupt context for their callbacks and
    achieve this by combining a hrtimer with a tasklet. The hrtimer schedules
    the tasklet in hard interrupt context and the tasklet callback gets invoked
    in softirq context later.
    
    That's suboptimal and aside of that the real-time patch moves most of the
    hrtimers into softirq context. So adding native support for hrtimers
    expiring in softirq context is a valuable extension for both mainline and
    the RT patch set.
    
    Each valid hrtimer clock id has two associated hrtimer clock bases: one for
    timers expiring in hardirq context and one for timers expiring in softirq
    context.
    
    Implement the functionality to associate a hrtimer with the hard or softirq
    related clock bases and update the relevant functions to take them into
    account when the next expiry time needs to be evaluated.
    
    Add a check into the hard interrupt context handler functions to check
    whether the first expiring softirq based timer has expired. If it's expired
    the softirq is raised and the accounting of softirq based timers to
    evaluate the next expiry time for programming the timer hardware is skipped
    until the softirq processing has finished. At the end of the softirq
    processing the regular processing is resumed.
    Suggested-by: NThomas Gleixner <tglx@linutronix.de>
    Suggested-by: NPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: NAnna-Maria Gleixner <anna-maria@linutronix.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: keescook@chromium.org
    Link: http://lkml.kernel.org/r/20171221104205.7269-29-anna-maria@linutronix.deSigned-off-by: NIngo Molnar <mingo@kernel.org>
    5da70160
hrtimer.c 52.2 KB