[PATCH] xen/arm: fix the build error for GIC

Dongjiu Geng posted 1 patch 2 years, 4 months ago
Test gitlab-ci passed
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20211222083825.2918045-1-gengdongjiu1@gmail.com
xen/arch/arm/platforms/Kconfig | 1 -
1 file changed, 1 deletion(-)
[PATCH] xen/arm: fix the build error for GIC
Posted by Dongjiu Geng 2 years, 4 months ago
when enable CONFIG_NEW_VGIC in ARM64 QEMU Platform, it will build failed.
so fix it and make it can select GICV2.

Signed-off-by: Dongjiu Geng <gengdongjiu1@gmail.com>
---
$ make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j10
make -C xen install
make[1]: Entering directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
make -f /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig/Makefile.kconfig ARCH=arm64 SRCARCH=arm HOSTCC="gcc" HOSTCXX="g++" syncconfig
make[2]: Entering directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
gcc -Wp,-MD,tools/kconfig/.conf.o.d      -c -o tools/kconfig/conf.o tools/kconfig/conf.c
gcc -Wp,-MD,tools/kconfig/.confdata.o.d      -c -o tools/kconfig/confdata.o tools/kconfig/confdata.c
gcc -Wp,-MD,tools/kconfig/.expr.o.d      -c -o tools/kconfig/expr.o tools/kconfig/expr.c
flex -otools/kconfig/lexer.lex.c -L tools/kconfig/lexer.l
bison -o tools/kconfig/parser.tab.c --defines=tools/kconfig/parser.tab.h -t -l tools/kconfig/parser.y
gcc -Wp,-MD,tools/kconfig/.preprocess.o.d      -c -o tools/kconfig/preprocess.o tools/kconfig/preprocess.c
gcc -Wp,-MD,tools/kconfig/.symbol.o.d      -c -o tools/kconfig/symbol.o tools/kconfig/symbol.c
gcc -Wp,-MD,tools/kconfig/.lexer.lex.o.d     -I /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o tools/kconfig/lexer.lex.o tools/kconfig/lexer.lex.c
gcc -Wp,-MD,tools/kconfig/.parser.tab.o.d     -I /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o tools/kconfig/parser.tab.o tools/kconfig/parser.tab.c
gcc  -o tools/kconfig/conf tools/kconfig/conf.o tools/kconfig/confdata.o tools/kconfig/expr.o tools/kconfig/lexer.lex.o tools/kconfig/parser.tab.o tools/kconfig/preprocess.o tools/kconfig/symbol.o
tools/kconfig/conf  --syncconfig Kconfig

WARNING: unmet direct dependencies detected for GICV3
  Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
  Selected by [y]:
  - QEMU [=y] && <choice> && ARM_64 [=y]

WARNING: unmet direct dependencies detected for GICV3
  Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
  Selected by [y]:
  - QEMU [=y] && <choice> && ARM_64 [=y]

WARNING: unmet direct dependencies detected for GICV3
  Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
  Selected by [y]:
  - QEMU [=y] && <choice> && ARM_64 [=y]
make[2]: Leaving directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
make -f Rules.mk _install
make[2]: Entering directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
---
 xen/arch/arm/platforms/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/xen/arch/arm/platforms/Kconfig b/xen/arch/arm/platforms/Kconfig
index c93a6b2756..6d3ee99456 100644
--- a/xen/arch/arm/platforms/Kconfig
+++ b/xen/arch/arm/platforms/Kconfig
@@ -15,7 +15,6 @@ config ALL_PLAT
 config QEMU
 	bool "QEMU aarch virt machine support"
 	depends on ARM_64
-	select GICV3
 	select HAS_PL011
 	---help---
 	Enable all the required drivers for QEMU aarch64 virt emulated
-- 
2.25.1


Re: [PATCH] xen/arm: fix the build error for GIC
Posted by Julien Grall 2 years, 4 months ago
Hello,

On 22/12/2021 09:38, Dongjiu Geng wrote:
> when enable CONFIG_NEW_VGIC in ARM64 QEMU Platform, it will build failed.
> so fix it and make it can select GICV2.

Last time I checked QEMU, it was only able to support GICv3 
virtualization. Has it changed since?

