qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Mohamed Mediouni" <mohamed@unpredictable.fr>,
	qemu-devel@nongnu.org,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Roman Bolshakov" <rbolshakov@ddn.com>,
	"Phil Dennis-Jordan" <phil@philjordan.eu>,
	"Ani Sinha" <anisinha@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Alexander Graf" <agraf@csgraf.de>,
	"Mads Ynddal" <mads@ynddal.dk>,
	"Sunil Muthuswamy" <sunilmut@microsoft.com>,
	"Zhao Liu" <zhao1.liu@intel.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Cameron Esfahani" <dirty@apple.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Shannon Zhao" <shannon.zhaosl@gmail.com>,
	qemu-arm@nongnu.org, "Yanan Wang" <wangyanan55@huawei.com>
Subject: Re: [PATCH v5 15/18] whpx: arm64: implement -cpu host
Date: Tue, 19 Aug 2025 09:25:22 -0700	[thread overview]
Message-ID: <3eefa4f1-56ae-40ed-9317-2a3e4e6983ea@linaro.org> (raw)
In-Reply-To: <aKShmdP3Pdn-wYgY@redhat.com>

On 8/19/25 9:08 AM, Daniel P. Berrangé wrote:
> On Tue, Aug 19, 2025 at 08:48:16AM -0700, Pierrick Bouvier wrote:
>> On 8/19/25 8:12 AM, Daniel P. Berrangé wrote:
>>> On Tue, Aug 19, 2025 at 04:06:45PM +0100, Peter Maydell wrote:
>>>> On Tue, 19 Aug 2025 at 16:04, Pierrick Bouvier
>>>> <pierrick.bouvier@linaro.org> wrote:
>>>>>
>>>>> On 8/19/25 6:24 AM, Peter Maydell wrote:
>>>>>> On Fri, 8 Aug 2025 at 07:55, Mohamed Mediouni <mohamed@unpredictable.fr> wrote:
>>>>>> Can you follow the QEMU coding style, please (here and elsewhere)?
>>>>>> Variables and function names should be all lower case,
>>>>>> and variable declarations go at the start of a C code
>>>>>> block, not in the middle of one.
>>>>>>
>>>>>
>>>>> In some cases, including in this function, I feel that the rule to
>>>>> declare variables at the start of a block is not really helpful, and is
>>>>> more related to legacy C than a real point nowadays.
>>>>> As well, it sometimes forces to reuse some variables between various sub
>>>>> blocks, which definitely can create bugs.
>>>>>
>>>>> Anyway, I'm not discussing the existing QEMU coding style, but just
>>>>> asking if for the current context, is it really a problem to declare
>>>>> variable here?
>>>>
>>>> The point of a coding style is to aim for consistency. QEMU
>>>> is pretty terrible at being consistent, but we should try.
>>>> The rule about variables at start of block is not because
>>>> some compilers fail to compile it, but because we think
>>>> it's overall more readable that way.
>>>
>>> There are also potential[1] functional problems with not declaring
>>> at the start of block, because if you have a "goto cleanup" which
>>> jumps over the line of the declaration, the variable will have
>>> undefined state when the 'cleanup:' block is running. This is
>>> something which is very subtle and easily missed when reading the
>>> code flow.
>>>
>>
>> This has nothing to do with where variables are declared, but where they are
>> assigned. The same issue can happen whether or not it's declared at the
>> start of a block.
>>
>> I suspect we use -ftrivial-auto-var-init precisely because we force
>> variables to be declared at start of the scope, i.e. where they don't have
>> any value yet. So, instead of forcing an explicit initialization or rely on
>> compiler warnings for uninitialized values, it was decided to initialize
>> them to 0 by default.
>>
>> If we declared them at the point where they have a defined semantic value,
>> this problem would not exist anyway, out of the goto_cleanup situation,
>> which has the same fundamental issue in both cases.
> 
> It really isn't the same issue when you compare
> 
>    void bar(void) {
>      char *foo = NULL;
> 
>      if (blah)
>         goto cleanup:
> 
>    cleanup:
>      if (foo)
>         ....
>    }
> 
> vs
> 
>    void bar(void) {
>      if (blah)
>         goto cleanup:
> 
>      char *foo = NULL;
>
>      ...some code...
>
>    cleanup:>      if (foo)
>         ....
>    }
> 
> The late declaration of 'foo' is outright misleading to reviewers.
> 
> Its initialization at time of declaration gives the impression
> that 'foo' has well defined value in the 'cleanup' block, when
> that is not actually true. In big methods it is very easy to
> overlook an earlier 'goto' that jumps across a variable declaration
> and initialization.
>

