From: "Tycho Andersen (AMD)" <[email protected]>

Add a user-visible way to set the RAPL_DIS bit for SNP init.

Since setting RAPL_DIS affects the whole system, put the module parameter
in kvm_amd instead of in the CCP driver to hopefully make it more obvious
to admins.

Signed-off-by: Tycho Andersen (AMD) <[email protected]>
---
 Documentation/admin-guide/kernel-parameters.txt | 5 +++++
 arch/x86/kvm/svm/sev.c                          | 8 ++++++++
 2 files changed, 13 insertions(+)

diff --git a/Documentation/admin-guide/kernel-parameters.txt 
b/Documentation/admin-guide/kernel-parameters.txt
index 4d0f545fb3ec..2b50eed8664c 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -3207,6 +3207,11 @@ Kernel parameters
                        max_snp_asid == min_sev_asid-1, will effectively make
                        SEV-ES unusable.
 
+       kvm-amd.rapl_disable=   [KVM,AMD] Whether to disable RAPL
+                       (Running Average Power Limit) when initializing the SNP
+                       firmware. This disables the counters for the entire 
system until an
+                       SNP shutdown command is issued.
+
        kvm-arm.mode=
                        [KVM,ARM,EARLY] Select one of KVM/arm64's modes of
                        operation.
diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
index c2126b3c3072..c2a30a3d6f50 100644
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -66,6 +66,10 @@ module_param_named(sev_snp, sev_snp_enabled, bool, 0444);
 static unsigned int __ro_after_init nr_ciphertext_hiding_asids;
 module_param_named(ciphertext_hiding_asids, nr_ciphertext_hiding_asids, uint, 
0444);
 
+static bool rapl_disable;
+module_param(rapl_disable, bool, 0444);
+MODULE_PARM_DESC(rapl_disable, " if true, disable RAPL during SNP 
Initialization");
+
 #define AP_RESET_HOLD_NONE             0
 #define AP_RESET_HOLD_NAE_EVENT                1
 #define AP_RESET_HOLD_MSR_PROTO                2
@@ -3163,6 +3167,7 @@ void __init sev_hardware_setup(void)
 out:
        if (sev_enabled) {
                init_args.probe = true;
+               init_args.rapl_disable = rapl_disable;
 
                if (sev_is_snp_ciphertext_hiding_supported())
                        init_args.max_snp_asid = min(nr_ciphertext_hiding_asids,
@@ -3174,6 +3179,9 @@ void __init sev_hardware_setup(void)
                        sev_snp_supported = is_sev_snp_initialized();
 
                if (sev_snp_supported) {
+                       if (!init_args.rapl_disable)
+                               rapl_disable = false;
+
                        snp_supported_policy_bits = sev_get_snp_policy_bits() &
                                                    KVM_SNP_POLICY_MASK_VALID;
                        nr_ciphertext_hiding_asids = init_args.max_snp_asid;
-- 
2.53.0


Reply via email to