From: Alon Levy <alevy@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: spice-devel@lists.freedesktop.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [Spice-devel] [PATCH 4/4] [experimental] add optinal 64bit vram bar to qxl
Date: Fri, 17 Feb 2012 21:39:18 +0200 [thread overview]
Message-ID: <20120217193918.GH23926@garlic.redhat.com> (raw)
In-Reply-To: <1329491433-31446-5-git-send-email-kraxel@redhat.com>
On Fri, Feb 17, 2012 at 04:10:33PM +0100, Gerd Hoffmann wrote:
> This patch adds an 64bit pci bar for vram. It is turned off by default.
> It can be enabled by setting the size of the 64bit bar to be larger than
> the 32bit bar. Both 32bit and 64bit bar refer to the same memory. Only
> the first part of the memory is available via 32bit bar.
>
> The intention is to allow large vram sizes for 64bit guests, by allowing
> the vram bar being mapped above 4G, so we don't have to squeeze it into
> the pci I/O window below 4G.
>
> With vram_size_mb=16 and vram64_size_mb=256 it looks like this:
>
The vram variables are a little confusing, but I guess I can live with
it, and it will be more natural going forward.
I guess you will s/4/QXL_VRAM64_RANGE_INDEX/ when you send the
spice-protocol patch?
Other then one more note below, looks good.
> 00:02.0 VGA compatible controller: Red Hat, Inc. Device 0100 (rev 02) (prog-if 00 [VGA controller])
> Subsystem: Red Hat, Inc Device 1100
> Physical Slot: 2
> Flags: fast devsel, IRQ 10
> Memory at f8000000 (32-bit, non-prefetchable) [size=64M]
> Memory at fc000000 (32-bit, non-prefetchable) [size=16M]
> Memory at fd020000 (32-bit, non-prefetchable) [size=8K]
> I/O ports at c5a0 [size=32]
> Memory at ffe0000000 (64-bit, prefetchable) [size=256M]
> Expansion ROM at fd000000 [disabled] [size=64K]
>
> [ needs patched seabios ]
> ---
> hw/qxl.c | 51 ++++++++++++++++++++++++++++++++++++++++++++-------
> hw/qxl.h | 3 +++
> 2 files changed, 47 insertions(+), 7 deletions(-)
>
> diff --git a/hw/qxl.c b/hw/qxl.c
> index 87ad49a..e38bb29 100644
> --- a/hw/qxl.c
> +++ b/hw/qxl.c
> @@ -914,6 +914,7 @@ static void qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta,
> static const int regions[] = {
> QXL_RAM_RANGE_INDEX,
> QXL_VRAM_RANGE_INDEX,
> + 4 /* vram 64bit */,
> };
> uint64_t guest_start;
> uint64_t guest_end;
> @@ -960,6 +961,7 @@ static void qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta,
> virt_start = (intptr_t)memory_region_get_ram_ptr(&d->vga.vram);
> break;
> case QXL_VRAM_RANGE_INDEX:
> + case 4 /* vram 64bit */:
> virt_start = (intptr_t)memory_region_get_ram_ptr(&d->vram_bar);
> break;
> default:
> @@ -1564,18 +1566,28 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl, uint32_t ram_min_mb)
> qxl->vga.vram_size = ram_min_mb * 1024 * 1024;
> }
>
> - /* vram (surfaces, bar 1) */
> + /* vram32 (surfaces, 32bit, bar 1) */
> + if (qxl->vram32_size_mb != -1) {
> + qxl->vram32_size = qxl->vram32_size_mb * 1024 * 1024;
> + }
> + if (qxl->vram32_size < 4096) {
> + qxl->vram32_size = 4096;
> + }
> +
> + /* vram (surfaces, 64bit, bar 4+5) */
> if (qxl->vram_size_mb != -1) {
> qxl->vram_size = qxl->vram_size_mb * 1024 * 1024;
> }
> - if (qxl->vram_size < 4096) {
> - qxl->vram_size = 4096;
> + if (qxl->vram_size < qxl->vram32_size) {
> + qxl->vram_size = qxl->vram32_size;
Am I reading correctly that you want the 64bit bar to be at least the
size of the 32bit bar? why?
> }
> +
> if (qxl->revision == 1) {
> + qxl->vram32_size = 4096;
> qxl->vram_size = 4096;
> }
> -
> qxl->vga.vram_size = msb_mask(qxl->vga.vram_size * 2 - 1);
> + qxl->vram32_size = msb_mask(qxl->vram32_size * 2 - 1);
> qxl->vram_size = msb_mask(qxl->vram_size * 2 - 1);
> }
>
> @@ -1619,6 +1631,8 @@ static int qxl_init_common(PCIQXLDevice *qxl)
>
> memory_region_init_ram(&qxl->vram_bar, "qxl.vram", qxl->vram_size);
> vmstate_register_ram(&qxl->vram_bar, &qxl->pci.qdev);
> + memory_region_init_alias(&qxl->vram32_bar, "qxl.vram32", &qxl->vram_bar,
> + 0, qxl->vram32_size);
>
> io_size = msb_mask(QXL_IO_RANGE_SIZE * 2 - 1);
> if (qxl->revision == 1) {
> @@ -1642,7 +1656,29 @@ static int qxl_init_common(PCIQXLDevice *qxl)
> PCI_BASE_ADDRESS_SPACE_MEMORY, &qxl->vga.vram);
>
> pci_register_bar(&qxl->pci, QXL_VRAM_RANGE_INDEX,
> - PCI_BASE_ADDRESS_SPACE_MEMORY, &qxl->vram_bar);
> + PCI_BASE_ADDRESS_SPACE_MEMORY, &qxl->vram32_bar);
> +
> + if (qxl->vram32_size < qxl->vram_size) {
> + /*
> + * Make the 64bit vram bar show up only in case it is
> + * configured to be larger than the 32bit vram bar.
> + */
> + pci_register_bar(&qxl->pci, 4,
> + PCI_BASE_ADDRESS_SPACE_MEMORY |
> + PCI_BASE_ADDRESS_MEM_TYPE_64 |
> + PCI_BASE_ADDRESS_MEM_PREFETCH,
> + &qxl->vram_bar);
> + }
> +
> + /* print pci bar details */
> + dprint(qxl, 1, "ram/%s: %d MB [region 0]\n",
> + qxl->id == 0 ? "pri" : "sec",
> + qxl->vga.vram_size / (1024*1024));
> + dprint(qxl, 1, "vram/32: %d MB [region 1]\n",
> + qxl->vram32_size / (1024*1024));
> + dprint(qxl, 1, "vram/64: %d MB %s\n",
> + qxl->vram_size / (1024*1024),
> + qxl->vram32_size < qxl->vram_size ? "[region 4]" : "[unmapped]");
>
> qxl->ssd.qxl.base.sif = &qxl_interface.base;
> qxl->ssd.qxl.id = qxl->id;
> @@ -1859,7 +1895,7 @@ static VMStateDescription qxl_vmstate = {
> static Property qxl_properties[] = {
> DEFINE_PROP_UINT32("ram_size", PCIQXLDevice, vga.vram_size,
> 64 * 1024 * 1024),
> - DEFINE_PROP_UINT32("vram_size", PCIQXLDevice, vram_size,
> + DEFINE_PROP_UINT32("vram_size", PCIQXLDevice, vram32_size,
> 64 * 1024 * 1024),
> DEFINE_PROP_UINT32("revision", PCIQXLDevice, revision,
> QXL_DEFAULT_REVISION),
> @@ -1867,7 +1903,8 @@ static Property qxl_properties[] = {
> DEFINE_PROP_UINT32("guestdebug", PCIQXLDevice, guestdebug, 0),
> DEFINE_PROP_UINT32("cmdlog", PCIQXLDevice, cmdlog, 0),
> DEFINE_PROP_UINT32("ram_size_mb", PCIQXLDevice, ram_size_mb, -1),
> - DEFINE_PROP_UINT32("vram_size_mb", PCIQXLDevice, vram_size_mb, -1),
> + DEFINE_PROP_UINT32("vram_size_mb", PCIQXLDevice, vram32_size_mb, 0),
> + DEFINE_PROP_UINT32("vram64_size_mb", PCIQXLDevice, vram_size_mb, 0),
> DEFINE_PROP_END_OF_LIST(),
> };
>
> diff --git a/hw/qxl.h b/hw/qxl.h
> index d062991..a1b1240 100644
> --- a/hw/qxl.h
> +++ b/hw/qxl.h
> @@ -86,6 +86,8 @@ typedef struct PCIQXLDevice {
> /* vram pci bar */
> uint32_t vram_size;
> MemoryRegion vram_bar;
> + uint32_t vram32_size;
> + MemoryRegion vram32_bar;
>
> /* io bar */
> MemoryRegion io_bar;
> @@ -93,6 +95,7 @@ typedef struct PCIQXLDevice {
> /* user-friendly properties (in megabytes) */
> uint32_t ram_size_mb;
> uint32_t vram_size_mb;
> + uint32_t vram32_size_mb;
> } PCIQXLDevice;
>
> #define PANIC_ON(x) if ((x)) { \
> --
> 1.7.1
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
next prev parent reply other threads:[~2012-02-17 19:39 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-17 15:10 [Qemu-devel] [PATCH 0/4] qxl: memory config patches Gerd Hoffmann
2012-02-17 15:10 ` [Qemu-devel] [PATCH 1/4] qxl: drop vram bar minimum size Gerd Hoffmann
2012-02-17 19:27 ` Alon Levy
2012-02-17 19:28 ` Alon Levy
2012-02-17 15:10 ` [Qemu-devel] [PATCH 2/4] qxl: move ram size init to new function Gerd Hoffmann
2012-02-17 19:29 ` [Qemu-devel] [Spice-devel] " Alon Levy
2012-02-17 15:10 ` [Qemu-devel] [PATCH 3/4] qxl: add user-friendly bar size properties Gerd Hoffmann
2012-02-17 19:39 ` [Qemu-devel] [Spice-devel] " Alon Levy
2012-02-17 15:10 ` [Qemu-devel] [PATCH 4/4] [experimental] add optinal 64bit vram bar to qxl Gerd Hoffmann
2012-02-17 19:39 ` Alon Levy [this message]
2012-02-20 8:00 ` [Qemu-devel] [Spice-devel] " Gerd Hoffmann
2012-02-20 8:19 ` Alon Levy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120217193918.GH23926@garlic.redhat.com \
--to=alevy@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=spice-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.