[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 4/5] tools, libxl: parse optional start gfn from the iomem config option
On Sat, 2014-03-15 at 21:11 +0100, Arianna Avanzini wrote: > Currently the "iomem" domU config option allows to specify a machine > address range to be mapped to the domU. However, there is no way to > specify the guest address range used for the mapping. This commit > extends the iomem config option code to parse an additional, optional > parameter: this parameter, if given, specifies the start guest address > used for the mapping; if no start guest address is given, a 1:1 mapping > is performed as default. > > Signed-off-by: Arianna Avanzini <avanzini.arianna@xxxxxxxxx> > Cc: Dario Faggioli <dario.faggioli@xxxxxxxxxx> > Cc: Paolo Valente <paolo.valente@xxxxxxxxxx> > Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Cc: Julien Grall <julien.grall@xxxxxxxxxx> > Cc: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx> > Cc: Jan Beulich <JBeulich@xxxxxxxx> > Cc: Keir Fraser <keir@xxxxxxx> > Cc: Tim Deegan <tim@xxxxxxx> > Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> > Cc: Eric Trudeau <etrudeau@xxxxxxxxxxxx> > Cc: Viktor Kleinik <viktor.kleinik@xxxxxxxxxxxxxxx> > --- > docs/man/xl.cfg.pod.5 | 7 ++++--- > tools/libxl/libxl_types.idl | 1 + > tools/libxl/xl_cmdimpl.c | 22 +++++++++++++++------- > 3 files changed, 20 insertions(+), 10 deletions(-) > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > index a6663b9..d9684f2 100644 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -602,12 +602,13 @@ is given in hexadecimal and may either a span e.g. > C<2f8-2ff> > It is recommended to use this option only for trusted VMs under > administrator control. > > -=item B<iomem=[ "IOMEM_START,NUM_PAGES", "IOMEM_START,NUM_PAGES", ... ]> > +=item B<iomem=[ "IOMEM_START,NUM_PAGES[@GFN]", > "IOMEM_START,NUM_PAGES[@GFN]", ... ]> > > Allow guest to access specific hardware I/O memory pages. B<IOMEM_START> > is a physical page number. B<NUM_PAGES> is the number > -of pages beginning with B<START_PAGE> to allow access. Both values > -must be given in hexadecimal. > +of pages beginning with B<START_PAGE> to allow access. B<GFN> specifies > +the guest frame number where the mapping will start in the domU's > +address space. All of these values must be given in hexadecimal. > > It is recommended to use this option only for trusted VMs under > administrator control. > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 612645c..f0bdb09 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -172,6 +172,7 @@ libxl_ioport_range = Struct("ioport_range", [ > libxl_iomem_range = Struct("iomem_range", [ > ("start", uint64), > ("number", uint64), > + ("gfn", uint64), The existing name "start" is unfortunate since it doesn't really indicate what it is the start of. Can you please add comments to "gfn" and "start" (python syntax so # comment after each is fine) to clarify that one is the host address and the other is the guest address. > ]) > > libxl_vga_interface_info = Struct("vga_interface_info", [ > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 6b1ebfa..cf8d71f 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -1220,13 +1220,21 @@ static void parse_config_data(const char > *config_source, > "xl: Unable to get element %d in iomem list\n", i); > exit(1); > } > - if(sscanf(buf, "%" SCNx64",%" SCNx64, > - &b_info->iomem[i].start, > - &b_info->iomem[i].number) > - != 2) { > - fprintf(stderr, > - "xl: Invalid argument parsing iomem: %s\n", buf); > - exit(1); > + if(sscanf(buf, "%" SCNx64",%" SCNx64"@%" SCNx64, > + &b_info->iomem[i].start, > + &b_info->iomem[i].number, > + &b_info->iomem[i].gfn) > + != 3) { > + if(sscanf(buf, "%" SCNx64",%" SCNx64, > + &b_info->iomem[i].start, > + &b_info->iomem[i].number) > + != 2) { > + fprintf(stderr, > + "xl: Invalid argument parsing iomem: %s\n", buf); > + exit(1); sscanf returns the number of entries it successfully matched and assigned, so sscanf(buf, "%" SCNx64",%" SCNx64"@%" SCNx64, will return 2 or 3 depending on what it found. So I think you can simplify this by switching on the return value of sscanf rather than reparsing it. swtich (sscanf(...)) { case 3: break; case 2: ...[i].gfn = ...[i].start; break; default: fpritnf(); exit } (you get the idea) Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |