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

Re: [PATCH] misra: fix violations in macros GVA_INFO, TRACE_TIME


  • To: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>
  • Date: Tue, 5 Aug 2025 11:49:46 +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=1t3LPeE69Dbv8I4scKJI0IWAP9T8vjIj1hK//ITZCKI=; b=jPIncv4C+fIVABvYl21998Bm/AXVolu1V1bVNBb1hkDsl9RRZbPhyl87E+3LzeLYsYn09vMfJlMf6+M25m1Q9nYSdqmgMPgfCThHQkFRTJ/tPBYHNaazLIGV41GMBceYAnuobF5uyaz53GB7G5X5wYkONvT0nzI5Pu13rk4sb+PzTHczmlikEVsutmYrOsqk7dZw9VWTVLbqLHPxw7KSTajqdRZdjTOLd8kPd1D10AgALJWoY8Zd4gji93AKh1RAuuVwFfp3fcywYo+RuKhhGEvpRHhCRbChZPaF/Xrkacl/f4HTr/qDfLyulw53f91SR+a/CipD0JGQvqclz4VjOQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jfBXGb9fv/KiyxD+3KzlaWymXv1CBsZ3/VYhbvqPM/Xsvm/cpkaQ6/a3mjZfDEHJIaxGSJUMzERDlaJASTi4JOX7y+MalQPoXSRDo7L5lHD+FRgJtS8qVOuFC2v+s+W5d+67h1wXpZ81gm/PisZT5CngNZ7fZnYGZID5Vm3s9mDd+v08r65ZdklqDVocSwcQcifVKsdD4DGotQIKSNcspkQz9URdEQVftg4wodC0hXByNQcObyFrc6184KGj2ZS0JU5fjwHbQs8TKKKIPNxMHwXacqgS0iUszpRoFyTZg/ot9wNqIIpZcYvNcNXPzHSURp1yiA0VSJeUsCE1N/v35A==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Jan Beulich <jbeulich@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Dario Faggioli <dfaggioli@xxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, George Dunlap <gwd@xxxxxxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 05 Aug 2025 11:50:30 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcAi4fqTKeJL6S4E6Pmu2ECW9SE7RMXc0AgAAFrACAAAIQgIAAATiAgAeS9wA=
  • Thread-topic: [PATCH] misra: fix violations in macros GVA_INFO, TRACE_TIME


On 7/31/25 19:09, Nicola Vetrini wrote:
> On 2025-07-31 18:05, Andrew Cooper wrote:
>> On 31/07/2025 4:58 pm, Jan Beulich wrote:
>>> On 31.07.2025 17:37, Andrew Cooper wrote:
>>>> On 31/07/2025 4:16 pm, Dmytro Prokopchuk1 wrote:
>>>>> MISRA Rule 13.1: Initializer lists shall not contain persistent side
>>>>> effects.
>>>>>
>>>>> The violations occur because both the `GVA_INFO` and `TRACE_TIME` 
>>>>> macro
>>>>> expansions include expressions with persistent side effects introduced
>>>>> via inline assembly.
>>>>>
>>>>> In the case of `GVA_INFO`, the issue stems from the initializer list
>>>>> containing a direct call to `current`, which evaluates to
>>>>> `this_cpu(curr_vcpu)` and involves persistent side effects via the
>>>>> `asm` statement. To resolve this, the side-effect-producing expression
>>>>> is computed in a separate statement prior to the macro initialization:
>>>>>
>>>>>     struct vcpu *current_vcpu = current;
>>>>>
>>>>> The computed value is passed into the `GVA_INFO(current_vcpu)` macro,
>>>>> ensuring that the initializer is clean and free of such side effects.
>>>>>
>>>>> Similarly, the `TRACE_TIME` macro violates this rule when accessing
>>>>> expressions like `current->vcpu_id` and `current->domain->domain_id`,
>>>>> which also depend on `current` and inline assembly. To fix this, the
>>>>> value of `current` is assigned to a temporary variable:
>>>>>
>>>>>     struct vcpu *v = current;
>>>>>
>>>>> This temporary variable is then used to access `domain_id` and 
>>>>> `vcpu_id`.
>>>>> This ensures that the arguments passed to the `TRACE_TIME` macro are
>>>>> simple expressions free of persistent side effects.
>>>>>
>>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@xxxxxxxx>
>>>> The macro `current` specifically does not (and must not) have side
>>>> effects.  It is expected to behave like a plain `struct vcpu *current;`
>>>> variable, and what Eclair is noticing is the thread-local machinery
>>>> under this_cpu() (or in x86's case, get_current()).
>>>>
>>>> In ARM's case, it's literally reading the hardware thread pointer
>>>> register.  Can anything be done to tell Eclair that `this_cpu()`
>>>> specifically does not have side effects?
>>>>
>>>> The only reason that GVA_INFO() and TRACE_TIME() are picked out is
>>>> because they both contain embedded structure initialisation, and 
>>>> this is
>>>> is actually an example where trying to comply with MISRA interferes 
>>>> with
>>>> what is otherwise a standard pattern in Xen.
>>> Irrespective of what you say, some of the changes here were eliminating
>>> multiple adjacent uses of current, which - iirc - often the compiler
>>> can't fold via CSE.
>>
>> Where we have mixed usage, sure.  (I'm sure I've got a branch somewhere
>> trying to add some more pure/const around to try and help out here, but
>> I can't find it, and don't recall it being a major improvement either.)
>>
>> The real problem here is that there are a *very few* number of contexts
>> where Eclair refuses to tolerate the use of `current` citing side
>> effects, despite there being no side effects.
>>
>> That is the thing that breaks the principle of least surprise, and we
>> ought to fix it by making Eclair happy with `current` everywhere, rather
>> than force people to learn that 2 macros can't have a `current` in their
>> parameter list.
>>
> 
> I'll take a look. Likely yes, by adding a handful of properties. There 
> are subtleties, though.
> 

Hi, Nicola.

Did you have a chance to try configure Eclair to ignore this macro 
`this_cpu()`?

Thanks.
Dmytro

 


Rackspace

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