[PATCH] hw/i386: Add the possibility to disable the 'isapc' machine

Thomas Huth posted 1 patch 2 years, 3 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220107160713.235918-1-thuth@redhat.com
Maintainers: Eduardo Habkost <eduardo@habkost.net>, Laurent Vivier <lvivier@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Richard Henderson <richard.henderson@linaro.org>, Thomas Huth <thuth@redhat.com>, John Snow <jsnow@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>
hw/i386/pc_piix.c        | 5 ++++-
tests/qtest/cdrom-test.c | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
[PATCH] hw/i386: Add the possibility to disable the 'isapc' machine
Posted by Thomas Huth 2 years, 3 months ago
We already have a CONFIG_ISAPC switch - but we're not using it yet.
Add some "#ifdefs" to make it possible to disable this machine now.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 hw/i386/pc_piix.c        | 5 ++++-
 tests/qtest/cdrom-test.c | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 1999190276..5147e1ee74 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -357,10 +357,12 @@ static void pc_compat_1_4_fn(MachineState *machine)
     pc_compat_1_5_fn(machine);
 }
 
+#ifdef CONFIG_ISAPC
 static void pc_init_isa(MachineState *machine)
 {
     pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
 }
+#endif
 
 #ifdef CONFIG_XEN
 static void pc_xen_hvm_init_pci(MachineState *machine)
@@ -916,6 +918,7 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id)
     pci_config_set_revision(bridge_dev->config, pch_rev_id);
 }
 
+#ifdef CONFIG_ISAPC
 static void isapc_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
@@ -935,7 +938,7 @@ static void isapc_machine_options(MachineClass *m)
 
 DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
                   isapc_machine_options);
-
+#endif
 
 #ifdef CONFIG_XEN
 static void xenfv_4_2_machine_options(MachineClass *m)
diff --git a/tests/qtest/cdrom-test.c b/tests/qtest/cdrom-test.c
index cfca24fa94..fdd889a487 100644
--- a/tests/qtest/cdrom-test.c
+++ b/tests/qtest/cdrom-test.c
@@ -138,7 +138,7 @@ static void add_x86_tests(void)
      * Unstable CI test under load
      * See https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg05509.html
      */
-    if (g_test_slow()) {
+    if (g_test_slow() && qtest_has_machine("isapc")) {
         qtest_add_data_func("cdrom/boot/isapc", "-M isapc "
                             "-drive if=ide,media=cdrom,file=", test_cdboot);
     }
-- 
2.27.0


Re: [PATCH] hw/i386: Add the possibility to disable the 'isapc' machine
Posted by Paolo Bonzini 2 years, 3 months ago
On 1/7/22 17:07, Thomas Huth wrote:
> We already have a CONFIG_ISAPC switch - but we're not using it yet.
> Add some "#ifdefs" to make it possible to disable this machine now.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>   hw/i386/pc_piix.c        | 5 ++++-
>   tests/qtest/cdrom-test.c | 2 +-
>   2 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 1999190276..5147e1ee74 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -357,10 +357,12 @@ static void pc_compat_1_4_fn(MachineState *machine)
>       pc_compat_1_5_fn(machine);
>   }
>   
> +#ifdef CONFIG_ISAPC
>   static void pc_init_isa(MachineState *machine)
>   {
>       pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
>   }
> +#endif
>   
>   #ifdef CONFIG_XEN
>   static void pc_xen_hvm_init_pci(MachineState *machine)
> @@ -916,6 +918,7 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id)
>       pci_config_set_revision(bridge_dev->config, pch_rev_id);
>   }
>   
> +#ifdef CONFIG_ISAPC
>   static void isapc_machine_options(MachineClass *m)
>   {
>       PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> @@ -935,7 +938,7 @@ static void isapc_machine_options(MachineClass *m)
>   
>   DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
>                     isapc_machine_options);
> -
> +#endif
>   
>   #ifdef CONFIG_XEN
>   static void xenfv_4_2_machine_options(MachineClass *m)
> diff --git a/tests/qtest/cdrom-test.c b/tests/qtest/cdrom-test.c
> index cfca24fa94..fdd889a487 100644
> --- a/tests/qtest/cdrom-test.c
> +++ b/tests/qtest/cdrom-test.c
> @@ -138,7 +138,7 @@ static void add_x86_tests(void)
>        * Unstable CI test under load
>        * See https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg05509.html
>        */
> -    if (g_test_slow()) {
> +    if (g_test_slow() && qtest_has_machine("isapc")) {
>           qtest_add_data_func("cdrom/boot/isapc", "-M isapc "
>                               "-drive if=ide,media=cdrom,file=", test_cdboot);
>       }

Acked-by: Paolo Bonzini <pbonzini@redhat.com>

Re: [PATCH] hw/i386: Add the possibility to disable the 'isapc' machine
Posted by Philippe Mathieu-Daudé 2 years, 3 months ago
On 1/7/22 17:07, Thomas Huth wrote:
> We already have a CONFIG_ISAPC switch - but we're not using it yet.
> Add some "#ifdefs" to make it possible to disable this machine now.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/i386/pc_piix.c        | 5 ++++-
>  tests/qtest/cdrom-test.c | 2 +-
>  2 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 1999190276..5147e1ee74 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -357,10 +357,12 @@ static void pc_compat_1_4_fn(MachineState *machine)
>      pc_compat_1_5_fn(machine);
>  }
>  
> +#ifdef CONFIG_ISAPC
>  static void pc_init_isa(MachineState *machine)
>  {
>      pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
>  }
> +#endif
>  
>  #ifdef CONFIG_XEN
>  static void pc_xen_hvm_init_pci(MachineState *machine)
> @@ -916,6 +918,7 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id)
>      pci_config_set_revision(bridge_dev->config, pch_rev_id);
>  }
>  
> +#ifdef CONFIG_ISAPC
>  static void isapc_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> @@ -935,7 +938,7 @@ static void isapc_machine_options(MachineClass *m)
>  
>  DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
>                    isapc_machine_options);
> -
> +#endif

