[PATCH v3] KVM: x86/pmu: Add documentation for fixed ctr on PMU filter

From: Jinrong Liang
Date: Wed May 31 2023 - 03:53:11 EST

From: Jinrong Liang <cloudliang@xxxxxxxxxxx>

Update the documentation for the KVM_SET_PMU_EVENT_FILTER ioctl
to include a detailed description of how fixed performance events
are handled in the pmu filter. The action and fixed_counter_bitmap
members of the pmu filter to determine whether fixed performance
events can be programmed by the guest. This information is helpful
for correctly configuring the fixed_counter_bitmap and action fields
to filter fixed performance events.

Suggested-by: Like Xu <likexu@xxxxxxxxxxx>
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Link: https://lore.kernel.org/oe-kbuild-all/202304150850.rx4UDDsB-lkp@xxxxxxxxx
Signed-off-by: Jinrong Liang <cloudliang@xxxxxxxxxxx>

- Rebased to 5c291b93e5d6(tag: kvm-x86-next-2023.04.26)
- Revise documentation to enhance user understanding. (Sean)
- Post this patch separately from the selftests changes. (Sean)

- Wrap the code from the documentation in a block of code; (Bagas Sanjaya)


Documentation/virt/kvm/api.rst | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)

diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
index a69e91088d76..9f680eb89b2b 100644
--- a/Documentation/virt/kvm/api.rst
+++ b/Documentation/virt/kvm/api.rst
@@ -5122,6 +5122,24 @@ Valid values for 'action'::

+Via this API, KVM userspace can also control the behavior of the VM's fixed
+counters (if any) by configuring the "action" and "fixed_counter_bitmap" fields.
+Specifically, KVM follows the following pseudo-code when determining whether to
+allow the guest FixCtr[i] to count its pre-defined fixed event::
+ FixCtr[i]_is_allowed = (action == ALLOW) && (bitmap & BIT(i)) ||
+ (action == DENY) && !(bitmap & BIT(i));
+ FixCtr[i]_is_denied = !FixCtr[i]_is_allowed;
+KVM always consumes fixed_counter_bitmap, it's userspace's responsibility to
+ensure fixed_counter_bitmap is set correctly, e.g. if userspace wants to define
+a filter that only affects general purpose counters.
+Note, the "events" field also applies to fixed counters' hardcoded event_select
+and unit_mask values. "fixed_counter_bitmap" has higher priority than "events"
+if there is a contradiction between the two.

base-commit: 5c291b93e5d665380dbecc6944973583f9565ee5