[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-2.8 15/38] s390x/cpumodel: generate CPU feature
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PATCH for-2.8 15/38] s390x/cpumodel: generate CPU feature group lists |
Date: |
Mon, 29 Aug 2016 13:45:07 +0200 |
From: David Hildenbrand <address@hidden>
Feature groups will be very helpful to reduce the amount of features
typically available in sane configurations. E.g. the MSA facilities
introduced loads of subfunctions, which could - in theory - go away
in the future, but we want to avoid reporting hundrets of features to
the user if usually all of them are in place.
Groups only contain features that were introduced in one shot, not just
random features. Therefore, groups can never change. This is an important
property regarding migration.
Acked-by: Cornelia Huck <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
target-s390x/gen-features.c | 80 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/target-s390x/gen-features.c b/target-s390x/gen-features.c
index db63389..2ae4405 100644
--- a/target-s390x/gen-features.c
+++ b/target-s390x/gen-features.c
@@ -178,6 +178,35 @@
S390_FEAT_MSA_EXT_5, \
S390_FEAT_PPNO_SHA_512_DRNG
+/* cpu feature groups */
+static uint16_t group_PLO[] = {
+ S390_FEAT_GROUP_PLO,
+};
+static uint16_t group_TOD_CLOCK_STEERING[] = {
+ S390_FEAT_GROUP_TOD_CLOCK_STEERING,
+};
+static uint16_t group_GEN13_PTFF[] = {
+ S390_FEAT_GROUP_GEN13_PTFF,
+};
+static uint16_t group_MSA[] = {
+ S390_FEAT_GROUP_MSA,
+};
+static uint16_t group_MSA_EXT_1[] = {
+ S390_FEAT_GROUP_MSA_EXT_1,
+};
+static uint16_t group_MSA_EXT_2[] = {
+ S390_FEAT_GROUP_MSA_EXT_2,
+};
+static uint16_t group_MSA_EXT_3[] = {
+ S390_FEAT_GROUP_MSA_EXT_3,
+};
+static uint16_t group_MSA_EXT_4[] = {
+ S390_FEAT_GROUP_MSA_EXT_4,
+};
+static uint16_t group_MSA_EXT_5[] = {
+ S390_FEAT_GROUP_MSA_EXT_5,
+};
+
/* base features in order of release */
static uint16_t base_GEN7_GA1[] = {
S390_FEAT_GROUP_PLO,
@@ -431,6 +460,34 @@ static CpuFeatDefSpec CpuFeatDef[] = {
CPU_FEAT_INITIALIZER(GEN13_GA2),
};
+#define FEAT_GROUP_INITIALIZER(_name) \
+ { \
+ .name = "S390_FEAT_GROUP_LIST_" #_name, \
+ .bits = \
+ { .data = group_##_name, \
+ .len = ARRAY_SIZE(group_##_name) }, \
+ }
+
+typedef struct {
+ const char *name;
+ BitSpec bits;
+} FeatGroupDefSpec;
+
+/*******************************
+ * feature groups
+ *******************************/
+static FeatGroupDefSpec FeatGroupDef[] = {
+ FEAT_GROUP_INITIALIZER(PLO),
+ FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
+ FEAT_GROUP_INITIALIZER(GEN13_PTFF),
+ FEAT_GROUP_INITIALIZER(MSA),
+ FEAT_GROUP_INITIALIZER(MSA_EXT_1),
+ FEAT_GROUP_INITIALIZER(MSA_EXT_2),
+ FEAT_GROUP_INITIALIZER(MSA_EXT_3),
+ FEAT_GROUP_INITIALIZER(MSA_EXT_4),
+ FEAT_GROUP_INITIALIZER(MSA_EXT_5),
+};
+
static void set_bits(uint64_t list[], BitSpec bits)
{
uint32_t i;
@@ -488,6 +545,28 @@ static void print_feature_defs(void)
}
}
+static void print_feature_group_defs(void)
+{
+ int i, j;
+
+ printf("\n/* CPU feature group list data */\n");
+
+ for (i = 0; i < ARRAY_SIZE(FeatGroupDef); i++) {
+ uint64_t feat[S390_FEAT_MAX / 64 + 1] = {};
+
+ set_bits(feat, FeatGroupDef[i].bits);
+ printf("#define %s\t", FeatGroupDef[i].name);
+ for (j = 0; j < ARRAY_SIZE(feat); j++) {
+ printf("0x%016"PRIx64"UL", feat[j]);
+ if (j < ARRAY_SIZE(feat) - 1) {
+ printf(",");
+ } else {
+ printf("\n");
+ }
+ }
+ }
+}
+
int main(int argc, char *argv[])
{
printf("/*\n"
@@ -502,6 +581,7 @@ int main(int argc, char *argv[])
" */\n\n"
"#ifndef %s\n#define %s\n", __FILE__, _YEARS, _NAME_H, _NAME_H);
print_feature_defs();
+ print_feature_group_defs();
printf("\n#endif\n");
return 0;
}
--
2.9.3
- [Qemu-devel] [PATCH for-2.8 08/38] linux-headers: update, (continued)
- [Qemu-devel] [PATCH for-2.8 08/38] linux-headers: update, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 11/38] s390x/cpumodel: "host" and "qemu" as CPU subclasses, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 22/38] s390x/sclp: factor out preparation of cpu entries, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 30/38] s390x/kvm: disable host model for problematic compat machines, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 37/38] s390x/cpumodel: implement QMP interface "query-cpu-model-comparison", Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 02/38] s390x/pci: return directly if create zpci failed, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 34/38] qmp: add QMP interface "query-cpu-model-comparison", Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 13/38] s390x/cpumodel: introduce CPU features, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 32/38] s390x/kvm: don't enable key wrapping if msa3 is disabled, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 19/38] s390x/cpumodel: expose features and feature groups as properties, Cornelia Huck, 2016/08/29
- [Qemu-devel] [PATCH for-2.8 15/38] s390x/cpumodel: generate CPU feature group lists,
Cornelia Huck <=
- Re: [Qemu-devel] [PATCH for-2.8 00/38] s390x patches for 2.8, no-reply, 2016/08/29