[libvirt] [PATCH] RFC: support "vram" and "heads" for qxl vga

Osier Yang jyang at redhat.com
Tue Feb 15 15:53:30 UTC 2011


于 2011年02月15日 22:13, Daniel P. Berrange 写道:
> On Tue, Feb 15, 2011 at 09:47:28PM +0800, Osier Yang wrote:
>> qemu command line to specify "vram":
>>      -global qxl.vram_size=uint
>>
>> qemu command line to specify "heads", (no need of '-device' for
>> the first 'head'):
>>      -device qxl,id=qxl-N (N is natural number)
>>
>> This patch is just about the command line building, still left work
>> on the command line parsing (hacking on "qemuBuildCommandLine"), as
>> I'm even not sure if it's the right way to build the command line.
>>
>> Any advise/idea is appreciated.
>> ---
>>   src/qemu/qemu_capabilities.c |    5 ++++-
>>   src/qemu/qemu_capabilities.h |    3 ++-
>>   src/qemu/qemu_command.c      |   14 ++++++++++++++
>>   3 files changed, 20 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>> index cc5552c..78bcb4c 100644
>> --- a/src/qemu/qemu_capabilities.c
>> +++ b/src/qemu/qemu_capabilities.c
>> @@ -942,9 +942,12 @@ qemuCapsComputeCmdFlags(const char *help,
>>        * two features. The benefits of JSON mode now outweigh
>>        * the downside.
>>        */
>> -     if (version>= 13000)
>> +    if (version>= 13000)
>>           flags |= QEMUD_CMD_FLAG_MONITOR_JSON;
>>
>> +    if (strstr(help, "-global"))
>> +        flags |= QEMUD_CMD_FLAG_GLOBAL;
>> +
>
> There's no need for this. Just use QEMUD_CMD_FLAG_DEVICE since
> -global&  -device arrived together.

didn't known that, thanks.

>
>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>> index 1687203..92af6cb 100644
>> --- a/src/qemu/qemu_command.c
>> +++ b/src/qemu/qemu_command.c
>> @@ -3964,6 +3964,20 @@ qemuBuildCommandLine(virConnectPtr conn,
>>                   }
>>
>>                   virCommandAddArgList(cmd, "-vga", vgastr, NULL);
>> +
>> +                if (def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_QXL) {
>> +                    if (def->videos[0]->vram&&
>> +                        (qemuCmdFlags&  QEMUD_CMD_FLAG_GLOBAL)) {
>> +                        virCommandAddArgFormat(cmd, "-global qxl.vram_size=%u",
>> +                                               def->videos[0]->vram);
>> +                    }
>
> The '-global' parameter sets global defaults for all devices of a
> particular type.
>
> The video handling is a little wierd, because the first card we'll
> have todo via '-vga' and a '-set' and the 2nd, 3rd, etc cards will
> be normal using just '-device' (see qemuBuildVideoDevStr).
>
> So here you'll want to use -set instead of -global. And then also
> modify qemuBuildVideoDevStr
>
>> +
>> +                    if (def->videos[0]->heads>  0) {
>> +                        for (i = 0; i<  def->videos[0]->heads - 1; i++) {
>> +                            virCommandAddArgFormat(cmd, "-device %s,id=qxl-%d", vgastr, i+1);
>> +                        }
>
> This isn't right. The 'heads' field indicates one graphics card, with
> multiple outputs. What you're doing here is creating multiple graphics
> cards each with one output. This is something you do by adding mulitple
> <video>  elements in the XML instead.
>
> It doesn't look like QXL has multiple outputs on one card, so this setting
> is not relevant.
>
>
> Also be sure to create a test case for this in qemuxml2argvtest
>

Thanks for the detailed explaination, as it's the RFC, didn't do it,
will include in final patch.

> Regards,
> Daniel




More information about the libvir-list mailing list