/*
         * If DebugSwap is enabled, debug registers are loaded but NOT saved by
         * the CPU (Type-B). If DebugSwap is disabled/unsupported, the CPU does
-        * not save or load debug registers.  Sadly, on CPUs without
-        * ALLOWED_SEV_FEATURES, KVM can't prevent SNP guests from enabling
-        * DebugSwap on secondary vCPUs without KVM's knowledge via "AP Create".
-        * Save all registers if DebugSwap is supported to prevent host state
-        * from being clobbered by a misbehaving guest.
+        * not save or load debug registers.  Sadly, KVM can't prevent SNP
+        * guests from lying about DebugSwap on secondary vCPUs, i.e. the
+        * SEV_FEATURES provided at "AP Create" isn't guaranteed to match what
+        * the guest has actually enabled (or not!) in the VMSA.
+        *
+        * If DebugSwap is *possible*, save the masks so that they're restored
+        * if the guest enables DebugSwap.  But for the DRs themselves, do NOT
+        * rely on the CPU to restore the host values; KVM will restore them as
+        * needed in common code, via hw_breakpoint_restore().  Note, KVM does
+        * NOT support virtualizing Breakpoint Extensions, i.e. the mask MSRs
+        * don't need to be restored per se, KVM just needs to ensure they are
+        * loaded with the correct values *if* the CPU writes the MSRs.
         */
        if (sev_vcpu_has_debug_swap(svm) ||
            (sev_snp_guest(kvm) && cpu_feature_enabled(X86_FEATURE_DEBUG_SWAP))) {
-               hostsa->dr0 = native_get_debugreg(0);
-               hostsa->dr1 = native_get_debugreg(1);
-               hostsa->dr2 = native_get_debugreg(2);
-               hostsa->dr3 = native_get_debugreg(3);
                hostsa->dr0_addr_mask = amd_get_dr_addr_mask(0);
                hostsa->dr1_addr_mask = amd_get_dr_addr_mask(1);
                hostsa->dr2_addr_mask = amd_get_dr_addr_mask(2);