> 
> Signed-off-by: Dongjiu Geng <gengdongjiu1@gmail.com>
> ---
> $ make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j10
> make -C xen install
> make[1]: Entering directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> make -f /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig/Makefile.kconfig ARCH=arm64 SRCARCH=arm HOSTCC="gcc" HOSTCXX="g++" syncconfig
> make[2]: Entering directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> gcc -Wp,-MD,tools/kconfig/.conf.o.d      -c -o tools/kconfig/conf.o tools/kconfig/conf.c
> gcc -Wp,-MD,tools/kconfig/.confdata.o.d      -c -o tools/kconfig/confdata.o tools/kconfig/confdata.c
> gcc -Wp,-MD,tools/kconfig/.expr.o.d      -c -o tools/kconfig/expr.o tools/kconfig/expr.c
> flex -otools/kconfig/lexer.lex.c -L tools/kconfig/lexer.l
> bison -o tools/kconfig/parser.tab.c --defines=tools/kconfig/parser.tab.h -t -l tools/kconfig/parser.y
> gcc -Wp,-MD,tools/kconfig/.preprocess.o.d      -c -o tools/kconfig/preprocess.o tools/kconfig/preprocess.c
> gcc -Wp,-MD,tools/kconfig/.symbol.o.d      -c -o tools/kconfig/symbol.o tools/kconfig/symbol.c
> gcc -Wp,-MD,tools/kconfig/.lexer.lex.o.d     -I /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o tools/kconfig/lexer.lex.o tools/kconfig/lexer.lex.c
> gcc -Wp,-MD,tools/kconfig/.parser.tab.o.d     -I /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o tools/kconfig/parser.tab.o tools/kconfig/parser.tab.c
> gcc  -o tools/kconfig/conf tools/kconfig/conf.o tools/kconfig/confdata.o tools/kconfig/expr.o tools/kconfig/lexer.lex.o tools/kconfig/parser.tab.o tools/kconfig/preprocess.o tools/kconfig/symbol.o
> tools/kconfig/conf  --syncconfig Kconfig
> 
> WARNING: unmet direct dependencies detected for GICV3
>    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
>    Selected by [y]:
>    - QEMU [=y] && <choice> && ARM_64 [=y]
> 
> WARNING: unmet direct dependencies detected for GICV3
>    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
>    Selected by [y]:
>    - QEMU [=y] && <choice> && ARM_64 [=y]
> 
> WARNING: unmet direct dependencies detected for GICV3
>    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
>    Selected by [y]:
>    - QEMU [=y] && <choice> && ARM_64 [=y]
> make[2]: Leaving directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> make -f Rules.mk _install
> make[2]: Entering directory '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> ---
>   xen/arch/arm/platforms/Kconfig | 1 -
>   1 file changed, 1 deletion(-)
> 
> diff --git a/xen/arch/arm/platforms/Kconfig b/xen/arch/arm/platforms/Kconfig
> index c93a6b2756..6d3ee99456 100644
> --- a/xen/arch/arm/platforms/Kconfig
> +++ b/xen/arch/arm/platforms/Kconfig
> @@ -15,7 +15,6 @@ config ALL_PLAT
>   config QEMU
>   	bool "QEMU aarch virt machine support"
>   	depends on ARM_64
> -	select GICV3

Assuming you can use Xen with GICv2 on QEMU, then this change is OK. But 
we are at risk to expose it again via another platform.

So I think it would be better to also to add a dependency !GICV3 for 
NEW_VGIC.

Cheers,

-- 
Julien Grall

Re: [PATCH] xen/arm: fix the build error for GIC
Posted by Stefano Stabellini 2 years, 4 months ago
On Wed, 22 Dec 2021, Julien Grall wrote:
> Hello,
> 
> On 22/12/2021 09:38, Dongjiu Geng wrote:
> > when enable CONFIG_NEW_VGIC in ARM64 QEMU Platform, it will build failed.
> > so fix it and make it can select GICV2.
> 
> Last time I checked QEMU, it was only able to support GICv3 virtualization.
> Has it changed since?
> 
> > 
> > Signed-off-by: Dongjiu Geng <gengdongjiu1@gmail.com>
> > ---
> > $ make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j10
> > make -C xen install
> > make[1]: Entering directory
> > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > make -f
> > /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig/Makefile.kconfig
> > ARCH=arm64 SRCARCH=arm HOSTCC="gcc" HOSTCXX="g++" syncconfig
> > make[2]: Entering directory
> > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > gcc -Wp,-MD,tools/kconfig/.conf.o.d      -c -o tools/kconfig/conf.o
> > tools/kconfig/conf.c
> > gcc -Wp,-MD,tools/kconfig/.confdata.o.d      -c -o tools/kconfig/confdata.o
> > tools/kconfig/confdata.c
> > gcc -Wp,-MD,tools/kconfig/.expr.o.d      -c -o tools/kconfig/expr.o
> > tools/kconfig/expr.c
> > flex -otools/kconfig/lexer.lex.c -L tools/kconfig/lexer.l
> > bison -o tools/kconfig/parser.tab.c --defines=tools/kconfig/parser.tab.h -t
> > -l tools/kconfig/parser.y
> > gcc -Wp,-MD,tools/kconfig/.preprocess.o.d      -c -o
> > tools/kconfig/preprocess.o tools/kconfig/preprocess.c
> > gcc -Wp,-MD,tools/kconfig/.symbol.o.d      -c -o tools/kconfig/symbol.o
> > tools/kconfig/symbol.c
> > gcc -Wp,-MD,tools/kconfig/.lexer.lex.o.d     -I
> > /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o
> > tools/kconfig/lexer.lex.o tools/kconfig/lexer.lex.c
> > gcc -Wp,-MD,tools/kconfig/.parser.tab.o.d     -I
> > /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o
> > tools/kconfig/parser.tab.o tools/kconfig/parser.tab.c
> > gcc  -o tools/kconfig/conf tools/kconfig/conf.o tools/kconfig/confdata.o
> > tools/kconfig/expr.o tools/kconfig/lexer.lex.o tools/kconfig/parser.tab.o
> > tools/kconfig/preprocess.o tools/kconfig/symbol.o
> > tools/kconfig/conf  --syncconfig Kconfig
> > 
> > WARNING: unmet direct dependencies detected for GICV3
> >    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
> >    Selected by [y]:
> >    - QEMU [=y] && <choice> && ARM_64 [=y]
> > 
> > WARNING: unmet direct dependencies detected for GICV3
> >    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
> >    Selected by [y]:
> >    - QEMU [=y] && <choice> && ARM_64 [=y]
> > 
> > WARNING: unmet direct dependencies detected for GICV3
> >    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
> >    Selected by [y]:
> >    - QEMU [=y] && <choice> && ARM_64 [=y]
> > make[2]: Leaving directory
> > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > make -f Rules.mk _install
> > make[2]: Entering directory
> > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > ---
> >   xen/arch/arm/platforms/Kconfig | 1 -
> >   1 file changed, 1 deletion(-)
> > 
> > diff --git a/xen/arch/arm/platforms/Kconfig b/xen/arch/arm/platforms/Kconfig
> > index c93a6b2756..6d3ee99456 100644
> > --- a/xen/arch/arm/platforms/Kconfig
> > +++ b/xen/arch/arm/platforms/Kconfig
> > @@ -15,7 +15,6 @@ config ALL_PLAT
> >   config QEMU
> >   	bool "QEMU aarch virt machine support"
> >   	depends on ARM_64
> > -	select GICV3
> 
> Assuming you can use Xen with GICv2 on QEMU, then this change is OK. But we
> are at risk to expose it again via another platform.
> 
> So I think it would be better to also to add a dependency !GICV3 for NEW_VGIC.

I agree. I gave it a try and turns out it is not possible to simply add:

depends on !GICV3

under NEW_VGIC because there is already a !NEW_VGIC under GICV3.
Apparently it creates a circular dependency. Instead, I did the
following and it looks like it is behaving the way we want.


diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
index ecfa6822e4..373c698018 100644
--- a/xen/arch/arm/Kconfig
+++ b/xen/arch/arm/Kconfig
@@ -35,7 +35,7 @@ config ACPI
 
 config GICV3
 	bool "GICv3 driver"
-	depends on ARM_64 && !NEW_VGIC
+	depends on ARM_64
 	default y
 	---help---
 
@@ -44,13 +44,14 @@ config GICV3
 
 config HAS_ITS
         bool "GICv3 ITS MSI controller support (UNSUPPORTED)" if UNSUPPORTED
-        depends on GICV3 && !NEW_VGIC
+        depends on GICV3
 
 config HVM
         def_bool y
 
 config NEW_VGIC
 	bool "Use new VGIC implementation"
+	depends on !GICV3
 	---help---
 
 	This is an alternative implementation of the ARM GIC interrupt

