diff options
Diffstat (limited to 'debian/patches-rt/KVM__arm_arm64__downgrade_preempt_disabled_region_to_migrate_disable.patch')
-rw-r--r-- | debian/patches-rt/KVM__arm_arm64__downgrade_preempt_disabled_region_to_migrate_disable.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/debian/patches-rt/KVM__arm_arm64__downgrade_preempt_disabled_region_to_migrate_disable.patch b/debian/patches-rt/KVM__arm_arm64__downgrade_preempt_disabled_region_to_migrate_disable.patch new file mode 100644 index 000000000..523e1643f --- /dev/null +++ b/debian/patches-rt/KVM__arm_arm64__downgrade_preempt_disabled_region_to_migrate_disable.patch @@ -0,0 +1,57 @@ +Subject: KVM: arm/arm64: downgrade preempt_disable()d region to migrate_disable() +From: Josh Cartwright <joshc@ni.com> +Date: Thu Feb 11 11:54:01 2016 -0600 +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patches-5.15.3-rt21.tar.xz + +From: Josh Cartwright <joshc@ni.com> + +kvm_arch_vcpu_ioctl_run() disables the use of preemption when updating +the vgic and timer states to prevent the calling task from migrating to +another CPU. It does so to prevent the task from writing to the +incorrect per-CPU GIC distributor registers. + +On -rt kernels, it's possible to maintain the same guarantee with the +use of migrate_{disable,enable}(), with the added benefit that the +migrate-disabled region is preemptible. Update +kvm_arch_vcpu_ioctl_run() to do so. + +Cc: Christoffer Dall <christoffer.dall@linaro.org> +Reported-by: Manish Jaggi <Manish.Jaggi@caviumnetworks.com> +Signed-off-by: Josh Cartwright <joshc@ni.com> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> + + +--- + arch/arm64/kvm/arm.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) +--- +--- a/arch/arm64/kvm/arm.c ++++ b/arch/arm64/kvm/arm.c +@@ -811,7 +811,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v + * involves poking the GIC, which must be done in a + * non-preemptible context. + */ +- preempt_disable(); ++ migrate_disable(); + + kvm_pmu_flush_hwstate(vcpu); + +@@ -835,7 +835,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v + kvm_timer_sync_user(vcpu); + kvm_vgic_sync_hwstate(vcpu); + local_irq_enable(); +- preempt_enable(); ++ migrate_enable(); + continue; + } + +@@ -907,7 +907,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v + /* Exit types that need handling before we can be preempted */ + handle_exit_early(vcpu, ret); + +- preempt_enable(); ++ migrate_enable(); + + /* + * The ARMv8 architecture doesn't give the hypervisor |