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; >