[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for 4.5 v6 1/1] Add mmio_hole_size
On Wed, Oct 08, 2014 at 09:41:36AM -0400, Don Slutz wrote: > On 10/07/14 10:08, Konrad Rzeszutek Wilk wrote: > >On Fri, Oct 03, 2014 at 09:48:38AM -0400, Don Slutz wrote: > >>If you add enough PCI devices then all mmio may not fit below 4G > >>which may not be the layout the user wanted. This allows you to > >>increase the below 4G address space that PCI devices can use and > >>therefore in more cases not have any mmio that is above 4G. > >> > >>There are real PCI cards that do not support mmio over 4G, so if you > >>want to emulate them precisely, you may also need to increase the > >>space below 4G for them. There are drivers for these cards that also > >>do not work if they have their mmio space mapped above 4G. > >> > >>This allows growing the MMIO hole to the size needed. > >> > >>This may help with using pci passthru and HVM. > >Ha! It definitly helps in some cases with GPUs. > >>Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx> > >>--- > >>v6: > >> I think we should get rid of xc_hvm_build_with_hole() entirely. > >> Done. > >> Add text describing restrictions on hole size > >> Done. > >> "<=", to be consistent with the check in > >> libxl__domain_create_info_setdefault () > >> Done > >> > >>v5: > >> Add LIBXL_HAVE_BUILDINFO_HVM_MMIO_HOLE_SIZE. > >> > >>v4: > >> s/pci_hole_min_size/mmio_hole_size/ > >> s/HVM_BELOW_4G_RAM_END/HVM_BELOW_4G_MMIO_START/ > >> Add ignore to hvmloader message > >> Adjust commit message > >> Dropped min; stopped mmio_hole_size changing in hvmloader > >> > >> > >> docs/man/xl.cfg.pod.5 | 16 +++++++++ > >> tools/firmware/hvmloader/config.h | 1 - > >> tools/firmware/hvmloader/pci.c | 71 > >> +++++++++++++++++++++++++++------------ > >> tools/libxl/libxl.h | 5 +++ > >> tools/libxl/libxl_create.c | 29 ++++++++++++---- > >> tools/libxl/libxl_dm.c | 24 +++++++++++-- > >> tools/libxl/libxl_dom.c | 8 +++++ > >> tools/libxl/libxl_types.idl | 1 + > >> tools/libxl/xl_cmdimpl.c | 12 +++++++ > >> 9 files changed, 136 insertions(+), 31 deletions(-) > >> > >>diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > >>index 8bba21c..0a870d2 100644 > >>--- a/docs/man/xl.cfg.pod.5 > >>+++ b/docs/man/xl.cfg.pod.5 > >>@@ -1111,6 +1111,22 @@ wallclock (i.e., real) time. > >> =back > >>+=head3 Memory layout > >>+ > >>+=over 4 > >>+ > >>+=item B<mmio_hole_size=BYTES> > >>+ > >>+Specifies the size the MMIO hole below 4GiB will be. Only valid for > >>+device_model_version = "qemu-xen". Note: this requires QEMU 2.1.0 > >>+or later. > >This patch depends on 'max-ram-below-4g' being in QEMU upstream. > >Has that been codified/Acked by the maintainers there? > >(It would be rather cumbersome if this changed). > > Yes, it is part of QEMU 2.1 which has been released. I think you might just want to ditch that information as .. > > > >Is there a link to the latest patch-set? > > I currently do not have an external git server. > > > > >Naturally to use this with Xen 4.5 one would have to replace > >the qemu-xen that we ship with it, with an upstream one. > > Nope. The QEMU that is part of Xen also has this. Was > done in: > > Message-ID: <alpine.DEB.2.02.1407281711550.2293@xxxxxxxxxxxxxxxxxxxxxxx> > References: <alpine.DEB.2.02.1407241221110.2293@xxxxxxxxxxxxxxxxxxxxxxx> > <1406554299-25744-1-git-send-email-dslutz@xxxxxxxxxxx> > > > > > > >I believe Fedora is an distro that does that (as in > >it builds using the same QEMU that KVM and Xen are using). > >Are there any other ones? > > Not sure. > > > > >I am conflicted about this as: > > - Internally (Oracel) we have an usage for this and at some > > point developed something quite similar, so I am partially > > biased to this. > > > > - This by itself won't work with the version of QEMU-xen that > > is going to be shipped in Xen 4.5. Which means it is a bit > > of an dead code - but then there are some patches that we > > put in Xen 4.5 that were cleanups to help with further work. > > And there are also pieces of code in the hypervisor > > which don't have corresponding code in the toolstack. > > This is wrong. The QEMU-xen that is going to be shipped > with Xen 4.5 supports this. .. you say that the version of QEMU-xen that is going to be with Xen 4.5 will have this. > > > - The 'max-ram-below-4g' not being codified makes me a bit > > uneasy - as we would have to alter this when your patches > > make it in QEMU v2.1 (or later). > > I did not understand this. You can ignore that sentence. Somehow I was thinking your patches for QEMU were not in the QEMU code base - as I read your 'QEMU 2.1.0 or later' as - 'later' == 'not in tree yet.'. > > >On the patch itself: > > - It is isolated. It won't be run by the majority of users - hence > > any bugs that it might cause are in the common code. There > > does not seem much.. > > > > - It needs an Ack or Reviewed by the toolstack maintainers > > and also from George (who touched the hvmloader last time). > > > > > >>+ > >>+Cannot be smaller than 256MiB. Cannot be larger than 4GiB. > >>+ > ... > >>diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c > >>index 8b82584..3737148 100644 > >>--- a/tools/libxl/libxl_create.c > >>+++ b/tools/libxl/libxl_create.c > >>@@ -23,6 +23,7 @@ > >> #include <xc_dom.h> > >> #include <xenguest.h> > >> #include <xen/hvm/hvm_info_table.h> > >>+#include <xen/hvm/e820.h> > >> int libxl__domain_create_info_setdefault(libxl__gc *gc, > >> libxl_domain_create_info *c_info) > >>@@ -428,13 +429,26 @@ int libxl__domain_build(libxl__gc *gc, > >> vments[4] = "start_time"; > >> vments[5] = libxl__sprintf(gc, "%lu.%02d", > >> start_time.tv_sec,(int)start_time.tv_usec/10000); > >>- localents = libxl__calloc(gc, 7, sizeof(char *)); > >>- localents[0] = "platform/acpi"; > >>- localents[1] = libxl_defbool_val(info->u.hvm.acpi) ? "1" : "0"; > >>- localents[2] = "platform/acpi_s3"; > >>- localents[3] = libxl_defbool_val(info->u.hvm.acpi_s3) ? "1" : "0"; > >>- localents[4] = "platform/acpi_s4"; > >>- localents[5] = libxl_defbool_val(info->u.hvm.acpi_s4) ? "1" : "0"; > >>+ localents = libxl__calloc(gc, 9, sizeof(char *)); > >>+ i = 0; > >>+ localents[i++] = "platform/acpi"; > >>+ localents[i++] = libxl_defbool_val(info->u.hvm.acpi) ? "1" : "0"; > >>+ localents[i++] = "platform/acpi_s3"; > >>+ localents[i++] = libxl_defbool_val(info->u.hvm.acpi_s3) ? "1" : > >>"0"; > >>+ localents[i++] = "platform/acpi_s4"; > >>+ localents[i++] = libxl_defbool_val(info->u.hvm.acpi_s4) ? "1" : > >>"0"; > >>+ if (info->u.hvm.mmio_hole_size) { > >>+ uint64_t max_ram_below_4g = > >>+ (1ULL << 32) - info->u.hvm.mmio_hole_size; > >>+ > >>+ if (max_ram_below_4g <= HVM_BELOW_4G_MMIO_START) { > >>+ localents[i++] = "platform/mmio_hole_size"; > >>+ localents[i++] = > >>+ libxl__sprintf(gc, "%"PRIu64, > >>+ info->u.hvm.mmio_hole_size); > >>+ } > >>+ } > >>+ assert(i < 9); > >Why? Please include an comment explaining why? > > Ok. Does: > > /* Check for heap corruption, localents array size is 9 */ > help? > > >> break; > >> case LIBXL_DOMAIN_TYPE_PV: > >>@@ -460,6 +474,7 @@ int libxl__domain_build(libxl__gc *gc, > >> vments[i++] = "image/cmdline"; > >> vments[i++] = (char *) state->pv_cmdline; > >> } > >>+ assert(i < 11); > >Why? Please include an comment explaining why. > > Ditto: > > /* Check for heap corruption, vments array size is 11 */ I was thinking more of - why even the need for them? It is pretty evident what the value would be - so you could just ditch them. Unless Ian or Wei think it should be in there. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |