* [XEN PATCH 0/2] address some violations of MISRA C Rule 17.7
@ 2024-02-23 9:35 Nicola Vetrini
2024-02-23 9:35 ` [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx Nicola Vetrini
2024-02-23 9:35 ` [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7 Nicola Vetrini
0 siblings, 2 replies; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-23 9:35 UTC (permalink / raw)
To: nicola.vetrini, xen-devel
Cc: sstabellini, consulting, Andrew Cooper, George Dunlap,
Jan Beulich, Julien Grall, Wei Liu
MISRA C Rule 17.7 states: "The value returned by a function having non-void
return type shall be used". Therefore the functions that are subject to this
series are refactored to address these concerns.
Nicola Vetrini (2):
xen/console: drop return value from consoled_guest_rx/tx
xen/cpu: address MISRA C Rule 17.7
xen/common/cpu.c | 31 +++++++++++++++++++------------
xen/drivers/char/consoled.c | 17 +++++------------
xen/include/xen/consoled.h | 4 ++--
3 files changed, 26 insertions(+), 26 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-23 9:35 [XEN PATCH 0/2] address some violations of MISRA C Rule 17.7 Nicola Vetrini
@ 2024-02-23 9:35 ` Nicola Vetrini
2024-02-23 22:56 ` Stefano Stabellini
2024-02-23 9:35 ` [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7 Nicola Vetrini
1 sibling, 1 reply; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-23 9:35 UTC (permalink / raw)
To: nicola.vetrini, xen-devel
Cc: sstabellini, consulting, Andrew Cooper, George Dunlap,
Jan Beulich, Julien Grall, Wei Liu
These functions never saw a usage of their return value since
they were introduced, so it can be dropped since their usages
violate MISRA C Rule 17.7:
"The value returned by a function having non-void return type shall be used".
No functional change.
Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
---
xen/drivers/char/consoled.c | 17 +++++------------
xen/include/xen/consoled.h | 4 ++--
2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/xen/drivers/char/consoled.c b/xen/drivers/char/consoled.c
index 222e01844271..b415b632cecc 100644
--- a/xen/drivers/char/consoled.c
+++ b/xen/drivers/char/consoled.c
@@ -43,13 +43,13 @@ struct xencons_interface *consoled_get_ring_addr(void)
static char buf[BUF_SZ + 1];
/* Receives characters from a domain's PV console */
-size_t consoled_guest_rx(void)
+void consoled_guest_rx(void)
{
- size_t recv = 0, idx = 0;
+ size_t idx = 0;
XENCONS_RING_IDX cons, prod;
if ( !cons_ring )
- return 0;
+ return;
spin_lock(&rx_lock);
@@ -73,7 +73,6 @@ size_t consoled_guest_rx(void)
char c = cons_ring->out[MASK_XENCONS_IDX(cons++, cons_ring->out)];
buf[idx++] = c;
- recv++;
if ( idx >= BUF_SZ )
{
@@ -92,18 +91,15 @@ size_t consoled_guest_rx(void)
out:
spin_unlock(&rx_lock);
-
- return recv;
}
/* Sends a character into a domain's PV console */
-size_t consoled_guest_tx(char c)
+void consoled_guest_tx(char c)
{
- size_t sent = 0;
XENCONS_RING_IDX cons, prod;
if ( !cons_ring )
- return 0;
+ return;
cons = ACCESS_ONCE(cons_ring->in_cons);
prod = cons_ring->in_prod;
@@ -121,7 +117,6 @@ size_t consoled_guest_tx(char c)
goto notify;
cons_ring->in[MASK_XENCONS_IDX(prod++, cons_ring->in)] = c;
- sent++;
/* Write to the ring before updating the pointer */
smp_wmb();
@@ -130,8 +125,6 @@ size_t consoled_guest_tx(char c)
notify:
/* Always notify the guest: prevents receive path from getting stuck. */
pv_shim_inject_evtchn(pv_console_evtchn());
-
- return sent;
}
/*
diff --git a/xen/include/xen/consoled.h b/xen/include/xen/consoled.h
index 2b30516b3a0a..bd7ab6329ee8 100644
--- a/xen/include/xen/consoled.h
+++ b/xen/include/xen/consoled.h
@@ -5,8 +5,8 @@
void consoled_set_ring_addr(struct xencons_interface *ring);
struct xencons_interface *consoled_get_ring_addr(void);
-size_t consoled_guest_rx(void);
-size_t consoled_guest_tx(char c);
+void consoled_guest_rx(void);
+void consoled_guest_tx(char c);
#endif /* __XEN_CONSOLED_H__ */
/*
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-23 9:35 [XEN PATCH 0/2] address some violations of MISRA C Rule 17.7 Nicola Vetrini
2024-02-23 9:35 ` [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx Nicola Vetrini
@ 2024-02-23 9:35 ` Nicola Vetrini
2024-02-23 22:58 ` Stefano Stabellini
2024-02-26 8:06 ` Jan Beulich
1 sibling, 2 replies; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-23 9:35 UTC (permalink / raw)
To: nicola.vetrini, xen-devel
Cc: sstabellini, consulting, Andrew Cooper, George Dunlap,
Jan Beulich, Julien Grall, Wei Liu
Refactor cpu_notifier_call_chain into two functions:
- the variant that is allowed to fail loses the nofail flag
- the variant that shouldn't fail is encapsulated in a call
to the failing variant, with an additional check.
This prevents uses of the function that are not supposed to
fail from ignoring the return value, thus violating Rule 17.7:
"The value returned by a function having non-void return type shall
be used".
No functional change.
Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
---
xen/common/cpu.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/xen/common/cpu.c b/xen/common/cpu.c
index 8709db4d2957..0b7cf54c4264 100644
--- a/xen/common/cpu.c
+++ b/xen/common/cpu.c
@@ -78,20 +78,27 @@ void __init register_cpu_notifier(struct notifier_block *nb)
}
static int cpu_notifier_call_chain(unsigned int cpu, unsigned long action,
- struct notifier_block **nb, bool nofail)
+ struct notifier_block **nb)
{
void *hcpu = (void *)(long)cpu;
int notifier_rc = notifier_call_chain(&cpu_chain, action, hcpu, nb);
int ret = notifier_to_errno(notifier_rc);
- BUG_ON(ret && nofail);
-
return ret;
}
+static void cpu_notifier_call_chain_nofail(unsigned int cpu,
+ unsigned long action,
+ struct notifier_block **nb)
+{
+ int ret = cpu_notifier_call_chain(cpu, action, nb);
+
+ BUG_ON(ret);
+}
+
static void cf_check _take_cpu_down(void *unused)
{
- cpu_notifier_call_chain(smp_processor_id(), CPU_DYING, NULL, true);
+ cpu_notifier_call_chain_nofail(smp_processor_id(), CPU_DYING, NULL);
__cpu_disable();
}
@@ -116,7 +123,7 @@ int cpu_down(unsigned int cpu)
if ( !cpu_online(cpu) )
goto out;
- err = cpu_notifier_call_chain(cpu, CPU_DOWN_PREPARE, &nb, false);
+ err = cpu_notifier_call_chain(cpu, CPU_DOWN_PREPARE, &nb);
if ( err )
goto fail;
@@ -129,14 +136,14 @@ int cpu_down(unsigned int cpu)
err = cpu_online(cpu);
BUG_ON(err);
- cpu_notifier_call_chain(cpu, CPU_DEAD, NULL, true);
+ cpu_notifier_call_chain_nofail(cpu, CPU_DEAD, NULL);
send_global_virq(VIRQ_PCPU_STATE);
cpu_hotplug_done();
return 0;
fail:
- cpu_notifier_call_chain(cpu, CPU_DOWN_FAILED, &nb, true);
+ cpu_notifier_call_chain_nofail(cpu, CPU_DOWN_FAILED, &nb);
out:
cpu_hotplug_done();
return err;
@@ -157,7 +164,7 @@ int cpu_up(unsigned int cpu)
if ( cpu_online(cpu) )
goto out;
- err = cpu_notifier_call_chain(cpu, CPU_UP_PREPARE, &nb, false);
+ err = cpu_notifier_call_chain(cpu, CPU_UP_PREPARE, &nb);
if ( err )
goto fail;
@@ -165,7 +172,7 @@ int cpu_up(unsigned int cpu)
if ( err < 0 )
goto fail;
- cpu_notifier_call_chain(cpu, CPU_ONLINE, NULL, true);
+ cpu_notifier_call_chain_nofail(cpu, CPU_ONLINE, NULL);
send_global_virq(VIRQ_PCPU_STATE);
@@ -173,7 +180,7 @@ int cpu_up(unsigned int cpu)
return 0;
fail:
- cpu_notifier_call_chain(cpu, CPU_UP_CANCELED, &nb, true);
+ cpu_notifier_call_chain_nofail(cpu, CPU_UP_CANCELED, &nb);
out:
cpu_hotplug_done();
return err;
@@ -181,7 +188,7 @@ int cpu_up(unsigned int cpu)
void notify_cpu_starting(unsigned int cpu)
{
- cpu_notifier_call_chain(cpu, CPU_STARTING, NULL, true);
+ cpu_notifier_call_chain_nofail(cpu, CPU_STARTING, NULL);
}
static cpumask_t frozen_cpus;
@@ -237,7 +244,7 @@ void enable_nonboot_cpus(void)
}
for_each_cpu ( cpu, &frozen_cpus )
- cpu_notifier_call_chain(cpu, CPU_RESUME_FAILED, NULL, true);
+ cpu_notifier_call_chain_nofail(cpu, CPU_RESUME_FAILED, NULL);
cpumask_clear(&frozen_cpus);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-23 9:35 ` [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx Nicola Vetrini
@ 2024-02-23 22:56 ` Stefano Stabellini
2024-02-26 8:00 ` Jan Beulich
0 siblings, 1 reply; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-23 22:56 UTC (permalink / raw)
To: Nicola Vetrini
Cc: xen-devel, sstabellini, consulting, Andrew Cooper, George Dunlap,
Jan Beulich, Julien Grall, Wei Liu
On Fri, 23 Feb 2024, Nicola Vetrini wrote:
> These functions never saw a usage of their return value since
> they were introduced, so it can be dropped since their usages
> violate MISRA C Rule 17.7:
> "The value returned by a function having non-void return type shall be used".
>
> No functional change.
>
> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> xen/drivers/char/consoled.c | 17 +++++------------
> xen/include/xen/consoled.h | 4 ++--
> 2 files changed, 7 insertions(+), 14 deletions(-)
>
> diff --git a/xen/drivers/char/consoled.c b/xen/drivers/char/consoled.c
> index 222e01844271..b415b632cecc 100644
> --- a/xen/drivers/char/consoled.c
> +++ b/xen/drivers/char/consoled.c
> @@ -43,13 +43,13 @@ struct xencons_interface *consoled_get_ring_addr(void)
> static char buf[BUF_SZ + 1];
>
> /* Receives characters from a domain's PV console */
> -size_t consoled_guest_rx(void)
> +void consoled_guest_rx(void)
> {
> - size_t recv = 0, idx = 0;
> + size_t idx = 0;
> XENCONS_RING_IDX cons, prod;
>
> if ( !cons_ring )
> - return 0;
> + return;
>
> spin_lock(&rx_lock);
>
> @@ -73,7 +73,6 @@ size_t consoled_guest_rx(void)
> char c = cons_ring->out[MASK_XENCONS_IDX(cons++, cons_ring->out)];
>
> buf[idx++] = c;
> - recv++;
>
> if ( idx >= BUF_SZ )
> {
> @@ -92,18 +91,15 @@ size_t consoled_guest_rx(void)
>
> out:
> spin_unlock(&rx_lock);
> -
> - return recv;
> }
>
> /* Sends a character into a domain's PV console */
> -size_t consoled_guest_tx(char c)
> +void consoled_guest_tx(char c)
> {
> - size_t sent = 0;
> XENCONS_RING_IDX cons, prod;
>
> if ( !cons_ring )
> - return 0;
> + return;
>
> cons = ACCESS_ONCE(cons_ring->in_cons);
> prod = cons_ring->in_prod;
> @@ -121,7 +117,6 @@ size_t consoled_guest_tx(char c)
> goto notify;
>
> cons_ring->in[MASK_XENCONS_IDX(prod++, cons_ring->in)] = c;
> - sent++;
>
> /* Write to the ring before updating the pointer */
> smp_wmb();
> @@ -130,8 +125,6 @@ size_t consoled_guest_tx(char c)
> notify:
> /* Always notify the guest: prevents receive path from getting stuck. */
> pv_shim_inject_evtchn(pv_console_evtchn());
> -
> - return sent;
> }
>
> /*
> diff --git a/xen/include/xen/consoled.h b/xen/include/xen/consoled.h
> index 2b30516b3a0a..bd7ab6329ee8 100644
> --- a/xen/include/xen/consoled.h
> +++ b/xen/include/xen/consoled.h
> @@ -5,8 +5,8 @@
>
> void consoled_set_ring_addr(struct xencons_interface *ring);
> struct xencons_interface *consoled_get_ring_addr(void);
> -size_t consoled_guest_rx(void);
> -size_t consoled_guest_tx(char c);
> +void consoled_guest_rx(void);
> +void consoled_guest_tx(char c);
>
> #endif /* __XEN_CONSOLED_H__ */
> /*
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-23 9:35 ` [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7 Nicola Vetrini
@ 2024-02-23 22:58 ` Stefano Stabellini
2024-02-26 8:06 ` Jan Beulich
1 sibling, 0 replies; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-23 22:58 UTC (permalink / raw)
To: Nicola Vetrini
Cc: xen-devel, sstabellini, consulting, Andrew Cooper, George Dunlap,
Jan Beulich, Julien Grall, Wei Liu
On Fri, 23 Feb 2024, Nicola Vetrini wrote:
> Refactor cpu_notifier_call_chain into two functions:
> - the variant that is allowed to fail loses the nofail flag
> - the variant that shouldn't fail is encapsulated in a call
> to the failing variant, with an additional check.
>
> This prevents uses of the function that are not supposed to
> fail from ignoring the return value, thus violating Rule 17.7:
> "The value returned by a function having non-void return type shall
> be used".
>
> No functional change.
>
> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> xen/common/cpu.c | 31 +++++++++++++++++++------------
> 1 file changed, 19 insertions(+), 12 deletions(-)
>
> diff --git a/xen/common/cpu.c b/xen/common/cpu.c
> index 8709db4d2957..0b7cf54c4264 100644
> --- a/xen/common/cpu.c
> +++ b/xen/common/cpu.c
> @@ -78,20 +78,27 @@ void __init register_cpu_notifier(struct notifier_block *nb)
> }
>
> static int cpu_notifier_call_chain(unsigned int cpu, unsigned long action,
> - struct notifier_block **nb, bool nofail)
> + struct notifier_block **nb)
> {
> void *hcpu = (void *)(long)cpu;
> int notifier_rc = notifier_call_chain(&cpu_chain, action, hcpu, nb);
> int ret = notifier_to_errno(notifier_rc);
>
> - BUG_ON(ret && nofail);
> -
> return ret;
> }
>
> +static void cpu_notifier_call_chain_nofail(unsigned int cpu,
> + unsigned long action,
> + struct notifier_block **nb)
> +{
> + int ret = cpu_notifier_call_chain(cpu, action, nb);
> +
> + BUG_ON(ret);
> +}
> +
> static void cf_check _take_cpu_down(void *unused)
> {
> - cpu_notifier_call_chain(smp_processor_id(), CPU_DYING, NULL, true);
> + cpu_notifier_call_chain_nofail(smp_processor_id(), CPU_DYING, NULL);
> __cpu_disable();
> }
>
> @@ -116,7 +123,7 @@ int cpu_down(unsigned int cpu)
> if ( !cpu_online(cpu) )
> goto out;
>
> - err = cpu_notifier_call_chain(cpu, CPU_DOWN_PREPARE, &nb, false);
> + err = cpu_notifier_call_chain(cpu, CPU_DOWN_PREPARE, &nb);
> if ( err )
> goto fail;
>
> @@ -129,14 +136,14 @@ int cpu_down(unsigned int cpu)
> err = cpu_online(cpu);
> BUG_ON(err);
>
> - cpu_notifier_call_chain(cpu, CPU_DEAD, NULL, true);
> + cpu_notifier_call_chain_nofail(cpu, CPU_DEAD, NULL);
>
> send_global_virq(VIRQ_PCPU_STATE);
> cpu_hotplug_done();
> return 0;
>
> fail:
> - cpu_notifier_call_chain(cpu, CPU_DOWN_FAILED, &nb, true);
> + cpu_notifier_call_chain_nofail(cpu, CPU_DOWN_FAILED, &nb);
> out:
> cpu_hotplug_done();
> return err;
> @@ -157,7 +164,7 @@ int cpu_up(unsigned int cpu)
> if ( cpu_online(cpu) )
> goto out;
>
> - err = cpu_notifier_call_chain(cpu, CPU_UP_PREPARE, &nb, false);
> + err = cpu_notifier_call_chain(cpu, CPU_UP_PREPARE, &nb);
> if ( err )
> goto fail;
>
> @@ -165,7 +172,7 @@ int cpu_up(unsigned int cpu)
> if ( err < 0 )
> goto fail;
>
> - cpu_notifier_call_chain(cpu, CPU_ONLINE, NULL, true);
> + cpu_notifier_call_chain_nofail(cpu, CPU_ONLINE, NULL);
>
> send_global_virq(VIRQ_PCPU_STATE);
>
> @@ -173,7 +180,7 @@ int cpu_up(unsigned int cpu)
> return 0;
>
> fail:
> - cpu_notifier_call_chain(cpu, CPU_UP_CANCELED, &nb, true);
> + cpu_notifier_call_chain_nofail(cpu, CPU_UP_CANCELED, &nb);
> out:
> cpu_hotplug_done();
> return err;
> @@ -181,7 +188,7 @@ int cpu_up(unsigned int cpu)
>
> void notify_cpu_starting(unsigned int cpu)
> {
> - cpu_notifier_call_chain(cpu, CPU_STARTING, NULL, true);
> + cpu_notifier_call_chain_nofail(cpu, CPU_STARTING, NULL);
> }
>
> static cpumask_t frozen_cpus;
> @@ -237,7 +244,7 @@ void enable_nonboot_cpus(void)
> }
>
> for_each_cpu ( cpu, &frozen_cpus )
> - cpu_notifier_call_chain(cpu, CPU_RESUME_FAILED, NULL, true);
> + cpu_notifier_call_chain_nofail(cpu, CPU_RESUME_FAILED, NULL);
>
> cpumask_clear(&frozen_cpus);
> }
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-23 22:56 ` Stefano Stabellini
@ 2024-02-26 8:00 ` Jan Beulich
2024-02-26 8:23 ` Nicola Vetrini
0 siblings, 1 reply; 23+ messages in thread
From: Jan Beulich @ 2024-02-26 8:00 UTC (permalink / raw)
To: Stefano Stabellini, Nicola Vetrini
Cc: xen-devel, consulting, Andrew Cooper, George Dunlap, Julien Grall,
Wei Liu
On 23.02.2024 23:56, Stefano Stabellini wrote:
> On Fri, 23 Feb 2024, Nicola Vetrini wrote:
>> These functions never saw a usage of their return value since
>> they were introduced, so it can be dropped since their usages
>> violate MISRA C Rule 17.7:
>> "The value returned by a function having non-void return type shall be used".
>>
>> No functional change.
>>
>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
The cleanup is certainly okay, but would one of you mind clarifying in how
far this code is relevant for certification? I don't expect there are plans
to run shim Xen in any projected production uses for which certification is
relevant? (The subject prefix is also unnecessarily wide here, when it's
only daemon code which is affected, not console code in general.)
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-23 9:35 ` [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7 Nicola Vetrini
2024-02-23 22:58 ` Stefano Stabellini
@ 2024-02-26 8:06 ` Jan Beulich
2024-02-27 0:26 ` Stefano Stabellini
1 sibling, 1 reply; 23+ messages in thread
From: Jan Beulich @ 2024-02-26 8:06 UTC (permalink / raw)
To: Nicola Vetrini
Cc: sstabellini, consulting, Andrew Cooper, George Dunlap,
Julien Grall, Wei Liu, xen-devel
On 23.02.2024 10:35, Nicola Vetrini wrote:
> Refactor cpu_notifier_call_chain into two functions:
> - the variant that is allowed to fail loses the nofail flag
> - the variant that shouldn't fail is encapsulated in a call
> to the failing variant, with an additional check.
>
> This prevents uses of the function that are not supposed to
> fail from ignoring the return value, thus violating Rule 17.7:
> "The value returned by a function having non-void return type shall
> be used".
>
> No functional change.
>
> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
I'm afraid I disagree with this kind of bifurcation. No matter what
Misra thinks or says, it is normal for return values of functions to
not always be relevant to check. To deal with the Misra rule imo
requires to first have an abstract plan of how to handle such
globally in the code base. Imo such a plan can't be to introduce
perhaps dozens of new wrapper functions like is done here.
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-26 8:00 ` Jan Beulich
@ 2024-02-26 8:23 ` Nicola Vetrini
2024-02-26 8:56 ` Jan Beulich
0 siblings, 1 reply; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-26 8:23 UTC (permalink / raw)
To: Jan Beulich
Cc: Stefano Stabellini, xen-devel, consulting, Andrew Cooper,
George Dunlap, Julien Grall, Wei Liu
On 2024-02-26 09:00, Jan Beulich wrote:
> On 23.02.2024 23:56, Stefano Stabellini wrote:
>> On Fri, 23 Feb 2024, Nicola Vetrini wrote:
>>> These functions never saw a usage of their return value since
>>> they were introduced, so it can be dropped since their usages
>>> violate MISRA C Rule 17.7:
>>> "The value returned by a function having non-void return type shall
>>> be used".
>>>
>>> No functional change.
>>>
>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>
>> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
>
> The cleanup is certainly okay, but would one of you mind clarifying in
> how
> far this code is relevant for certification? I don't expect there are
> plans
> to run shim Xen in any projected production uses for which
> certification is
> relevant? (The subject prefix is also unnecessarily wide here, when
> it's
> only daemon code which is affected, not console code in general.)
>
I agree on the subject prefix being too wide. The configuration that
uses consoled_guest_tx is #ifdef-ed for x86, so even in configurations
that may never reach this condition this is relevant, unless its #ifdef
is restricted to cases where the call may actually be reachable.
consoled_guest_rx was adjusted for uniformity, even though it's
technically not included in the configuration under analysis at the
moment.
--
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-26 8:23 ` Nicola Vetrini
@ 2024-02-26 8:56 ` Jan Beulich
2024-02-26 22:49 ` Stefano Stabellini
0 siblings, 1 reply; 23+ messages in thread
From: Jan Beulich @ 2024-02-26 8:56 UTC (permalink / raw)
To: Nicola Vetrini, Stefano Stabellini
Cc: xen-devel, consulting, Andrew Cooper, George Dunlap, Julien Grall,
Wei Liu
On 26.02.2024 09:23, Nicola Vetrini wrote:
> On 2024-02-26 09:00, Jan Beulich wrote:
>> On 23.02.2024 23:56, Stefano Stabellini wrote:
>>> On Fri, 23 Feb 2024, Nicola Vetrini wrote:
>>>> These functions never saw a usage of their return value since
>>>> they were introduced, so it can be dropped since their usages
>>>> violate MISRA C Rule 17.7:
>>>> "The value returned by a function having non-void return type shall
>>>> be used".
>>>>
>>>> No functional change.
>>>>
>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>>
>>> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
>>
>> The cleanup is certainly okay, but would one of you mind clarifying in
>> how
>> far this code is relevant for certification? I don't expect there are
>> plans
>> to run shim Xen in any projected production uses for which
>> certification is
>> relevant? (The subject prefix is also unnecessarily wide here, when
>> it's
>> only daemon code which is affected, not console code in general.)
>>
>
> I agree on the subject prefix being too wide. The configuration that
> uses consoled_guest_tx is #ifdef-ed for x86, so even in configurations
> that may never reach this condition this is relevant, unless its #ifdef
> is restricted to cases where the call may actually be reachable.
Hmm, I see. There are contradicting goals here then: It being just X86 is
to reduce the risk of someone overlooking a build breakage they may
introduce. Whereas for certification it's quite the other way around: We'd
like to "hide" as much code as possible.
Really I would have been inclined to suggest to drop the #ifdef, if
possible even without replacing by IS_ENABLED(), but instead leveraging
that pv_shim ought to be compile-time false whenever CONFIG_PV_SHIM=n.
After all that's a pattern we've been trying to follow. But with your
observation is becomes questionable whether extending use of IS_ENABLED()
is actually going to be helpful. Stefano - perhaps something to discuss
on one of the next meetings?
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-26 8:56 ` Jan Beulich
@ 2024-02-26 22:49 ` Stefano Stabellini
2024-02-27 7:08 ` Jan Beulich
0 siblings, 1 reply; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-26 22:49 UTC (permalink / raw)
To: Jan Beulich
Cc: Nicola Vetrini, Stefano Stabellini, xen-devel, consulting,
Andrew Cooper, George Dunlap, Julien Grall, Wei Liu
On Mon, 26 Feb 2024, Jan Beulich wrote:
> On 26.02.2024 09:23, Nicola Vetrini wrote:
> > On 2024-02-26 09:00, Jan Beulich wrote:
> >> On 23.02.2024 23:56, Stefano Stabellini wrote:
> >>> On Fri, 23 Feb 2024, Nicola Vetrini wrote:
> >>>> These functions never saw a usage of their return value since
> >>>> they were introduced, so it can be dropped since their usages
> >>>> violate MISRA C Rule 17.7:
> >>>> "The value returned by a function having non-void return type shall
> >>>> be used".
> >>>>
> >>>> No functional change.
> >>>>
> >>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
> >>>
> >>> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> >>
> >> The cleanup is certainly okay, but would one of you mind clarifying in
> >> how
> >> far this code is relevant for certification? I don't expect there are
> >> plans
> >> to run shim Xen in any projected production uses for which
> >> certification is
> >> relevant? (The subject prefix is also unnecessarily wide here, when
> >> it's
> >> only daemon code which is affected, not console code in general.)
> >>
> >
> > I agree on the subject prefix being too wide. The configuration that
> > uses consoled_guest_tx is #ifdef-ed for x86, so even in configurations
> > that may never reach this condition this is relevant, unless its #ifdef
> > is restricted to cases where the call may actually be reachable.
>
> Hmm, I see. There are contradicting goals here then: It being just X86 is
> to reduce the risk of someone overlooking a build breakage they may
> introduce. Whereas for certification it's quite the other way around: We'd
> like to "hide" as much code as possible.
>
> Really I would have been inclined to suggest to drop the #ifdef, if
> possible even without replacing by IS_ENABLED(), but instead leveraging
> that pv_shim ought to be compile-time false whenever CONFIG_PV_SHIM=n.
This is OK
> After all that's a pattern we've been trying to follow. But with your
> observation is becomes questionable whether extending use of IS_ENABLED()
> is actually going to be helpful. Stefano - perhaps something to discuss
> on one of the next meetings?
Yes. I checked with the safety manager and his opinion is that
IS_ENABLED() is OK to use as a way to disable code from a safety
perspective.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-26 8:06 ` Jan Beulich
@ 2024-02-27 0:26 ` Stefano Stabellini
2024-02-27 7:28 ` Jan Beulich
0 siblings, 1 reply; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-27 0:26 UTC (permalink / raw)
To: Jan Beulich
Cc: Nicola Vetrini, sstabellini, consulting, Andrew Cooper,
George Dunlap, Julien Grall, Wei Liu, xen-devel
On Mon, 26 Feb 2024, Jan Beulich wrote:
> On 23.02.2024 10:35, Nicola Vetrini wrote:
> > Refactor cpu_notifier_call_chain into two functions:
> > - the variant that is allowed to fail loses the nofail flag
> > - the variant that shouldn't fail is encapsulated in a call
> > to the failing variant, with an additional check.
> >
> > This prevents uses of the function that are not supposed to
> > fail from ignoring the return value, thus violating Rule 17.7:
> > "The value returned by a function having non-void return type shall
> > be used".
> >
> > No functional change.
> >
> > Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>
> I'm afraid I disagree with this kind of bifurcation. No matter what
> Misra thinks or says, it is normal for return values of functions to
> not always be relevant to check.
Hi Jan, I disagree.
Regardless of MISRA, I really think return values need to be checked.
Moreover, we decided as a group to honor MISRA Rule 17.7, which requires
return values to be checked. This patch is a good step forward.
> To deal with the Misra rule imo requires to first have an abstract
> plan of how to handle such globally in the code base. Imo such a plan
> can't be to introduce perhaps dozens of new wrapper functions like is
> done here.
This patch is following the right pattern, one we already follow with
the _locked suffix.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-26 22:49 ` Stefano Stabellini
@ 2024-02-27 7:08 ` Jan Beulich
2024-02-28 2:01 ` Stefano Stabellini
0 siblings, 1 reply; 23+ messages in thread
From: Jan Beulich @ 2024-02-27 7:08 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Nicola Vetrini, xen-devel, consulting, Andrew Cooper,
George Dunlap, Julien Grall, Wei Liu
On 26.02.2024 23:49, Stefano Stabellini wrote:
> On Mon, 26 Feb 2024, Jan Beulich wrote:
>> On 26.02.2024 09:23, Nicola Vetrini wrote:
>>> On 2024-02-26 09:00, Jan Beulich wrote:
>>>> On 23.02.2024 23:56, Stefano Stabellini wrote:
>>>>> On Fri, 23 Feb 2024, Nicola Vetrini wrote:
>>>>>> These functions never saw a usage of their return value since
>>>>>> they were introduced, so it can be dropped since their usages
>>>>>> violate MISRA C Rule 17.7:
>>>>>> "The value returned by a function having non-void return type shall
>>>>>> be used".
>>>>>>
>>>>>> No functional change.
>>>>>>
>>>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>>>>
>>>>> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
>>>>
>>>> The cleanup is certainly okay, but would one of you mind clarifying in
>>>> how
>>>> far this code is relevant for certification? I don't expect there are
>>>> plans
>>>> to run shim Xen in any projected production uses for which
>>>> certification is
>>>> relevant? (The subject prefix is also unnecessarily wide here, when
>>>> it's
>>>> only daemon code which is affected, not console code in general.)
>>>>
>>>
>>> I agree on the subject prefix being too wide. The configuration that
>>> uses consoled_guest_tx is #ifdef-ed for x86, so even in configurations
>>> that may never reach this condition this is relevant, unless its #ifdef
>>> is restricted to cases where the call may actually be reachable.
>>
>> Hmm, I see. There are contradicting goals here then: It being just X86 is
>> to reduce the risk of someone overlooking a build breakage they may
>> introduce. Whereas for certification it's quite the other way around: We'd
>> like to "hide" as much code as possible.
>>
>> Really I would have been inclined to suggest to drop the #ifdef, if
>> possible even without replacing by IS_ENABLED(), but instead leveraging
>> that pv_shim ought to be compile-time false whenever CONFIG_PV_SHIM=n.
>
> This is OK
>
>
>> After all that's a pattern we've been trying to follow. But with your
>> observation is becomes questionable whether extending use of IS_ENABLED()
>> is actually going to be helpful. Stefano - perhaps something to discuss
>> on one of the next meetings?
>
> Yes. I checked with the safety manager and his opinion is that
> IS_ENABLED() is OK to use as a way to disable code from a safety
> perspective.
Yet unlike when #ifdef is used, such code would remain visible to e.g.
Eclair even after the preprocessing step. Note the context in which
I'm bringing this up - if IS_ENABLED() was properly used here (and as
tightly as possible), the tool would still have complained, aiui.
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-27 0:26 ` Stefano Stabellini
@ 2024-02-27 7:28 ` Jan Beulich
2024-02-27 11:52 ` Julien Grall
0 siblings, 1 reply; 23+ messages in thread
From: Jan Beulich @ 2024-02-27 7:28 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Nicola Vetrini, consulting, Andrew Cooper, George Dunlap,
Julien Grall, Wei Liu, xen-devel
On 27.02.2024 01:26, Stefano Stabellini wrote:
> On Mon, 26 Feb 2024, Jan Beulich wrote:
>> On 23.02.2024 10:35, Nicola Vetrini wrote:
>>> Refactor cpu_notifier_call_chain into two functions:
>>> - the variant that is allowed to fail loses the nofail flag
>>> - the variant that shouldn't fail is encapsulated in a call
>>> to the failing variant, with an additional check.
>>>
>>> This prevents uses of the function that are not supposed to
>>> fail from ignoring the return value, thus violating Rule 17.7:
>>> "The value returned by a function having non-void return type shall
>>> be used".
>>>
>>> No functional change.
>>>
>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>
>> I'm afraid I disagree with this kind of bifurcation. No matter what
>> Misra thinks or says, it is normal for return values of functions to
>> not always be relevant to check.
>
> Hi Jan, I disagree.
>
> Regardless of MISRA, I really think return values need to be checked.
> Moreover, we decided as a group to honor MISRA Rule 17.7, which requires
> return values to be checked. This patch is a good step forward.
Yet splitting functions isn't the only way to deal with Misra's
requirements, I suppose. After all there are functions where the
return value is purely courtesy for perhaps just one of its callers.
Splitting simply doesn't scale very well, imo.
>> To deal with the Misra rule imo requires to first have an abstract
>> plan of how to handle such globally in the code base. Imo such a plan
>> can't be to introduce perhaps dozens of new wrapper functions like is
>> done here.
>
> This patch is following the right pattern, one we already follow with
> the _locked suffix.
Right, and - just to mention it - one which I similarly dislike, albeit
to a lesser degree.
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-27 7:28 ` Jan Beulich
@ 2024-02-27 11:52 ` Julien Grall
2024-02-27 12:47 ` Jan Beulich
0 siblings, 1 reply; 23+ messages in thread
From: Julien Grall @ 2024-02-27 11:52 UTC (permalink / raw)
To: Jan Beulich, Stefano Stabellini
Cc: Nicola Vetrini, consulting, Andrew Cooper, George Dunlap, Wei Liu,
xen-devel
Hi Jan,
On 27/02/2024 07:28, Jan Beulich wrote:
> On 27.02.2024 01:26, Stefano Stabellini wrote:
>> On Mon, 26 Feb 2024, Jan Beulich wrote:
>>> On 23.02.2024 10:35, Nicola Vetrini wrote:
>>>> Refactor cpu_notifier_call_chain into two functions:
>>>> - the variant that is allowed to fail loses the nofail flag
>>>> - the variant that shouldn't fail is encapsulated in a call
>>>> to the failing variant, with an additional check.
>>>>
>>>> This prevents uses of the function that are not supposed to
>>>> fail from ignoring the return value, thus violating Rule 17.7:
>>>> "The value returned by a function having non-void return type shall
>>>> be used".
>>>>
>>>> No functional change.
>>>>
>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>>
>>> I'm afraid I disagree with this kind of bifurcation. No matter what
>>> Misra thinks or says, it is normal for return values of functions to
>>> not always be relevant to check.
>>
>> Hi Jan, I disagree.
>>
>> Regardless of MISRA, I really think return values need to be checked.
>> Moreover, we decided as a group to honor MISRA Rule 17.7, which requires
>> return values to be checked. This patch is a good step forward.
>
> Yet splitting functions isn't the only way to deal with Misra's
> requirements, I suppose. After all there are functions where the
> return value is purely courtesy for perhaps just one of its callers.
You are right that we have some places where one caller care about the
return value. But the problem is how do you tell whether the return was
ignored on purpose or not?
We had at least one XSA because the return value of a function was not
checked (see XSA-222). We also had plenty of smaller patches to check
returns.
So far, we added __must_check when we believed return values should be
checked. But usually at the point we notice, this is far too late.
To me the goal should be that we enforce __must_check everywhere. We are
probably going to detect places where we forgot to check the return. For
thoses that are on purpose, we can document them.
>
> Splitting simply doesn't scale very well, imo.
Do you have another proposal? As Stefano said, we adopted the rule 17.7.
So we know need a solution to address it.
>
>>> To deal with the Misra rule imo requires to first have an abstract
>>> plan of how to handle such globally in the code base. Imo such a plan
>>> can't be to introduce perhaps dozens of new wrapper functions like is
>>> done here.
>>
>> This patch is following the right pattern, one we already follow with
>> the _locked suffix.
>
> Right, and - just to mention it - one which I similarly dislike, albeit
> to a lesser degree.
AFAIU, we are debating between having a boolean indicating if a function
doesn't fail or adding a wrapper.
While I understand this requires to add more code, the advantage of the
suffix is this is more obvious for the reader (including the reviewer)
that the call is not supposed to fail. I agree this is a matter of taste
here...
In this case, what would be your suggestion to address the problem?
Cheers,
--
Julien Grall
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-27 11:52 ` Julien Grall
@ 2024-02-27 12:47 ` Jan Beulich
2024-02-28 2:10 ` Stefano Stabellini
2024-02-28 11:06 ` Nicola Vetrini
0 siblings, 2 replies; 23+ messages in thread
From: Jan Beulich @ 2024-02-27 12:47 UTC (permalink / raw)
To: Julien Grall
Cc: Nicola Vetrini, consulting, Andrew Cooper, George Dunlap, Wei Liu,
xen-devel, Stefano Stabellini
On 27.02.2024 12:52, Julien Grall wrote:
> Hi Jan,
>
> On 27/02/2024 07:28, Jan Beulich wrote:
>> On 27.02.2024 01:26, Stefano Stabellini wrote:
>>> On Mon, 26 Feb 2024, Jan Beulich wrote:
>>>> On 23.02.2024 10:35, Nicola Vetrini wrote:
>>>>> Refactor cpu_notifier_call_chain into two functions:
>>>>> - the variant that is allowed to fail loses the nofail flag
>>>>> - the variant that shouldn't fail is encapsulated in a call
>>>>> to the failing variant, with an additional check.
>>>>>
>>>>> This prevents uses of the function that are not supposed to
>>>>> fail from ignoring the return value, thus violating Rule 17.7:
>>>>> "The value returned by a function having non-void return type shall
>>>>> be used".
>>>>>
>>>>> No functional change.
>>>>>
>>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>>>
>>>> I'm afraid I disagree with this kind of bifurcation. No matter what
>>>> Misra thinks or says, it is normal for return values of functions to
>>>> not always be relevant to check.
>>>
>>> Hi Jan, I disagree.
>>>
>>> Regardless of MISRA, I really think return values need to be checked.
>>> Moreover, we decided as a group to honor MISRA Rule 17.7, which requires
>>> return values to be checked. This patch is a good step forward.
>>
>> Yet splitting functions isn't the only way to deal with Misra's
>> requirements, I suppose. After all there are functions where the
>> return value is purely courtesy for perhaps just one of its callers.
>
> You are right that we have some places where one caller care about the
> return value. But the problem is how do you tell whether the return was
> ignored on purpose or not?
>
> We had at least one XSA because the return value of a function was not
> checked (see XSA-222). We also had plenty of smaller patches to check
> returns.
>
> So far, we added __must_check when we believed return values should be
> checked. But usually at the point we notice, this is far too late.
>
> To me the goal should be that we enforce __must_check everywhere. We are
> probably going to detect places where we forgot to check the return. For
> thoses that are on purpose, we can document them.
>
>>
>> Splitting simply doesn't scale very well, imo.
>
> Do you have another proposal? As Stefano said, we adopted the rule 17.7.
> So we know need a solution to address it.
One possibility that was circulated while discussing was to add (void)
casts. I'm not a huge fan of those, but between the two options that
might be the lesser evil. We also use funny (should I say ugly)
workarounds in a few cases where we have __must_check but still want
to not really handle the return value in certain cases. Given there are
example in the code base, extending use of such constructs is certainly
also something that may want considering.
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx
2024-02-27 7:08 ` Jan Beulich
@ 2024-02-28 2:01 ` Stefano Stabellini
0 siblings, 0 replies; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-28 2:01 UTC (permalink / raw)
To: Jan Beulich
Cc: Stefano Stabellini, Nicola Vetrini, xen-devel, consulting,
Andrew Cooper, George Dunlap, Julien Grall, Wei Liu
On Tue, 27 Feb 2024, Jan Beulich wrote:
> On 26.02.2024 23:49, Stefano Stabellini wrote:
> > On Mon, 26 Feb 2024, Jan Beulich wrote:
> >> On 26.02.2024 09:23, Nicola Vetrini wrote:
> >>> On 2024-02-26 09:00, Jan Beulich wrote:
> >>>> On 23.02.2024 23:56, Stefano Stabellini wrote:
> >>>>> On Fri, 23 Feb 2024, Nicola Vetrini wrote:
> >>>>>> These functions never saw a usage of their return value since
> >>>>>> they were introduced, so it can be dropped since their usages
> >>>>>> violate MISRA C Rule 17.7:
> >>>>>> "The value returned by a function having non-void return type shall
> >>>>>> be used".
> >>>>>>
> >>>>>> No functional change.
> >>>>>>
> >>>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
> >>>>>
> >>>>> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> >>>>
> >>>> The cleanup is certainly okay, but would one of you mind clarifying in
> >>>> how
> >>>> far this code is relevant for certification? I don't expect there are
> >>>> plans
> >>>> to run shim Xen in any projected production uses for which
> >>>> certification is
> >>>> relevant? (The subject prefix is also unnecessarily wide here, when
> >>>> it's
> >>>> only daemon code which is affected, not console code in general.)
> >>>>
> >>>
> >>> I agree on the subject prefix being too wide. The configuration that
> >>> uses consoled_guest_tx is #ifdef-ed for x86, so even in configurations
> >>> that may never reach this condition this is relevant, unless its #ifdef
> >>> is restricted to cases where the call may actually be reachable.
> >>
> >> Hmm, I see. There are contradicting goals here then: It being just X86 is
> >> to reduce the risk of someone overlooking a build breakage they may
> >> introduce. Whereas for certification it's quite the other way around: We'd
> >> like to "hide" as much code as possible.
> >>
> >> Really I would have been inclined to suggest to drop the #ifdef, if
> >> possible even without replacing by IS_ENABLED(), but instead leveraging
> >> that pv_shim ought to be compile-time false whenever CONFIG_PV_SHIM=n.
> >
> > This is OK
> >
> >
> >> After all that's a pattern we've been trying to follow. But with your
> >> observation is becomes questionable whether extending use of IS_ENABLED()
> >> is actually going to be helpful. Stefano - perhaps something to discuss
> >> on one of the next meetings?
> >
> > Yes. I checked with the safety manager and his opinion is that
> > IS_ENABLED() is OK to use as a way to disable code from a safety
> > perspective.
>
> Yet unlike when #ifdef is used, such code would remain visible to e.g.
> Eclair even after the preprocessing step. Note the context in which
> I'm bringing this up - if IS_ENABLED() was properly used here (and as
> tightly as possible), the tool would still have complained, aiui.
Let me check with Roberto about this.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-27 12:47 ` Jan Beulich
@ 2024-02-28 2:10 ` Stefano Stabellini
2024-02-28 11:09 ` Nicola Vetrini
2024-02-28 11:06 ` Nicola Vetrini
1 sibling, 1 reply; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-28 2:10 UTC (permalink / raw)
To: Jan Beulich
Cc: Julien Grall, Nicola Vetrini, consulting, Andrew Cooper,
George Dunlap, Wei Liu, xen-devel, Stefano Stabellini
On Tue, 27 Feb 2024, Jan Beulich wrote:
> On 27.02.2024 12:52, Julien Grall wrote:
> > Hi Jan,
> >
> > On 27/02/2024 07:28, Jan Beulich wrote:
> >> On 27.02.2024 01:26, Stefano Stabellini wrote:
> >>> On Mon, 26 Feb 2024, Jan Beulich wrote:
> >>>> On 23.02.2024 10:35, Nicola Vetrini wrote:
> >>>>> Refactor cpu_notifier_call_chain into two functions:
> >>>>> - the variant that is allowed to fail loses the nofail flag
> >>>>> - the variant that shouldn't fail is encapsulated in a call
> >>>>> to the failing variant, with an additional check.
> >>>>>
> >>>>> This prevents uses of the function that are not supposed to
> >>>>> fail from ignoring the return value, thus violating Rule 17.7:
> >>>>> "The value returned by a function having non-void return type shall
> >>>>> be used".
> >>>>>
> >>>>> No functional change.
> >>>>>
> >>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
> >>>>
> >>>> I'm afraid I disagree with this kind of bifurcation. No matter what
> >>>> Misra thinks or says, it is normal for return values of functions to
> >>>> not always be relevant to check.
> >>>
> >>> Hi Jan, I disagree.
> >>>
> >>> Regardless of MISRA, I really think return values need to be checked.
> >>> Moreover, we decided as a group to honor MISRA Rule 17.7, which requires
> >>> return values to be checked. This patch is a good step forward.
> >>
> >> Yet splitting functions isn't the only way to deal with Misra's
> >> requirements, I suppose. After all there are functions where the
> >> return value is purely courtesy for perhaps just one of its callers.
> >
> > You are right that we have some places where one caller care about the
> > return value. But the problem is how do you tell whether the return was
> > ignored on purpose or not?
> >
> > We had at least one XSA because the return value of a function was not
> > checked (see XSA-222). We also had plenty of smaller patches to check
> > returns.
> >
> > So far, we added __must_check when we believed return values should be
> > checked. But usually at the point we notice, this is far too late.
> >
> > To me the goal should be that we enforce __must_check everywhere. We are
> > probably going to detect places where we forgot to check the return. For
> > thoses that are on purpose, we can document them.
> >
> >>
> >> Splitting simply doesn't scale very well, imo.
> >
> > Do you have another proposal? As Stefano said, we adopted the rule 17.7.
> > So we know need a solution to address it.
>
> One possibility that was circulated while discussing was to add (void)
> casts. I'm not a huge fan of those, but between the two options that
> might be the lesser evil. We also use funny (should I say ugly)
> workarounds in a few cases where we have __must_check but still want
> to not really handle the return value in certain cases. Given there are
> example in the code base, extending use of such constructs is certainly
> also something that may want considering.
I asked Roberto if void casts are an option for compliance.
In any case, I don't think we should use void casts in the specific
cases this patch is dealing with. Void casts (if anything) should be a
last resort while this patch fixes the issue in a better way.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-27 12:47 ` Jan Beulich
2024-02-28 2:10 ` Stefano Stabellini
@ 2024-02-28 11:06 ` Nicola Vetrini
2024-02-28 11:22 ` Jan Beulich
1 sibling, 1 reply; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-28 11:06 UTC (permalink / raw)
To: Jan Beulich
Cc: Julien Grall, consulting, Andrew Cooper, George Dunlap, Wei Liu,
xen-devel, Stefano Stabellini
On 2024-02-27 13:47, Jan Beulich wrote:
> On 27.02.2024 12:52, Julien Grall wrote:
>> Hi Jan,
>>
>> On 27/02/2024 07:28, Jan Beulich wrote:
>>> On 27.02.2024 01:26, Stefano Stabellini wrote:
>>>> On Mon, 26 Feb 2024, Jan Beulich wrote:
>>>>> On 23.02.2024 10:35, Nicola Vetrini wrote:
>>>>>> Refactor cpu_notifier_call_chain into two functions:
>>>>>> - the variant that is allowed to fail loses the nofail flag
>>>>>> - the variant that shouldn't fail is encapsulated in a call
>>>>>> to the failing variant, with an additional check.
>>>>>>
>>>>>> This prevents uses of the function that are not supposed to
>>>>>> fail from ignoring the return value, thus violating Rule 17.7:
>>>>>> "The value returned by a function having non-void return type
>>>>>> shall
>>>>>> be used".
>>>>>>
>>>>>> No functional change.
>>>>>>
>>>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>>>>>
>>>>> I'm afraid I disagree with this kind of bifurcation. No matter what
>>>>> Misra thinks or says, it is normal for return values of functions
>>>>> to
>>>>> not always be relevant to check.
>>>>
>>>> Hi Jan, I disagree.
>>>>
>>>> Regardless of MISRA, I really think return values need to be
>>>> checked.
>>>> Moreover, we decided as a group to honor MISRA Rule 17.7, which
>>>> requires
>>>> return values to be checked. This patch is a good step forward.
>>>
>>> Yet splitting functions isn't the only way to deal with Misra's
>>> requirements, I suppose. After all there are functions where the
>>> return value is purely courtesy for perhaps just one of its callers.
>>
>> You are right that we have some places where one caller care about the
>> return value. But the problem is how do you tell whether the return
>> was
>> ignored on purpose or not?
>>
>> We had at least one XSA because the return value of a function was not
>> checked (see XSA-222). We also had plenty of smaller patches to check
>> returns.
>>
>> So far, we added __must_check when we believed return values should be
>> checked. But usually at the point we notice, this is far too late.
>>
>> To me the goal should be that we enforce __must_check everywhere. We
>> are
>> probably going to detect places where we forgot to check the return.
>> For
>> thoses that are on purpose, we can document them.
>>
>>>
>>> Splitting simply doesn't scale very well, imo.
>>
Yes. I certainly don't plan to do much splitting either. I saw this one
as a low-hanging fruit.
>> Do you have another proposal? As Stefano said, we adopted the rule
>> 17.7.
>> So we know need a solution to address it.
>
> One possibility that was circulated while discussing was to add (void)
> casts. I'm not a huge fan of those, but between the two options that
> might be the lesser evil. We also use funny (should I say ugly)
> workarounds in a few cases where we have __must_check but still want
> to not really handle the return value in certain cases. Given there are
> example in the code base, extending use of such constructs is certainly
> also something that may want considering.
>
Can you point out some of these constructs, just to get an idea of what
that might look like?
--
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-28 2:10 ` Stefano Stabellini
@ 2024-02-28 11:09 ` Nicola Vetrini
2024-02-28 11:36 ` Julien Grall
0 siblings, 1 reply; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-28 11:09 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Jan Beulich, Julien Grall, consulting, Andrew Cooper,
George Dunlap, Wei Liu, xen-devel
On 2024-02-28 03:10, Stefano Stabellini wrote:
> On Tue, 27 Feb 2024, Jan Beulich wrote:
>> On 27.02.2024 12:52, Julien Grall wrote:
>> > Hi Jan,
>> >
>> > On 27/02/2024 07:28, Jan Beulich wrote:
>> >> On 27.02.2024 01:26, Stefano Stabellini wrote:
>> >>> On Mon, 26 Feb 2024, Jan Beulich wrote:
>> >>>> On 23.02.2024 10:35, Nicola Vetrini wrote:
>> >>>>> Refactor cpu_notifier_call_chain into two functions:
>> >>>>> - the variant that is allowed to fail loses the nofail flag
>> >>>>> - the variant that shouldn't fail is encapsulated in a call
>> >>>>> to the failing variant, with an additional check.
>> >>>>>
>> >>>>> This prevents uses of the function that are not supposed to
>> >>>>> fail from ignoring the return value, thus violating Rule 17.7:
>> >>>>> "The value returned by a function having non-void return type shall
>> >>>>> be used".
>> >>>>>
>> >>>>> No functional change.
>> >>>>>
>> >>>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
>> >>>>
>> >>>> I'm afraid I disagree with this kind of bifurcation. No matter what
>> >>>> Misra thinks or says, it is normal for return values of functions to
>> >>>> not always be relevant to check.
>> >>>
>> >>> Hi Jan, I disagree.
>> >>>
>> >>> Regardless of MISRA, I really think return values need to be checked.
>> >>> Moreover, we decided as a group to honor MISRA Rule 17.7, which requires
>> >>> return values to be checked. This patch is a good step forward.
>> >>
>> >> Yet splitting functions isn't the only way to deal with Misra's
>> >> requirements, I suppose. After all there are functions where the
>> >> return value is purely courtesy for perhaps just one of its callers.
>> >
>> > You are right that we have some places where one caller care about the
>> > return value. But the problem is how do you tell whether the return was
>> > ignored on purpose or not?
>> >
>> > We had at least one XSA because the return value of a function was not
>> > checked (see XSA-222). We also had plenty of smaller patches to check
>> > returns.
>> >
>> > So far, we added __must_check when we believed return values should be
>> > checked. But usually at the point we notice, this is far too late.
>> >
>> > To me the goal should be that we enforce __must_check everywhere. We are
>> > probably going to detect places where we forgot to check the return. For
>> > thoses that are on purpose, we can document them.
>> >
>> >>
>> >> Splitting simply doesn't scale very well, imo.
>> >
>> > Do you have another proposal? As Stefano said, we adopted the rule 17.7.
>> > So we know need a solution to address it.
>>
>> One possibility that was circulated while discussing was to add (void)
>> casts. I'm not a huge fan of those, but between the two options that
>> might be the lesser evil. We also use funny (should I say ugly)
>> workarounds in a few cases where we have __must_check but still want
>> to not really handle the return value in certain cases. Given there
>> are
>> example in the code base, extending use of such constructs is
>> certainly
>> also something that may want considering.
>
> I asked Roberto if void casts are an option for compliance.
>
void casts are an option for sure. The rationale for the rule explicitly
lists them as a compliance mechanism. An interesting aspect is what
would be the consensus around void casts on functions whose return value
is always ignored vs. functions whose return value is sometimes ignored.
> In any case, I don't think we should use void casts in the specific
> cases this patch is dealing with. Void casts (if anything) should be a
> last resort while this patch fixes the issue in a better way.
--
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-28 11:06 ` Nicola Vetrini
@ 2024-02-28 11:22 ` Jan Beulich
0 siblings, 0 replies; 23+ messages in thread
From: Jan Beulich @ 2024-02-28 11:22 UTC (permalink / raw)
To: Nicola Vetrini
Cc: Julien Grall, consulting, Andrew Cooper, George Dunlap, Wei Liu,
xen-devel, Stefano Stabellini
On 28.02.2024 12:06, Nicola Vetrini wrote:
> On 2024-02-27 13:47, Jan Beulich wrote:
>> On 27.02.2024 12:52, Julien Grall wrote:
>>> Do you have another proposal? As Stefano said, we adopted the rule
>>> 17.7.
>>> So we know need a solution to address it.
>>
>> One possibility that was circulated while discussing was to add (void)
>> casts. I'm not a huge fan of those, but between the two options that
>> might be the lesser evil. We also use funny (should I say ugly)
>> workarounds in a few cases where we have __must_check but still want
>> to not really handle the return value in certain cases. Given there are
>> example in the code base, extending use of such constructs is certainly
>> also something that may want considering.
>
> Can you point out some of these constructs, just to get an idea of what
> that might look like?
Grep for __must_check used in comments.
Jan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-28 11:09 ` Nicola Vetrini
@ 2024-02-28 11:36 ` Julien Grall
2024-02-28 22:38 ` Stefano Stabellini
0 siblings, 1 reply; 23+ messages in thread
From: Julien Grall @ 2024-02-28 11:36 UTC (permalink / raw)
To: Nicola Vetrini, Stefano Stabellini
Cc: Jan Beulich, consulting, Andrew Cooper, George Dunlap, Wei Liu,
xen-devel
Hi Nicola,
On 28/02/2024 11:09, Nicola Vetrini wrote:
>> I asked Roberto if void casts are an option for compliance.
>>
>
> void casts are an option for sure. The rationale for the rule explicitly
> lists them as a compliance mechanism. An interesting aspect is what
> would be the consensus around void casts on functions whose return value
> is always ignored vs. functions whose return value is sometimes ignored.
If a return is always ignored, then the function should return void. For
the second case, I think it will be on the case by case basis.
>
>> In any case, I don't think we should use void casts in the specific
>> cases this patch is dealing with. Void casts (if anything) should be a
>> last resort while this patch fixes the issue in a better way.
+1.
Cheers,
--
Julien Grall
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-28 11:36 ` Julien Grall
@ 2024-02-28 22:38 ` Stefano Stabellini
2024-02-29 9:56 ` Nicola Vetrini
0 siblings, 1 reply; 23+ messages in thread
From: Stefano Stabellini @ 2024-02-28 22:38 UTC (permalink / raw)
To: Julien Grall
Cc: Nicola Vetrini, Stefano Stabellini, Jan Beulich, consulting,
Andrew Cooper, George Dunlap, Wei Liu, xen-devel
On Wed, 28 Feb 2024, Julien Grall wrote:
> Hi Nicola,
>
> On 28/02/2024 11:09, Nicola Vetrini wrote:
> > > I asked Roberto if void casts are an option for compliance.
> > >
> >
> > void casts are an option for sure. The rationale for the rule explicitly
> > lists them as a compliance mechanism. An interesting aspect is what would be
> > the consensus around void casts on functions whose return value is always
> > ignored vs. functions whose return value is sometimes ignored.
>
> If a return is always ignored, then the function should return void. For the
> second case, I think it will be on the case by case basis.
+1
> > > In any case, I don't think we should use void casts in the specific
> > > cases this patch is dealing with. Void casts (if anything) should be a
> > > last resort while this patch fixes the issue in a better way.
>
> +1.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7
2024-02-28 22:38 ` Stefano Stabellini
@ 2024-02-29 9:56 ` Nicola Vetrini
0 siblings, 0 replies; 23+ messages in thread
From: Nicola Vetrini @ 2024-02-29 9:56 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Julien Grall, Jan Beulich, consulting, Andrew Cooper,
George Dunlap, Wei Liu, xen-devel
On 2024-02-28 23:38, Stefano Stabellini wrote:
> On Wed, 28 Feb 2024, Julien Grall wrote:
>> Hi Nicola,
>>
>> On 28/02/2024 11:09, Nicola Vetrini wrote:
>> > > I asked Roberto if void casts are an option for compliance.
>> > >
>> >
>> > void casts are an option for sure. The rationale for the rule explicitly
>> > lists them as a compliance mechanism. An interesting aspect is what would be
>> > the consensus around void casts on functions whose return value is always
>> > ignored vs. functions whose return value is sometimes ignored.
>>
>> If a return is always ignored, then the function should return void.
>> For the
>> second case, I think it will be on the case by case basis.
>
> +1
>
Ok, noted.
>
>> > > In any case, I don't think we should use void casts in the specific
>> > > cases this patch is dealing with. Void casts (if anything) should be a
>> > > last resort while this patch fixes the issue in a better way.
>>
>> +1.
--
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2024-02-29 9:56 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-23 9:35 [XEN PATCH 0/2] address some violations of MISRA C Rule 17.7 Nicola Vetrini
2024-02-23 9:35 ` [XEN PATCH 1/2] xen/console: drop return value from consoled_guest_rx/tx Nicola Vetrini
2024-02-23 22:56 ` Stefano Stabellini
2024-02-26 8:00 ` Jan Beulich
2024-02-26 8:23 ` Nicola Vetrini
2024-02-26 8:56 ` Jan Beulich
2024-02-26 22:49 ` Stefano Stabellini
2024-02-27 7:08 ` Jan Beulich
2024-02-28 2:01 ` Stefano Stabellini
2024-02-23 9:35 ` [XEN PATCH 2/2] xen/cpu: address MISRA C Rule 17.7 Nicola Vetrini
2024-02-23 22:58 ` Stefano Stabellini
2024-02-26 8:06 ` Jan Beulich
2024-02-27 0:26 ` Stefano Stabellini
2024-02-27 7:28 ` Jan Beulich
2024-02-27 11:52 ` Julien Grall
2024-02-27 12:47 ` Jan Beulich
2024-02-28 2:10 ` Stefano Stabellini
2024-02-28 11:09 ` Nicola Vetrini
2024-02-28 11:36 ` Julien Grall
2024-02-28 22:38 ` Stefano Stabellini
2024-02-29 9:56 ` Nicola Vetrini
2024-02-28 11:06 ` Nicola Vetrini
2024-02-28 11:22 ` Jan Beulich
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.