lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 11 Mar 2024 15:40:59 +0100
From: Paolo Bonzini <pbonzini@...hat.com>
To: Sean Christopherson <seanjc@...gle.com>
Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [GIT PULL] KVM: x86: PMU changes for 6.9

On 3/8/24 23:36, Sean Christopherson wrote:
> Lots of PMU fixes and cleanups, along with related selftests.  The most notable
> fix is to *not* disallow the use of fixed counters and event encodings just
> because the CPU doesn't report support for the matching architectural event
> encoding.
> 
> Note, the selftests changes have several annoying conflicts with "the" selftests
> pull request that you'll also receive from me.  I recommend merging that one
> first, as I found it slightly easier to resolve the conflicts in that order.
> 
> P.S. I expect to send another PMU related pull request of 3-4 fixes at some
> point during the merge window.  But they're all small and urgent (if we had a
> few more weeks for 6.8, I'd have tried to squeeze them into 6.8).
> 
> The following changes since commit 41bccc98fb7931d63d03f326a746ac4d429c1dd3:
> 
>    Linux 6.8-rc2 (2024-01-28 17:01:12 -0800)
> 
> are available in the Git repository at:
> 
>    https://github.com/kvm-x86/linux.git tags/kvm-x86-pmu-6.9
> 
> for you to fetch changes up to 812d432373f629eb8d6cb696ea6804fca1534efa:
> 
>    KVM: x86/pmu: Explicitly check NMI from guest to reducee false positives (2024-02-26 15:57:22 -0800)

Pulled, thanks.

Paolo

