diff mbox series

[RFC,6/8] tests/qtest/libqtest: Allow checking for HVF accelerator

Message ID 20230119100537.5114-7-philmd@linaro.org
State New
Headers show
Series tests/qtest: Allow running boot-serial / migration with TCG disabled | expand

Commit Message

Philippe Mathieu-Daudé Jan. 19, 2023, 10:05 a.m. UTC
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
RFC: CONFIG_HVF is poisoned.

We could pass host config definitions to qtest using:

  diff --git a/meson.build b/meson.build
  @@ -2547,6 +2547,7 @@ foreach target : target_dirs

     accel_kconfig = []
     foreach sym: accelerators
  +    config_host_data.set(sym + '_QTEST', '')
       if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, [])
         config_target += { sym: 'y' }
         config_all += { sym: 'y' }

Then test for CONFIG_HVF_QTEST ...
---
 tests/qtest/libqtest.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Thomas Huth Jan. 19, 2023, 11:24 a.m. UTC | #1
On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> RFC: CONFIG_HVF is poisoned.
> 
> We could pass host config definitions to qtest using:
> 
>    diff --git a/meson.build b/meson.build
>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
> 
>       accel_kconfig = []
>       foreach sym: accelerators
>    +    config_host_data.set(sym + '_QTEST', '')
>         if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, [])
>           config_target += { sym: 'y' }
>           config_all += { sym: 'y' }
> 
> Then test for CONFIG_HVF_QTEST ...

I don't think that would really work well. The qtests are build once for all 
targets, and HVF is only available in the target that matches the host 
architecture. It's poisoned on purpose.

The TCG accelerator is special, since we have it in either none or in all 
targets, that's why we can use CONFIG_TCG there.

The kvm part is also rather a hack... we should maybe rather additionally 
use the "query-kvm" QAPI command to check whether it is really available...?

To fix this properly for HVF, I think you'd need a way to query the 
available accelerators via QMP, too... Hmmm, weren't there some patches for 
something like that in the past ... can't remember right now ...

  Thomas
Philippe Mathieu-Daudé Jan. 19, 2023, 11:30 a.m. UTC | #2
On 19/1/23 12:24, Thomas Huth wrote:
> On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> RFC: CONFIG_HVF is poisoned.
>>
>> We could pass host config definitions to qtest using:
>>
>>    diff --git a/meson.build b/meson.build
>>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
>>
>>       accel_kconfig = []
>>       foreach sym: accelerators
>>    +    config_host_data.set(sym + '_QTEST', '')
>>         if sym == 'CONFIG_TCG' or target in 
>> accelerator_targets.get(sym, [])
>>           config_target += { sym: 'y' }
>>           config_all += { sym: 'y' }
>>
>> Then test for CONFIG_HVF_QTEST ...
> 
> I don't think that would really work well. The qtests are build once for 
> all targets, and HVF is only available in the target that matches the 
> host architecture. It's poisoned on purpose.
> 
> The TCG accelerator is special, since we have it in either none or in 
> all targets, that's why we can use CONFIG_TCG there.
> 
> The kvm part is also rather a hack... we should maybe rather 
> additionally use the "query-kvm" QAPI command to check whether it is 
> really available...?
> 
> To fix this properly for HVF, I think you'd need a way to query the 
> available accelerators via QMP, too... Hmmm, weren't there some patches 
> for something like that in the past ... can't remember right now ...

https://lore.kernel.org/qemu-devel/20210505125806.1263441-3-philmd@redhat.com/ 
:(
Thomas Huth Jan. 19, 2023, 12:05 p.m. UTC | #3
On 19/01/2023 12.30, Philippe Mathieu-Daudé wrote:
> On 19/1/23 12:24, Thomas Huth wrote:
>> On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> ---
>>> RFC: CONFIG_HVF is poisoned.
>>>
>>> We could pass host config definitions to qtest using:
>>>
>>>    diff --git a/meson.build b/meson.build
>>>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
>>>
>>>       accel_kconfig = []
>>>       foreach sym: accelerators
>>>    +    config_host_data.set(sym + '_QTEST', '')
>>>         if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, [])
>>>           config_target += { sym: 'y' }
>>>           config_all += { sym: 'y' }
>>>
>>> Then test for CONFIG_HVF_QTEST ...
>>
>> I don't think that would really work well. The qtests are build once for 
>> all targets, and HVF is only available in the target that matches the host 
>> architecture. It's poisoned on purpose.
>>
>> The TCG accelerator is special, since we have it in either none or in all 
>> targets, that's why we can use CONFIG_TCG there.
>>
>> The kvm part is also rather a hack... we should maybe rather additionally 
>> use the "query-kvm" QAPI command to check whether it is really available...?
>>
>> To fix this properly for HVF, I think you'd need a way to query the 
>> available accelerators via QMP, too... Hmmm, weren't there some patches 
>> for something like that in the past ... can't remember right now ...
> 
> https://lore.kernel.org/qemu-devel/20210505125806.1263441-3-philmd@redhat.com/ 
> :(

Ah, right, and we ended up with the competing patch from Igor since we could 
not quite settle on the QAPI extensions?

Hmm, what happens if you execute "query-qmp-schema" on a HVF-enabled host 
these days? Is there a "hvf"-related entry somewhere in the response?

  Thomas
Thomas Huth Jan. 19, 2023, 4:21 p.m. UTC | #4
On 19/01/2023 12.24, Thomas Huth wrote:
> On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> RFC: CONFIG_HVF is poisoned.
>>
>> We could pass host config definitions to qtest using:
>>
>>    diff --git a/meson.build b/meson.build
>>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
>>
>>       accel_kconfig = []
>>       foreach sym: accelerators
>>    +    config_host_data.set(sym + '_QTEST', '')
>>         if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, [])
>>           config_target += { sym: 'y' }
>>           config_all += { sym: 'y' }
>>
>> Then test for CONFIG_HVF_QTEST ...
> 
> I don't think that would really work well. The qtests are build once for all 
> targets, and HVF is only available in the target that matches the host 
> architecture. It's poisoned on purpose.
> 
> The TCG accelerator is special, since we have it in either none or in all 
> targets, that's why we can use CONFIG_TCG there.
> 
> The kvm part is also rather a hack... we should maybe rather additionally 
> use the "query-kvm" QAPI command to check whether it is really available...?

