diff mbox series

[RFC,v11,30/55] target/arm: wrap call to aarch64_sve_change_el in tcg_enabled()

Message ID 20210323154639.23477-23-cfontana@suse.de (mailing list archive)
State New, archived
Headers show
Series arm cleanup experiment for kvm-only build | expand

Commit Message

Claudio Fontana March 23, 2021, 3:46 p.m. UTC
After this patch it is possible to build only kvm:

./configure --disable-tcg --enable-kvm

Signed-off-by: Claudio Fontana <cfontana@suse.de>
---
 target/arm/cpu-sysemu.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

Comments

Alex Bennée March 23, 2021, 10:50 p.m. UTC | #1
Claudio Fontana <cfontana@suse.de> writes:

> After this patch it is possible to build only kvm:
>
> ./configure --disable-tcg --enable-kvm

FWIW at this point we get a different failure than later on:

  21:10:25 [alex@aarch64-new:~/l/q/b/disable.tcg] (94e2abe0…)|… + make check-qtest
    GIT     ui/keycodemapdb tests/fp/berkeley-testfloat-3 tests/fp/berkeley-softfloat-3 meson dtc capstone slirp
  [1/19] Generating qemu-version.h with a meson_exe.py custom command
  Running test qtest-aarch64/qom-test
  qemu-system-aarch64: missing interface 'idau-interface' for object 'machine'
  socket_accept failed: Resource temporarily unavailable
  **
  ERROR:../../tests/qtest/libqtest.c:319:qtest_init_without_qmp_handshake: assertion failed: (s->fd >= 0 && s->qmp_fd >= 0)
  ERROR qtest-aarch64/qom-test - Bail out! ERROR:../../tests/qtest/libqtest.c:319:qtest_init_without_qmp_handshake: assertion failed: (s->fd >= 0 && s->qmp_fd >= 0)
  make: *** [Makefile.mtest:24: run-test-1] Error 1


