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

Re: [XEN PATCH v2 1/5] x86: address MISRA C:2012 Rule 5.3


  • To: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Tue, 8 Aug 2023 15:46:59 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=GL8Pm/P4/zQxUN8Cll8FWmPW6DZ35OKVjXUR9OfSrZ0=; b=n5DhyErNsY+xiSsNyOHz8CHn1qsgLChxcfcOb7LYc/z09jmzX3OuzBXMRKhznrmeSKWm3/J095hK/eeznyV2cF43eY6+ZSH7nlsc6nEye66oRIQmFMRSH9FGYx1XtMnU1tGaWz2TWZdRO5ZBGhoJ/i8iXhtIr2Ns2Hg4RSyhH8ZVGiCMMPDX5mvPtjB0DvvumgZ+qwdw3EEjPC8ykocFoDpRCK2IT5JUtYJg0GSP6kIYHDrV7jmdijRHJW/NrzQc15VD8o2bDoYEhLLwshxODuTf55M+yEvhM8rnvuu6saGzRcLlqHoSpfZkhaUeMtUW5AeR6EENnpaCZOfthaUInA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y1m968OiRp76HrSj7ITHPRRVgVOs+H0dWMw8gUvnKVTfdtiwoA7lzdUFh4DIyTC5CZ1ArXgty2oCFR5hwluXSSDa2mvgD7yWwgUrqfVUHQfhTaImh6Y909CjLZfBov+EEbF6t2CqetQPUo4+GFVDL1L40BeRaJsI0Zkc6KQdkwEVoKLsGXLykX+2E0q2+vDOpyGM+vYRfQxzCj1BRMAaUUWA2x588Fj8or5BSXzUCDl5SehU2mywLTW273KOo7xshqVV3Fg50HdNrcQCy+G4ZirFNn75JMEj6U5rlONzVt9YEI7T95FH6HuqxcCdvM+WIhaylWIhe3WJmbH+VaNc3Q==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: sstabellini@xxxxxxxxxx, michal.orzel@xxxxxxx, xenia.ragiadakou@xxxxxxx, ayan.kumar.halder@xxxxxxx, consulting@xxxxxxxxxxx, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Paul Durrant <paul@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Tue, 08 Aug 2023 13:47:09 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 08.08.2023 13:08, Nicola Vetrini wrote:
