Ping ----- Original Message ----- > From: "Frediano Ziglio" <fziglio@xxxxxxxxxx> > To: kraxel@xxxxxxxxxx, spice-devel@xxxxxxxxxxxxxxxxxxxxx, berrange@xxxxxxxxxx > Cc: qemu-devel@xxxxxxxxxx, "Frediano Ziglio" <fziglio@xxxxxxxxxx> > Sent: Monday, July 6, 2015 7:56:38 AM > Subject: [Qemu-devel] [PATCH v3] qxl: allow to specify head limit to qxl driver > > This patch allow to limit number of heads using qxl driver. By default > qxl driver is not limited on any kind on head use so can decide to use > as much heads. > > libvirt has this as a video card parameter (actually set to 1 but not > used). This parameter will allow to limit setting a use can do (which > could be confusing). > > This patch rely on some change in spice-protocol which are not still > accepted. See > http://lists.freedesktop.org/archives/spice-devel/2015-June/020221.html. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > hw/display/qxl.c | 26 +++++++++++++++++++++----- > hw/display/qxl.h | 3 +++ > 2 files changed, 24 insertions(+), 5 deletions(-) > > Changes from v2: > - removed the RPC after spice-server upstream > - rebased > > diff --git a/hw/display/qxl.c b/hw/display/qxl.c > index f87a5ee..4e5ff69 100644 > --- a/hw/display/qxl.c > +++ b/hw/display/qxl.c > @@ -271,6 +271,12 @@ static void qxl_spice_monitors_config_async(PCIQXLDevice > *qxl, int replay) > QXL_COOKIE_TYPE_POST_LOAD_MONITORS_CONFIG, > 0)); > } else { > +#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ > + if (qxl->max_outputs) { > + spice_qxl_set_monitors_config_limit(&qxl->ssd.qxl, > + qxl->max_outputs); > + } > +#endif > qxl->guest_monitors_config = qxl->ram->monitors_config; > spice_qxl_monitors_config_async(&qxl->ssd.qxl, > qxl->ram->monitors_config, > @@ -991,6 +997,7 @@ static int interface_client_monitors_config(QXLInstance > *sin, > PCIQXLDevice *qxl = container_of(sin, PCIQXLDevice, ssd.qxl); > QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar); > int i; > + unsigned max_outputs = ARRAY_SIZE(rom->client_monitors_config.heads); > > if (qxl->revision < 4) { > trace_qxl_client_monitors_config_unsupported_by_device(qxl->id, > @@ -1013,17 +1020,23 @@ static int > interface_client_monitors_config(QXLInstance *sin, > if (!monitors_config) { > return 1; > } > + > +#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ > + /* limit number of outputs based on setting limit */ > + if (qxl->max_outputs && qxl->max_outputs <= max_outputs) { > + max_outputs = qxl->max_outputs; > + } > +#endif > + > memset(&rom->client_monitors_config, 0, > sizeof(rom->client_monitors_config)); > rom->client_monitors_config.count = monitors_config->num_of_monitors; > /* monitors_config->flags ignored */ > - if (rom->client_monitors_config.count >= > - ARRAY_SIZE(rom->client_monitors_config.heads)) { > + if (rom->client_monitors_config.count >= max_outputs) { > trace_qxl_client_monitors_config_capped(qxl->id, > monitors_config->num_of_monitors, > - > ARRAY_SIZE(rom->client_monitors_config.heads)); > - rom->client_monitors_config.count = > - ARRAY_SIZE(rom->client_monitors_config.heads); > + max_outputs); > + rom->client_monitors_config.count = max_outputs; > } > for (i = 0 ; i < rom->client_monitors_config.count ; ++i) { > VDAgentMonConfig *monitor = &monitors_config->monitors[i]; > @@ -2274,6 +2287,9 @@ static Property qxl_properties[] = { > DEFINE_PROP_UINT32("vram64_size_mb", PCIQXLDevice, vram_size_mb, > -1), > DEFINE_PROP_UINT32("vgamem_mb", PCIQXLDevice, vgamem_size_mb, 16), > DEFINE_PROP_INT32("surfaces", PCIQXLDevice, ssd.num_surfaces, 1024), > +#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ > + DEFINE_PROP_UINT16("max_outputs", PCIQXLDevice, max_outputs, 0), > +#endif > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/hw/display/qxl.h b/hw/display/qxl.h > index deddd54..2ddf065 100644 > --- a/hw/display/qxl.h > +++ b/hw/display/qxl.h > @@ -99,6 +99,9 @@ typedef struct PCIQXLDevice { > QXLModes *modes; > uint32_t rom_size; > MemoryRegion rom_bar; > +#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ > + uint16_t max_outputs; > +#endif > > /* vram pci bar */ > uint32_t vram_size; > -- > 2.1.0 > > > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel