From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: qemu-devel@nongnu.org
Cc: borntraeger@de.ibm.com, agraf@suse.de, jfrei@linux.vnet.ibm.com,
David Hildenbrand <dahi@linux.vnet.ibm.com>,
Cornelia Huck <cornelia.huck@de.ibm.com>
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 [thread overview]
Message-ID: <20160829114530.10842-16-cornelia.huck@de.ibm.com> (raw)
In-Reply-To: <20160829114530.10842-1-cornelia.huck@de.ibm.com>
From: David Hildenbrand <dahi@linux.vnet.ibm.com>
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 <cornelia.huck@de.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1472062266-53206-7-git-send-email-dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
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
next prev parent reply other threads:[~2016-08-29 11:46 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-29 11:44 [Qemu-devel] [PATCH for-2.8 00/38] s390x patches for 2.8 Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 01/38] s390x: add compat machine " Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 02/38] s390x/pci: return directly if create zpci failed Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 03/38] s390x/pci: assert zpci always existing Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 04/38] s390/sclp: cache the sclp device Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 05/38] s390x: wrap flic savevm calls into vmstate Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 06/38] s390x/ioinst: advertise fcs facility Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 07/38] s390x/css: handle cssid 255 correctly Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 08/38] linux-headers: update Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 09/38] s390x/kvm: 2 byte software breakpoint support Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 10/38] qmp: details about CPU definitions in query-cpu-definitions Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 11/38] s390x/cpumodel: "host" and "qemu" as CPU subclasses Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 12/38] s390x/cpumodel: expose CPU class properties Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 13/38] s390x/cpumodel: introduce CPU features Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 14/38] s390x/cpumodel: generate CPU feature lists for CPU models Cornelia Huck
2016-08-29 11:45 ` Cornelia Huck [this message]
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 16/38] s390x/cpumodel: introduce CPU feature group definitions Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 17/38] s390x/cpumodel: register defined CPU models as subclasses Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 18/38] s390x/cpumodel: store the CPU model in the CPU instance Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 19/38] s390x/cpumodel: expose features and feature groups as properties Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 20/38] s390x/cpumodel: let the CPU model handle feature checks Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 21/38] s390x/cpumodel: check and apply the CPU model Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 22/38] s390x/sclp: factor out preparation of cpu entries Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 23/38] s390x/sclp: introduce sclp feature blocks Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 24/38] s390x/sclp: indicate sclp features Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 25/38] s390x/sclp: propagate the ibc val (lowest and unblocked ibc) Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 26/38] s390x/sclp: propagate the mha via sclp Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 27/38] s390x/sclp: propagate hmfai Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 28/38] s390x/kvm: allow runtime-instrumentation for "none" machine Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 29/38] s390x/kvm: implement CPU model support Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 30/38] s390x/kvm: disable host model for problematic compat machines Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 31/38] s390x/kvm: let the CPU model control CMM(A) Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 32/38] s390x/kvm: don't enable key wrapping if msa3 is disabled Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 33/38] qmp: add QMP interface "query-cpu-model-expansion" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 34/38] qmp: add QMP interface "query-cpu-model-comparison" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 35/38] qmp: add QMP interface "query-cpu-model-baseline" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 36/38] s390x/cpumodel: implement QMP interface "query-cpu-model-expansion" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 37/38] s390x/cpumodel: implement QMP interface "query-cpu-model-comparison" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 38/38] s390x/cpumodel: implement QMP interface "query-cpu-model-baseline" Cornelia Huck
2016-08-29 15:39 ` [Qemu-devel] [PATCH for-2.8 00/38] s390x patches for 2.8 no-reply
2016-09-05 7:28 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160829114530.10842-16-cornelia.huck@de.ibm.com \
--to=cornelia.huck@de.ibm.com \
--cc=agraf@suse.de \
--cc=borntraeger@de.ibm.com \
--cc=dahi@linux.vnet.ibm.com \
--cc=jfrei@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).