[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 04/10] x86,MIPS: make vmware_vga optional
From: |
Blue Swirl |
Subject: |
Re: [Qemu-devel] [PATCH 04/10] x86,MIPS: make vmware_vga optional |
Date: |
Sat, 12 Feb 2011 19:06:57 +0200 |
On Sat, Feb 12, 2011 at 6:48 PM, Markus Armbruster <address@hidden> wrote:
> Blue Swirl <address@hidden> writes:
>
>> Allow failure with vmware_vga device creation and use standard
>> VGA instead.
>>
>> Signed-off-by: Blue Swirl <address@hidden>
>> ---
>> hw/mips_malta.c | 6 +++++-
>> hw/pc.c | 11 ++++++++---
>> hw/vmware_vga.h | 11 +++++++++--
>> 3 files changed, 22 insertions(+), 6 deletions(-)
>>
>> diff --git a/hw/mips_malta.c b/hw/mips_malta.c
>> index 2d3f242..930c51c 100644
>> --- a/hw/mips_malta.c
>> +++ b/hw/mips_malta.c
>> @@ -957,7 +957,11 @@ void mips_malta_init (ram_addr_t ram_size,
>> if (cirrus_vga_enabled) {
>> pci_cirrus_vga_init(pci_bus);
>> } else if (vmsvga_enabled) {
>> - pci_vmsvga_init(pci_bus);
>> + if (!pci_vmsvga_init(pci_bus)) {
>> + fprintf(stderr, "Warning: vmware_vga not available,"
>> + " using standard VGA instead\n");
>> + pci_vga_init(pci_bus);
>> + }
>> } else if (std_vga_enabled) {
>> pci_vga_init(pci_bus);
>> }
>> diff --git a/hw/pc.c b/hw/pc.c
>> index 4dfdc0b..fcee09a 100644
>> --- a/hw/pc.c
>> +++ b/hw/pc.c
>> @@ -1053,10 +1053,15 @@ void pc_vga_init(PCIBus *pci_bus)
>> isa_cirrus_vga_init();
>> }
>> } else if (vmsvga_enabled) {
>> - if (pci_bus)
>> - pci_vmsvga_init(pci_bus);
>> - else
>> + if (pci_bus) {
>> + if (!pci_vmsvga_init(pci_bus)) {
>> + fprintf(stderr, "Warning: vmware_vga not available,"
>> + " using standard VGA instead\n");
>
> I don't like "vmware_vga" here. The command line option that makes us
> go here is spelled "-vga vmware", and the qdev is called "vmware-svga".
> What about "-vga vmware is not available"?
Maybe. Patches welcome.
>
>> + pci_vga_init(pci_bus);
>> + }
>> + } else {
>> fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __FUNCTION__);
>> + }
>> #ifdef CONFIG_SPICE
>> } else if (qxl_enabled) {
>> if (pci_bus)
>> diff --git a/hw/vmware_vga.h b/hw/vmware_vga.h
>> index e7bcb22..5132573 100644
>> --- a/hw/vmware_vga.h
>> +++ b/hw/vmware_vga.h
>> @@ -4,9 +4,16 @@
>> #include "qemu-common.h"
>>
>> /* vmware_vga.c */
>> -static inline void pci_vmsvga_init(PCIBus *bus)
>> +static inline bool pci_vmsvga_init(PCIBus *bus)
>> {
>> - pci_create_simple(bus, -1, "vmware-svga");
>> + PCIDevice *dev;
>> +
>> + dev = pci_try_create(bus, -1, "vmware-svga");
>> + if (!dev || qdev_init(&dev->qdev) < 0) {
>> + return false;
>> + } else {
>> + return true;
>> + }
>> }
>>
>> #endif
>
> Two failure modes:
>
> * pci_try_create() fails, which can happen only if no such qdev
> "vmware-svga" exists.
>
> * qdev_init() fails.
>
> The caller can't distinguish between the two, and assumes any failure
> must be the former.
>
> The assumption is actually correct, because pci_vmsvga_initfn() never
> fails, and thus qdev_init() never fails. Brittle.
Instead of bool, the function could return int with various error
values like -ENOENT etc. Do we care enough?
> pci_vmsvga_init() is a convenience function for board setup code. Why
> not make it more convenient and concentrate the error handling there
> rather than duplicating it in each caller?
>
> Nice side effect: no need to conflate the failure modes, no need for the
> brittle assumption.
Nice idea, how about a patch?