lkml.org 
[lkml]   [2020]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch V9 12/39] x86/entry: Split out idtentry_exit_cond_resched()
    The XEN PV hypercall requires the ability of conditional rescheduling when
    preemption is disabled because some hypercalls take ages.

    Split out the rescheduling code from idtentry_exit_cond_rcu() so it can
    be reused for that.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    V9: New patch
    ---
    arch/x86/entry/common.c | 30 +++++++++++++++---------------
    1 file changed, 15 insertions(+), 15 deletions(-)

    --- a/arch/x86/entry/common.c
    +++ b/arch/x86/entry/common.c
    @@ -580,6 +580,20 @@ bool noinstr idtentry_enter_cond_rcu(str
    return false;
    }

    +static void idtentry_exit_cond_resched(struct pt_regs *regs, bool may_sched)
    +{
    + if (may_sched && !preempt_count()) {
    + /* Sanity check RCU and thread stack */
    + rcu_irq_exit_check_preempt();
    + if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
    + WARN_ON_ONCE(!on_thread_stack());
    + if (need_resched())
    + preempt_schedule_irq();
    + }
    + /* Covers both tracing and lockdep */
    + trace_hardirqs_on();
    +}
    +
    /**
    * idtentry_exit_cond_rcu - Handle return from exception with conditional RCU
    * handling
    @@ -621,21 +635,7 @@ void noinstr idtentry_exit_cond_rcu(stru
    }

    instrumentation_begin();
    -
    - /* Check kernel preemption, if enabled */
    - if (IS_ENABLED(CONFIG_PREEMPTION)) {
    - if (!preempt_count()) {
    - /* Sanity check RCU and thread stack */
    - rcu_irq_exit_check_preempt();
    - if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
    - WARN_ON_ONCE(!on_thread_stack());
    - if (need_resched())
    - preempt_schedule_irq();
    - }
    - }
    - /* Covers both tracing and lockdep */
    - trace_hardirqs_on();
    -
    + idtentry_exit_cond_resched(regs, IS_ENABLED(CONFIG_PREEMPTION));
    instrumentation_end();
    } else {
    /*
    \
     
     \ /
      Last update: 2020-05-21 22:34    [W:4.480 / U:0.240 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site