All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cohuck@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: qemu-devel@nongnu.org,
	Richard Henderson <richard.henderson@linaro.org>,
	thuth@redhat.com, borntraeger@de.ibm.com,
	Alexander Graf <agraf@suse.de>,
	Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 15/19] s390x: print CPU definitions in sorted order
Date: Thu, 7 Sep 2017 17:22:22 +0200	[thread overview]
Message-ID: <20170907172222.6307d887.cohuck@redhat.com> (raw)
In-Reply-To: <20170904154316.4148-16-david@redhat.com>

On Mon,  4 Sep 2017 17:43:12 +0200
David Hildenbrand <david@redhat.com> wrote:

> Other architectures provide nicely sorted lists, let's do it similarly on
> s390x.
> 
> While at it, clean up the code we have to touch either way.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu_models.c | 63 ++++++++++++++++++++++++++++++-----------------
>  1 file changed, 41 insertions(+), 22 deletions(-)
> 
> diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
> index 8e20e7637b..092db34258 100644
> --- a/target/s390x/cpu_models.c
> +++ b/target/s390x/cpu_models.c
> @@ -270,41 +270,60 @@ const S390CPUDef *s390_find_cpu_def(uint16_t type, uint8_t gen, uint8_t ec_ga,
>      return last_compatible;
>  }
>  
> -struct S390PrintCpuListInfo {
> -    FILE *f;
> -    fprintf_function print;
> -};
> -
> -static void print_cpu_model_list(ObjectClass *klass, void *opaque)
> +static void s390_print_cpu_model_list_entry(gpointer data, gpointer user_data)
>  {
> -    struct S390PrintCpuListInfo *info = opaque;
> -    S390CPUClass *scc = S390_CPU_CLASS(klass);
> -    char *name = g_strdup(object_class_get_name(klass));
> -    const char *details = "";
> -
> -    if (scc->is_static) {
> -        details = "(static, migration-safe)";
> -    } else if (scc->is_migration_safe) {
> -        details = "(migration-safe)";
> -    }
> +    CPUListState *s = user_data;
> +    const S390CPUClass *scc = S390_CPU_CLASS((ObjectClass *)data);
> +    char *name = g_strdup(object_class_get_name((ObjectClass *)data));
>  
>      /* strip off the -s390-cpu */
>      g_strrstr(name, "-" TYPE_S390_CPU)[0] = 0;
> -    (*info->print)(info->f, "s390 %-15s %-35s %s\n", name, scc->desc,
> -                   details);
> +    (*s->cpu_fprintf)(s->file, "s390 %-15s %-35s (%smigration-safe)\n", name,
> +                      scc->desc, scc->is_static ? "static, " : "");

Hm, that now prints 's390 host' as 'migration safe'...

>      g_free(name);
>  }
>  
> +static gint s390_cpu_list_compare(gconstpointer a, gconstpointer b)
> +{
> +    const S390CPUClass *cc_a = S390_CPU_CLASS((ObjectClass *)a);
> +    const S390CPUClass *cc_b = S390_CPU_CLASS((ObjectClass *)b);
> +    const char *name_a = object_class_get_name((ObjectClass *)a);
> +    const char *name_b = object_class_get_name((ObjectClass *)b);
> +
> +    /* move qemu and host to the top of the list, qemu first, host second */
> +    if (name_a[0] == 'q') {
> +        return -1;
> +    } else if (name_b[0] == 'q') {
> +        return 1;
> +    } else if (name_a[0] == 'h') {
> +        return -1;
> +    } else if (name_b[0] == 'h') {
> +        return 1;
> +    }

Are we sure that there will never be models starting with q or h? But
we can worry about that later.

> +
> +    /* keep the same order we have in our table (sorted by release date) */
> +    if (cc_a->cpu_def != cc_b->cpu_def) {
> +        return cc_a->cpu_def - cc_b->cpu_def;
> +    }
> +
> +    /* exact same definition - list base model first */
> +    return cc_a->is_static ? -1 : 1;
> +}
> +
>  void s390_cpu_list(FILE *f, fprintf_function print)
>  {
> -    struct S390PrintCpuListInfo info = {
> -        .f = f,
> -        .print = print,
> +    CPUListState s = {
> +        .file = f,
> +        .cpu_fprintf = print,
>      };
>      S390FeatGroup group;
>      S390Feat feat;
> +    GSList *list;
>  
> -    object_class_foreach(print_cpu_model_list, TYPE_S390_CPU, false, &info);
> +    list = object_class_get_list(TYPE_S390_CPU, false);
> +    list = g_slist_sort(list, s390_cpu_list_compare);
> +    g_slist_foreach(list, s390_print_cpu_model_list_entry, &s);
> +    g_slist_free(list);
>  
>      (*print)(f, "\nRecognized feature flags:\n");
>      for (feat = 0; feat < S390_FEAT_MAX; feat++) {

Sorting looks good.

  reply	other threads:[~2017-09-07 15:22 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-04 15:42 [Qemu-devel] [PATCH v2 00/19] s390x cleanups and CPU hotplug via device_add David Hildenbrand
2017-09-04 15:42 ` [Qemu-devel] [PATCH v2 01/19] exec, dump, i386, ppc, s390x: don't include exec/cpu-all.h explicitly David Hildenbrand
2017-09-05 12:25   ` Cornelia Huck
2017-09-07  5:46   ` Thomas Huth
2017-09-07 12:41     ` David Hildenbrand
2017-09-07 13:11       ` Cornelia Huck
2017-09-04 15:42 ` [Qemu-devel] [PATCH v2 02/19] cpu: drop old comments describing members David Hildenbrand
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 03/19] s390x: get rid of s390-virtio.c David Hildenbrand
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 04/19] s390x: rename s390-virtio.h to s390-virtio-hcall.h David Hildenbrand
2017-09-05  8:54   ` Christian Borntraeger
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 05/19] target/s390x: move typedef of S390CPU to its definition David Hildenbrand
2017-09-05 12:34   ` Cornelia Huck
2017-09-07  5:50   ` Thomas Huth
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 06/19] s390x: move s390_virtio_hypercall() to s390-virtio-hcall.h David Hildenbrand
2017-09-07  5:56   ` Thomas Huth
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 07/19] s390x: move two function declarations to s390-virtio-ccw.h David Hildenbrand
2017-09-07  6:04   ` Thomas Huth
2017-09-07 12:46     ` David Hildenbrand
2017-09-07 13:23       ` Cornelia Huck
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 08/19] s390x: move sclp_service_call() to interrupt.c David Hildenbrand
2017-09-05 12:38   ` Cornelia Huck
2017-09-05 12:42     ` David Hildenbrand
2017-09-05 12:46       ` Christian Borntraeger
2017-09-05 12:52         ` Thomas Huth
2017-09-05 12:55           ` Cornelia Huck
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 09/19] target/s390x: use trigger_pgm_exception() in s390_cpu_handle_mmu_fault() David Hildenbrand
2017-09-07  5:59   ` Thomas Huth
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 10/19] target/s390x: use program_interrupt() in per_check_exception() David Hildenbrand
2017-09-07 13:32   ` Cornelia Huck
2017-09-07 13:52     ` David Hildenbrand
2017-09-07 16:55       ` Cornelia Huck
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 11/19] s390x: allow only 1 CPU with TCG David Hildenbrand
2017-09-06 18:16   ` Matthew Rosato
2017-09-06 21:20     ` Richard Henderson
2017-09-07 12:49       ` David Hildenbrand
2017-09-07 12:51         ` Cornelia Huck
2017-09-14 18:13       ` David Hildenbrand
2017-09-15  7:38         ` Cornelia Huck
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 12/19] target/s390x: set cpu->id for linux user when realizing David Hildenbrand
2017-09-07  1:42   ` Matthew Rosato
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 13/19] target/s390x: use "core-id" for cpu number/address/id handling David Hildenbrand
2017-09-07  3:15   ` Matthew Rosato
2017-09-07 13:02     ` David Hildenbrand
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 14/19] target/s390x: rename next_cpu_id to next_core_id David Hildenbrand
2017-09-07  3:15   ` Matthew Rosato
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 15/19] s390x: print CPU definitions in sorted order David Hildenbrand
2017-09-07 15:22   ` Cornelia Huck [this message]
2017-09-07 20:04     ` David Hildenbrand
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 16/19] s390x: allow cpu hotplug via device_add David Hildenbrand
2017-09-07  3:16   ` Matthew Rosato
2017-09-07 13:04     ` David Hildenbrand
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 17/19] s390x: CPU hot unplug via device_del cannot work David Hildenbrand
2017-09-05  9:14   ` Christian Borntraeger
2017-09-05 12:01     ` David Hildenbrand
2017-09-05 12:14       ` Christian Borntraeger
2017-09-05 12:54         ` Cornelia Huck
2017-09-05 13:09           ` Christian Borntraeger
2017-09-06 18:13   ` Matthew Rosato
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 18/19] s390x: implement query-hotpluggable-cpus David Hildenbrand
2017-09-07 17:05   ` Cornelia Huck
2017-09-04 15:43 ` [Qemu-devel] [PATCH v2 19/19] s390x: get rid of cpu_s390x_create() David Hildenbrand
2017-09-07 17:11   ` Cornelia Huck
2017-09-05  7:51 ` [Qemu-devel] [PATCH v2 00/19] s390x cleanups and CPU hotplug via device_add Christian Borntraeger
2017-09-06 16:03   ` David Hildenbrand
2017-09-06 16:21     ` Matthew Rosato

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=20170907172222.6307d887.cohuck@redhat.com \
    --to=cohuck@redhat.com \
    --cc=agraf@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.