All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhao Liu <zhao1.liu@linux.intel.com>
To: Prasad Pandit <ppandit@redhat.com>
Cc: "Thomas Huth" <thuth@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Yanan Wang" <wangyanan55@huawei.com>,
	"Daniel P . Berrangé" <berrange@redhat.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	qemu-devel@nongnu.org, "Xiaoling Song" <xiaoling.song@intel.com>,
	"Zhao Liu" <zhao1.liu@intel.com>,
	"Prasad Pandit" <pjp@fedoraproject.org>
Subject: Re: [PATCH 03/14] hw/core/machine-smp: Simplify variables' initialization in machine_parse_smp_config()
Date: Mon, 18 Mar 2024 16:06:38 +0800	[thread overview]
Message-ID: <Zff2DgJa+eHPBhgJ@intel.com> (raw)
In-Reply-To: <CAE8KmOzwrLY5ag_FKvX-ovAopfPeYSqFHc3-sdQj_zt_28tH5A@mail.gmail.com>

On Wed, Mar 13, 2024 at 04:22:30PM +0530, Prasad Pandit wrote:
> Date: Wed, 13 Mar 2024 16:22:30 +0530
> From: Prasad Pandit <ppandit@redhat.com>
> Subject: Re: [PATCH 03/14] hw/core/machine-smp: Simplify variables'
>  initialization in machine_parse_smp_config()
> 
> Hello Zhao,
> 
> > (Communicating with you also helped me to understand the QAPI related parts.)
> 
> * I'm also visiting QAPI code parts for the first time. Thanks to you. :)
> 
> On Mon, 11 Mar 2024 at 10:36, Zhao Liu <zhao1.liu@linux.intel.com> wrote:
> > SMPConfiguration is created and set in machine_set_smp().
> > Firstly, it is created by g_autoptr(), and then it is initialized by
> > visit_type_SMPConfiguration().
> >
> > The visit_type_SMPConfiguration() is generated by
> > gen_visit_object_members() in scripts/qapi/visit.py.
> >
> > IIUC, in visit_type_SMPConfiguration() (let's have a look at
> > gen_visit_object_members()), there's no explicit initialization of
> > SMPConfiguration() (i.e., the parameter named "%(c_name)s *obj" in
> > gen_visit_object_members()). For int type, has_* means that the field is
> > set.
> >
> 
> * Thank you for the above details, appreciate it. I added few
> fprintf() calls to visit_type_SMPConfiguration() to see what user
> values it receives
> ===
> $ ./qemu-system-x86_64 -smp cores=2,maxcpus=2,cpus=1,sockets=2
> visit_type_SMPConfiguration: name: smp
>         has_cpus: 1:1
>  has_drawvers: 0:0
>       has_books: 0:0
>   has_sockets: 1:2
>         has_dies: 0:0
>  has_clusters: 0:0
>      has_cores: 1:2
>   has_threads: 0:0
> has_maxcpus: 1:2
> qemu-system-x86_64: Invalid CPU topology: product of the hierarchy
> must match maxcpus: sockets (2) * dies (1) * cores (2) * threads (0)
> != maxcpus (2)
> ===
> * As seen above, undefined -smp fields (both has_xxxx and xxxx) are
> set to zero(0).
> 
> ===
> main
>  qemu_init
>   qemu_apply_machine_options
>    object_set_properties_from_keyval
>     object_set_properties_from_qdict
>      object_property_set
>       machine_set_smp
>        visit_type_SMPConfiguration
>         visit_start_struct
> (gdb) p v->start_struct
> $4 = ... 0x5555570248e4 <qobject_input_start_struct>
> (gdb)
> (gdb)
>  qobject_input_start_struct
>    if (obj) {
>         *obj = g_malloc0(size);
>     }
> ===
> * Stepping through function calls in gdb(1) revealed above call
> sequence which leads to  'SMPConfiguration **'  objects allocation by
> g_malloc0.

Thanks! I misunderstood, it turns out that the initialization is done here.

> 
> > This means if user doesn't initialize some field, the the value should
> > be considerred as unreliable. And I guess for int, the default
> > initialization value is the same as if we had declared a regular integer
> > variable. But anyway, fields that are not explicitly initialized should
> > not be accessed.
> 
> * g_malloc0() allocating 'SMPConfiguration **' object above assures us
> that undefined -smp fields shall always be zero(0).
> 
> * 'obj->has_xxxx' field is set only if the user has supplied the
> variable value, otherwise it remains set to zero(0).
>    visit_type_SMPConfiguration_members
>      ->visit_optional
>        ->v->optional
>         -> qobject_input_optional

