On Tue, Apr 28, 2026, Tycho Andersen wrote:
> On Tue, Apr 28, 2026 at 09:46:42AM -0700, Sean Christopherson wrote:
> > On Tue, Apr 28, 2026, Tom Lendacky wrote:
> > > On 4/28/26 10:53, Sean Christopherson wrote:
> > > > On Tue, Apr 28, 2026, Tycho Andersen wrote:
> > > >> On Mon, Apr 27, 2026 at 02:20:10PM -0700, Sean Christopherson wrote:
> > > >>> I'm pretty sure I said this earlier: KVM absolutely should not be 
> > > >>> able to disable
> > > >>> RAPL for the entire system.  That needs to be a power management 
> > > >>> thing.
> > > >>
> > > >> You definitely noted "not CCP", I don't think I quite understood what
> > > >> that meant though:
> > > >> https://lore.kernel.org/all/[email protected]/
> > > >>
> > > >> I'm a little worried that putting it in power management will generate
> > > >> some weird dependencies, or weakref symbols that can't change things
> > > >> if they are loaded independently of kvm_amd or something. But let me
> > > >> see what I can come up with.
> > > > 
> > > > Ugh, and it's not even powerman per se, it's actually a module in perf. 
> > > >  Oof.
> > > > 
> > > > I 100% agree it'll be tricky, but I also stand by comments that neither 
> > > > the CCP
> > > > driver or KVM should be allowed to silently pull the rug out from under 
> > > > the RAPL
> > > > module.
> > > 
> > > Maybe something that can be added to the current sev= kernel command line
> > > parameter, e.g. sev=norapl, or such?
> > 
> > Yeah.  The only question I have is if we expect end users to want to 
> > disable RAPL
> > at runtime.  If so, then we probably want a sysfs knob or something.
> > 
> > However, letting RAPL be toggled on/off will introduce some amount of 
> > complexity,
> > as the kernel would need to negotiate/coordinate with the RAPL perf module 
> > and
> > with the CPP driver to ensure RAPL stays in the "correct" state.  E.g. if 
> > the
> > perf module is loaded, then RAPL is effectively pinned "on".  And if SNP 
> > has been
> > initialized with RAPL_DIS, then RAPL is effectively pinned "off".  Blech.
> > 
> > > Maybe even with a kernel config option for a default value?
> > 
> > Probably overkill?
> > 
> > > On SNP_SHUTDOWN it will be re-enabled if it was disabled.
> > 
> > Stating the obvious, if we do this, we open the can of worms I described 
> > above.
> 
> Unfortunately that's how the firmware works and since we do a shutdown
> on module unload, if you have ccp=m this is the behavior.

Right, but that's just at the hardware level.  The kernel can still leave RAPL
"disabled" at a software level, i.e. can still disallow loading the RAPL perf
module.

> Maybe it makes sense to go the other way: have perf look for a ccp
> symbol that's loaded that says whether RAPL is usable or not, and
> refuse to allow access to the counters if it is?

Yeah, this is what I suggesting.  Or rather, trying to suggest :-)

> But it looks like there are several UAPIs for this (perf, /dev/amd-hsmp-*,
> sysfs), so it's not just one place, which is also ugly.
> 
> > > >>> KVM then needs to communicate (and enforce?) the policy to
> > > >>> userspace.
> > > >>
> > > >> KVM doesn't need to enforce anything, the SEV firmware will generate a
> > > >> launch error for policy violation if it's not supported.
> > > >>
> > > >> For communicating to userspace if it's not a kvm module parameter, one
> > > >> option is to mask it off in sev_get_snp_supported_policy() if it was
> > > 
> > > Did you mean sev_get_snp_policy_bits() or were you referring to the KVM
> > > ioctl() for retrieving them?
> 
> I was thinking of the ioctl() for retrieving them, but doing the
> masking in sev_get_snp_policy_bits() since it would be able to
> remember whether RAPL_DIS was set or not. Of course I merged the two
> in my head when typing the sentence :)
> 
> > > >> initialized without the support. Then it'll be visible via
> > > >> KVM_X86_SNP_POLICY_BITS.
> > > > 
> > > > Ya, this is what I was envisioning.
> > > 
> > > It's still a valid policy bit (if supported by the platform), so I don't
> > > think masking it off is appropriate.
> > 
> > But it's not fully supported, no?  I.e. won't the VM fail if it requests 
> > RAPL_DIS?
> > 
> > Ooh, presumably the subtle difference is that on a platform without 
> > RAPL_DIS at
> > all, the VM will successfully launch and thus could run with RAPL enabled 
> > even
> > if the VM requested RAPL_DIS?
> 
> I haven't tested this, but I would hope what you describe an error. I
> think Tom means it's supported by the architecture, it just needs to
> be enabled via reconfiguration.
> 
> Tycho

Reply via email to