Scratch that ... I forgot that you already have to run with "-accel kvm" to 
see whether the accelerator is working with "query-kvm" ... so that would 
not work here for probing whether "-accel kvm" should be used or not ;-)

  Thomas
Thomas Huth Jan. 20, 2023, 10:26 a.m. UTC | #5
On 19/01/2023 13.05, Thomas Huth wrote:
> On 19/01/2023 12.30, Philippe Mathieu-Daudé wrote:
>> On 19/1/23 12:24, Thomas Huth wrote:
>>> On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>>> ---
>>>> RFC: CONFIG_HVF is poisoned.
>>>>
>>>> We could pass host config definitions to qtest using:
>>>>
>>>>    diff --git a/meson.build b/meson.build
>>>>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
>>>>
>>>>       accel_kconfig = []
>>>>       foreach sym: accelerators
>>>>    +    config_host_data.set(sym + '_QTEST', '')
>>>>         if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, 
>>>> [])
>>>>           config_target += { sym: 'y' }
>>>>           config_all += { sym: 'y' }
>>>>
>>>> Then test for CONFIG_HVF_QTEST ...
>>>
>>> I don't think that would really work well. The qtests are build once for 
>>> all targets, and HVF is only available in the target that matches the 
>>> host architecture. It's poisoned on purpose.
>>>
>>> The TCG accelerator is special, since we have it in either none or in all 
>>> targets, that's why we can use CONFIG_TCG there.
>>>
>>> The kvm part is also rather a hack... we should maybe rather additionally 
>>> use the "query-kvm" QAPI command to check whether it is really available...?
>>>
>>> To fix this properly for HVF, I think you'd need a way to query the 
>>> available accelerators via QMP, too... Hmmm, weren't there some patches 
>>> for something like that in the past ... can't remember right now ...
>>
>> https://lore.kernel.org/qemu-devel/20210505125806.1263441-3-philmd@redhat.com/ 
>> :(
> 
> Ah, right, and we ended up with the competing patch from Igor since we could 
> not quite settle on the QAPI extensions?
> 
> Hmm, what happens if you execute "query-qmp-schema" on a HVF-enabled host 
> these days? Is there a "hvf"-related entry somewhere in the response?

Alternative idea: execute QEMU once with "-accel help" via 
g_spawn_command_line_sync() or g_spawn_sync() once and look for the 
accelerator in the standard output.

  Thomas
Philippe Mathieu-Daudé Jan. 20, 2023, 11:18 a.m. UTC | #6
On 20/1/23 11:26, Thomas Huth wrote:
> On 19/01/2023 13.05, Thomas Huth wrote:
>> On 19/01/2023 12.30, Philippe Mathieu-Daudé wrote:
>>> On 19/1/23 12:24, Thomas Huth wrote:
>>>> On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
>>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>>>> ---
>>>>> RFC: CONFIG_HVF is poisoned.
>>>>>
>>>>> We could pass host config definitions to qtest using:
>>>>>
>>>>>    diff --git a/meson.build b/meson.build
>>>>>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
>>>>>
>>>>>       accel_kconfig = []
>>>>>       foreach sym: accelerators
>>>>>    +    config_host_data.set(sym + '_QTEST', '')
>>>>>         if sym == 'CONFIG_TCG' or target in 
>>>>> accelerator_targets.get(sym, [])
>>>>>           config_target += { sym: 'y' }
>>>>>           config_all += { sym: 'y' }
>>>>>
>>>>> Then test for CONFIG_HVF_QTEST ...
>>>>
>>>> I don't think that would really work well. The qtests are build once 
>>>> for all targets, and HVF is only available in the target that 
>>>> matches the host architecture. It's poisoned on purpose.
>>>>
>>>> The TCG accelerator is special, since we have it in either none or 
>>>> in all targets, that's why we can use CONFIG_TCG there.
>>>>
>>>> The kvm part is also rather a hack... we should maybe rather 
>>>> additionally use the "query-kvm" QAPI command to check whether it is 
>>>> really available...?
>>>>
>>>> To fix this properly for HVF, I think you'd need a way to query the 
>>>> available accelerators via QMP, too... Hmmm, weren't there some 
>>>> patches for something like that in the past ... can't remember right 
>>>> now ...
>>>
>>> https://lore.kernel.org/qemu-devel/20210505125806.1263441-3-philmd@redhat.com/ :(
>>
>> Ah, right, and we ended up with the competing patch from Igor since we 
>> could not quite settle on the QAPI extensions?
>>
>> Hmm, what happens if you execute "query-qmp-schema" on a HVF-enabled 
>> host these days? Is there a "hvf"-related entry somewhere in the 
>> response?
> 
> Alternative idea: execute QEMU once with "-accel help" via 
> g_spawn_command_line_sync() or g_spawn_sync() once and look for the 
> accelerator in the standard output.

There is no stability guaranty with the help output.

QMP is a stable API, we should really rely on it here IMO.
Thomas Huth Jan. 20, 2023, 11:39 a.m. UTC | #7
On 20/01/2023 12.18, Philippe Mathieu-Daudé wrote:
> On 20/1/23 11:26, Thomas Huth wrote:
>> On 19/01/2023 13.05, Thomas Huth wrote:
>>> On 19/01/2023 12.30, Philippe Mathieu-Daudé wrote:
>>>> On 19/1/23 12:24, Thomas Huth wrote:
>>>>> On 19/01/2023 11.05, Philippe Mathieu-Daudé wrote:
>>>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>>>>> ---
>>>>>> RFC: CONFIG_HVF is poisoned.
>>>>>>
>>>>>> We could pass host config definitions to qtest using:
>>>>>>
>>>>>>    diff --git a/meson.build b/meson.build
>>>>>>    @@ -2547,6 +2547,7 @@ foreach target : target_dirs
>>>>>>
>>>>>>       accel_kconfig = []
>>>>>>       foreach sym: accelerators
>>>>>>    +    config_host_data.set(sym + '_QTEST', '')
>>>>>>         if sym == 'CONFIG_TCG' or target in 
>>>>>> accelerator_targets.get(sym, [])
>>>>>>           config_target += { sym: 'y' }
>>>>>>           config_all += { sym: 'y' }
>>>>>>
>>>>>> Then test for CONFIG_HVF_QTEST ...
>>>>>
>>>>> I don't think that would really work well. The qtests are build once 
>>>>> for all targets, and HVF is only available in the target that matches 
>>>>> the host architecture. It's poisoned on purpose.
>>>>>
>>>>> The TCG accelerator is special, since we have it in either none or in 
>>>>> all targets, that's why we can use CONFIG_TCG there.
>>>>>
>>>>> The kvm part is also rather a hack... we should maybe rather 
>>>>> additionally use the "query-kvm" QAPI command to check whether it is 
>>>>> really available...?
>>>>>
>>>>> To fix this properly for HVF, I think you'd need a way to query the 
>>>>> available accelerators via QMP, too... Hmmm, weren't there some patches 
>>>>> for something like that in the past ... can't remember right now ...
>>>>
>>>> https://lore.kernel.org/qemu-devel/20210505125806.1263441-3-philmd@redhat.com/ 
>>>> :(
>>>
>>> Ah, right, and we ended up with the competing patch from Igor since we 
>>> could not quite settle on the QAPI extensions?
>>>
>>> Hmm, what happens if you execute "query-qmp-schema" on a HVF-enabled host 
>>> these days? Is there a "hvf"-related entry somewhere in the response?
>>
>> Alternative idea: execute QEMU once with "-accel help" via 
>> g_spawn_command_line_sync() or g_spawn_sync() once and look for the 
>> accelerator in the standard output.
> 
> There is no stability guaranty with the help output.

Sure, it's rather meant as a temporary solution until a proper QMP method is 
in place. We also have the advantage here that it is internal to the QEMU 
repository only - it's not like libvirt or some other upper layers are 
trying to parse the output here.

> QMP is a stable API, we should really rely on it here IMO.

I agree, QMP should certainly be the final goal.

  Thomas
diff mbox series

Patch

diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 6b2216cb20..31650bdc9f 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -901,6 +901,8 @@  bool qtest_has_accel(const char *accel_name)
                 }
             }
         }
+    } else if (g_str_equal(accel_name, "hvf")) {
+        return true; /* XXX CONFIG_HVF is poisoned... */
     } else {
         /* not implemented */
         g_assert_not_reached();