|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl, hvmloader: Don't relocate memory for MMIO hole
George Dunlap writes ("[PATCH] libxl,hvmloader: Don't relocate memory for MMIO
hole"):
> At the moment, qemu-xen can't handle memory being relocated by
> hvmloader. This may happen if a device with a large enough memory
> region is passed through to the guest. At the moment, if this
> happens, then at some point in the future qemu will crash and the
> domain will hang. (qemu-traditional is fine.)
I think the approach is good. Arguably the two things should be in
two patches.
> + const char *s;
> + uint8_t allow_memory_relocate=1;
> +
> + s = xenstore_read(HVM_XS_ALLOW_MEMORY_RELOCATE, NULL);
> + if (s)
> + allow_memory_relocate=(uint8_t)strtoll(s, NULL, 0);
Use strtoul, surely, and bool_t (or _Bool). Then there is no need for
the cast. (Also, spaces round `='.)
> + printf("allow_memory_relocate %u\n",
> + __func__, allow_memory_relocate);
Missing %s argument. This shows that -Wformat isn't working.
> - while ( (mmio_total > (pci_mem_end - pci_mem_start)) &&
> - ((pci_mem_start << 1) != 0) )
> + /*
> + * At the moment qemu-xen can't deal with relocated memory regions.
> + * It's too close to the release to make a proper fix; for now,
> + * if we're using qemu-xen, just crash and tell people to switch
> + * to qemu-traditional.
> + */
> + while ((mmio_total > (pci_mem_end - pci_mem_start))
> + && ((pci_mem_start << 1) != 0)
> + && ( allow_memory_relocate
I think this is an unnecessarily confusing way of writing it.
allow_memory_relocate does not change. I would lift it out of the
loop into an if. That would also mean that "git-diff -b" can show
more clearly whether the change is truly what you intend.
> + || (((pci_mem_start << 1)>>PAGE_SHIFT
> )<hvm_info->low_mem_pgend))
> pci_mem_start <<= 1;
>
> - if ( (pci_mem_start << 1) != 0 )
> + if (mmio_total > (pci_mem_end - pci_mem_start))
> bar64_relocate = 1;
Missing spaces.
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index ac1f90e..5167ee0 100644
> --- a/tools/libxl/libxl_dm.c
> +++ b/tools/libxl/libxl_dm.c
> @@ -1154,6 +1154,13 @@ void libxl__spawn_local_dm(libxl__egc *egc,
> libxl__dm_spawn_state *dmss)
> libxl__xs_write(gc, XBT_NULL,
> libxl__sprintf(gc, "%s/hvmloader/bios", path),
> "%s", libxl_bios_type_to_string(b_info->u.hvm.bios));
> + /* Disable relocating memory to make the MMIO hole larger unless we'
re
> + * running qemu-traditional */
This whole hunk could do with more aggressive wrapping. See what it
looks like in my MUA. Can you keep it down to 70-75 columns ?
> + libxl__xs_write(gc, XBT_NULL,
> + libxl__sprintf(gc, "%s/hvmloader/allow-memory-reloca
te", path),
> + "%s",
> + (b_info->device_model_version==LIBXL_DEVICE_MODEL_VE
RSION_QEMU_XEN_TRADITIONAL)?
> + "1":"0");
> free(path);
Use GCSPRINTF not libxl_sprintf. Lacks error check (check return
value from libxl__xs_write).
Instead of "%s", blah?"1":"0" use "%d" and the == expression itself.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |