FAILED: patch "[PATCH] entry/kvm: Explicitly flush pending rcuog wakeup before last" failed to apply to 4.4-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4ae7dc97f726ea95c58ac58af71cc034ad22d7de Mon Sep 17 00:00:00 2001
From: Frederic Weisbecker <[email protected]>
Date: Mon, 1 Feb 2021 00:05:48 +0100
Subject: [PATCH] entry/kvm: Explicitly flush pending rcuog wakeup before last
rescheduling point
Following the idle loop model, cleanly check for pending rcuog wakeup before the last rescheduling point upon resuming to guest mode. This way we can avoid to do it from rcu_user_enter() with the last resort self-IPI hack that enforces rescheduling.
arch/x86/kvm/x86.c +1 -0
@@ -1782,6 +1782,7 @@ EXPORT_SYMBOL_GPL(kvm_emulate_wrmsr);bool kvm_vcpu_exit_request (struct kvm_vcpu *vcpu) { +xfer_to_guest_mode_prepare ();return vcpu->mode ==EXITING_GUEST_MODE ||kvm_request_pending (vcpu) ||xfer_to_guest_mode_work_pending (); }
include/linux/entry-kvm.h +14 -0
@@ -46,6 +46,20 @@ static inline int arch_xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcpu,*/ int xfer_to_guest_mode_handle_work (struct kvm_vcpu *vcpu); +/** +* xfer_to_guest_mode_prepare - Perform last minute preparation work that +* need to be handled while IRQs are disabled +* upon entering to guest. +* +* Has to be invoked with interrupts disabled before the last call +* to xfer_to_guest_mode_work_pending(). +*/ +static inline void xfer_to_guest_mode_prepare (void ) +{ +lockdep_assert_irqs_disabled (); +rcu_nocb_flush_deferred_wakeup (); +} +/** * __xfer_to_guest_mode_work_pending - Check if work is pending *
kernel/rcu/tree.c +34 -10
70 lines not on this page · raw message
kernel/rcu/tree_plugin.h +1 -0
@@ -2197,6 +2197,7 @@ void rcu_nocb_flush_deferred_wakeup(void) {do_nocb_deferred_wakeup (this_cpu_ptr (&rcu_data)); } +EXPORT_SYMBOL_GPL (rcu_nocb_flush_deferred_wakeup);void __init rcu_init_nohz (void ) {