* [PATCH v2 00/10] Kconfig vs. default devices
@ 2023-02-08 19:26 Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 04/10] hw/i386: Select E1000_PCI for i440fx Fabiano Rosas
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Fabiano Rosas @ 2023-02-08 19:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth
v2:
Applying the feedback received, all small tweaks.
Patch 6 still needs consensus on whether to apply the fix to Kconfig
or elsewhere. Link to the previous version:
https://lore.kernel.org/r/461ba038-31bf-49c4-758b-94ece36f136f@redhat.com
changelog:
- patch 1: moved isa-parallel to a build time check like the other
patches;
- patch 3: tweaked commit message;
- patch 7: removed the default from XLNX_USB_SUBSYS.
v1:
https://lore.kernel.org/r/20230206140809.26028-1-farosas@suse.de
We currently have a situation where disabling a Kconfig might result
in a runtime error when QEMU selects the corresponding device as a
default value for an option. But first a disambiguation:
Kconfig default::
a device "Foo" for which there's "config FOO default y" or "config X
imply FOO" in Kconfig.
QEMU hardcoded default::
a fallback; a device "Foo" that is chosen in case no corresponding
option is given in the command line.
The issue I'm trying to solve is that there is no link between the two
"defaults" above, which means that when the user at build time
de-selects a Kconfig default, either via configs/devices/*/*.mak or
--without-default-devices, the subsequent invocation at runtime might
continue to try to create the missing device due to QEMU defaults.
Even a experienced user that tweaks the build via .mak files is not
required to know about what QEMU developers chose to use as fallbacks
in the code. Moreover, the person/entity that builds the code might
not be the same that runs it, which makes it even more confusing.
We do have -nodefaults in the command line, but that doesn't include
all types of fallbacks that might be set in the code. It also does not
cover individual CONFIGs and their respective use as a fallback in the
code.
So my proposal here is actually simple: Let's make sure every fallback
device creation *without* a validation check gets a hard dependency in
Kconfig. A validation check being something like:
if (has_defaults && object_get_class("foo") {
create_foo();
}
Fabiano Rosas (10):
hw/i386: Select CONFIG_PARALLEL for PC machines
hw/i386: Select E1000E for q35
hw/i386: Select VGA_PCI in Kconfig
hw/i386: Select E1000_PCI for i440fx
hw/arm: Select VIRTIO_NET for virt machine
hw/arm: Select VIRTIO_BLK for virt machine
hw/arm: Select XLNX_USB_SUBSYS for xlnx-zcu102 machine
hw/arm: Select GICV3_TCG for sbsa-ref machine
hw/arm: Select e1000e for sbsa-ref machine
hw/arm: Select VGA_PCI for sbsa-ref machine
hw/arm/Kconfig | 7 +++++++
hw/i386/Kconfig | 8 ++++----
hw/usb/Kconfig | 1 -
3 files changed, 11 insertions(+), 5 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 04/10] hw/i386: Select E1000_PCI for i440fx
2023-02-08 19:26 [PATCH v2 00/10] Kconfig vs. default devices Fabiano Rosas
@ 2023-02-08 19:26 ` Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 05/10] hw/arm: Select VIRTIO_NET for virt machine Fabiano Rosas
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Fabiano Rosas @ 2023-02-08 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Paolo Bonzini, Richard Henderson, Eduardo Habkost,
Michael S. Tsirkin, Marcel Apfelbaum
The i440fx machines uses the e1000 adapter as the default when no
other network card is configured.
Move the E1000_PCI entry in Kconfig from 'imply' to 'select' to avoid
the following situation:
./qemu-system-i386 -machine pc-i440fx-8.0
qemu-system-i386: Unsupported NIC model: e1000
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
hw/i386/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
index 36590e2691..e98af283b4 100644
--- a/hw/i386/Kconfig
+++ b/hw/i386/Kconfig
@@ -66,7 +66,6 @@ config PC_ACPI
config I440FX
bool
- imply E1000_PCI
imply VMPORT
imply VMMOUSE
select ACPI_PIIX4
@@ -78,6 +77,7 @@ config I440FX
select DIMM
select SMBIOS
select FW_CFG_DMA
+ select E1000_PCI
config ISAPC
bool
--
2.35.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 05/10] hw/arm: Select VIRTIO_NET for virt machine
2023-02-08 19:26 [PATCH v2 00/10] Kconfig vs. default devices Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 04/10] hw/i386: Select E1000_PCI for i440fx Fabiano Rosas
@ 2023-02-08 19:26 ` Fabiano Rosas
2023-02-08 19:43 ` [PATCH v2 00/10] Kconfig vs. default devices Philippe Mathieu-Daudé
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Fabiano Rosas @ 2023-02-08 19:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, Peter Maydell, qemu-arm
The 'virt' machine uses virtio-net-pci as a fallback when no other
network driver has been selected via command line. Select VIRTIO_NET
and VIRTIO_PCI from CONFIG_ARM_VIRT to avoid errors when PCI_DEVICES=n
(due to e.g. --without-default-devices):
$ ./qemu-system-aarch64 -M virt -accel tcg -cpu max
qemu-system-aarch64: Unsupported NIC model: virtio-net-pci
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
hw/arm/Kconfig | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 2d157de9b8..8dcc08b7ec 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -31,6 +31,8 @@ config ARM_VIRT
select VIRTIO_MEM_SUPPORTED
select ACPI_CXL
select ACPI_HMAT
+ select VIRTIO_PCI
+ select VIRTIO_NET
config CHEETAH
bool
--
2.35.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 00/10] Kconfig vs. default devices
2023-02-08 19:26 [PATCH v2 00/10] Kconfig vs. default devices Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 04/10] hw/i386: Select E1000_PCI for i440fx Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 05/10] hw/arm: Select VIRTIO_NET for virt machine Fabiano Rosas
@ 2023-02-08 19:43 ` Philippe Mathieu-Daudé
2023-02-09 5:43 ` Thomas Huth
[not found] ` <20230208192654.8854-2-farosas@suse.de>
2023-05-02 15:26 ` [PATCH v2 00/10] Kconfig vs. default devices Alex Bennée
4 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-08 19:43 UTC (permalink / raw)
To: Fabiano Rosas, qemu-devel; +Cc: Thomas Huth, Alex Bennée, Paolo Bonzini
On 8/2/23 20:26, Fabiano Rosas wrote:
> We currently have a situation where disabling a Kconfig might result
> in a runtime error when QEMU selects the corresponding device as a
> default value for an option. But first a disambiguation:
>
> Kconfig default::
> a device "Foo" for which there's "config FOO default y" or "config X
> imply FOO" in Kconfig.
>
> QEMU hardcoded default::
> a fallback; a device "Foo" that is chosen in case no corresponding
> option is given in the command line.
>
> The issue I'm trying to solve is that there is no link between the two
> "defaults" above, which means that when the user at build time
> de-selects a Kconfig default, either via configs/devices/*/*.mak or
> --without-default-devices, the subsequent invocation at runtime might
> continue to try to create the missing device due to QEMU defaults.
This will keep bitrotting if we don't cover such configs in our CI.
Why do you want to get this fixed BTW? I'm not sure there is a big
interest (as in "almost no users").
I tried to do that few years ago [*] and Thomas said:
"in our CI, we should test what users really need,
and not each and every distantly possible combination."
[*]
https://lore.kernel.org/qemu-devel/81aca179-4320-f00b-d9dc-7eca449ebce7@redhat.com/
> Fabiano Rosas (10):
> hw/i386: Select CONFIG_PARALLEL for PC machines
> hw/i386: Select E1000E for q35
> hw/i386: Select VGA_PCI in Kconfig
> hw/i386: Select E1000_PCI for i440fx
> hw/arm: Select VIRTIO_NET for virt machine
> hw/arm: Select VIRTIO_BLK for virt machine
> hw/arm: Select XLNX_USB_SUBSYS for xlnx-zcu102 machine
> hw/arm: Select GICV3_TCG for sbsa-ref machine
> hw/arm: Select e1000e for sbsa-ref machine
> hw/arm: Select VGA_PCI for sbsa-ref machine
>
> hw/arm/Kconfig | 7 +++++++
> hw/i386/Kconfig | 8 ++++----
> hw/usb/Kconfig | 1 -
> 3 files changed, 11 insertions(+), 5 deletions(-)
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 00/10] Kconfig vs. default devices
2023-02-08 19:43 ` [PATCH v2 00/10] Kconfig vs. default devices Philippe Mathieu-Daudé
@ 2023-02-09 5:43 ` Thomas Huth
2023-05-02 15:20 ` Alex Bennée
0 siblings, 1 reply; 8+ messages in thread
From: Thomas Huth @ 2023-02-09 5:43 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, Fabiano Rosas, qemu-devel
Cc: Alex Bennée, Paolo Bonzini
On 08/02/2023 20.43, Philippe Mathieu-Daudé wrote:
> On 8/2/23 20:26, Fabiano Rosas wrote:
>
>> We currently have a situation where disabling a Kconfig might result
>> in a runtime error when QEMU selects the corresponding device as a
>> default value for an option. But first a disambiguation:
>>
>> Kconfig default::
>> a device "Foo" for which there's "config FOO default y" or "config X
>> imply FOO" in Kconfig.
>>
>> QEMU hardcoded default::
>> a fallback; a device "Foo" that is chosen in case no corresponding
>> option is given in the command line.
>>
>> The issue I'm trying to solve is that there is no link between the two
>> "defaults" above, which means that when the user at build time
>> de-selects a Kconfig default, either via configs/devices/*/*.mak or
>> --without-default-devices, the subsequent invocation at runtime might
>> continue to try to create the missing device due to QEMU defaults.
>
> This will keep bitrotting if we don't cover such configs in our CI.
>
> Why do you want to get this fixed BTW? I'm not sure there is a big
> interest (as in "almost no users").
>
> I tried to do that few years ago [*] and Thomas said:
>
> "in our CI, we should test what users really need,
> and not each and every distantly possible combination."
You're mis-quoting me here. That comment was made when we were talking about
very arbitrary configs that likely nobody is going to use.
Fabiano's series here is about the --without-default-devices configure
option which everybody could add to their set of "configure" options easily.
Thomas
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 01/10] hw/i386: Select CONFIG_PARALLEL for PC machines
[not found] ` <20230208192654.8854-2-farosas@suse.de>
@ 2023-02-09 10:22 ` Thomas Huth
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Huth @ 2023-02-09 10:22 UTC (permalink / raw)
To: Fabiano Rosas, qemu-devel
Cc: Michael S. Tsirkin, Marcel Apfelbaum, Paolo Bonzini,
Richard Henderson, Eduardo Habkost, Peter Maydell,
Miroslav Rezanina
On 08/02/2023 20.26, Fabiano Rosas wrote:
> Currently the isa-parallel driver is always added by the PC machines
> regardless of the presence of the actual code in the build, which can
> lead to a crash:
>
> qemu-system-i386: unknown type 'isa-parallel'
> Aborted (core dumped)
>
> Signed-off-by: Fabiano Rosas <farosas@suse.de>
> ---
> hw/i386/Kconfig | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
> index 1bf47b0b0b..d3c340e053 100644
> --- a/hw/i386/Kconfig
> +++ b/hw/i386/Kconfig
> @@ -20,7 +20,6 @@ config PC
> imply PCI_IPMI_BT
> imply IPMI_SSIF
> imply ISA_DEBUG
> - imply PARALLEL
> imply PCI_DEVICES
> imply PVPANIC_ISA
> imply QXL
> @@ -46,6 +45,7 @@ config PC
> select ACPI_VMGENID
> select VIRTIO_PMEM_SUPPORTED
> select VIRTIO_MEM_SUPPORTED
> + select PARALLEL
>
> config PC_PCI
> bool
Phew ... Ack from a plain upstream point of view. From a Red Hat downstream
point of view, this will cause another downstream-only patch for us, since
the binaries (and the machine types) that we have in RHEL have the
"isa-parallel" device not compiled in on purpose.
So I started wondering now whether we could tackle all this a little bit
different, in a more flexible way ... something similar like you did in your
parallel port patch in v1 / something similar to what Peter suggested in his
option (2) here:
https://lore.kernel.org/qemu-devel/CAFEAcA9VkFU_bh=aBAOoXCUCeSm1xuR+H+uerd468=vVuDrJEg@mail.gmail.com/
For display devices, we already have default_display in MachineClass, so
instead of always selecting the VGA device in your "Select VGA_PCI in
Kconfig" patch, we could check that in vl.c and set default_vga = 0 if it is
not available.
For network devices, there is already default_nic_model in PCMachineClass
... we could move that to the generic MachineClass and use it in vl.c according.
Then no_parallel, no_serial, no_floppy, no_cdrom, no_sdcard in the
MachineClass could be replaced by a "char *default_XYZ", too, so that we
rather have a device name here to indicate the availability of a default
device than a boolean flag. If the pointer is not set ==> no default device.
If the pointer is set and the device is available ==> use the default
device. If the pointer is set and the device is not compiled in ==> emit a
warning, but continue as if the pointer was not set.
What do you think?
Thomas
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 00/10] Kconfig vs. default devices
2023-02-09 5:43 ` Thomas Huth
@ 2023-05-02 15:20 ` Alex Bennée
0 siblings, 0 replies; 8+ messages in thread
From: Alex Bennée @ 2023-05-02 15:20 UTC (permalink / raw)
To: Thomas Huth
Cc: Philippe Mathieu-Daudé, Fabiano Rosas, qemu-devel,
Paolo Bonzini
Thomas Huth <thuth@redhat.com> writes:
> On 08/02/2023 20.43, Philippe Mathieu-Daudé wrote:
>> On 8/2/23 20:26, Fabiano Rosas wrote:
>>
>>> We currently have a situation where disabling a Kconfig might result
>>> in a runtime error when QEMU selects the corresponding device as a
>>> default value for an option. But first a disambiguation:
>>>
>>> Kconfig default::
>>> a device "Foo" for which there's "config FOO default y" or "config X
>>> imply FOO" in Kconfig.
>>>
>>> QEMU hardcoded default::
>>> a fallback; a device "Foo" that is chosen in case no corresponding
>>> option is given in the command line.
>>>
>>> The issue I'm trying to solve is that there is no link between the two
>>> "defaults" above, which means that when the user at build time
>>> de-selects a Kconfig default, either via configs/devices/*/*.mak or
>>> --without-default-devices, the subsequent invocation at runtime might
>>> continue to try to create the missing device due to QEMU defaults.
>> This will keep bitrotting if we don't cover such configs in our CI.
>> Why do you want to get this fixed BTW? I'm not sure there is a big
>> interest (as in "almost no users").
>> I tried to do that few years ago [*] and Thomas said:
>> "in our CI, we should test what users really need,
>> and not each and every distantly possible combination."
>
> You're mis-quoting me here. That comment was made when we were talking
> about very arbitrary configs that likely nobody is going to use.
> Fabiano's series here is about the --without-default-devices configure
> option which everybody could add to their set of "configure" options
> easily.
Indeed - while trying to reduce the compile time I ran into this with a
plain --without-default-devices check. We also have in the meantime
introduced --with-devices-FOO so we can do minimal builds.
>
> Thomas
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 00/10] Kconfig vs. default devices
2023-02-08 19:26 [PATCH v2 00/10] Kconfig vs. default devices Fabiano Rosas
` (3 preceding siblings ...)
[not found] ` <20230208192654.8854-2-farosas@suse.de>
@ 2023-05-02 15:26 ` Alex Bennée
4 siblings, 0 replies; 8+ messages in thread
From: Alex Bennée @ 2023-05-02 15:26 UTC (permalink / raw)
To: Fabiano Rosas; +Cc: Thomas Huth, qemu-devel
Fabiano Rosas <farosas@suse.de> writes:
> v2:
> Applying the feedback received, all small tweaks.
>
> Patch 6 still needs consensus on whether to apply the fix to Kconfig
> or elsewhere. Link to the previous version:
> https://lore.kernel.org/r/461ba038-31bf-49c4-758b-94ece36f136f@redhat.com
>
> changelog:
>
> - patch 1: moved isa-parallel to a build time check like the other
> patches;
> - patch 3: tweaked commit message;
> - patch 7: removed the default from XLNX_USB_SUBSYS.
I've queued the ARM tweaks to testing/next where I can add a test for it
in the end. I'll leave the x86 stuff for discussion of the more complete
solution that avoids hacky downstream patching.
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-05-02 15:28 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-08 19:26 [PATCH v2 00/10] Kconfig vs. default devices Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 04/10] hw/i386: Select E1000_PCI for i440fx Fabiano Rosas
2023-02-08 19:26 ` [PATCH v2 05/10] hw/arm: Select VIRTIO_NET for virt machine Fabiano Rosas
2023-02-08 19:43 ` [PATCH v2 00/10] Kconfig vs. default devices Philippe Mathieu-Daudé
2023-02-09 5:43 ` Thomas Huth
2023-05-02 15:20 ` Alex Bennée
[not found] ` <20230208192654.8854-2-farosas@suse.de>
2023-02-09 10:22 ` [PATCH v2 01/10] hw/i386: Select CONFIG_PARALLEL for PC machines Thomas Huth
2023-05-02 15:26 ` [PATCH v2 00/10] Kconfig vs. default devices Alex Bennée
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).