>
> Signed-off-by: Claudio Fontana <cfontana@suse.de>
> ---
>  target/arm/cpu-sysemu.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/target/arm/cpu-sysemu.c b/target/arm/cpu-sysemu.c
> index eb928832a9..05d6e79ad9 100644
> --- a/target/arm/cpu-sysemu.c
> +++ b/target/arm/cpu-sysemu.c
> @@ -820,11 +820,13 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs)
>      unsigned int cur_el = arm_current_el(env);
>      int rt;
>  
> -    /*
> -     * Note that new_el can never be 0.  If cur_el is 0, then
> -     * el0_a64 is is_a64(), else el0_a64 is ignored.
> -     */
> -    aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
> +    if (tcg_enabled()) {
> +        /*
> +         * Note that new_el can never be 0.  If cur_el is 0, then
> +         * el0_a64 is is_a64(), else el0_a64 is ignored.
> +         */
> +        aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
> +    }
>  
>      if (cur_el < new_el) {
>          /* Entry vector offset depends on whether the implemented EL
Claudio Fontana March 24, 2021, 8:29 a.m. UTC | #2
On 3/23/21 11:50 PM, Alex Bennée wrote:
> 
> Claudio Fontana <cfontana@suse.de> writes:
> 
>> After this patch it is possible to build only kvm:
>>
>> ./configure --disable-tcg --enable-kvm


It's possible to build, but tests will fail until all the test-related patches are applied.


> 
> FWIW at this point we get a different failure than later on:
> 
>   21:10:25 [alex@aarch64-new:~/l/q/b/disable.tcg] (94e2abe0…)|… + make check-qtest
>     GIT     ui/keycodemapdb tests/fp/berkeley-testfloat-3 tests/fp/berkeley-softfloat-3 meson dtc capstone slirp
>   [1/19] Generating qemu-version.h with a meson_exe.py custom command
>   Running test qtest-aarch64/qom-test
>   qemu-system-aarch64: missing interface 'idau-interface' for object 'machine'

This one is broken by a recent commit in QEMU mainline, by removing the idau interface from KVM cpus.

This is fixed by: Revert "target/arm: Restrict v8M IDAU to TCG" in the series.

>   socket_accept failed: Resource temporarily unavailable
>   **
>   ERROR:../../tests/qtest/libqtest.c:319:qtest_init_without_qmp_handshake: assertion failed: (s->fd >= 0 && s->qmp_fd >= 0)
>   ERROR qtest-aarch64/qom-test - Bail out! ERROR:../../tests/qtest/libqtest.c:319:qtest_init_without_qmp_handshake: assertion failed: (s->fd >= 0 && s->qmp_fd >= 0)
>   make: *** [Makefile.mtest:24: run-test-1] Error 1
> 
> 
>>
>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
>> ---
>>  target/arm/cpu-sysemu.c | 12 +++++++-----
>>  1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/target/arm/cpu-sysemu.c b/target/arm/cpu-sysemu.c
>> index eb928832a9..05d6e79ad9 100644
>> --- a/target/arm/cpu-sysemu.c
>> +++ b/target/arm/cpu-sysemu.c
>> @@ -820,11 +820,13 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs)
>>      unsigned int cur_el = arm_current_el(env);
>>      int rt;
>>  
>> -    /*
>> -     * Note that new_el can never be 0.  If cur_el is 0, then
>> -     * el0_a64 is is_a64(), else el0_a64 is ignored.
>> -     */
>> -    aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
>> +    if (tcg_enabled()) {
>> +        /*
>> +         * Note that new_el can never be 0.  If cur_el is 0, then
>> +         * el0_a64 is is_a64(), else el0_a64 is ignored.
>> +         */
>> +        aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
>> +    }
>>  
>>      if (cur_el < new_el) {
>>          /* Entry vector offset depends on whether the implemented EL
> 
>
Alex Bennée March 24, 2021, 11:41 a.m. UTC | #3
Claudio Fontana <cfontana@suse.de> writes:

> On 3/23/21 11:50 PM, Alex Bennée wrote:
>> 
>> Claudio Fontana <cfontana@suse.de> writes:
>> 
>>> After this patch it is possible to build only kvm:
>>>
>>> ./configure --disable-tcg --enable-kvm
>
>
> It's possible to build, but tests will fail until all the test-related
> patches are applied.

So I think there has to be a change in ordering in the series so we
don't have differing failure modes as we enable. I'm not sure if that
means all tests need to be fixed before the first "--disable-tcg builds"
patch but I would expect at least a basic:

  qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048 -net none -nographic -kernel ~/lsrc/linux.git/builds/arm64.virt/arch/arm64/boot/Image -append "panic=-1"
--no-reboot

works - so at least we can track if any of the additional changes cause
regressions.

>> 
>> FWIW at this point we get a different failure than later on:
>> 
>>   21:10:25 [alex@aarch64-new:~/l/q/b/disable.tcg] (94e2abe0…)|… + make check-qtest
>>     GIT     ui/keycodemapdb tests/fp/berkeley-testfloat-3 tests/fp/berkeley-softfloat-3 meson dtc capstone slirp
>>   [1/19] Generating qemu-version.h with a meson_exe.py custom command
>>   Running test qtest-aarch64/qom-test
>>   qemu-system-aarch64: missing interface 'idau-interface' for object 'machine'
>
> This one is broken by a recent commit in QEMU mainline, by removing the idau interface from KVM cpus.
>
> This is fixed by: Revert "target/arm: Restrict v8M IDAU to TCG" in the
> series.

The proper fix is probably to move the mps2tz machine type that brings
this in to TCG only.

Moving up the build chain to the revert I now get:

  ./qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048 -net none -nographic -kernel ~/lsrc/linux.git/builds/arm64.virt/arch/arm64/boot/Image -append "panic=-1"
  --no-reboot
  qemu-system-aarch64: Property 'virt-6.0-machine.gic' not found

>
>>   socket_accept failed: Resource temporarily unavailable
>>   **
>>   ERROR:../../tests/qtest/libqtest.c:319:qtest_init_without_qmp_handshake: assertion failed: (s->fd >= 0 && s->qmp_fd >= 0)
>>   ERROR qtest-aarch64/qom-test - Bail out! ERROR:../../tests/qtest/libqtest.c:319:qtest_init_without_qmp_handshake: assertion failed: (s->fd >= 0 && s->qmp_fd >= 0)
>>   make: *** [Makefile.mtest:24: run-test-1] Error 1
>> 
>> 
>>>
>>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
>>> ---
>>>  target/arm/cpu-sysemu.c | 12 +++++++-----
>>>  1 file changed, 7 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/target/arm/cpu-sysemu.c b/target/arm/cpu-sysemu.c
>>> index eb928832a9..05d6e79ad9 100644
>>> --- a/target/arm/cpu-sysemu.c
>>> +++ b/target/arm/cpu-sysemu.c
>>> @@ -820,11 +820,13 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs)
>>>      unsigned int cur_el = arm_current_el(env);
>>>      int rt;
>>>  
>>> -    /*
>>> -     * Note that new_el can never be 0.  If cur_el is 0, then
>>> -     * el0_a64 is is_a64(), else el0_a64 is ignored.
>>> -     */
>>> -    aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
>>> +    if (tcg_enabled()) {
>>> +        /*
>>> +         * Note that new_el can never be 0.  If cur_el is 0, then
>>> +         * el0_a64 is is_a64(), else el0_a64 is ignored.
>>> +         */
>>> +        aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
>>> +    }
>>>  
>>>      if (cur_el < new_el) {
>>>          /* Entry vector offset depends on whether the implemented EL
>> 
>>
Alex Bennée March 24, 2021, 11:48 a.m. UTC | #4
Alex Bennée <alex.bennee@linaro.org> writes:

> Claudio Fontana <cfontana@suse.de> writes:
>
>> On 3/23/21 11:50 PM, Alex Bennée wrote:
<snip>
> Moving up the build chain to the revert I now get:
>
>   ./qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048
> -net none -nographic -kernel
> ~/lsrc/linux.git/builds/arm64.virt/arch/arm64/boot/Image -append
> "panic=-1"
>   --no-reboot
>   qemu-system-aarch64: Property 'virt-6.0-machine.gic' not found

PEBKAC:

The proper command line is "-M virt,gic-version=host"
Claudio Fontana March 24, 2021, 2:34 p.m. UTC | #5
On 3/24/21 12:48 PM, Alex Bennée wrote:
> 
> Alex Bennée <alex.bennee@linaro.org> writes:
> 
>> Claudio Fontana <cfontana@suse.de> writes:
>>
>>> On 3/23/21 11:50 PM, Alex Bennée wrote:
> <snip>
>> Moving up the build chain to the revert I now get:
>>
>>   ./qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048
>> -net none -nographic -kernel
>> ~/lsrc/linux.git/builds/arm64.virt/arch/arm64/boot/Image -append
>> "panic=-1"
>>   --no-reboot
>>   qemu-system-aarch64: Property 'virt-6.0-machine.gic' not found


I think I am seeing this on master too, can you check?

 ./qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048 -net none -nographic -drive if=pflash,format=raw,file=/home/cfontana/QEMU_EFI.img  -drive if=pflash,file=/home/cfontana/varstore.img -drive if=virtio,file=/home/cfontana/debian.img -drive if=virtio,format=raw,file=/home/cfontana/debian-10.8.0-arm64-netinst.iso

qemu-system-aarch64: Property 'virt-6.0-machine.gic' not found


> 
> PEBKAC:
> 
> The proper command line is "-M virt,gic-version=host"
>
Alex Bennée March 24, 2021, 4:30 p.m. UTC | #6
Claudio Fontana <cfontana@suse.de> writes:

> On 3/24/21 12:48 PM, Alex Bennée wrote:
>> 
>> Alex Bennée <alex.bennee@linaro.org> writes:
>> 
>>> Claudio Fontana <cfontana@suse.de> writes:
>>>
>>>> On 3/23/21 11:50 PM, Alex Bennée wrote:
>> <snip>
>>> Moving up the build chain to the revert I now get:
>>>
>>>   ./qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048
>>> -net none -nographic -kernel
>>> ~/lsrc/linux.git/builds/arm64.virt/arch/arm64/boot/Image -append
>>> "panic=-1"
>>>   --no-reboot
>>>   qemu-system-aarch64: Property 'virt-6.0-machine.gic' not found
>
>
> I think I am seeing this on master too, can you check?
>
>  ./qemu-system-aarch64 -M virt,gic=host -cpu host -accel kvm -m 2048
> -net none -nographic -drive
> if=pflash,format=raw,file=/home/cfontana/QEMU_EFI.img -drive
> if=pflash,file=/home/cfontana/varstore.img -drive
> if=virtio,file=/home/cfontana/debian.img -drive
> if=virtio,format=raw,file=/home/cfontana/debian-10.8.0-arm64-netinst.iso
>
> qemu-system-aarch64: Property 'virt-6.0-machine.gic' not found
>
>
>> 
>> PEBKAC:
>> 
>> The proper command line is "-M virt,gic-version=host"
>>

Sorry apologies for the acronym: Problem Exists Between Keyboard and
Chair - i.e. I messed up the command line ;-)
Richard Henderson March 24, 2021, 10:30 p.m. UTC | #7
On 3/23/21 9:46 AM, Claudio Fontana wrote:
> After this patch it is possible to build only kvm:
> 
> ./configure --disable-tcg --enable-kvm
> 
> Signed-off-by: Claudio Fontana<cfontana@suse.de>
> ---
>   target/arm/cpu-sysemu.c | 12 +++++++-----
>   1 file changed, 7 insertions(+), 5 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~
diff mbox series

Patch

diff --git a/target/arm/cpu-sysemu.c b/target/arm/cpu-sysemu.c
index eb928832a9..05d6e79ad9 100644
--- a/target/arm/cpu-sysemu.c
+++ b/target/arm/cpu-sysemu.c
@@ -820,11 +820,13 @@  static void arm_cpu_do_interrupt_aarch64(CPUState *cs)
     unsigned int cur_el = arm_current_el(env);
     int rt;
 
-    /*
-     * Note that new_el can never be 0.  If cur_el is 0, then
-     * el0_a64 is is_a64(), else el0_a64 is ignored.
-     */
-    aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
+    if (tcg_enabled()) {
+        /*
+         * Note that new_el can never be 0.  If cur_el is 0, then
+         * el0_a64 is is_a64(), else el0_a64 is ignored.
+         */
+        aarch64_sve_change_el(env, cur_el, new_el, is_a64(env));
+    }
 
     if (cur_el < new_el) {
         /* Entry vector offset depends on whether the implemented EL