Hi Andrew,
On 10/12/2019 12:01, Andrew Murray wrote:
When emulating ID registers there is often a need to cap the version
bits of a feature such that the guest will not use features that do
not yet exist.
Let's add a helper that extracts a field and caps the version to a
given value.
Signed-off-by: Andrew Murray <andrew.murray@xxxxxxx>
---
arch/arm64/include/asm/cpufeature.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index 4261d55e8506..19f051ec1610 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -447,6 +447,21 @@ cpuid_feature_extract_unsigned_field(u64 features, int field)
return cpuid_feature_extract_unsigned_field_width(features, field, 4);
}
+static inline u64 __attribute_const__
+cpuid_feature_cap_signed_field_width(u64 features, int field, int width,
+ s64 cap)
+{
+ s64 val = cpuid_feature_extract_signed_field_width(features, field,
+ width);
+
+ if (val > cap) {
+ features &= ~GENMASK_ULL(field + width - 1, field);
+ features |= cap << field;
Please could we make sure that the "cap" is masked to "width" bits.
Otherwise looks good to me.
Suzuki
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm