From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arianna Avanzini Subject: Re: R: ARM: access to iomem and HW IRQ Date: Fri, 28 Feb 2014 01:24:22 +0100 Message-ID: <530FD736.8080401@gmail.com> References: <1393496069.3921.14.camel@Solace> , , <0873BA48-F5C5-4C4D-93AE-5CB967FF35E1@broadcom.com> Reply-To: Arianna Avanzini Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Dario Faggioli , Eric Trudeau , Viktor Kleinik Cc: Julien Grall , Stefano Stabellini , "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org On 02/28/2014 12:39 AM, Dario Faggioli wrote: > As I said, Arianna is doing something very similar... perhaps she can merge her > and your work and try to upstream it properly, in the next few days... Arianna? > I'd be certainly happy to, once the patch is ready and if Eric Trudeau agrees. Sorry for the delay, Arianna > Regards, > Dario > > > Inviato da Samsung Mobile > > > -------- Messaggio originale -------- > Da: Eric Trudeau > Data:28/02/2014 00:03 (GMT+01:00) > A: Viktor Kleinik > Cc: Stefano Stabellini ,Dario Faggioli ,xen-devel@lists.xen.org,Arianna Avanzini > ,Julien Grall > Oggetto: Re: [Xen-devel] ARM: access to iomem and HW IRQ > > > On Feb 27, 2014, at 1:10 PM, "Viktor Kleinik" > wrote: > >> Thank you all for your responses. >> >> I will try those changes on our platform. >> Are you planning push the implementation of >> xc_domain_memory_mapping/XEN_DOMCTL_memory_mapping and >> xc_physdev_map_pirq/PHYSDEVOP_map_pirq hypercalls into >> official Xen release? >> >> Regards, >> Victor >> > I don't expect to push the changes up. If you want to submit, please go ahead. >> >> On Thu, Feb 27, 2014 at 2:11 PM, Eric Trudeau > > wrote: >> >> > -----Original Message----- >> > From: Stefano Stabellini [mailto:stefano.stabellini@eu.citrix.com >> ] >> > Sent: Thursday, February 27, 2014 8:16 AM >> > To: Dario Faggioli >> > Cc: Viktor Kleinik; xen-devel@lists.xen.org >> ; Arianna Avanzini; Stefano Stabellini; >> > Julien Grall; Eric Trudeau >> > Subject: Re: [Xen-devel] ARM: access to iomem and HW IRQ >> > >> > On Thu, 27 Feb 2014, Dario Faggioli wrote: >> > > On mer, 2014-02-26 at 15:43 +0000, Viktor Kleinik wrote: >> > > > Hi all, >> > > > >> > > Hi, >> > > >> > > > Does anyone knows something about future plans to implement >> > > > xc_domain_memory_mapping/XEN_DOMCTL_memory_mapping and >> > > > xc_physdev_map_pirq/PHYSDEVOP_map_pirq calls for ARM? >> > > > >> > > I think Arianna is working on an implementation of the former >> > > (XEN_DOMCTL_memory_mapping), and she should be sending patches to this >> > > list soon, isn't it so, Arianna? >> > >> > Eric Trudeau did some work in the area too: >> > >> > http://marc.info/?l=xen-devel&m=137338996422503 >> > http://marc.info/?l=xen-devel&m=137365750318936 >> >> I checked our repo and the route IRQ changes to DomUs in the second patch >> URL Stefano provided below are up-to-date with what we have been using on >> our platforms. We made no further changes after that patch, i.e. we left >> the 100 msec max wait for a domain to finish an ISR when destroying it. >> >> We also added support for a DomU to map in I/O memory with the iomem >> configuration parameter. Unfortunately, I don't have time to provide an >> official patch on recent Xen upstream code due to time constraints, but >> below is a patch based on last October, :( , commit >> d70d87d2ccf93e3d5302bb034c0a1ae1d6fc1d29. >> I hope this is helpful, because that is the best I can do at this time. >> >> ----------------- >> >> tools/libxl/libxl_create.c | 5 +++-- >> xen/arch/arm/domctl.c | 74 >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- >> 2 files changed, 76 insertions(+), 3 deletions(-) >> >> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c >> index 1b320d3..53ed52e 100644 >> --- a/tools/libxl/libxl_create.c >> +++ b/tools/libxl/libxl_create.c >> @@ -976,8 +976,9 @@ static void domcreate_launch_dm(libxl__egc *egc, >> libxl__multidev *multidev, >> LOG(DEBUG, "dom%d iomem %"PRIx64"-%"PRIx64, >> domid, io->start, io->start + io->number - 1); >> >> - ret = xc_domain_iomem_permission(CTX->xch, domid, >> - io->start, io->number, 1); >> + ret = xc_domain_memory_mapping(CTX->xch, domid, >> + io->start, io->start, >> + io->number, 1); >> if (ret < 0) { >> LOGE(ERROR, >> "failed give dom%d access to iomem range %"PRIx64"-%"PRIx64, >> diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c >> index 851ee40..222aac9 100644 >> --- a/xen/arch/arm/domctl.c >> +++ b/xen/arch/arm/domctl.c >> @@ -10,11 +10,83 @@ >> #include >> #include >> #include >> +#include >> +#include >> +#include >> +#include >> >> long arch_do_domctl(struct xen_domctl *domctl, struct domain *d, >> XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) >> { >> - return -ENOSYS; >> + long ret = 0; >> + bool_t copyback = 0; >> + >> + switch ( domctl->cmd ) >> + { >> + case XEN_DOMCTL_memory_mapping: >> + { >> + unsigned long gfn = domctl->u.memory_mapping.first_gfn; >> + unsigned long mfn = domctl->u.memory_mapping.first_mfn; >> + unsigned long nr_mfns = domctl->u.memory_mapping.nr_mfns; >> + int add = domctl->u.memory_mapping.add_mapping; >> + >> + /* removing i/o memory is not implemented yet */ >> + if (!add) { >> + ret = -ENOSYS; >> + break; >> + } >> + ret = -EINVAL; >> + if ( (mfn + nr_mfns - 1) < mfn || /* wrap? */ >> + /* x86 checks wrap based on paddr_bits which is not >> implemented on ARM? */ >> + /* ((mfn | (mfn + nr_mfns - 1)) >> (paddr_bits - >> PAGE_SHIFT)) || */ >> + (gfn + nr_mfns - 1) < gfn ) /* wrap? */ >> + break; >> + >> + ret = -EPERM; >> + if ( current->domain->domain_id != 0 ) >> + break; >> + >> + ret = xsm_iomem_mapping(XSM_HOOK, d, mfn, mfn + nr_mfns - 1, add); >> + if ( ret ) >> + break; >> + >> + if ( add ) >> + { >> + printk(XENLOG_G_INFO >> + "memory_map:add: dom%d gfn=%lx mfn=%lx nr=%lx\n", >> + d->domain_id, gfn, mfn, nr_mfns); >> + >> + ret = iomem_permit_access(d, mfn, mfn + nr_mfns - 1); >> + if ( !ret && paging_mode_translate(d) ) >> + { >> + ret = map_mmio_regions(d, gfn << PAGE_SHIFT, >> + (gfn + nr_mfns) << PAGE_SHIFT, >> + mfn << PAGE_SHIFT); >> + if ( ret ) >> + { >> + printk(XENLOG_G_WARNING >> + "memory_map:fail: dom%d gfn=%lx mfn=%lx nr=%lx\n", >> + d->domain_id, gfn, mfn, nr_mfns); >> + if ( iomem_deny_access(d, mfn, mfn + nr_mfns - 1) && >> + is_hardware_domain(current->domain) ) >> + printk(XENLOG_ERR >> + "memory_map: failed to deny dom%d access >> to [%lx,%lx]\n", >> + d->domain_id, mfn, mfn + nr_mfns - 1); >> + } >> + } >> + } >> + } >> + break; >> + >> + default: >> + ret = -ENOSYS; >> + break; >> + } >> + >> + if ( copyback && __copy_to_guest(u_domctl, domctl, 1) ) >> + ret = -EFAULT; >> + >> + return ret; >> } >> >> void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c) >> >> -- /* * Arianna Avanzini * avanzini.arianna@gmail.com * 73628@studenti.unimore.it */