On 8/12/25 00:14, Nicola Vetrini wrote:
> On 2025-08-11 19:36, Dmytro Prokopchuk1 wrote:
>> MISRA Rule 16.4: Every switch statement shall have a default label. The
>> default clause must contain either a statement or a comment prior to its
>> terminating break statement.
>>
>> This change adds comments in default cases in single-clause switches to
>> avoid violations of the rule where the `default` clause lacks a suitable
>> comment or statement.
>>
> 
> If you want to go this way then at least this config wants dropping:
> 
> -doc_begin="A switch statement with a single switch clause and no 
> default label may be used in place of an equivalent if statement if it 
> is considered to improve readability."
> -config=MC3A2.R16.4,switch_clauses+={deliberate,"switch(1)&&default(0)"}
> -doc_end
> 
> and probably this one too (haven't checked):
> 
> -doc_begin="A switch statement with a single switch clause and no 
> default label may be used in place of an equivalent if statement if it 
> is considered to improve readability."
> -config=MC3A2.R16.6,switch_clauses+={deliberate, "default(0)"}
> -doc_end
> 
> In the end it's a tradeoff; placing a comment with a suitable 
> argumentation might be strictly better than simply tagging the tool 
> report, at least from a developer's perspective. From a MISRA compliance 
> standpoint in my opinion both are fine. Let's see what the maintainers 
> think.
> 

According to Jan's comment here
https://patchew.org/Xen/725ec86ac1aa883c35fb30b8f226c95cbe0934e9.1754322299.git.dmytro._5fprokopch...@epam.com/
there were discussions about placing comments inside 'default' case.

Actually, my first patch removed 'default' case in single-clause switches.

Dmytro

>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopch...@epam.com>
>> ---
>>  xen/arch/arm/cpuerrata.c | 5 +++++
>>  xen/arch/arm/gic.c       | 6 ++++++
>>  xen/arch/arm/mmu/p2m.c   | 6 ++++++
>>  xen/arch/arm/time.c      | 6 ++++++
>>  xen/common/kexec.c       | 6 ++++++
>>  5 files changed, 29 insertions(+)
>>
>> diff --git a/xen/arch/arm/cpuerrata.c b/xen/arch/arm/cpuerrata.c
>> index 17cf134f1b..e31c72694b 100644
>> --- a/xen/arch/arm/cpuerrata.c
>> +++ b/xen/arch/arm/cpuerrata.c
>> @@ -735,6 +735,11 @@ static int cpu_errata_callback(struct 
>> notifier_block *nfb,
>>          rc = enable_nonboot_cpu_caps(arm_errata);
>>          break;
>>      default:
>> +        /*
>> +         * Default case left empty as other notifier actions do not 
>> require handling here.
>> +         * The single CPU_STARTING action in the switch is sufficient 
>> because this function
>> +         * specifically handles enabling errata workarounds during 
>> CPU startup.
>> +         */
>>          break;
>>      }
>>
>> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
>> index e80fe0ca24..dfbb0dfe08 100644
>> --- a/xen/arch/arm/gic.c
>> +++ b/xen/arch/arm/gic.c
>> @@ -436,6 +436,12 @@ static int cpu_gic_callback(struct notifier_block 
>> *nfb,
>>          release_irq(gic_hw_ops->info->maintenance_irq, NULL);
>>          break;
>>      default:
>> +        /*
>> +         * Default case left empty as other notifier actions do not 
>> require handling here.
>> +         * The CPU_DYING action specifically handles releasing 
>> resources acquired by
>> +         * init_maintenance_interrupt(), when the CPU is being taken 
>> offline. Other CPU
>> +         * actions do not require GIC-specific handling.
>> +         */
>>          break;
>>      }
>>
>> diff --git a/xen/arch/arm/mmu/p2m.c b/xen/arch/arm/mmu/p2m.c
>> index 51abf3504f..d1f0ae0226 100644
>> --- a/xen/arch/arm/mmu/p2m.c
>> +++ b/xen/arch/arm/mmu/p2m.c
>> @@ -1828,6 +1828,12 @@ static int cpu_virt_paging_callback(struct 
>> notifier_block *nfb,
>>          setup_virt_paging_one(NULL);
>>          break;
>>      default:
>> +        /*
>> +         * Default case left empty as other notifier actions do not 
>> require handling here.
>> +         * The CPU_STARTING action is specifically handled because 
>> this function sets up
>> +         * virtual paging for CPUs, particularly for non-boot CPUs 
>> during hotplug. Other
>> +         * actions do not involve virtual paging setup.
>> +         */
>>          break;
>>      }
>>
>> diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c
>> index e74d30d258..4776110d97 100644
>> --- a/xen/arch/arm/time.c
>> +++ b/xen/arch/arm/time.c
>> @@ -382,6 +382,12 @@ static int cpu_time_callback(struct 
>> notifier_block *nfb,
>>          deinit_timer_interrupt();
>>          break;
>>      default:
>> +        /*
>> +         * Default case left empty as other notifier actions do not 
>> require handling here.
>> +         * The CPU_DYING action is specifically handled to revert 
>> actions done in
>> +         * init_timer_interrupt() and properly disable timer 
>> interrupts on the CPU being
>> +         * taken offline. Other actions do not involve timer 
>> deinitialization.
>> +         */
>>          break;
>>      }
>>
>> diff --git a/xen/common/kexec.c b/xen/common/kexec.c
>> index 84fe8c3597..0f78087a4a 100644
>> --- a/xen/common/kexec.c
>> +++ b/xen/common/kexec.c
>> @@ -549,6 +549,12 @@ static int cf_check cpu_callback(
>>          kexec_init_cpu_notes(cpu);
>>          break;
>>      default:
>> +        /*
>> +         * Default case left empty as other notifier actions do not 
>> require handling here.
>> +         * The CPU_UP_PREPARE action is specifically handled to 
>> allocate crash note buffers
>> +         * for a newly onlined CPU. Other actions do not pertain to 
>> crash note allocation
>> +         * or memory preservation for kexec.
>> +         */
>>          break;
>>      }
>>      return NOTIFY_DONE;
> 

Reply via email to