On Wed, 04 May 2022 20:58:42 +0100, Oliver Upton oupton@google.com wrote:
Hi Raghavendra,
On Wed, May 04, 2022 at 06:44:15PM +0000, Raghavendra Rao Ananta wrote:
The hypercalls test currently defines its own *_BMAP_BIT_MAX macros to define the last valid feature bit for each bitmap firmware register. However, since these definitions are already present in the uapi header, kvm.h, as *_BMAP_BIT_COUNT, and would help to keep the test updated as features grow, use these instead.
LOL, looks like I lost that one in the end! Still, the fact that you're patching the selftest highlights the fact that there is a nonzero chance of userspace using this value incorrectly expecting it to hold true across all kernels.
Since this is the route going forward can we please consider documenting the fact that _BIT_COUNT *will* change and is not stable between kernel versions. Bad UAPI expectations could throw a wrench into this entire plan we've hatched for preserving hypercall ABI.
Just a warning at the end of the register documentation would suffice.
Maybe something in the kvm.h file as well, as the includes are often distributed without the kernel documentation. Something like:
diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h index e523bb6eac67..3cde9f958eee 100644 --- a/arch/arm64/include/uapi/asm/kvm.h +++ b/arch/arm64/include/uapi/asm/kvm.h @@ -342,6 +342,10 @@ struct kvm_arm_copy_mte_tags {
enum { KVM_REG_ARM_STD_BIT_TRNG_V1_0 = 0, + /* + * KVM_REG_ARM_STD_BMAP_BIT_COUNT will vary as new services + * are added, and is explicitely not part of the ABI. + */ KVM_REG_ARM_STD_BMAP_BIT_COUNT, };
@@ -349,6 +353,10 @@ enum {
enum { KVM_REG_ARM_STD_HYP_BIT_PV_TIME = 0, + /* + * KVM_REG_ARM_STD_HYP_BMAP_BIT_COUNT will vary as new + * services are added, and is explicitely not part of the ABI. + */ KVM_REG_ARM_STD_HYP_BMAP_BIT_COUNT, };
@@ -357,6 +365,10 @@ enum { enum { KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT = 0, KVM_REG_ARM_VENDOR_HYP_BIT_PTP = 1, + /* + * KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT will vary as new + * services are added, and is explicitely not part of the ABI. + */ KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT, };
Thanks,
M.