120 lines
4.0 KiB
Diff
120 lines
4.0 KiB
Diff
From e7f11d39d1ef78f47ed6d45ecd278d51c502f131 Mon Sep 17 00:00:00 2001
|
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
Date: Fri, 22 Nov 2019 11:53:37 +0000
|
|
Subject: [PATCH 04/16] i386: display known CPUID features linewrapped, in
|
|
alphabetical order
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
|
Message-id: <20191122115348.25000-5-pbonzini@redhat.com>
|
|
Patchwork-id: 92605
|
|
O-Subject: [RHEL8.2/rhel qemu-kvm PATCH 04/15] i386: display known CPUID features linewrapped, in alphabetical order
|
|
Bugzilla: 1689270
|
|
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
RH-Acked-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
RH-Acked-by: Maxim Levitsky <mlevitsk@redhat.com>
|
|
|
|
From: Daniel P. Berrangé <berrange@redhat.com>
|
|
|
|
When using '-cpu help' the list of CPUID features is grouped according
|
|
to the internal low level CPUID grouping. The data printed results in
|
|
very long lines too.
|
|
|
|
This combines to make it hard for users to read the output and identify
|
|
if QEMU knows about the feature they wish to use.
|
|
|
|
This change gets rid of the grouping of features and treats all flags as
|
|
single list. The list is sorted into alphabetical order and the printing
|
|
with line wrapping at the 77th column.
|
|
|
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
Message-Id: <20180606165527.17365-4-berrange@redhat.com>
|
|
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
(cherry picked from commit cc643b1e7898414b56f551bbd42d4ed8c2ae127a)
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
target/i386/cpu.c | 41 +++++++++++++++++++++++++++--------------
|
|
1 file changed, 27 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|
index 52f1f33..d0c48c2 100644
|
|
--- a/target/i386/cpu.c
|
|
+++ b/target/i386/cpu.c
|
|
@@ -3651,17 +3651,21 @@ static void x86_cpu_class_check_missing_features(X86CPUClass *xcc,
|
|
|
|
/* Print all cpuid feature names in featureset
|
|
*/
|
|
-static void listflags(FILE *f, fprintf_function print, const char **featureset)
|
|
+static void listflags(FILE *f, fprintf_function print, GList *features)
|
|
{
|
|
- int bit;
|
|
- bool first = true;
|
|
-
|
|
- for (bit = 0; bit < 32; bit++) {
|
|
- if (featureset[bit]) {
|
|
- print(f, "%s%s", first ? "" : " ", featureset[bit]);
|
|
- first = false;
|
|
+ size_t len = 0;
|
|
+ GList *tmp;
|
|
+
|
|
+ for (tmp = features; tmp; tmp = tmp->next) {
|
|
+ const char *name = tmp->data;
|
|
+ if ((len + strlen(name) + 1) >= 75) {
|
|
+ print(f, "\n");
|
|
+ len = 0;
|
|
}
|
|
+ print(f, "%s%s", len == 0 ? " " : " ", name);
|
|
+ len += strlen(name) + 1;
|
|
}
|
|
+ print(f, "\n");
|
|
}
|
|
|
|
/* Sort alphabetically by type name, respecting X86CPUClass::ordering. */
|
|
@@ -3708,26 +3712,35 @@ static void x86_cpu_list_entry(gpointer data, gpointer user_data)
|
|
/* list available CPU models and flags */
|
|
void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf)
|
|
{
|
|
- int i;
|
|
+ int i, j;
|
|
CPUListState s = {
|
|
.file = f,
|
|
.cpu_fprintf = cpu_fprintf,
|
|
};
|
|
GSList *list;
|
|
+ GList *names = NULL;
|
|
|
|
(*cpu_fprintf)(f, "Available CPUs:\n");
|
|
list = get_sorted_cpu_model_list();
|
|
g_slist_foreach(list, x86_cpu_list_entry, &s);
|
|
g_slist_free(list);
|
|
|
|
- (*cpu_fprintf)(f, "\nRecognized CPUID flags:\n");
|
|
+ names = NULL;
|
|
for (i = 0; i < ARRAY_SIZE(feature_word_info); i++) {
|
|
FeatureWordInfo *fw = &feature_word_info[i];
|
|
-
|
|
- (*cpu_fprintf)(f, " ");
|
|
- listflags(f, cpu_fprintf, fw->feat_names);
|
|
- (*cpu_fprintf)(f, "\n");
|
|
+ for (j = 0; j < 32; j++) {
|
|
+ if (fw->feat_names[j]) {
|
|
+ names = g_list_append(names, (gpointer)fw->feat_names[j]);
|
|
+ }
|
|
+ }
|
|
}
|
|
+
|
|
+ names = g_list_sort(names, (GCompareFunc)strcmp);
|
|
+
|
|
+ (*cpu_fprintf)(f, "\nRecognized CPUID flags:\n");
|
|
+ listflags(f, cpu_fprintf, names);
|
|
+ (*cpu_fprintf)(f, "\n");
|
|
+ g_list_free(names);
|
|
}
|
|
|
|
static void x86_cpu_definition_entry(gpointer data, gpointer user_data)
|
|
--
|
|
1.8.3.1
|
|
|