qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Failing property setters + hardwired devices + -global = a bad day


From: Eduardo Habkost
Subject: Re: Failing property setters + hardwired devices + -global = a bad day
Date: Wed, 29 Apr 2020 12:23:47 -0400

On Wed, Apr 29, 2020 at 05:39:20PM +0200, Paolo Bonzini wrote:
> On 29/04/20 17:28, Markus Armbruster wrote:
> > When an object gets created, its memory is zeroed, and then any class
> > properties with an ->init() are initialized with
> > 
> >     obj->init(obj, prop);
> > 
> > We have just one ->init():
> > 
> >     void object_property_init_defval(Object *obj, ObjectProperty *prop)
> > 
> > It initializes from ->defval using ->set().
> > 
> > Aside: feels overengineered, but let's move on.
> > 
> > For TYPE_DEVICE objects, "static" properties get initialized the same.
> > 
> > Aside: if I know what "static" means, I'll be hanged.
> 
> Originally these were the only properties that were part of the class
> rather than the object (so, not dynamic --> static).
> 
> > I'd love to deprecate -global wholesale, but we can't as long as we
> > don't have better means to configure onboard devices.  Can we deprecate
> > its use with backend properties at least?
> 
> I wouldn't mind deprecating -global wholesale, leaving the global/compat
> props code only for internal usage.

I would absolutely love to get rid of -global, but we need to
provide an alternative for users that rely on it.

libvirt, for example, has at least 15 virCommandAddArg*(...,
"-global", ...) calls in src/qemu/qemu_command.c:

