[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] misra: comment default case in single-clause switch


  • To: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
  • From: Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>
  • Date: Tue, 12 Aug 2025 07:19:51 +0000
  • Accept-language: en-US, uk-UA, ru-RU
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=S//gZqCtvvPAwwzI3qetOncGCnCD5p0diN9NwjXOHQU=; b=FbsIndthq08Lbbvea8he4cJdkW8ZmRC83SNMhGizE/MKKd6+Oqkbi5Efc/XXDbshDHcqEiVm+O7KJVaqivROrwz+iITsr6kcErcI8KYICepjGJX/PSSdr4U3uLBTJ2m4BqG0WCUj2CTEq/p1366Q/TGVAMQrYIw4HOFW1ZF37KCF3Tz8nJFPS2iEVqn8UZYfNGS6O4aruDitxnt9KeWntYz7kf90qw5l+NNAWdiEsjEkgI6eAKIYmeA9eLqQKw34jMmshgXmAksjGZcjVQecLuRMBNyKuxOLBTyUC19Ai0NYKmfJ85O9x36cYvGAiC/OIwH0KdcWe3X5imG0E0T4VQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GOYGe8E3VkAfL+6wku4m3/UlryG37XyF46EDEwwVS3XGQTrZlFOeDSMrg3FfhIZLDDK7ePQDPrmJkPpw2yGspkBtIGUM61EXbG4xuzD5x/6uSGVEy85qvmDI6WUbWjGQ1kccHOfLn62vhIQOqOdFbM7CqmgKZPuL+ESpI+8PEw9Jw+r2+wyvzNS4DtRcX9hQV1EXjkNayY0yxATLHTEAq0bUl3IK17qfWheTPNe68SXwD+t2B4MmVpcp7AXGq67C5xSBMz2zpWzP0ZB8yNmjDaEO6MD5U34P90cEjxbOP+vS674j7Tkjv7zzJNOgTPNRb7XOQb+pFZrNQVLhSCO2fQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Delivery-date: Tue, 12 Aug 2025 07:20:09 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcCuaGmRofUvvSEEWe+78HEkEpW7Rd9A6AgACpHwA=
  • Thread-topic: [PATCH] misra: comment default case in single-clause switch


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._5Fprokopchuk1@xxxxxxxx/
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_prokopchuk1@xxxxxxxx>
>> ---
>>  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;
> 

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.