> --- a/xen/arch/x86/e820.c
> +++ b/xen/arch/x86/e820.c
> @@ -543,27 +543,27 @@ static void __init machine_specific_memory_setup(struct 
> e820map *raw)
>          clip_to_limit(top_of_ram, "MTRRs do not cover all of memory.");
>  }
>  
> -/* This function relies on the passed in e820->map[] being sorted. */
> -int __init e820_add_range(
> -    struct e820map *e820, uint64_t s, uint64_t e, uint32_t type)
> +/* This function relies on the global e820->map[] being sorted. */
> +int __init e820_add_range(uint64_t s, uint64_t e, uint32_t type)
>  {
>      unsigned int i;
> +    struct e820entry *ei = e820.map;
>  
> -    for ( i = 0; i < e820->nr_map; ++i )
> +    for ( i = 0; i < e820.nr_map; ++i )
>      {
> -        uint64_t rs = e820->map[i].addr;
> -        uint64_t re = rs + e820->map[i].size;
> +        uint64_t rs = ei[i].addr;
> +        uint64_t re = rs + ei[i].size;
>  
> -        if ( rs == e && e820->map[i].type == type )
> +        if ( rs == e && ei[i].type == type )
>          {
> -            e820->map[i].addr = s;
> +            ei[i].addr = s;
>              return 1;
>          }
>  
> -        if ( re == s && e820->map[i].type == type &&
> -             (i + 1 == e820->nr_map || e820->map[i + 1].addr >= e) )
> +        if ( re == s && ei[i].type == type &&
> +             (i + 1 == e820.nr_map || ei[i + 1].addr >= e) )
>          {
> -            e820->map[i].size += e - s;
> +            ei[i].size += e - s;
>              return 1;
>          }
>  
> @@ -574,20 +574,20 @@ int __init e820_add_range(
>              return 0;
>      }
>  
> -    if ( e820->nr_map >= ARRAY_SIZE(e820->map) )
> +    if ( e820.nr_map >= ARRAY_SIZE(e820.map) )
>      {
>          printk(XENLOG_WARNING "E820: overflow while adding region"
>                 " %"PRIx64"-%"PRIx64"\n", s, e);
>          return 0;
>      }
>  
> -    memmove(e820->map + i + 1, e820->map + i,
> -            (e820->nr_map - i) * sizeof(*e820->map));
> +    memmove(ei + i + 1, ei + i,
> +            (e820.nr_map - i) * sizeof(*e820.map));
>  
> -    e820->nr_map++;
> -    e820->map[i].addr = s;
> -    e820->map[i].size = e - s;
> -    e820->map[i].type = type;
> +    e820.nr_map++;
> +    ei[i].addr = s;
> +    ei[i].size = e - s;
> +    ei[i].type = type;
>  
>      return 1;
>  }

To be honest this isn't quite what I was hoping for; the many ei[i]. are
(imo) quite a bit harder to read than ei-> would have been (hence my
earlier suggestion to also update that pointer in the for() loop header).
Then again I see there is one use of ei[i + 1], which would likely look
less neat as ei[1].addr when everywhere else we have ei->. So I guess up
to you whether you adjust further; I'll ack either form.

> --- a/xen/arch/x86/guest/hypervisor.c
> +++ b/xen/arch/x86/guest/hypervisor.c
> @@ -63,7 +63,7 @@ void hypervisor_resume(void)
>  void __init hypervisor_e820_fixup(struct e820map *e820)

What about this one? The function parameter ...

>  {
>      if ( ops.e820_fixup )
> -        ops.e820_fixup(e820);
> +        ops.e820_fixup();
>  }

... isn't used anymore, and the sole call site passes &e820.

> --- a/xen/arch/x86/include/asm/e820.h
> +++ b/xen/arch/x86/include/asm/e820.h
> @@ -29,8 +29,7 @@ extern int reserve_e820_ram(struct e820map *e820, uint64_t 
> s, uint64_t e);
>  extern int e820_change_range_type(
>      struct e820map *e820, uint64_t s, uint64_t e,
>      uint32_t orig_type, uint32_t new_type);

And what about this one? None of the other subjects in the series suggest
this is then taken care of in a separate patch (as per the earlier
discussion it indeed doesn't want dealing with right here).

> --- a/xen/arch/x86/setup.c
> +++ b/xen/arch/x86/setup.c
> @@ -686,7 +686,7 @@ static void __init parse_video_info(void)
>  #endif
>  }
>  
> -static void __init kexec_reserve_area(struct e820map *e820)
> +static void __init kexec_reserve_area(void)
>  {
>  #ifdef CONFIG_KEXEC
>      unsigned long kdump_start = kexec_crash_area.start;
> @@ -700,7 +700,7 @@ static void __init kexec_reserve_area(struct e820map 
> *e820)
>  
>      is_reserved = true;
>  
> -    if ( !reserve_e820_ram(e820, kdump_start, kdump_start + kdump_size) )
> +    if ( !reserve_e820_ram(&boot_e820, kdump_start, kdump_start + 
> kdump_size) )
>      {
>          printk("Kdump: DISABLED (failed to reserve %luMB (%lukB) at %#lx)"
>                 "\n", kdump_size >> 20, kdump_size >> 10, kdump_start);
> @@ -1308,7 +1308,7 @@ void __init noreturn __start_xen(unsigned long mbi_p)
>          if ( e820.map[i].type == E820_RAM )
>              nr_pages += e820.map[i].size >> PAGE_SHIFT;
>      set_kexec_crash_area_size((u64)nr_pages << PAGE_SHIFT);
> -    kexec_reserve_area(&boot_e820);
> +    kexec_reserve_area();
>  
>      initial_images = mod;
>      nr_initial_images = mbi->mods_count;
> @@ -1495,7 +1495,7 @@ void __init noreturn __start_xen(unsigned long mbi_p)
>          reserve_e820_ram(&boot_e820, __pa(_stext), __pa(__2M_rwdata_end));
>  
>      /* Late kexec reservation (dynamic start address). */
> -    kexec_reserve_area(&boot_e820);
> +    kexec_reserve_area();
>  
>      setup_max_pdx(raw_max_page);
>      if ( highmem_start )

Seeing all the knock-on effects for the add_range() change, I think this
separate adjustment would better have been an independent patch.

Jan



 


Rackspace

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