Yes, you're right!

> 
> * Overall, I think there is scope to simplify the
> 'machine_parse_smp_config()' function by using SMPConfiguration
> field(s) ones.

Indeed, as you say, these items are initialized to 0 by default.

I think, however, that the initialization is so far away from where the
smp is currently parsed that one can't easily confirm it (thanks for
your confirmation!).

From a code readability view, the fact that we're explicitly
initializing to 0 again here brings little overhead, but makes the code
more readable as well as easier to maintain. I think the small redundancy
here is worth it.

Also, in other use cases people always relies on fields marked by has_*,
and there is no (or less?) precedent for direct access to places where
has_* is not set. I understand that this is also a habit, i.e., fields
with a has_* of False by default are unreliable and avoid going directly
to them.

Regards,
Zhao



  reply	other threads:[~2024-03-18  7:53 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06  9:53 [PATCH 00/14] Cleanup on SMP and its test Zhao Liu
2024-03-06  9:53 ` [PATCH 01/14] hw/core/machine-smp: Remove deprecated "parameter=0" SMP configurations Zhao Liu
2024-03-06  9:53 ` [PATCH 02/14] hw/core/machine-smp: Deprecate unsupported "parameter=1" " Zhao Liu
2024-03-07  6:22   ` Thomas Huth
2024-03-07  7:07     ` Zhao Liu
2024-03-06  9:53 ` [PATCH 03/14] hw/core/machine-smp: Simplify variables' initialization in machine_parse_smp_config() Zhao Liu
2024-03-08 13:20   ` Thomas Huth
2024-03-08 15:33     ` Zhao Liu
2024-03-10 11:55       ` Prasad Pandit
2024-03-11  5:20         ` Zhao Liu
2024-03-13 10:52           ` Prasad Pandit
2024-03-18  8:06             ` Zhao Liu [this message]
2024-03-18 11:18               ` Prasad Pandit
2024-03-06  9:53 ` [PATCH 04/14] hw/core/machine-smp: Calculate total CPUs once " Zhao Liu
2024-03-06 20:56   ` Philippe Mathieu-Daudé
2024-03-06  9:53 ` [PATCH 05/14] tests/unit/test-smp-parse: Drop the unsupported "dies=1" case Zhao Liu
2024-03-08 13:22   ` Thomas Huth
2024-03-06  9:53 ` [PATCH 06/14] tests/unit/test-smp-parse: Use CPU number macros in invalid topology case Zhao Liu
2024-03-06  9:54 ` [PATCH 07/14] tests/unit/test-smp-parse: Bump max_cpus to 4096 Zhao Liu
2024-03-07  6:01   ` Thomas Huth
2024-03-07  7:03     ` Zhao Liu
2024-03-06  9:54 ` [PATCH 08/14] tests/unit/test-smp-parse: Make test cases aware of the book/drawer Zhao Liu
2024-03-06  9:54 ` [PATCH 09/14] tests/unit/test-smp-parse: Test "books" parameter in -smp Zhao Liu
2024-03-06  9:54 ` [PATCH 10/14] tests/unit/test-smp-parse: Test "drawers" " Zhao Liu
2024-03-06  9:54 ` [PATCH 11/14] tests/unit/test-smp-parse: Test "drawers" and "books" combination case Zhao Liu
2024-03-07  6:07   ` Thomas Huth
2024-03-06  9:54 ` [PATCH 12/14] tests/unit/test-smp-parse: Test the full 7-levels topology hierarchy Zhao Liu
2024-03-06  9:54 ` [PATCH 13/14] tests/unit/test-smp-parse: Test smp_props.has_clusters Zhao Liu
2024-03-06  9:54 ` [PATCH 14/14] tests/unit/test-smp-parse: Test "parameter=0" SMP configurations Zhao Liu
2024-03-07  6:11   ` Thomas Huth
2024-03-06 21:07 ` [PATCH 00/14] Cleanup on SMP and its test Philippe Mathieu-Daudé
2024-03-07  7:25   ` Zhao Liu

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=Zff2DgJa+eHPBhgJ@intel.com \
    --to=zhao1.liu@linux.intel.com \
    --cc=berrange@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=imammedo@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=philmd@linaro.org \
    --cc=pjp@fedoraproject.org \
    --cc=ppandit@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    --cc=wangyanan55@huawei.com \
    --cc=xiaoling.song@intel.com \
    --cc=zhao1.liu@intel.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.