From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Mukesh Rathor <mukesh.rathor@oracle.com>
Cc: Xen-devel@lists.xensource.com, tim@xen.org, keir.xen@gmail.com,
JBeulich@suse.com
Subject: Re: [V1 PATCH 08/11] PVH dom0: Introduce p2m_map_foreign
Date: Tue, 12 Nov 2013 11:16:44 -0500 [thread overview]
Message-ID: <20131112161644.GD11354@phenom.dumpdata.com> (raw)
In-Reply-To: <1383960215-22444-9-git-send-email-mukesh.rathor@oracle.com>
On Fri, Nov 08, 2013 at 05:23:33PM -0800, Mukesh Rathor wrote:
> In this patch, a new type p2m_map_foreign is introduced for pages
> that toolstack on PVH dom0 maps from foreign domains that its creating.
Is it only for creating? I thought it was used during run-time as well?
Say you need to use xenctx or anything else to map a foreign domain?
>
> Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com>
> ---
> xen/arch/x86/mm/p2m-ept.c | 1 +
> xen/arch/x86/mm/p2m-pt.c | 1 +
> xen/arch/x86/mm/p2m.c | 28 ++++++++++++++++++++--------
> xen/include/asm-x86/p2m.h | 4 ++++
> 4 files changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c
> index 595c6e7..67c200c 100644
> --- a/xen/arch/x86/mm/p2m-ept.c
> +++ b/xen/arch/x86/mm/p2m-ept.c
> @@ -75,6 +75,7 @@ static void ept_p2m_type_to_flags(ept_entry_t *entry, p2m_type_t type, p2m_acces
> entry->w = 0;
> break;
> case p2m_grant_map_rw:
> + case p2m_map_foreign:
> entry->r = entry->w = 1;
> entry->x = 0;
> break;
> diff --git a/xen/arch/x86/mm/p2m-pt.c b/xen/arch/x86/mm/p2m-pt.c
> index a1d5650..09b60ce 100644
> --- a/xen/arch/x86/mm/p2m-pt.c
> +++ b/xen/arch/x86/mm/p2m-pt.c
> @@ -89,6 +89,7 @@ static unsigned long p2m_type_to_flags(p2m_type_t t, mfn_t mfn)
> case p2m_ram_rw:
> return flags | P2M_BASE_FLAGS | _PAGE_RW;
> case p2m_grant_map_rw:
> + case p2m_map_foreign:
> return flags | P2M_BASE_FLAGS | _PAGE_RW | _PAGE_NX_BIT;
> case p2m_mmio_direct:
> if ( !rangeset_contains_singleton(mmio_ro_ranges, mfn_x(mfn)) )
> diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
> index 8f380ed..b9755e4 100644
> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -525,7 +525,7 @@ p2m_remove_page(struct p2m_domain *p2m, unsigned long gfn, unsigned long mfn,
> for ( i = 0; i < (1UL << page_order); i++ )
> {
> mfn_return = p2m->get_entry(p2m, gfn + i, &t, &a, 0, NULL);
> - if ( !p2m_is_grant(t) && !p2m_is_shared(t) )
> + if ( !p2m_is_grant(t) && !p2m_is_shared(t) && !p2m_is_foreign(t) )
> set_gpfn_from_mfn(mfn+i, INVALID_M2P_ENTRY);
> ASSERT( !p2m_is_valid(t) || mfn + i == mfn_x(mfn_return) );
> }
> @@ -756,10 +756,9 @@ void p2m_change_type_range(struct domain *d,
> p2m_unlock(p2m);
> }
>
> -
> -
> -int
> -set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn)
> +static int
> +set_typed_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
> + p2m_type_t gfn_p2mt)
> {
> int rc = 0;
> p2m_access_t a;
> @@ -784,16 +783,29 @@ set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn)
> set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY);
> }
>
> - P2M_DEBUG("set mmio %lx %lx\n", gfn, mfn_x(mfn));
> - rc = set_p2m_entry(p2m, gfn, mfn, PAGE_ORDER_4K, p2m_mmio_direct, p2m->default_access);
> + P2M_DEBUG("set %d %lx %lx\n", gfn_p2mt, gfn, mfn_x(mfn));
> + rc = set_p2m_entry(p2m, gfn, mfn, PAGE_ORDER_4K, gfn_p2mt,
> + p2m->default_access);
> gfn_unlock(p2m, gfn, 0);
> if ( 0 == rc )
> gdprintk(XENLOG_ERR,
> - "set_mmio_p2m_entry: set_p2m_entry failed! mfn=%08lx\n",
> + "%s: set_p2m_entry failed! mfn=%08lx\n", __func__,
> mfn_x(get_gfn_query_unlocked(p2m->domain, gfn, &ot)));
> return rc;
> }
>
> +/* Returns: True for success. 0 for failure. */
Um, 'true' and '0' ? Shouldn't it say 'True for success, false for failure?'
Or '1 for success, 0 for failure?'
> +int set_foreign_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn)
> +{
> + return set_typed_p2m_entry(d, gfn, mfn, p2m_map_foreign);
> +}
> +
> +int
> +set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn)
> +{
> + return set_typed_p2m_entry(d, gfn, mfn, p2m_mmio_direct);
> +}
> +
> int
> clear_mmio_p2m_entry(struct domain *d, unsigned long gfn)
> {
> diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h
> index 43583b2..6fc71a1 100644
> --- a/xen/include/asm-x86/p2m.h
> +++ b/xen/include/asm-x86/p2m.h
> @@ -70,6 +70,7 @@ typedef enum {
> p2m_ram_paging_in = 11, /* Memory that is being paged in */
> p2m_ram_shared = 12, /* Shared or sharable memory */
> p2m_ram_broken = 13, /* Broken page, access cause domain crash */
> + p2m_map_foreign = 14, /* ram pages from foreign domain */
> } p2m_type_t;
>
> /*
> @@ -180,6 +181,7 @@ typedef unsigned int p2m_query_t;
> #define p2m_is_sharable(_t) (p2m_to_mask(_t) & P2M_SHARABLE_TYPES)
> #define p2m_is_shared(_t) (p2m_to_mask(_t) & P2M_SHARED_TYPES)
> #define p2m_is_broken(_t) (p2m_to_mask(_t) & P2M_BROKEN_TYPES)
> +#define p2m_is_foreign(_t) (p2m_to_mask(_t) & p2m_to_mask(p2m_map_foreign))
>
> /* Per-p2m-table state */
> struct p2m_domain {
> @@ -510,6 +512,8 @@ p2m_type_t p2m_change_type(struct domain *d, unsigned long gfn,
> int set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn);
> int clear_mmio_p2m_entry(struct domain *d, unsigned long gfn);
>
> +/* Set foreign mfn in the current guest's p2m table. */
> +int set_foreign_p2m_entry(struct domain *domp, unsigned long gfn, mfn_t mfn);
>
> /*
> * Populate-on-demand
> --
> 1.7.2.3
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2013-11-12 16:16 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-09 1:23 [V1 PATCH 0/11]: PVH dom0 Mukesh Rathor
2013-11-09 1:23 ` [V1 PATCH 01/11] PVH dom0: set eflags resvd bit #1 Mukesh Rathor
2013-11-12 16:19 ` Konrad Rzeszutek Wilk
2013-11-12 16:24 ` Jan Beulich
2013-11-12 16:31 ` Konrad Rzeszutek Wilk
2013-11-09 1:23 ` [V1 PATCH 02/11] PVH dom0: Allow physdevops for PVH dom0 Mukesh Rathor
2013-11-09 1:23 ` [V1 PATCH 03/11] PVH dom0: iommu related changes Mukesh Rathor
2013-11-12 16:08 ` Jan Beulich
2013-11-15 1:43 ` Mukesh Rathor
2013-11-15 7:36 ` Jan Beulich
2013-11-09 1:23 ` [V1 PATCH 04/11] PVH dom0: create update_memory_mapping() function Mukesh Rathor
2013-11-12 16:12 ` Jan Beulich
2013-11-15 1:59 ` Mukesh Rathor
2013-11-15 7:38 ` Jan Beulich
2013-11-09 1:23 ` [V1 PATCH 05/11] PVH dom0: move some pv specific code to static functions Mukesh Rathor
2013-11-09 1:23 ` [V1 PATCH 06/11] PVH dom0: construct_dom0 changes Mukesh Rathor
2013-11-12 16:13 ` Konrad Rzeszutek Wilk
2013-11-15 2:21 ` Mukesh Rathor
2013-11-15 7:59 ` Jan Beulich
2013-11-12 16:35 ` Jan Beulich
2013-11-15 2:34 ` Mukesh Rathor
2013-11-15 7:40 ` Jan Beulich
2013-11-09 1:23 ` [V1 PATCH 07/11] PVH dom0: implement XENMEM_add_to_physmap_range for x86 Mukesh Rathor
2013-11-12 16:46 ` Jan Beulich
2013-11-09 1:23 ` [V1 PATCH 08/11] PVH dom0: Introduce p2m_map_foreign Mukesh Rathor
2013-11-12 16:16 ` Konrad Rzeszutek Wilk [this message]
2013-11-09 1:23 ` [V1 PATCH 09/11] PVH dom0: Add and remove foreign pages Mukesh Rathor
2013-11-12 16:58 ` Jan Beulich
2013-11-09 1:23 ` [V1 PATCH 10/11] PVH dom0: add opt_dom0pvh to setup.c Mukesh Rathor
2013-11-12 16:18 ` Konrad Rzeszutek Wilk
2013-11-14 11:38 ` [V1 PATCH 0/11]: PVH dom0 Roger Pau Monné
2013-11-14 22:42 ` Mukesh Rathor
2013-11-15 7:55 ` Jan Beulich
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=20131112161644.GD11354@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=JBeulich@suse.com \
--cc=Xen-devel@lists.xensource.com \
--cc=keir.xen@gmail.com \
--cc=mukesh.rathor@oracle.com \
--cc=tim@xen.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.