From: Konrad Rzeszutek Wilk <konrad.wilk-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: Stefano Stabellini
<stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>,
Mukesh Rathor
<mukesh.rathor-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Cc: xen-devel-GuqFBffKawuULHF6PoxzQEEOCMrvLtNR@public.gmane.org,
linaro-dev-cunTk1MwBs8s++Sfvej+rw@public.gmane.org,
Ian.Campbell-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org,
arnd-r2nGTMty4D4@public.gmane.org,
catalin.marinas-5wv7dgnIgG8@public.gmane.org,
tim-LM2mM/qkH7s@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH 24/24] [HACK] xen/arm: implement xen_remap_domain_mfn_range
Date: Wed, 1 Aug 2012 10:56:10 -0400 [thread overview]
Message-ID: <20120801145610.GS7227@phenom.dumpdata.com> (raw)
In-Reply-To: <1343316846-25860-24-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
On Thu, Jul 26, 2012 at 04:34:06PM +0100, Stefano Stabellini wrote:
> From: Ian Campbell <Ian.Campbell-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org>
>
> Do not apply!
Mukesh, I believe this is similar to what you had in mind.
>
> This is a simple, hacky implementation of xen_remap_domain_mfn_range,
> using XENMAPSPACE_gmfn_foreign.
>
> It should use same interface as hybrid x86.
Yeah.. We should get this done irrespective of this ARM patchset as
it will certainly benefit the HVM domains.
So what is with the 0x9000 values?
>
> Signed-off-by: Ian Campbell <Ian.Campbell-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org>
> Signed-off-by: Stefano Stabellini <stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
> ---
> arch/arm/xen/enlighten.c | 79 +++++++++++++++++++++++++++++++++++++++-
> drivers/xen/privcmd.c | 16 +++++----
> drivers/xen/xenfs/super.c | 7 ++++
> include/xen/interface/memory.h | 10 ++++--
> 4 files changed, 101 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
> index 1476b0b..7092015 100644
> --- a/arch/arm/xen/enlighten.c
> +++ b/arch/arm/xen/enlighten.c
> @@ -16,6 +16,10 @@
> #include <linux/of.h>
> #include <linux/of_irq.h>
> #include <linux/of_address.h>
> +#include <linux/mm.h>
> +#include <linux/ioport.h>
> +
> +#include <asm/pgtable.h>
>
> struct start_info _xen_start_info;
> struct start_info *xen_start_info = &_xen_start_info;
> @@ -38,12 +42,85 @@ EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
>
> static __read_mostly int xen_events_irq = -1;
>
> +#define FOREIGN_MAP_BUFFER 0x90000000UL
> +#define FOREIGN_MAP_BUFFER_SIZE 0x10000000UL
> +struct resource foreign_map_resource = {
> + .start = FOREIGN_MAP_BUFFER,
> + .end = FOREIGN_MAP_BUFFER + FOREIGN_MAP_BUFFER_SIZE,
> + .name = "Xen foreign map buffer",
> + .flags = 0,
> +};
> +
> +static unsigned long foreign_map_buffer_pfn = FOREIGN_MAP_BUFFER >> PAGE_SHIFT;
> +
> +struct remap_data {
> + struct mm_struct *mm;
> + unsigned long mfn;
> + pgprot_t prot;
> +};
> +
> +static int remap_area_mfn_pte_fn(pte_t *ptep, pgtable_t token,
> + unsigned long addr, void *data)
> +{
> + struct remap_data *rmd = data;
> + pte_t pte = pfn_pte(rmd->mfn, rmd->prot);
> +
> + if (rmd->mfn < 0x90010)
> + pr_crit("%s: ptep %p addr %#lx => %#x / %#lx\n",
> + __func__, ptep, addr, pte_val(pte), rmd->mfn);
> +
> + set_pte_at(rmd->mm, addr, ptep, pte);
> +
> + rmd->mfn++;
> + return 0;
> +}
> +
> int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
> unsigned long addr,
> unsigned long mfn, int nr,
> pgprot_t prot, unsigned domid)
> {
> - return -ENOSYS;
> + int i, rc = 0;
> + struct remap_data rmd = {
> + .mm = vma->vm_mm,
> + .prot = prot,
> + };
> + struct xen_add_to_physmap xatp = {
> + .domid = DOMID_SELF,
> + .space = XENMAPSPACE_gmfn_foreign,
> +
> + .foreign_domid = domid,
> + };
> +
> + if (foreign_map_buffer_pfn + nr > ((FOREIGN_MAP_BUFFER +
> + FOREIGN_MAP_BUFFER_SIZE)>>PAGE_SHIFT)) {
> + pr_crit("RAM out of foreign map buffers...\n");
> + return -EBUSY;
> + }
> +
> + for (i = 0; i < nr; i++) {
> + xatp.idx = mfn + i;
> + xatp.gpfn = foreign_map_buffer_pfn + i;
> + rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp);
> + if (rc != 0) {
> + pr_crit("foreign map add_to_physmap failed, err=%d\n", rc);
> + goto out;
> + }
> + }
> +
> + rmd.mfn = foreign_map_buffer_pfn;
> + rc = apply_to_page_range(vma->vm_mm,
> + addr,
> + (unsigned long)nr << PAGE_SHIFT,
> + remap_area_mfn_pte_fn, &rmd);
> + if (rc != 0) {
> + pr_crit("apply_to_page_range failed rc=%d\n", rc);
> + goto out;
> + }
> +
> + foreign_map_buffer_pfn += nr;
> +out:
> + return rc;
> }
> EXPORT_SYMBOL_GPL(xen_remap_domain_mfn_range);
>
> diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
> index 85226cb..3e15c22 100644
> --- a/drivers/xen/privcmd.c
> +++ b/drivers/xen/privcmd.c
> @@ -20,6 +20,8 @@
> #include <linux/pagemap.h>
> #include <linux/seq_file.h>
> #include <linux/miscdevice.h>
> +#include <linux/resource.h>
> +#include <linux/ioport.h>
>
> #include <asm/pgalloc.h>
> #include <asm/pgtable.h>
> @@ -196,9 +198,6 @@ static long privcmd_ioctl_mmap(void __user *udata)
> LIST_HEAD(pagelist);
> struct mmap_mfn_state state;
>
> - if (!xen_initial_domain())
> - return -EPERM;
> -
> if (copy_from_user(&mmapcmd, udata, sizeof(mmapcmd)))
> return -EFAULT;
>
> @@ -286,9 +285,6 @@ static long privcmd_ioctl_mmap_batch(void __user *udata)
> LIST_HEAD(pagelist);
> struct mmap_batch_state state;
>
> - if (!xen_initial_domain())
> - return -EPERM;
> -
> if (copy_from_user(&m, udata, sizeof(m)))
> return -EFAULT;
>
> @@ -365,6 +361,11 @@ static long privcmd_ioctl(struct file *file,
> return ret;
> }
>
> +static void privcmd_close(struct vm_area_struct *vma)
> +{
> + /* TODO: unmap VMA */
> +}
> +
> static int privcmd_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
> {
> printk(KERN_DEBUG "privcmd_fault: vma=%p %lx-%lx, pgoff=%lx, uv=%p\n",
> @@ -375,7 +376,8 @@ static int privcmd_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
> }
>
> static struct vm_operations_struct privcmd_vm_ops = {
> - .fault = privcmd_fault
> + .fault = privcmd_fault,
> + .close = privcmd_close,
> };
>
> static int privcmd_mmap(struct file *file, struct vm_area_struct *vma)
> diff --git a/drivers/xen/xenfs/super.c b/drivers/xen/xenfs/super.c
> index a84b53c..edbe22f 100644
> --- a/drivers/xen/xenfs/super.c
> +++ b/drivers/xen/xenfs/super.c
> @@ -12,6 +12,7 @@
> #include <linux/module.h>
> #include <linux/fs.h>
> #include <linux/magic.h>
> +#include <linux/ioport.h>
>
> #include <xen/xen.h>
>
> @@ -80,6 +81,8 @@ static const struct file_operations capabilities_file_ops = {
> .llseek = default_llseek,
> };
>
> +extern struct resource foreign_map_resource;
> +
> static int xenfs_fill_super(struct super_block *sb, void *data, int silent)
> {
> static struct tree_descr xenfs_files[] = {
> @@ -100,6 +103,10 @@ static int xenfs_fill_super(struct super_block *sb, void *data, int silent)
> &xsd_kva_file_ops, NULL, S_IRUSR|S_IWUSR);
> xenfs_create_file(sb, sb->s_root, "xsd_port",
> &xsd_port_file_ops, NULL, S_IRUSR|S_IWUSR);
> + rc = request_resource(&iomem_resource, &foreign_map_resource);
> + if (rc < 0)
> + pr_crit("failed to register foreign map resource\n");
> + rc = 0; /* ignore */
> }
>
> return rc;
> diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
> index d8e33a9..ec68945 100644
> --- a/include/xen/interface/memory.h
> +++ b/include/xen/interface/memory.h
> @@ -167,9 +167,13 @@ struct xen_add_to_physmap {
> uint16_t size;
>
> /* Source mapping space. */
> -#define XENMAPSPACE_shared_info 0 /* shared info page */
> -#define XENMAPSPACE_grant_table 1 /* grant table page */
> - unsigned int space;
> +#define XENMAPSPACE_shared_info 0 /* shared info page */
> +#define XENMAPSPACE_grant_table 1 /* grant table page */
> +#define XENMAPSPACE_gmfn 2 /* GMFN */
> +#define XENMAPSPACE_gmfn_range 3 /* GMFN range */
> +#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another guest */
> + uint16_t space;
> + domid_t foreign_domid; /* IFF gmfn_foreign */
>
> /* Index into source mapping space. */
> unsigned long idx;
> --
> 1.7.2.5
prev parent reply other threads:[~2012-08-01 14:56 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-26 15:33 [PATCH 00/24] Introduce Xen support on ARM Stefano Stabellini
2012-07-26 15:33 ` [PATCH 01/24] arm: initial Xen support Stefano Stabellini
2012-07-26 16:30 ` [Xen-devel] " Konrad Rzeszutek Wilk
2012-07-27 11:56 ` Stefano Stabellini
2012-08-01 10:42 ` Konrad Rzeszutek Wilk
[not found] ` <20120801104237.GB7227-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-08-06 10:55 ` Stefano Stabellini
2012-08-01 18:27 ` Rob Herring
[not found] ` <50197527.3070007-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-08-02 7:35 ` Ian Campbell
[not found] ` <1343892951.7571.50.camel-ztPmHsLffjjnO4AKDKe2m+kiAK3p4hvP@public.gmane.org>
2012-08-02 14:13 ` [Xen-devel] " Konrad Rzeszutek Wilk
2012-08-06 10:46 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 04/24] xen/arm: sync_bitops Stefano Stabellini
2012-07-26 16:37 ` [Xen-devel] " Konrad Rzeszutek Wilk
2012-07-27 9:28 ` Ian Campbell
[not found] ` <1343381305.6812.116.camel-o4Be2W7LfRlXesXXhkcM7miJhflN2719@public.gmane.org>
2012-08-01 14:35 ` Konrad Rzeszutek Wilk
[not found] ` <20120801143551.GI7227-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-08-01 16:07 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 07/24] xen/arm: Xen detection and shared_info page mapping Stefano Stabellini
2012-07-27 9:36 ` Ian Campbell
2012-07-27 14:48 ` Stefano Stabellini
2012-07-27 14:51 ` Ian Campbell
2012-08-01 14:19 ` Konrad Rzeszutek Wilk
2012-08-01 15:45 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 15/24] xen/arm: receive Xen events on ARM Stefano Stabellini
[not found] ` <1343316846-25860-15-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
2012-08-01 14:44 ` Konrad Rzeszutek Wilk
2012-08-06 10:31 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 16/24] xen/arm: implement alloc/free_xenballooned_pages with alloc_pages/kfree Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1207251741470.26163-7Z66fg9igcxYtxbxJUhB2Dgeux46jI+i@public.gmane.org>
2012-07-26 15:33 ` [PATCH 02/24] xen/arm: hypercalls Stefano Stabellini
2012-07-26 16:33 ` [Xen-devel] " Konrad Rzeszutek Wilk
2012-07-27 9:17 ` Ian Campbell
[not found] ` <1343380659.6812.106.camel-o4Be2W7LfRlXesXXhkcM7miJhflN2719@public.gmane.org>
2012-07-27 13:02 ` Stefano Stabellini
2012-07-27 13:18 ` Ian Campbell
2012-07-27 13:41 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1207271350370.26163-7Z66fg9igcxYtxbxJUhB2Dgeux46jI+i@public.gmane.org>
2012-07-27 14:21 ` Russell King - ARM Linux
2012-07-27 14:36 ` Stefano Stabellini
2012-07-27 14:39 ` Ian Campbell
2012-07-27 14:59 ` Russell King - ARM Linux
2012-07-26 16:56 ` David Vrabel
[not found] ` <501176AF.3000607-5LkwijKnu/2sTnJN9+BGXg@public.gmane.org>
2012-07-26 17:19 ` Stefano Stabellini
2012-07-27 9:00 ` Ian Campbell
2012-07-26 19:19 ` Christopher Covington
2012-07-27 9:19 ` Ian Campbell
2012-07-27 12:56 ` Christopher Covington
2012-07-27 13:57 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 03/24] xen/arm: page.h definitions Stefano Stabellini
2012-07-26 16:36 ` [Xen-devel] " Konrad Rzeszutek Wilk
[not found] ` <20120726163655.GD9222-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-07-27 13:47 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 05/24] xen/arm: empty implementation of grant_table arch specific functions Stefano Stabellini
2012-08-01 14:16 ` Konrad Rzeszutek Wilk
[not found] ` <20120801141624.GD7227-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-08-01 15:46 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 06/24] xen: missing includes Stefano Stabellini
2012-07-27 6:57 ` [Xen-devel] " Jan Beulich
2012-07-27 16:47 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 08/24] xen/arm: Introduce xen_pfn_t for pfn and mfn types Stefano Stabellini
[not found] ` <1343316846-25860-8-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
2012-08-01 14:22 ` Konrad Rzeszutek Wilk
2012-08-01 15:50 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 09/24] xen/arm: compile and run xenbus Stefano Stabellini
[not found] ` <1343316846-25860-9-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
2012-08-01 14:28 ` Konrad Rzeszutek Wilk
2012-08-06 11:17 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 10/24] xen: do not compile manage, balloon, pci, acpi and cpu_hotplug on ARM Stefano Stabellini
2012-07-27 7:01 ` [Xen-devel] " Jan Beulich
2012-07-27 16:51 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 11/24] xen/arm: introduce CONFIG_XEN " Stefano Stabellini
2012-08-01 14:34 ` [Xen-devel] " Konrad Rzeszutek Wilk
2012-07-26 15:33 ` [PATCH 12/24] xen/arm: Introduce xen_guest_init Stefano Stabellini
2012-07-27 9:42 ` Ian Campbell
2012-07-27 15:54 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1207271613200.26163-7Z66fg9igcxYtxbxJUhB2Dgeux46jI+i@public.gmane.org>
2012-07-27 16:11 ` Ian Campbell
2012-08-01 14:38 ` Konrad Rzeszutek Wilk
2012-07-26 15:33 ` [PATCH 13/24] xen/arm: get privilege status Stefano Stabellini
2012-07-27 9:44 ` Ian Campbell
2012-07-27 14:25 ` Stefano Stabellini
2012-07-27 14:33 ` Ian Campbell
[not found] ` <1343399630.25096.4.camel-o4Be2W7LfRlXesXXhkcM7miJhflN2719@public.gmane.org>
2012-08-01 14:39 ` Konrad Rzeszutek Wilk
2012-08-01 16:21 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 14/24] xen/arm: initialize grant_table on ARM Stefano Stabellini
2012-08-01 14:40 ` Konrad Rzeszutek Wilk
[not found] ` <20120801144059.GL7227-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-08-01 17:08 ` Stefano Stabellini
2012-07-26 15:33 ` [PATCH 17/24] xen: allow privcmd for HVM guests Stefano Stabellini
2012-07-27 7:04 ` [Xen-devel] " Jan Beulich
[not found] ` <5012598C0200007800090DB9-ce6RLXgGx+vWGUEhTRrCg1aTQe2KTcn/@public.gmane.org>
2012-07-27 14:10 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1207271502480.26163-7Z66fg9igcxYtxbxJUhB2Dgeux46jI+i@public.gmane.org>
2012-08-01 14:47 ` Konrad Rzeszutek Wilk
2012-07-26 15:34 ` [PATCH 18/24] xen/arm: compile blkfront and blkback Stefano Stabellini
2012-07-27 9:48 ` Ian Campbell
[not found] ` <1343382495.6812.127.camel-o4Be2W7LfRlXesXXhkcM7miJhflN2719@public.gmane.org>
2012-07-27 16:25 ` Stefano Stabellini
[not found] ` <1343316846-25860-18-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
2012-08-01 14:48 ` Konrad Rzeszutek Wilk
2012-08-01 16:19 ` Stefano Stabellini
2012-07-26 15:34 ` [PATCH 19/24] xen/arm: compile netback Stefano Stabellini
2012-07-26 15:34 ` [PATCH 20/24] xen: update xen_add_to_physmap interface Stefano Stabellini
2012-08-01 14:52 ` Konrad Rzeszutek Wilk
2012-08-01 16:18 ` Stefano Stabellini
2012-08-01 18:19 ` Mukesh Rathor
2012-07-26 15:34 ` [PATCH 21/24] arm/v2m: initialize arch_timers even if v2m_timer is not present Stefano Stabellini
[not found] ` <1343316846-25860-21-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
2012-08-01 14:52 ` Konrad Rzeszutek Wilk
[not found] ` <20120801145257.GQ7227-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-08-01 16:06 ` Stefano Stabellini
2012-07-26 15:34 ` [PATCH 22/24] ARM: enable earlyprintk=xen Stefano Stabellini
2012-07-26 15:34 ` [PATCH 23/24] hvc_xen: allow dom0_write_console for HVM guests Stefano Stabellini
2012-08-01 14:54 ` Konrad Rzeszutek Wilk
[not found] ` <20120801145413.GR7227-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2012-08-01 16:04 ` Stefano Stabellini
2012-07-26 15:34 ` [PATCH 24/24] [HACK] xen/arm: implement xen_remap_domain_mfn_range Stefano Stabellini
[not found] ` <1343316846-25860-24-git-send-email-stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>
2012-08-01 14:56 ` Konrad Rzeszutek Wilk [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120801145610.GS7227@phenom.dumpdata.com \
--to=konrad.wilk-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
--cc=Ian.Campbell-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
--cc=linaro-dev-cunTk1MwBs8s++Sfvej+rw@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mukesh.rathor-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
--cc=stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org \
--cc=tim-LM2mM/qkH7s@public.gmane.org \
--cc=xen-devel-GuqFBffKawuULHF6PoxzQEEOCMrvLtNR@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).