Wouldn't it be cleaner to extract the isapc machine to a new C unit
(after renaming/declaring pc_init1 public)? Anyway this is what is
done for Xen, so why not...

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


Re: [PATCH] hw/i386: Add the possibility to disable the 'isapc' machine
Posted by Thomas Huth 2 years, 3 months ago
On 07/01/2022 19.54, Philippe Mathieu-Daudé wrote:
> On 1/7/22 17:07, Thomas Huth wrote:
>> We already have a CONFIG_ISAPC switch - but we're not using it yet.
>> Add some "#ifdefs" to make it possible to disable this machine now.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   hw/i386/pc_piix.c        | 5 ++++-
>>   tests/qtest/cdrom-test.c | 2 +-
>>   2 files changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
>> index 1999190276..5147e1ee74 100644
>> --- a/hw/i386/pc_piix.c
>> +++ b/hw/i386/pc_piix.c
>> @@ -357,10 +357,12 @@ static void pc_compat_1_4_fn(MachineState *machine)
>>       pc_compat_1_5_fn(machine);
>>   }
>>   
>> +#ifdef CONFIG_ISAPC
>>   static void pc_init_isa(MachineState *machine)
>>   {
>>       pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
>>   }
>> +#endif
>>   
>>   #ifdef CONFIG_XEN
>>   static void pc_xen_hvm_init_pci(MachineState *machine)
>> @@ -916,6 +918,7 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id)
>>       pci_config_set_revision(bridge_dev->config, pch_rev_id);
>>   }
>>   
>> +#ifdef CONFIG_ISAPC
>>   static void isapc_machine_options(MachineClass *m)
>>   {
>>       PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
>> @@ -935,7 +938,7 @@ static void isapc_machine_options(MachineClass *m)
>>   
>>   DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
>>                     isapc_machine_options);
>> -
>> +#endif
> 
> Wouldn't it be cleaner to extract the isapc machine to a new C unit
> (after renaming/declaring pc_init1 public)? 

That would be cleaner, of course, but that would also mean a major 
refactoring: We could rearrange the code so that it is possible to compile a 
binary that has isapc, but not i440fx... but that likely means a complete 
rework of pc_piix.c so that the code that is common between i440fx and isapc 
needs to be moved into a separate file, too. And that's likely not worth the 
effort, I guess, since people rather want to compile without isapc than 
compiling without i440fx, I think. So let's go with this low-hanging fruit 
here for now, and keep the possible clean-up in mind for later.

> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Thanks!

  Thomas