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

Re: [PATCH v8 7/9] xen/arm: create shared memory nodes in guest device tree



On Fri, 9 Sep 2022, Luca Fancellu wrote:
> > On 9 Sep 2022, at 10:40, Bertrand Marquis <Bertrand.Marquis@xxxxxxx> wrote:
> > 
> > Hi Julien,
> > 
> >> On 9 Sep 2022, at 10:27, Julien Grall <julien@xxxxxxx> wrote:
> >> 
> >> Hi,
> >> 
> >> On 09/09/2022 08:45, Bertrand Marquis wrote:
> >>>> 
> >>>> It should be:
> >>>> 
> >>>> /*
> >>>> * TODO:
> >>>> *
> >>>> 
> >>>> I think this is good to go. The two minor style issues could be fixed on
> >>>> commit. I haven't committed to give Julien & Bertrand another chance to
> >>>> have a look.
> >>> I think that it is ok to fix those on commit and I am ok with the rest so:
> >>> Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
> >> 
> >> This series doesn't build without !CONFIG_STATIC_SHM:
> >> 
> >> UPD     include/xen/compile.h
> >> Xen 4.17-unstable
> >> make[1]: Nothing to be done for `include'.
> >> make[1]: `arch/arm/include/asm/asm-offsets.h' is up to date.
> >> CC      common/version.o
> >> LD      common/built_in.o
> >> CC      arch/arm/domain_build.o
> >> arch/arm/domain_build.c: In function ‘make_shm_memory_node’:
> >> arch/arm/domain_build.c:1445:1: error: no return statement in function 
> >> returning non-void [-Werror=return-type]
> >> }
> >> ^
> >> cc1: all warnings being treated as errors
> >> make[2]: *** [arch/arm/domain_build.o] Error 1
> >> make[1]: *** [arch/arm] Error 2
> >> make: *** [xen] Error 2
> >> 
> >> This is because...
> >> 
> >>>>> +         * - xen,offset: (borrower VMs only)
> >>>>> +         *   64 bit integer offset within the owner virtual machine's 
> >>>>> shared
> >>>>> +         *   memory region used for the mapping in the borrower VM
> >>>>> +         */
> >>>>> +        res = fdt_property_u64(fdt, "xen,offset", 0);
> >>>>> +        if ( res )
> >>>>> +            return res;
> >>>>> +
> >>>>> +        res = fdt_end_node(fdt);
> >>>>> +        if ( res )
> >>>>> +            return res;
> >>>>> +    }
> >>>>> +
> >>>>> +    return res;
> >>>>> +}
> >>>>> +#else
> >>>>> +static int __init make_shm_memory_node(const struct domain *d,
> >>>>> +                                       void *fdt,
> >>>>> +                                       int addrcells, int sizecells,
> >>>>> +                                       const struct meminfo *mem)
> >>>>> +{
> >>>>> +    ASSERT_UNREACHABLE();
> >> 
> >> ... there is a missing 'return -ENOTSUPP' here. While this is simple 
> >> enough to fix, this indicates to me that this version was not tested with 
> >> !CONFIG_STATIC_SHM.
> >> 
> >> As this is the default option, I will not commit until I get confirmation 
> >> that some smoke was done.
> > 
> > This is a case our internal CI should have gone through.
> > Let me check and come back to you.
> > 
> 
> Hi Julien,
> 
> Thanks for catching it, in this case I can confirm that the problem was that 
> we are building with CONFIG_DEBUG enabled, I don’t know why GCC doesn’t 
> complain when
> you have __builtin_unreachable() in that function without any return value, 
> it doesn’t even throw a warning. Could it be considered a bug in GCC?
> 
> Building Xen without CONFIG_DEBUG instead shows up the error you found.
> 
> In this case this change will fix the problem, do you agree on it?
> 
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 8c77c764bcf2..c5d66f18bd49 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -1439,6 +1439,8 @@ static int __init make_shm_memory_node(const struct 
> domain *d,
>                                         const struct meminfo *mem)
>  {
>      ASSERT_UNREACHABLE();
> +
> +    return -EOPNOTSUPP;
>  }
>  #endif
> 
> Is it something that can be addressed on commit?

The suggestion makes sense. I raw a few tests myself and also a pipeline
through gitlab-ci to be sure. Everything passed, so (also mindful of the
deadlines) I committed the series with this change.

 


Rackspace

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