From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Fioravante Subject: Re: [PATCH 09/11] add iomem support to libxl Date: Tue, 02 Oct 2012 10:06:10 -0400 Message-ID: <506AF4D2.4010904@jhuapl.edu> References: <1348765860-11359-1-git-send-email-matthew.fioravante@jhuapl.edu> <1349184862.650.52.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6852169546263713510==" Return-path: In-Reply-To: <1349184862.650.52.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org This is a cryptographically signed message in MIME format. --===============6852169546263713510== Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms090009030703060109020103" This is a cryptographically signed message in MIME format. --------------ms090009030703060109020103 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 10/02/2012 09:34 AM, Ian Campbell wrote: > On Thu, 2012-09-27 at 18:10 +0100, Matthew Fioravante wrote: >> This patch adds a new option for xen config files for >> directly mapping hardware io memory into a vm. >> >> Signed-off-by: Matthew Fioravante >> >> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 >> index 013270d..428da21 100644 >> --- a/docs/man/xl.cfg.pod.5 >> +++ b/docs/man/xl.cfg.pod.5 >> @@ -496,6 +496,17 @@ is given in hexadecimal and may either a span e.g= =2E C<2f8-2ff> >> It is recommended to use this option only for trusted VMs under >> administrator control. >> =20 >> +=3Ditem B >> + >> +Allow guest to access specific hardware I/O memory pages. B >> +is a physical page number. B is the number >> +of pages beginning with B to allow access. Both values >> +must be given in hexadecimal. >> + >> +It is recommended to use this option only for trusted VMs under >> +administrator control. >> + >> + >> =3Ditem B >> =20 >> Allow a guest to access specific physical IRQs. >> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c >> index ef17f05..6cb586b 100644 >> --- a/tools/libxl/libxl_create.c >> +++ b/tools/libxl/libxl_create.c >> @@ -963,6 +963,24 @@ static void domcreate_launch_dm(libxl__egc *egc, = libxl__multidev *multidev, >> } >> } >> =20 >> + for (i =3D 0; i < d_config->b_info.num_iomem; i++) { >> + libxl_iomem_range *io =3D &d_config->b_info.iomem[i]; >> + >> + LOG(DEBUG, "dom%d iomem %"PRIx64"-%"PRIx64, >> + domid, io->start, io->start + io->number - 1); >> + >> + ret =3D xc_domain_iomem_permission(CTX->xch, domid, >> + io->start, io->number, 1); >> + if ( ret<0 ) { > This should be > if (ret < 0) { Looks like it was like that also for ioports and irqs. I fixed all 3. > >> + LOGE(ERROR, >> + "failed give dom%d access to iomem range %"PRIx64"-%= "PRIx64, >> + domid, io->start, io->start + io->number - 1); >> + ret =3D ERROR_FAIL; >> + } >> + } >> + >> + >> + >> for (i =3D 0; i < d_config->num_nics; i++) { >> /* We have to init the nic here, because we still haven't >> * called libxl_device_nic_add at this point, but qemu needs >> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl= >> index 6d5c578..cf83c60 100644 >> --- a/tools/libxl/libxl_types.idl >> +++ b/tools/libxl/libxl_types.idl >> @@ -140,6 +140,11 @@ libxl_ioport_range =3D Struct("ioport_range", [ >> ("number", uint32), >> ]) >> =20 >> +libxl_iomem_range =3D Struct("iomem_range", [ >> + ("start", uint64), >> + ("number", uint64), >> + ]) >> + >> libxl_vga_interface_info =3D Struct("vga_interface_info", [ >> ("kind", libxl_vga_interface_type), >> ]) >> @@ -284,6 +289,7 @@ libxl_domain_build_info =3D Struct("domain_build_i= nfo",[ >> =20 >> ("ioports", Array(libxl_ioport_range, "num_ioports")), >> ("irqs", Array(uint32, "num_irqs")), >> + ("iomem", Array(libxl_iomem_range, "num_iomem")), >> =20 >> ("u", KeyedUnion(None, libxl_domain_type, "type", >> [("hvm", Struct(None, [("firmware", string), >> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c >> index 1627cac..fe8e925 100644 >> --- a/tools/libxl/xl_cmdimpl.c >> +++ b/tools/libxl/xl_cmdimpl.c >> @@ -574,8 +574,8 @@ static void parse_config_data(const char *config_s= ource, >> long l; >> XLU_Config *config; >> XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids; >> - XLU_ConfigList *ioports, *irqs; >> - int num_ioports, num_irqs; >> + XLU_ConfigList *ioports, *irqs, *iomem; >> + int num_ioports, num_irqs, num_iomem; >> int pci_power_mgmt =3D 0; >> int pci_msitranslate =3D 0; >> int pci_permissive =3D 0; >> @@ -1005,6 +1005,30 @@ static void parse_config_data(const char *confi= g_source, >> } >> } >> =20 >> + if (!xlu_cfg_get_list(config, "iomem", &iomem, &num_iomem, 0)) { >> + b_info->num_iomem =3D num_iomem; >> + b_info->iomem =3D calloc(num_iomem, sizeof(*b_info->iomem)); >> + if (b_info->iomem =3D=3D NULL) { >> + fprintf(stderr, "unable to allocate memory for iomem\n");= >> + exit(-1); >> + } >> + for (i =3D 0; i < num_iomem; i++) { >> + buf =3D xlu_cfg_get_listitem (iomem, i); >> + if (!buf) { >> + fprintf(stderr, >> + "xl: Unable to get element %d in iomem list\n= ", i); >> + exit(1); >> + } >> + if(sscanf(buf, "%" SCNx64",%" SCNx64, &b_info->iomem[i].s= tart, &b_info->iomem[i].number) !=3D 2) { > Can we split this over multiple lines please, to keep it under the 75-8= 0 > column limit mention in coding style. fixed > >> + fprintf(stderr, >> + "xl: Invalid argument parsing iomem: %s\n", bu= f); >> + exit(1); >> + } >> + } >> + } >> + >> + >> + >> if (!xlu_cfg_get_list (config, "disk", &vbds, 0, 0)) { >> d_config->num_disks =3D 0; >> d_config->disks =3D NULL; > --------------ms090009030703060109020103 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIDyjCC A8YwggMvoAMCAQICBD/xyf0wDQYJKoZIhvcNAQEFBQAwLzELMAkGA1UEBhMCVVMxDzANBgNV BAoTBkpIVUFQTDEPMA0GA1UECxMGQklTRENBMB4XDTEwMDYxMTE4MjIwNloXDTEzMDYxMTE4 NTIwNlowZjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkpIVUFQTDEPMA0GA1UECxMGUGVvcGxl MTUwFgYDVQQLEw9WUE5Hcm91cC1CSVNEQ0EwGwYDVQQDExRNYXR0aGV3IEUgRmlvcmF2YW50 ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAnpbwVSP6o1Nb5lcW7dd3yTo9iBJdi7qz 4nANOMFPK7JOy5npKN1iiousl28U/scUJES55gPwAWYJK3uVyQAsA4adgDKi5DoD1UHDQEwp bY7iHLJeq0NPr4BqYNqnCFPbE6HC8zSJrr4qKn+gVUQT39SIFqdiIPJwZL8FYTRQ/zsCAwEA AaOCAbYwggGyMAsGA1UdDwQEAwIHgDArBgNVHRAEJDAigA8yMDEwMDYxMTE4MjIwNlqBDzIw MTIwNzE3MjI1MjA2WjAbBg0rBgEEAbMlCwMBAQEBBAoWCGZpb3JhbWUxMBsGDSsGAQQBsyUL AwEBAQIEChIIMDAxMDQyNjEwWAYJYIZIAYb6ax4BBEsMSVRoZSBwcml2YXRlIGtleSBjb3Jy ZXNwb25kaW5nIHRvIHRoaXMgY2VydGlmaWNhdGUgbWF5IGhhdmUgYmVlbiBleHBvcnRlZC4w KAYDVR0RBCEwH4EdTWF0dGhldy5GaW9yYXZhbnRlQGpodWFwbC5lZHUwUgYDVR0fBEswSTBH oEWgQ6RBMD8xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsTBkJJU0RD QTEOMAwGA1UEAxMFQ1JMNTYwHwYDVR0jBBgwFoAUCDUpmxH52EU2CyWmF2EJMB1yqeswHQYD VR0OBBYEFO6LYxg6r9wHZ+zdQtBHn1dZ/YTNMAkGA1UdEwQCMAAwGQYJKoZIhvZ9B0EABAww ChsEVjcuMQMCBLAwDQYJKoZIhvcNAQEFBQADgYEAJO9HQh4YNChVLzuZqK5ARJARD8JoujGZ fdo75quvg2jXFQe2sEjvLnxJZgm/pv8fdZakq48CWwjYHKuvIp7sDjTEsQfo+y7SpN/N2NvJ WU5SqfK1VgYtNLRRoGJUB5Q1aZ+Dg95g3kqpyfpUMISJL8IKVLtJVfN4fggFVUYZ9wwxggGr MIIBpwIBATA3MC8xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsTBkJJ U0RDQQIEP/HJ/TAJBgUrDgMCGgUAoIHLMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ KoZIhvcNAQkFMQ8XDTEyMTAwMjE0MDYxMFowIwYJKoZIhvcNAQkEMRYEFC4d4YlYP6DWLsSL kzNlqVF8Dx3SMGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAK BggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYI KoZIhvcNAwICASgwDQYJKoZIhvcNAQEBBQAEgYALKJ4uuACKZz3Udd6E/XgwOt/KX0AwZkS4 +I4apoJeI11modXzlcpxefZ4j7hxde83Ux0XebA1ijU+nsg8EY06rtLoaxXrHm2fpNDiiatL r5NRz2FuGzod4c97xeCjPxHXlHU8FJJjPPXnydFt2PQZMDAQdthrGdMx8DqAePkw1AAAAAAA AA== --------------ms090009030703060109020103-- --===============6852169546263713510== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============6852169546263713510==--