src/qemu/qemu_command.c:2344:                virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-2345-                virCommandAddArgFormat(cmd, 
"isa-fdc.%s", backendStr);
src/qemu/qemu_command.c-2346-            }
src/qemu/qemu_command.c-2347-
src/qemu/qemu_command.c-2348-            if (bootindexStr) {
src/qemu/qemu_command.c:2349:                virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-2350-                virCommandAddArgFormat(cmd, 
"isa-fdc.%s", bootindexStr);
src/qemu/qemu_command.c-2351-            }
src/qemu/qemu_command.c-2352-        } else {
src/qemu/qemu_command.c-2353-            virBufferStrcat(&fdc_opts, backendStr, 
",", NULL);
--
src/qemu/qemu_command.c:4174:    virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4175-    optstr = qemuBuildNVRAMDevStr(def->nvram);
src/qemu/qemu_command.c-4176-    if (!optstr)
src/qemu/qemu_command.c-4177-        return -1;
src/qemu/qemu_command.c-4178-
--
src/qemu/qemu_command.c:4568:     * --global option and for that we need to 
specify the device
src/qemu/qemu_command.c-4569-     * name the same as for --device option and 
for that we need to
src/qemu/qemu_command.c-4570-     * use 'qemuDeviceVideo'.
src/qemu/qemu_command.c-4571-     *
src/qemu/qemu_command.c-4572-     * See 'Graphics Devices' section in 
docs/qdev-device-use.txt in
--
src/qemu/qemu_command.c:4586:            virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4587-            virCommandAddArgFormat(cmd, 
"%s.ram_size=%u",
src/qemu/qemu_command.c-4588-                                   dev, ram * 
1024);
src/qemu/qemu_command.c-4589-        }
src/qemu/qemu_command.c-4590-        if (vram) {
src/qemu/qemu_command.c:4591:            virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4592-            virCommandAddArgFormat(cmd, 
"%s.vram_size=%u",
src/qemu/qemu_command.c-4593-                                   dev, vram * 
1024);
src/qemu/qemu_command.c-4594-        }
src/qemu/qemu_command.c-4595-        if (vram64 &&
--
src/qemu/qemu_command.c:4597:            virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4598-            virCommandAddArgFormat(cmd, 
"%s.vram64_size_mb=%u",
src/qemu/qemu_command.c-4599-                                   dev, vram64 / 
1024);
src/qemu/qemu_command.c-4600-        }
src/qemu/qemu_command.c-4601-        if (vgamem &&
--
src/qemu/qemu_command.c:4603:            virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4604-            virCommandAddArgFormat(cmd, 
"%s.vgamem_mb=%u",
src/qemu/qemu_command.c-4605-                                   dev, vgamem / 
1024);
src/qemu/qemu_command.c-4606-        }
src/qemu/qemu_command.c-4607-        if (heads &&
--
src/qemu/qemu_command.c:4609:            virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4610-            virCommandAddArgFormat(cmd, 
"%s.max_outputs=%u",
src/qemu/qemu_command.c-4611-                                   dev, heads);
src/qemu/qemu_command.c-4612-        }
src/qemu/qemu_command.c-4613-    }
--
src/qemu/qemu_command.c:4622:        virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-4623-        virCommandAddArgFormat(cmd, 
"%s.vgamem_mb=%u",
src/qemu/qemu_command.c-4624-                               dev, vram / 1024);
src/qemu/qemu_command.c-4625-    }
src/qemu/qemu_command.c-4626-
--
src/qemu/qemu_command.c:6278:                    virCommandAddArgList(cmd, 
"-global",
src/qemu/qemu_command.c-6279-                                         
"kvm-pit.lost_tick_policy=delay", NULL);
src/qemu/qemu_command.c-6280-                break;
src/qemu/qemu_command.c-6281-            case 
VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
src/qemu/qemu_command.c-6282-                /* Do nothing - 
qemuDomainDefValidateClockTimers handled
--
src/qemu/qemu_command.c:6287:                    virCommandAddArgList(cmd, 
"-global",
src/qemu/qemu_command.c-6288-                                         
"kvm-pit.lost_tick_policy=discard", NULL);
src/qemu/qemu_command.c-6289-                break;
src/qemu/qemu_command.c-6290-            case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
src/qemu/qemu_command.c-6291-                /* no way to support this mode for 
pit in qemu */
--
src/qemu/qemu_command.c:6346:        virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-6347-        virCommandAddArgFormat(cmd, 
"%s.disable_s3=%d",
src/qemu/qemu_command.c-6348-                               pm_object, 
def->pm.s3 == VIR_TRISTATE_BOOL_NO);
src/qemu/qemu_command.c-6349-    }
src/qemu/qemu_command.c-6350-
--
src/qemu/qemu_command.c:6358:        virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-6359-        virCommandAddArgFormat(cmd, 
"%s.disable_s4=%d",
src/qemu/qemu_command.c-6360-                               pm_object, 
def->pm.s4 == VIR_TRISTATE_BOOL_NO);
src/qemu/qemu_command.c-6361-    }
src/qemu/qemu_command.c-6362-
--
src/qemu/qemu_command.c:6508:            virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-6509-            virCommandAddArgFormat(cmd, 
"%s.pci-hole64-size=%luK", hoststr,
src/qemu/qemu_command.c-6510-                                   
cont->opts.pciopts.pcihole64size);
src/qemu/qemu_command.c-6511-        }
src/qemu/qemu_command.c-6512-    }
--
src/qemu/qemu_command.c:7191:    virCommandAddArg(cmd, "-global");
src/qemu/qemu_command.c-7192-
src/qemu/qemu_command.c-7193-    /* PostParse callback guarantees that the size 
is divisible by 1 MiB */
src/qemu/qemu_command.c-7194-    virCommandAddArgFormat(cmd, 
"mch.extended-tseg-mbytes=%llu",
src/qemu/qemu_command.c-7195-                           def->tseg_size >> 20);
--
src/qemu/qemu_command.c:9109:                             "-global",
src/qemu/qemu_command.c-9110-                             
"driver=cfi.pflash01,property=secure,value=on",
src/qemu/qemu_command.c-9111-                             NULL);
src/qemu/qemu_command.c-9112-    }
src/qemu/qemu_command.c-9113-

-- 
Eduardo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]