Re: [PATCH] xen/arm: fix the build error for GIC
Posted by Dongjiu Geng 2 years, 4 months ago
Stefano Stabellini <sstabellini@kernel.org> 于2021年12月24日周五 08:08写道:
>
> On Wed, 22 Dec 2021, Julien Grall wrote:
> > Hello,
> >
> > On 22/12/2021 09:38, Dongjiu Geng wrote:
> > > when enable CONFIG_NEW_VGIC in ARM64 QEMU Platform, it will build failed.
> > > so fix it and make it can select GICV2.
> >
> > Last time I checked QEMU, it was only able to support GICv3 virtualization.
> > Has it changed since?
> >
> > >
> > > Signed-off-by: Dongjiu Geng <gengdongjiu1@gmail.com>
> > > ---
> > > $ make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j10
> > > make -C xen install
> > > make[1]: Entering directory
> > > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > > make -f
> > > /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig/Makefile.kconfig
> > > ARCH=arm64 SRCARCH=arm HOSTCC="gcc" HOSTCXX="g++" syncconfig
> > > make[2]: Entering directory
> > > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > > gcc -Wp,-MD,tools/kconfig/.conf.o.d      -c -o tools/kconfig/conf.o
> > > tools/kconfig/conf.c
> > > gcc -Wp,-MD,tools/kconfig/.confdata.o.d      -c -o tools/kconfig/confdata.o
> > > tools/kconfig/confdata.c
> > > gcc -Wp,-MD,tools/kconfig/.expr.o.d      -c -o tools/kconfig/expr.o
> > > tools/kconfig/expr.c
> > > flex -otools/kconfig/lexer.lex.c -L tools/kconfig/lexer.l
> > > bison -o tools/kconfig/parser.tab.c --defines=tools/kconfig/parser.tab.h -t
> > > -l tools/kconfig/parser.y
> > > gcc -Wp,-MD,tools/kconfig/.preprocess.o.d      -c -o
> > > tools/kconfig/preprocess.o tools/kconfig/preprocess.c
> > > gcc -Wp,-MD,tools/kconfig/.symbol.o.d      -c -o tools/kconfig/symbol.o
> > > tools/kconfig/symbol.c
> > > gcc -Wp,-MD,tools/kconfig/.lexer.lex.o.d     -I
> > > /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o
> > > tools/kconfig/lexer.lex.o tools/kconfig/lexer.lex.c
> > > gcc -Wp,-MD,tools/kconfig/.parser.tab.o.d     -I
> > > /home/workspace/gengdongjiu/old_machine/XEN/xen/xen/tools/kconfig -c -o
> > > tools/kconfig/parser.tab.o tools/kconfig/parser.tab.c
> > > gcc  -o tools/kconfig/conf tools/kconfig/conf.o tools/kconfig/confdata.o
> > > tools/kconfig/expr.o tools/kconfig/lexer.lex.o tools/kconfig/parser.tab.o
> > > tools/kconfig/preprocess.o tools/kconfig/symbol.o
> > > tools/kconfig/conf  --syncconfig Kconfig
> > >
> > > WARNING: unmet direct dependencies detected for GICV3
> > >    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
> > >    Selected by [y]:
> > >    - QEMU [=y] && <choice> && ARM_64 [=y]
> > >
> > > WARNING: unmet direct dependencies detected for GICV3
> > >    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
> > >    Selected by [y]:
> > >    - QEMU [=y] && <choice> && ARM_64 [=y]
> > >
> > > WARNING: unmet direct dependencies detected for GICV3
> > >    Depends on [n]: ARM_64 [=y] && !NEW_VGIC [=y]
> > >    Selected by [y]:
> > >    - QEMU [=y] && <choice> && ARM_64 [=y]
> > > make[2]: Leaving directory
> > > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > > make -f Rules.mk _install
> > > make[2]: Entering directory
> > > '/home/workspace/gengdongjiu/old_machine/XEN/xen/xen'
> > > ---
> > >   xen/arch/arm/platforms/Kconfig | 1 -
> > >   1 file changed, 1 deletion(-)
> > >
> > > diff --git a/xen/arch/arm/platforms/Kconfig b/xen/arch/arm/platforms/Kconfig
> > > index c93a6b2756..6d3ee99456 100644
> > > --- a/xen/arch/arm/platforms/Kconfig
> > > +++ b/xen/arch/arm/platforms/Kconfig
> > > @@ -15,7 +15,6 @@ config ALL_PLAT
> > >   config QEMU
> > >     bool "QEMU aarch virt machine support"
> > >     depends on ARM_64
> > > -   select GICV3
> >
> > Assuming you can use Xen with GICv2 on QEMU, then this change is OK. But we
> > are at risk to expose it again via another platform.
> >
> > So I think it would be better to also to add a dependency !GICV3 for NEW_VGIC.
>
> I agree. I gave it a try and turns out it is not possible to simply add:
>
> depends on !GICV3
>
> under NEW_VGIC because there is already a !NEW_VGIC under GICV3.
> Apparently it creates a circular dependency. Instead, I did the
> following and it looks like it is behaving the way we want.
>
>
> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
> index ecfa6822e4..373c698018 100644
> --- a/xen/arch/arm/Kconfig
> +++ b/xen/arch/arm/Kconfig
> @@ -35,7 +35,7 @@ config ACPI
>
>  config GICV3
>         bool "GICv3 driver"
> -       depends on ARM_64 && !NEW_VGIC
> +       depends on ARM_64
>         default y
>         ---help---
>
> @@ -44,13 +44,14 @@ config GICV3
>
>  config HAS_ITS
>          bool "GICv3 ITS MSI controller support (UNSUPPORTED)" if UNSUPPORTED
> -        depends on GICV3 && !NEW_VGIC
> +        depends on GICV3
>
>  config HVM
>          def_bool y
>
>  config NEW_VGIC
>         bool "Use new VGIC implementation"
> +       depends on !GICV3
>         ---help---

Thanks for the suggestion, I have updated it and resumbit patch v2,
please review it again.

>
>         This is an alternative implementation of the ARM GIC interrupt