arm.c (09cf57eba304246141367b95c89801fd2047ac96) arm.c (13aeb9b400c5d7c5e979fdbbf994c787487f7889)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2012 - Virtual Open Systems and Columbia University
4 * Author: Christoffer Dall <c.dall@virtualopensystems.com>
5 */
6
7#include <linux/bug.h>
8#include <linux/cpu_pm.h>

--- 337 unchanged lines hidden (view full) ---

346 kvm_call_hyp(__kvm_tlb_flush_local_vmid, vcpu);
347 *last_ran = vcpu->vcpu_id;
348 }
349
350 vcpu->cpu = cpu;
351
352 kvm_vgic_load(vcpu);
353 kvm_timer_vcpu_load(vcpu);
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2012 - Virtual Open Systems and Columbia University
4 * Author: Christoffer Dall <c.dall@virtualopensystems.com>
5 */
6
7#include <linux/bug.h>
8#include <linux/cpu_pm.h>

--- 337 unchanged lines hidden (view full) ---

346 kvm_call_hyp(__kvm_tlb_flush_local_vmid, vcpu);
347 *last_ran = vcpu->vcpu_id;
348 }
349
350 vcpu->cpu = cpu;
351
352 kvm_vgic_load(vcpu);
353 kvm_timer_vcpu_load(vcpu);
354 kvm_vcpu_load_sysregs(vcpu);
354 if (has_vhe())
355 kvm_vcpu_load_sysregs_vhe(vcpu);
355 kvm_arch_vcpu_load_fp(vcpu);
356 kvm_vcpu_pmu_restore_guest(vcpu);
357 if (kvm_arm_is_pvtime_enabled(&vcpu->arch))
358 kvm_make_request(KVM_REQ_RECORD_STEAL, vcpu);
359
360 if (single_task_running())
361 vcpu_clear_wfx_traps(vcpu);
362 else
363 vcpu_set_wfx_traps(vcpu);
364
365 if (vcpu_has_ptrauth(vcpu))
366 vcpu_ptrauth_disable(vcpu);
367}
368
369void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
370{
371 kvm_arch_vcpu_put_fp(vcpu);
356 kvm_arch_vcpu_load_fp(vcpu);
357 kvm_vcpu_pmu_restore_guest(vcpu);
358 if (kvm_arm_is_pvtime_enabled(&vcpu->arch))
359 kvm_make_request(KVM_REQ_RECORD_STEAL, vcpu);
360
361 if (single_task_running())
362 vcpu_clear_wfx_traps(vcpu);
363 else
364 vcpu_set_wfx_traps(vcpu);
365
366 if (vcpu_has_ptrauth(vcpu))
367 vcpu_ptrauth_disable(vcpu);
368}
369
370void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
371{
372 kvm_arch_vcpu_put_fp(vcpu);
372 kvm_vcpu_put_sysregs(vcpu);
373 if (has_vhe())
374 kvm_vcpu_put_sysregs_vhe(vcpu);
373 kvm_timer_vcpu_put(vcpu);
374 kvm_vgic_put(vcpu);
375 kvm_vcpu_pmu_restore_host(vcpu);
376
377 vcpu->cpu = -1;
378}
379
380static void vcpu_power_off(struct kvm_vcpu *vcpu)

--- 916 unchanged lines hidden (view full) ---

1297 __kvm_call_hyp((void *)pgd_ptr, hyp_stack_ptr, vector_ptr, tpidr_el2);
1298
1299 /*
1300 * Disabling SSBD on a non-VHE system requires us to enable SSBS
1301 * at EL2.
1302 */
1303 if (this_cpu_has_cap(ARM64_SSBS) &&
1304 arm64_get_ssbd_state() == ARM64_SSBD_FORCE_DISABLE) {
375 kvm_timer_vcpu_put(vcpu);
376 kvm_vgic_put(vcpu);
377 kvm_vcpu_pmu_restore_host(vcpu);
378
379 vcpu->cpu = -1;
380}
381
382static void vcpu_power_off(struct kvm_vcpu *vcpu)

--- 916 unchanged lines hidden (view full) ---

1299 __kvm_call_hyp((void *)pgd_ptr, hyp_stack_ptr, vector_ptr, tpidr_el2);
1300
1301 /*
1302 * Disabling SSBD on a non-VHE system requires us to enable SSBS
1303 * at EL2.
1304 */
1305 if (this_cpu_has_cap(ARM64_SSBS) &&
1306 arm64_get_ssbd_state() == ARM64_SSBD_FORCE_DISABLE) {
1305 kvm_call_hyp(__kvm_enable_ssbs);
1307 kvm_call_hyp_nvhe(__kvm_enable_ssbs);
1306 }
1307}
1308
1309static void cpu_hyp_reset(void)
1310{
1311 if (!is_kernel_in_hyp_mode())
1312 __hyp_reset_vectors();
1313}

--- 392 unchanged lines hidden ---
1308 }
1309}
1310
1311static void cpu_hyp_reset(void)
1312{
1313 if (!is_kernel_in_hyp_mode())
1314 __hyp_reset_vectors();
1315}

--- 392 unchanged lines hidden ---