"Big" method is probably the issue there. If it's not possible to follow 
control flow in a given function, it's a strong hint there is a problem 
with its size, independently of any standard. And even though 
goto_cleanup is a legit pattern in C, I still don't get the argument 
about declaring variable far from their definition point in this case.
It seems that we are trying to solve the consequence without really 
understanding the root cause issue.

> Even if not all methods have this problem, the coding standards
> guide us into the habit of writing code that is immune from this
> kind of problem. That habit only forms reliably if we apply the
> coding standards unconditionally, rather than selectively.
>

That's right, but humanly enforced coding standard are usually a waste 
of time for everyone (reviewers and developers).

How many messages and exchanges on the mailing list could we save by 
using something like clang-format on the codebase, and force it to be 
"clean" as part of the CI? There would be no more discussion, as there 
would be only one single and objective source of truth.

> With regards,
> Daniel



  reply	other threads:[~2025-08-19 16:26 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-08  6:54 [PATCH v5 00/18] WHPX support for Arm Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 01/18] accel/system: Introduce hwaccel_enabled() helper Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 02/18] hw/arm: virt: add GICv2m for the case when ITS is not available Mohamed Mediouni
2025-08-19 13:04   ` Peter Maydell
2025-08-19 13:10   ` Peter Maydell
2025-08-08  6:54 ` [PATCH v5 03/18] whpx: Move around files before introducing AArch64 support Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 04/18] whpx: reshuffle common code Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 05/18] whpx: ifdef out winhvemulation on non-x86_64 Mohamed Mediouni
2025-09-04 12:05   ` Bernhard Beschow
2025-08-08  6:54 ` [PATCH v5 06/18] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 07/18] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Mohamed Mediouni
2025-08-08 20:45   ` Philippe Mathieu-Daudé
2025-08-08  6:54 ` [PATCH v5 08/18] whpx: interrupt controller support Mohamed Mediouni
2025-08-19 15:04   ` Peter Maydell
2025-08-08  6:54 ` [PATCH v5 09/18] whpx: add arm64 support Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 10/18] whpx: copy over memory management logic from hvf Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 11/18] target/arm: cpu: mark WHPX as supporting PSCI 1.1 Mohamed Mediouni
2025-08-08 20:53   ` Philippe Mathieu-Daudé
2025-08-08  6:54 ` [PATCH v5 12/18] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 13/18] whpx: arm64: clamp down IPA size Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 14/18] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 15/18] whpx: arm64: implement -cpu host Mohamed Mediouni
2025-08-19 13:24   ` Peter Maydell
2025-08-19 15:04     ` Pierrick Bouvier
2025-08-19 15:06       ` Peter Maydell
2025-08-19 15:12         ` Daniel P. Berrangé
2025-08-19 15:48           ` Pierrick Bouvier
2025-08-19 16:08             ` Daniel P. Berrangé
2025-08-19 16:25               ` Pierrick Bouvier [this message]
2025-08-19 16:40                 ` Daniel P. Berrangé
2025-08-19 16:58                   ` Pierrick Bouvier
2025-08-08  6:54 ` [PATCH v5 16/18] target/arm: whpx: instantiate GIC early Mohamed Mediouni
2025-08-08  6:54 ` [PATCH v5 17/18] whpx: arm64: gicv3: add migration blocker Mohamed Mediouni
2025-08-08 16:14   ` Pierrick Bouvier
2025-08-19 13:13   ` Peter Maydell
2025-08-08  6:54 ` [PATCH v5 18/18] MAINTAINERS: Add myself as a maintainer for WHPX Mohamed Mediouni
2025-08-08 21:02   ` Philippe Mathieu-Daudé
2025-09-04 12:01 ` [PATCH v5 00/18] WHPX support for Arm Bernhard Beschow

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=3eefa4f1-56ae-40ed-9317-2a3e4e6983ea@linaro.org \
    --to=pierrick.bouvier@linaro.org \
    --cc=agraf@csgraf.de \
    --cc=anisinha@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dirty@apple.com \
    --cc=eduardo@habkost.net \
    --cc=imammedo@redhat.com \
    --cc=mads@ynddal.dk \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mohamed@unpredictable.fr \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=phil@philjordan.eu \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rbolshakov@ddn.com \
    --cc=richard.henderson@linaro.org \
    --cc=shannon.zhaosl@gmail.com \
    --cc=sunilmut@microsoft.com \
    --cc=wangyanan55@huawei.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 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).