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

Re: [PATCH v1 2/3] xen: x86: irq: initialize irq desc in create_irq()


  • To: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>
  • From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
  • Date: Thu, 27 Mar 2025 09:10:26 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=bugseng.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • 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=i5bIlOECIDuXi7tNjnzbQXAmEnw/LIcLpPOIU/e1LKI=; b=qRzxJ9sKB99ogXg0vJD03zd3ClPdi/zwstSOdA9XkaujH2zR0qbS5F3QXu4V1aCShbJRF8UUZyqw4WzGjaidmfLEjVexGI81tvvKxtp24yv5RI1vrwXmtCGKbdPmP1KCD6vyAcqlFV3OKpbc4HQOXXSqJXYlt4yqpJJ9uHxOhErv2M97j/woXkx9rcNgeqjOfMLISwmD+ybjqmDuZ7uST5zAbvE4ZImDKDDFo8EUPNBaQ+Phir67xt0fcCnK3QODI9TmBNGilc40lIxgVgQqrEkr7yGmLfvghrkwGE4Y4sOy4DjxB8omTabjMsHGfEWZrb0wrpj/JM7MiDUDiMa0NQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LRGVzRpZS/qoj5uuBiQdYv8OdUPOlhzkacw+AZK+h8H5ST90VYUCeTicf+SzDDoMzINvys5NEWASRKKjE2xphBMOYHfBIUn/v7kSq+hggnbuOtjc9fDzASSeheMBsIYFVf+884HUYY/R/tvEmQeOSwdML1jNmW3YwYeUbc3LgkM9/sDI2UBsIUNh8I8eGiXrTIlkGyhPzVFaOfjy8VOLo0uSPhBDGSbRFAWk2YF0MK9z1uX70KjRyUVDIMBsydcLIs15LSUgZ31/OhPGfWjDxFmiv5JURRGCazGZg70CGJ3jqO+Aab+uaGuWLU3QYDhOCNqopWc3xGGFdJ+pjVj5Tg==
  • Cc: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, <consulting@xxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Thu, 27 Mar 2025 13:10:47 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 3/27/25 05:00, Nicola Vetrini wrote:
> On 2025-03-27 09:37, Nicola Vetrini wrote:
>> On 2025-03-27 09:03, Jan Beulich wrote:
>>> On 27.03.2025 01:40, Volodymyr Babchuk wrote:
>>>> While building xen with GCC 14.2.1 with "-fcondition-coverage" option,
>>>> the compiler produces a false positive warning:
>>>>
>>>>   arch/x86/irq.c: In function ‘create_irq’:
>>>>   arch/x86/irq.c:281:11: error: ‘desc’ may be used uninitialized 
>>>> [-Werror=maybe-uninitialized]
>>>>     281 |     ret = init_one_irq_desc(desc);
>>>>         |           ^~~~~~~~~~~~~~~~~~~~~~~
>>>>   arch/x86/irq.c:269:22: note: ‘desc’ was declared here
>>>>     269 |     struct irq_desc *desc;
>>>>         |                      ^~~~
>>>>   cc1: all warnings being treated as errors
>>>>   make[2]: *** [Rules.mk:252: arch/x86/irq.o] Error 1
>>>>
>>>> While we have signed/unsigned comparison both in "for" loop and in
>>>> "if" statement, this still can't lead to use of uninitialized "desc",
>>>> as either loop will be executed at least once, or the function will
>>>> return early. So this is a clearly false positive warning. Anyways,
>>>> initialize "desc" with NULL to make GCC happy.
>>>>
>>>> Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>
>>>
>>> Hmm, this puts us in an interesting conflict, I think. Misra, aiui, will ...
>>>
>>>> --- a/xen/arch/x86/irq.c
>>>> +++ b/xen/arch/x86/irq.c
>>>> @@ -265,7 +265,7 @@ void __init clear_irq_vector(int irq)
>>>>  int create_irq(nodeid_t node, bool grant_access)
>>>>  {
>>>>      int irq, ret;
>>>> -    struct irq_desc *desc;
>>>> +    struct irq_desc *desc = NULL;
>>>
>>> ... consider such an assignment useless (and hence potentially confusing)
>>> code. I'm curious what BugsEng folks are going to say here.
>>>
> 
> Just to mention it: having a "do { } while" loop instead of a for (just out 
> of context) probably avoid tripping gcc's false positive and also help with 
> MISRA Rule 9.1 without needing an explicit initializer.
> 
>>
>> It is quite odd to see this only in coverage builds, but the side effects of 
>> coverage options might trigger some of gcc's internal analyzer thresholds. 
>> Anyway, since there are no concerns about dead code (see 
>> https://gitlab.com/xen-project/xen/-/blob/staging/docs/misra/deviations.rst: 
>> R2.2, "There shall be no dead code", is globally deviated) and that this 
>> might actually be beneficial to remove some caution reports for R9.1 ("The 
>> value of an object with automatic storage duration shall not be read before 
>> it has been set") I think the overall effect is positive.

I tried running an "-Og default for debug builds" change through CI, and
I ran into *almost* the same error with -Og and certain version(s) of
GCC:

arch/x86/irq.c: In function 'create_irq':
arch/x86/irq.c:298:25: error: 'desc' may be used uninitialized 
[-Werror=maybe-uninitialized]
  298 |         desc->arch.used = IRQ_UNUSED;
arch/x86/irq.c:268:22: note: 'desc' was declared here
  268 |     struct irq_desc *desc;
      |                      ^~~~

The do { } while loop Nicola suggested indeed fixes it in the case of
-Og:

diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index dd8d921f18f6..812f9eb91453 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -267,12 +267,18 @@ int create_irq(nodeid_t node, bool grant_access)
     int irq, ret;
     struct irq_desc *desc;
 
-    for (irq = nr_irqs_gsi; irq < nr_irqs; irq++)
+    irq = nr_irqs_gsi;
+
+    if ( irq >= nr_irqs )
+        return -1;
+
+    do
     {
         desc = irq_to_desc(irq);
         if (cmpxchg(&desc->arch.used, IRQ_UNUSED, IRQ_RESERVED) == IRQ_UNUSED)
            break;
-    }
+        irq++;
+    } while ( irq < nr_irqs );
 
     if (irq >= nr_irqs)
          return -ENOSPC;



 


Rackspace

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