Message ID | 20250114175143.81438-19-vschneid@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | context_tracking,x86: Defer some IPIs until a user->kernel transition | expand |
Please use "KVM: VMX:" for the scope. On Tue, Jan 14, 2025, Valentin Schneider wrote: > Later commits will cause objtool to warn about static keys being used in > .noinstr sections in order to safely defer instruction patching IPIs > targeted at NOHZ_FULL CPUs. > > These keys are used in .noinstr code, and can be modified at runtime > (/proc/kernel/vmx* write). However it is not expected that they will be > flipped during latency-sensitive operations, and thus shouldn't be a source > of interference wrt the text patching IPI. This misses KVM's static key that's buried behind CONFIG_HYPERV=m|y. vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x241: __kvm_is_using_evmcs: non-RO static key usage in noinstr vmlinux.o: warning: objtool: vmx_update_host_rsp+0x13: __kvm_is_using_evmcs: non-RO static key usage in noinstr Side topic, it's super annoying that "objtool --noinstr" only runs on vmlinux.o. I realize objtool doesn't have the visilibity to validate cross-object calls, but couldn't objtool validates calls and static key/branch usage so long as the target or key/branch is defined in the same object?
On 14/01/25 13:19, Sean Christopherson wrote: > Please use "KVM: VMX:" for the scope. > > On Tue, Jan 14, 2025, Valentin Schneider wrote: >> Later commits will cause objtool to warn about static keys being used in >> .noinstr sections in order to safely defer instruction patching IPIs >> targeted at NOHZ_FULL CPUs. >> >> These keys are used in .noinstr code, and can be modified at runtime >> (/proc/kernel/vmx* write). However it is not expected that they will be >> flipped during latency-sensitive operations, and thus shouldn't be a source >> of interference wrt the text patching IPI. > > This misses KVM's static key that's buried behind CONFIG_HYPERV=m|y. > > vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x241: __kvm_is_using_evmcs: non-RO static key usage in noinstr > vmlinux.o: warning: objtool: vmx_update_host_rsp+0x13: __kvm_is_using_evmcs: non-RO static key usage in noinstr > Thanks, I'll add these to v5. > Side topic, it's super annoying that "objtool --noinstr" only runs on vmlinux.o. > I realize objtool doesn't have the visilibity to validate cross-object calls, > but couldn't objtool validates calls and static key/branch usage so long as the > target or key/branch is defined in the same object? Per my testing you can manually run it on individual objects, but it can and will easily get hung up on the first noinstr violation it finds and not search further within one given function.
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 893366e537322..a028c38f44e02 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -225,8 +225,15 @@ module_param(pt_mode, int, S_IRUGO); struct x86_pmu_lbr __ro_after_init vmx_lbr_caps; -static DEFINE_STATIC_KEY_FALSE(vmx_l1d_should_flush); -static DEFINE_STATIC_KEY_FALSE(vmx_l1d_flush_cond); +/* + * Both of these static keys end up being used in .noinstr sections, however + * they are only modified: + * - at init + * - from a /proc/kernel/vmx* write + * thus during latency-sensitive operations they should remain stable. + */ +static DEFINE_STATIC_KEY_FALSE_NOINSTR(vmx_l1d_should_flush); +static DEFINE_STATIC_KEY_FALSE_NOINSTR(vmx_l1d_flush_cond); static DEFINE_MUTEX(vmx_l1d_flush_mutex); /* Storage for pre module init parameter parsing */
Later commits will cause objtool to warn about static keys being used in .noinstr sections in order to safely defer instruction patching IPIs targeted at NOHZ_FULL CPUs. These keys are used in .noinstr code, and can be modified at runtime (/proc/kernel/vmx* write). However it is not expected that they will be flipped during latency-sensitive operations, and thus shouldn't be a source of interference wrt the text patching IPI. Mark it to let objtool know not to warn about it. Reported-by: Josh Poimboeuf <jpoimboe@kernel.org> Signed-off-by: Valentin Schneider <vschneid@redhat.com> --- arch/x86/kvm/vmx/vmx.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)