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

Re: [XEN PATCH] misra: merge the two R14.3 invariant-condition deviations


  • To: Jan Beulich <jbeulich@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • From: "Chen, Shuaidong" <Shuaidong.Chen@xxxxxxx>
  • Date: Tue, 27 Oct 2026 16:18:32 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.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=Nr1TFgrkX5oNNpNc1S5p8yeuodf6f8dd0a+oIT7WHgs=; b=VrkOWjH/zMk8aYNECL8LdjD/Euck6kpDh3uUWmuYTlW1vMbVA/y1ea+Ba5NSBM0FXrGF0OMuL14MAc5qpcdkkMbL+7G28N8QeIyOEv8vh1klJ6bAiHfUOMRrkWiMdo1SQxpeZJifEKKSYfzBPOCalEh0gLOYXg7JpVs/391wycUjqOxlS6+Y2kpgIf1dvklzkaAwH/EcyElWt97lgZlJoIao5iLhIUFp66PS3KceKLLAml62RAUgx/cEtR8LJU2woeZQbYjhO5hc0UElIRmeCbVgDLJG7prU80Www2Yb3sVJl8yEsTAuQ4evtONhfqTpdThMiKmRtdW1yZCVn5VLXw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=emHTi+Iuor0GtPzEY/WCIHjfwaJHPTaW/w18Ad2rGTeovXqLmI4kZ80876kymiOb0RNfQxWHgtLM+gBldziKa9j9GMJBj0mbvWz/uAsl5OJXrwta6puiatuEATrvRJ70xovvi9Xgz3U+3U01UK9hUuLA/hdQ34lMFcIt1eMRXCAc2OqX4c063kpWYnXAmc3NvNhJNjddbXD7TQU9s+9WIUwTuBF2OQfRhQHP+oyZbYydM3j8quZ+TRp89eMnf/DRJ4DpThogNQxGLwLdDerTZdcgrBtNGIgiwrA2KDlGybx8j4mpnV3Rq/tmk1a2ExurMgrVvxRmEtTdJn16UztLpQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com;
  • Cc: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger@xxxxxxxxxxxxxx>, Doug Goldstein <cardoe@xxxxxxxxxx>, Alejandro Vallejo <alejandro.garciavallejo@xxxxxxx>, Grygorii Strashko <grygorii_strashko@xxxxxxxx>, Penny Zheng <penny.zheng@xxxxxxx>, Ray Huang <Ray.Huang@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Tue, 27 Oct 2026 08:18:55 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 10/26/2026 9:14 PM, Jan Beulich wrote:
On 26.10.2026 04:03, Shuaidong Chen wrote:
MC3A2.R14.3 ("Controlling expressions shall not be invariant") is
deviated by two separate entries.  One covers 'if' statements and
conditional operators and places no restriction on where the invariant
condition comes from.  The other covers 'switch' statements, but only
when the controlling expression is a 'sizeof' operator.

The rationale recorded for the two is the same: the condition is
deliberate.  Nothing about a 'switch' makes an invariant condition less
deliberate than the same condition in an 'if', so the 'sizeof'
restriction reads as an artefact of that entry having been added for
read_atomic() and friends in arch/x86/include/asm/atomic.h rather than
as a considered limit.
Well,

     if ( 1 )

can make sense, especially when 1 is the expansion of e.g. IS_ENABLED().
Otoh

     switch ( 1 )

doesn't make a lot of sense, even when it's as a result of the expanding
IS_ENABLED(). I agree that limiting to just sizeof() is unnecessarily
strict; alignof(), for example, should about always be usable where
sizeof() is. Yet making if() and switch() equal is imo going too far. I
realize though that it may be difficult to find a suitable boundary.
Stefano - do you possibly still have notes from the discussions long ago?

Fold switch_stmt into the general entry and drop the 'sizeof'-restricted
one, which the general predicate now subsumes.  Invariant 'switch'
conditions that are not a 'sizeof' become deliberate as a result; that
is the intent.

Signed-off-by: Shuaidong Chen <shuaidong.chen@xxxxxxx>
What you don't say at all: Does this help with any remaining violations?

Jan
Yes, and let me give the full context, since the motivation comes from
downstream safety work rather than from the upstream analysis.

On safety branch one of the techniques we rely on there is to pin build-time
configuration to compile-time constants, so that the code which the
intended configuration can never reach is removed by the compiler
rather than merely left untested.  That matters for us in two ways:
code eliminated at compile time does not enter the coverage
denominator, and - more importantly - it is not in the binary at all,
so it does not have to be carried through the whole qualification
chain.

Two examples:

https://gitlab.com/amd-xen-safety/xen/-/commit/160dac43f554733a68d83c38cc1d0e73b3b7bff0
https://gitlab.com/amd-xen-safety/xen/-/commit/e0eccfa7184b7acee23916cd5cb2a3b5afa101f2

A side effect of this is that some of those constants end up as the
controlling expression of an switch statement, which then
trips R14.3.

> Otoh switch ( 1 ) doesn't make a lot of sense

Agreed in the abstract, and I would push back on anyone writing that
by hand.  But that is not what happens here.  The sources still read

  switch ( gt->gt_version )
  switch ( opt_bootscrub )

exactly as upstream wrote them, against what upstream intends as a
runtime-variable value.  The constant only appears after a build
configuration specialises that value.  So the construct is not a
pointless switch on a literal; it is ordinary upstream code that a
particular configuration has made invariant - which is precisely the
situation the existing 'deliberate' deviation for if statements and

conditional operators already covers.

Of course the other alternative: rewrite those switches as
if/else chains, which the existing deviation would already cover it, and the violations gone. Technically that works.

The reason I would rather not is that it is churn in common code for no functional
reason, carried indefinitely as a delta against upstream, and it makes
every subsequent rebase of the safety branch more expensive.

Having seen that a deviation for switch already exists - restricted to
sizeof - extending it to switch in general seemed the smaller and more
honest change: it states that an invariant switch condition is
deliberate, just as the project already states for if and for the
conditional operators.

-Shuaidong




 


Rackspace

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