hw/mips/loongson3_virt.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
It's possible to compile QEMU without the USB devices (e.g. when using
"--without-default-devices" as option for the "configure" script).
To be still able to run the loongson3-virt machine in default mode with
such a QEMU binary, we have to check here for the availability of the
devices first before instantiating them.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
... not sure what is nicer ... what do you think?
hw/mips/loongson3_virt.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
index 216812f660..a0afb17030 100644
--- a/hw/mips/loongson3_virt.c
+++ b/hw/mips/loongson3_virt.c
@@ -447,10 +447,14 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
pci_vga_init(pci_bus);
- if (defaults_enabled()) {
+ if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
pci_create_simple(pci_bus, -1, "pci-ohci");
- usb_create_simple(usb_bus_find(-1), "usb-kbd");
- usb_create_simple(usb_bus_find(-1), "usb-tablet");
+ if (module_object_class_by_name("usb-kbd")) {
+ usb_create_simple(usb_bus_find(-1), "usb-kbd");
+ }
+ if (module_object_class_by_name("usb-tablet")) {
+ usb_create_simple(usb_bus_find(-1), "usb-tablet");
+ }
}
for (i = 0; i < nb_nics; i++) {
--
2.31.1
On 25/05/2023 08.47, Thomas Huth wrote:
> It's possible to compile QEMU without the USB devices (e.g. when using
> "--without-default-devices" as option for the "configure" script).
> To be still able to run the loongson3-virt machine in default mode with
> such a QEMU binary, we have to check here for the availability of the
> devices first before instantiating them.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
> ... not sure what is nicer ... what do you think?
>
> hw/mips/loongson3_virt.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
> index 216812f660..a0afb17030 100644
> --- a/hw/mips/loongson3_virt.c
> +++ b/hw/mips/loongson3_virt.c
> @@ -447,10 +447,14 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
>
> pci_vga_init(pci_bus);
>
> - if (defaults_enabled()) {
> + if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
> pci_create_simple(pci_bus, -1, "pci-ohci");
> - usb_create_simple(usb_bus_find(-1), "usb-kbd");
> - usb_create_simple(usb_bus_find(-1), "usb-tablet");
> + if (module_object_class_by_name("usb-kbd")) {
> + usb_create_simple(usb_bus_find(-1), "usb-kbd");
> + }
> + if (module_object_class_by_name("usb-tablet")) {
> + usb_create_simple(usb_bus_find(-1), "usb-tablet");
> + }
> }
>
> for (i = 0; i < nb_nics; i++) {
Friendly ping!
Thomas
07.06.2023 13:26, Thomas Huth wrote:
> On 25/05/2023 08.47, Thomas Huth wrote:
>> It's possible to compile QEMU without the USB devices (e.g. when using
>> "--without-default-devices" as option for the "configure" script).
>> To be still able to run the loongson3-virt machine in default mode with
>> such a QEMU binary, we have to check here for the availability of the
>> devices first before instantiating them.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>> The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
>> ... not sure what is nicer ... what do you think?
>>
>> hw/mips/loongson3_virt.c | 10 +++++++---
>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
>> index 216812f660..a0afb17030 100644
>> --- a/hw/mips/loongson3_virt.c
>> +++ b/hw/mips/loongson3_virt.c
>> @@ -447,10 +447,14 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
>> pci_vga_init(pci_bus);
>> - if (defaults_enabled()) {
>> + if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
>> pci_create_simple(pci_bus, -1, "pci-ohci");
>> - usb_create_simple(usb_bus_find(-1), "usb-kbd");
>> - usb_create_simple(usb_bus_find(-1), "usb-tablet");
>> + if (module_object_class_by_name("usb-kbd")) {
>> + usb_create_simple(usb_bus_find(-1), "usb-kbd");
>> + }
>> + if (module_object_class_by_name("usb-tablet")) {
>> + usb_create_simple(usb_bus_find(-1), "usb-tablet");
>> + }
It looks like kbd/tablet don't need to have an if around, because
hw/usb/usb-hid.c is always compiled when CONFIG_USB is enabled,
and enabling CONFIG_USB_OHCI automatically selects CONFIG_USB.
I guess this whole code can be guarded by #if CONFIG_USB_OHCI..#endif,
instead of using runtime checking of device availability.
Notes:
Other places don't check if ohci or other usb controllers are available.
We have TYPE_PCI_OHCI #define which isn't used in places where pci-ohci
is requested, - probably need to move it to a common header (it is
defined in hw/usb/hcd-ohci-pci.c now).
roms/config.seabios-128k turns USB_OHCI off.
/mjt
On 08/06/2023 20.31, Michael Tokarev wrote:
> 07.06.2023 13:26, Thomas Huth wrote:
>> On 25/05/2023 08.47, Thomas Huth wrote:
>>> It's possible to compile QEMU without the USB devices (e.g. when using
>>> "--without-default-devices" as option for the "configure" script).
>>> To be still able to run the loongson3-virt machine in default mode with
>>> such a QEMU binary, we have to check here for the availability of the
>>> devices first before instantiating them.
>>>
>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>> ---
>>> The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
>>> ... not sure what is nicer ... what do you think?
>>>
>>> hw/mips/loongson3_virt.c | 10 +++++++---
>>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
>>> index 216812f660..a0afb17030 100644
>>> --- a/hw/mips/loongson3_virt.c
>>> +++ b/hw/mips/loongson3_virt.c
>>> @@ -447,10 +447,14 @@ static inline void
>>> loongson3_virt_devices_init(MachineState *machine,
>>> pci_vga_init(pci_bus);
>>> - if (defaults_enabled()) {
>>> + if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
>>> pci_create_simple(pci_bus, -1, "pci-ohci");
>>> - usb_create_simple(usb_bus_find(-1), "usb-kbd");
>>> - usb_create_simple(usb_bus_find(-1), "usb-tablet");
>>> + if (module_object_class_by_name("usb-kbd")) {
>>> + usb_create_simple(usb_bus_find(-1), "usb-kbd");
>>> + }
>>> + if (module_object_class_by_name("usb-tablet")) {
>>> + usb_create_simple(usb_bus_find(-1), "usb-tablet");
>>> + }
>
> It looks like kbd/tablet don't need to have an if around, because
> hw/usb/usb-hid.c is always compiled when CONFIG_USB is enabled,
> and enabling CONFIG_USB_OHCI automatically selects CONFIG_USB.
Oh, right! So this can be simplified, indeed.
> I guess this whole code can be guarded by #if CONFIG_USB_OHCI..#endif,
> instead of using runtime checking of device availability.
Yes, that's the alternative ... I'll respin the patch with that to see how
it looks like.
> Notes:
>
> Other places don't check if ohci or other usb controllers are available.
Those likely use "select" instead of "imply" in their Kconfig, so the OHCI
controller is always included.
> We have TYPE_PCI_OHCI #define which isn't used in places where pci-ohci
> is requested, - probably need to move it to a common header (it is
> defined in hw/usb/hcd-ohci-pci.c now).
Yes, sounds like a cleanup that could be done in an additional patch.
> roms/config.seabios-128k turns USB_OHCI off.
That's the config of the seabios ROM - not (directly) related to the config
of the QEMU binaries.
Thomas
© 2016 - 2026 Red Hat, Inc.