On Tue, Jan 28, 2025, Zheyun Shen wrote: > Previous versions pointed out the problem of wbinvd_on_all_cpus() in SEV > and tried to maintain a cpumask to solve it. This version includes > further code cleanup. > > Although dirty_mask is not maintained perfectly and may lead to wbinvd on > physical CPUs that are not running a SEV guest, it's still better than > wbinvd_on_all_cpus(). And vcpu migration is designed to be solved in > future work. I have a variety of comments, but no need to send a new version. I'm going to post a combined version with the WBNOINVD series, hopefully tomorrow. The only thing that needs your attention is the pre_sev_run() => sev_vcpu_load() change between v3 and v4. > --- > v6 -> v7: > - Fixed the writing oversight in sev_vcpu_load(). > > v5 -> v6: > - Replaced sev_get_wbinvd_dirty_mask() with the helper function > to_kvm_sev_info(). > > v4 -> v5: > - rebase to tip @ 15e2f65f2ecf . > - Added a commit to remove unnecessary calls to wbinvd(). > - Changed some comments. > > v3 -> v4: > - Added a wbinvd helper and export it to SEV. > - Changed the struct cpumask in kvm_sev_info into cpumask*, which should > be dynamically allocated and freed. > - Changed the time of recording the CPUs from pre_sev_run() to vcpu_load(). > - Removed code of clearing the mask. > > v2 -> v3: > - Replaced get_cpu() with parameter cpu in pre_sev_run(). > > v1 -> v2: > - Added sev_do_wbinvd() to wrap two operations. > - Used cpumask_test_and_clear_cpu() to avoid concurrent problems. > --- > > Zheyun Shen (3): > KVM: x86: Add a wbinvd helper > KVM: SVM: Remove wbinvd in sev_vm_destroy() > KVM: SVM: Flush cache only on CPUs running SEV guest > > arch/x86/kvm/svm/sev.c | 36 +++++++++++++++++++++++++++--------- > arch/x86/kvm/svm/svm.c | 2 ++ > arch/x86/kvm/svm/svm.h | 5 ++++- > arch/x86/kvm/x86.c | 9 +++++++-- > arch/x86/kvm/x86.h | 1 + > 5 files changed, 41 insertions(+), 12 deletions(-) > > -- > 2.34.1 >