> ----------------------------------------------------------------
> KVM x86 PMU changes for 6.9:
> 
>   - Fix several bugs where KVM speciously prevents the guest from utilizing
>     fixed counters and architectural event encodings based on whether or not
>     guest CPUID reports support for the _architectural_ encoding.
> 
>   - Fix a variety of bugs in KVM's emulation of RDPMC, e.g. for "fast" reads,
>     priority of VMX interception vs #GP, PMC types in architectural PMUs, etc.
> 
>   - Add a selftest to verify KVM correctly emulates RDMPC, counter availability,
>     and a variety of other PMC-related behaviors that depend on guest CPUID,
>     i.e. are difficult to validate via KVM-Unit-Tests.
> 
>   - Zero out PMU metadata on AMD if the virtual PMU is disabled to avoid wasting
>     cycles, e.g. when checking if a PMC event needs to be synthesized when
>     skipping an instruction.
> 
>   - Optimize triggering of emulated events, e.g. for "count instructions" events
>     when skipping an instruction, which yields a ~10% performance improvement in
>     VM-Exit microbenchmarks when a vPMU is exposed to the guest.
> 
>   - Tighten the check for "PMI in guest" to reduce false positives if an NMI
>     arrives in the host while KVM is handling an IRQ VM-Exit.
> 
> ----------------------------------------------------------------
> Dapeng Mi (1):
>        KVM: selftests: Test top-down slots event in x86's pmu_counters_test
> 
> Jinrong Liang (7):
>        KVM: selftests: Add vcpu_set_cpuid_property() to set properties
>        KVM: selftests: Add pmu.h and lib/pmu.c for common PMU assets
>        KVM: selftests: Test Intel PMU architectural events on gp counters
>        KVM: selftests: Test Intel PMU architectural events on fixed counters
>        KVM: selftests: Test consistency of CPUID with num of gp counters
>        KVM: selftests: Test consistency of CPUID with num of fixed counters
>        KVM: selftests: Add functional test for Intel's fixed PMU counters
> 
> Like Xu (1):
>        KVM: x86/pmu: Explicitly check NMI from guest to reducee false positives
> 
> Sean Christopherson (32):
>        KVM: x86/pmu: Always treat Fixed counters as available when supported
>        KVM: x86/pmu: Allow programming events that match unsupported arch events
>        KVM: x86/pmu: Remove KVM's enumeration of Intel's architectural encodings
>        KVM: x86/pmu: Setup fixed counters' eventsel during PMU initialization
>        KVM: x86/pmu: Get eventsel for fixed counters from perf
>        KVM: x86/pmu: Don't ignore bits 31:30 for RDPMC index on AMD
>        KVM: x86/pmu: Prioritize VMX interception over #GP on RDPMC due to bad index
>        KVM: x86/pmu: Apply "fast" RDPMC only to Intel PMUs
>        KVM: x86/pmu: Disallow "fast" RDPMC for architectural Intel PMUs
>        KVM: x86/pmu: Treat "fixed" PMU type in RDPMC as index as a value, not flag
>        KVM: x86/pmu: Explicitly check for RDPMC of unsupported Intel PMC types
>        KVM: selftests: Drop the "name" param from KVM_X86_PMU_FEATURE()
>        KVM: selftests: Extend {kvm,this}_pmu_has() to support fixed counters
>        KVM: selftests: Expand PMU counters test to verify LLC events
>        KVM: selftests: Add a helper to query if the PMU module param is enabled
>        KVM: selftests: Add helpers to read integer module params
>        KVM: selftests: Query module param to detect FEP in MSR filtering test
>        KVM: selftests: Move KVM_FEP macro into common library header
>        KVM: selftests: Test PMC virtualization with forced emulation
>        KVM: selftests: Add a forced emulation variation of KVM_ASM_SAFE()
>        KVM: selftests: Add helpers for safe and safe+forced RDMSR, RDPMC, and XGETBV
>        KVM: selftests: Extend PMU counters test to validate RDPMC after WRMSR
>        KVM: x86/pmu: Zero out PMU metadata on AMD if PMU is disabled
>        KVM: x86/pmu: Add common define to capture fixed counters offset
>        KVM: x86/pmu: Move pmc_idx => pmc translation helper to common code
>        KVM: x86/pmu: Snapshot and clear reprogramming bitmap before reprogramming
>        KVM: x86/pmu: Add macros to iterate over all PMCs given a bitmap
>        KVM: x86/pmu: Process only enabled PMCs when emulating events in software
>        KVM: x86/pmu: Snapshot event selectors that KVM emulates in software
>        KVM: x86/pmu: Expand the comment about what bits are check emulating events
>        KVM: x86/pmu: Check eventsel first when emulating (branch) insns retired
>        KVM: x86/pmu: Avoid CPL lookup if PMC enabline for USER and KERNEL is the same
> 
>   arch/x86/include/asm/kvm-x86-pmu-ops.h             |   4 +-
>   arch/x86/include/asm/kvm_host.h                    |  11 +-
>   arch/x86/kvm/emulate.c                             |   2 +-
>   arch/x86/kvm/kvm_emulate.h                         |   2 +-
>   arch/x86/kvm/pmu.c                                 | 163 ++++--
>   arch/x86/kvm/pmu.h                                 |  57 +-
>   arch/x86/kvm/svm/pmu.c                             |  22 +-
>   arch/x86/kvm/vmx/nested.c                          |   2 +-
>   arch/x86/kvm/vmx/pmu_intel.c                       | 222 +++-----
>   arch/x86/kvm/x86.c                                 |  15 +-
>   arch/x86/kvm/x86.h                                 |   6 -
>   tools/testing/selftests/kvm/Makefile               |   2 +
>   .../testing/selftests/kvm/include/kvm_util_base.h  |   4 +
>   tools/testing/selftests/kvm/include/x86_64/pmu.h   |  97 ++++
>   .../selftests/kvm/include/x86_64/processor.h       | 148 +++--
>   tools/testing/selftests/kvm/lib/kvm_util.c         |  62 ++-
>   tools/testing/selftests/kvm/lib/x86_64/pmu.c       |  31 ++
>   tools/testing/selftests/kvm/lib/x86_64/processor.c |  15 +-
>   .../selftests/kvm/x86_64/pmu_counters_test.c       | 620 +++++++++++++++++++++
>   .../selftests/kvm/x86_64/pmu_event_filter_test.c   | 143 ++---
>   .../kvm/x86_64/smaller_maxphyaddr_emulation_test.c |   2 +-
>   .../selftests/kvm/x86_64/userspace_msr_exit_test.c |  29 +-
>   .../selftests/kvm/x86_64/vmx_pmu_caps_test.c       |   2 +-
>   23 files changed, 1262 insertions(+), 399 deletions(-)
>   create mode 100644 tools/testing/selftests/kvm/include/x86_64/pmu.h
>   create mode 100644 tools/testing/selftests/kvm/lib/x86_64/pmu.c
>   create mode 100644 tools/testing/selftests/kvm/x86_64/pmu_counters_test.c
> 


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