From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org,
boris.ostrovsky@oracle.com, david.vrabel@citrix.com,
mukesh.rathor@oracle.com
Subject: Re: [PATCH v12 15/18] xen/pvh: Piggyback on PVHVM for grant driver (v2)
Date: Fri, 3 Jan 2014 13:20:22 -0500 [thread overview]
Message-ID: <20140103182022.GH27019@phenom.dumpdata.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1401031722170.8667@kaball.uk.xensource.com>
On Fri, Jan 03, 2014 at 05:26:39PM +0000, Stefano Stabellini wrote:
> On Tue, 31 Dec 2013, Konrad Rzeszutek Wilk wrote:
> > In PVH the shared grant frame is the PFN and not MFN,
> > hence its mapped via the same code path as HVM.
> >
> > The allocation of the grant frame is done differently - we
> > do not use the early platform-pci driver and have an
> > ioremap area - instead we use balloon memory and stitch
> > all of the non-contingous pages in a virtualized area.
> >
> > That means when we call the hypervisor to replace the GMFN
> > with a XENMAPSPACE_grant_table type, we need to lookup the
> > old PFN for every iteration instead of assuming a flat
> > contingous PFN allocation.
> >
> > Lastly, we only use v1 for grants. This is because PVHVM
> > is not able to use v2 due to no XENMEM_add_to_physmap
> > calls on the error status page (see commit
> > 69e8f430e243d657c2053f097efebc2e2cd559f0
> > xen/granttable: Disable grant v2 for HVM domains.)
> >
> > Until that is implemented this workaround has to
> > be in place.
> >
> > Also per suggestions by Stefano utilize the PVHVM paths
> > as they share common functionality.
> >
> > v2 of this patch moves most of the PVH code out in the
> > arch/x86/xen/grant-table driver and touches only minimally
> > the generic driver.
> >
> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > ---
> > arch/x86/xen/grant-table.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++
> > drivers/xen/gntdev.c | 2 +-
> > drivers/xen/grant-table.c | 13 ++++++----
> > 3 files changed, 73 insertions(+), 6 deletions(-)
> >
> > diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c
> > index 3a5f55d..040e064 100644
> > --- a/arch/x86/xen/grant-table.c
> > +++ b/arch/x86/xen/grant-table.c
> > @@ -125,3 +125,67 @@ void arch_gnttab_unmap(void *shared, unsigned long nr_gframes)
> > apply_to_page_range(&init_mm, (unsigned long)shared,
> > PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL);
> > }
> > +#ifdef CONFIG_XEN_PVHVM
> > +#include <xen/balloon.h>
> > +#include <linux/slab.h>
> > +static int __init xlated_setup_gnttab_pages(void)
> > +{
> > + struct page **pages;
> > + xen_pfn_t *pfns;
> > + int rc, i;
> > + unsigned long nr_grant_frames = gnttab_max_grant_frames();
> > +
> > + BUG_ON(nr_grant_frames == 0);
> > + pages = kcalloc(nr_grant_frames, sizeof(pages[0]), GFP_KERNEL);
> > + if (!pages)
> > + return -ENOMEM;
> > +
> > + pfns = kcalloc(nr_grant_frames, sizeof(pfns[0]), GFP_KERNEL);
> > + if (!pfns) {
> > + kfree(pages);
> > + return -ENOMEM;
> > + }
> > + rc = alloc_xenballooned_pages(nr_grant_frames, pages, 0 /* lowmem */);
> > + if (rc) {
> > + pr_warn("%s Couldn't balloon alloc %ld pfns rc:%d\n", __func__,
> > + nr_grant_frames, rc);
> > + kfree(pages);
> > + kfree(pfns);
> > + return rc;
> > + }
> > + for (i = 0; i < nr_grant_frames; i++)
> > + pfns[i] = page_to_pfn(pages[i]);
> > +
> > + rc = arch_gnttab_map_shared(pfns, nr_grant_frames, nr_grant_frames,
> > + (void *)&xen_auto_xlat_grant_frames.vaddr);
> > +
> > + kfree(pages);
> > + if (rc) {
> > + pr_warn("%s Couldn't map %ld pfns rc:%d\n", __func__,
> > + nr_grant_frames, rc);
> > + free_xenballooned_pages(nr_grant_frames, pages);
> > + kfree(pfns);
> > + return rc;
> > + }
> > +
> > + xen_auto_xlat_grant_frames.pfn = pfns;
> > + xen_auto_xlat_grant_frames.count = nr_grant_frames;
> > +
> > + return 0;
> > +}
>
> Unfortunately this way pfns is leaked. Can we safely free it or is it
> reused at resume time?
You mean you want PVH to suspend and resume work out of the box?!
HA! I hadn't even tested that yet.
How about when we get to that point we will figure out the way to
do the right thing.
What actually happens during suspend/resume in a HVM guests? We just
need to call 'gnttab_setup' which calls 'gnttab_map' to do the
XENMAPSPACE_grant_table on the PFNs right? That should be OK
and the xen_auto_xlat_grant_frames.pfn is used during that.
The suspend path would use unmap_frames -> arch_gnttab_unmap which
just clears the PTEs. There is no freeing off the memory
which is used as backing store.
next prev parent reply other threads:[~2014-01-03 18:21 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-01 4:35 [PATCH v12] Linux Xen PVH support Konrad Rzeszutek Wilk
2014-01-01 4:35 ` [PATCH v12 01/18] xen/p2m: Check for auto-xlat when doing mfn_to_local_pfn Konrad Rzeszutek Wilk
2014-01-01 4:35 ` [PATCH v12 02/18] xen/pvh/x86: Define what an PVH guest is (v2) Konrad Rzeszutek Wilk
2014-01-02 11:13 ` David Vrabel
2014-01-03 15:33 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 03/18] xen/pvh: Early bootup changes in PV code (v2) Konrad Rzeszutek Wilk
2014-01-02 15:32 ` David Vrabel
2014-01-02 18:32 ` Konrad Rzeszutek Wilk
2014-01-03 1:34 ` Mukesh Rathor
2014-01-03 11:29 ` David Vrabel
2014-01-03 15:37 ` Stefano Stabellini
2014-01-03 17:35 ` Konrad Rzeszutek Wilk
2014-01-04 1:13 ` Mukesh Rathor
2014-01-03 11:25 ` David Vrabel
2014-01-01 4:35 ` [PATCH v12 04/18] xen/pvh: Don't setup P2M tree Konrad Rzeszutek Wilk
2014-01-02 11:17 ` David Vrabel
2014-01-03 15:41 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 05/18] xen/mmu/p2m: Refactor the xen_pagetable_init code Konrad Rzeszutek Wilk
2014-01-02 11:21 ` David Vrabel
2014-01-03 15:47 ` Stefano Stabellini
2014-01-03 16:02 ` Konrad Rzeszutek Wilk
2014-01-03 16:23 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 06/18] xen/pvh: MMU changes for PVH (v2) Konrad Rzeszutek Wilk
2014-01-02 11:24 ` David Vrabel
2014-01-03 1:36 ` Mukesh Rathor
2014-01-03 10:14 ` David Vrabel
2014-01-03 15:50 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 07/18] xen/pvh: Setup up shared_info Konrad Rzeszutek Wilk
2014-01-02 11:27 ` David Vrabel
2014-01-02 18:23 ` Konrad Rzeszutek Wilk
2014-01-03 14:39 ` Konrad Rzeszutek Wilk
2014-01-03 15:18 ` David Vrabel
2014-01-01 4:35 ` [PATCH v12 08/18] xen/pvh: Load GDT/GS in early PV bootup code for BSP Konrad Rzeszutek Wilk
2014-01-02 11:31 ` David Vrabel
2014-01-02 18:24 ` Konrad Rzeszutek Wilk
2014-01-03 11:27 ` David Vrabel
2014-01-01 4:35 ` [PATCH v12 09/18] xen/pvh: Secondary VCPU bringup (non-bootup CPUs) Konrad Rzeszutek Wilk
2014-01-02 16:07 ` David Vrabel
2014-01-01 4:35 ` [PATCH v12 10/18] xen/pvh: Update E820 to work with PVH (v2) Konrad Rzeszutek Wilk
2014-01-02 16:14 ` David Vrabel
2014-01-02 18:41 ` Konrad Rzeszutek Wilk
2014-01-04 1:23 ` Mukesh Rathor
2014-01-04 2:25 ` Konrad Rzeszutek Wilk
2014-01-03 16:30 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 11/18] xen/pvh: Piggyback on PVHVM for event channels (v2) Konrad Rzeszutek Wilk
2014-01-02 15:43 ` David Vrabel
2014-01-03 16:34 ` Stefano Stabellini
2014-01-03 18:10 ` Konrad Rzeszutek Wilk
2014-01-01 4:35 ` [PATCH v12 12/18] xen/grants: Remove gnttab_max_grant_frames dependency on gnttab_init Konrad Rzeszutek Wilk
2014-01-02 11:38 ` David Vrabel
2014-01-03 16:40 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 13/18] xen/grant-table: Refactor gnttab_init Konrad Rzeszutek Wilk
2014-01-02 11:39 ` David Vrabel
2014-01-03 16:43 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 14/18] xen/grant: Implement an grant frame array struct Konrad Rzeszutek Wilk
2014-01-02 16:27 ` David Vrabel
2014-01-02 18:47 ` Konrad Rzeszutek Wilk
2014-01-03 12:11 ` [Xen-devel] " David Vrabel
2014-01-03 15:09 ` Konrad Rzeszutek Wilk
2014-01-03 16:53 ` Stefano Stabellini
2014-01-03 19:18 ` [Xen-devel] " Konrad Rzeszutek Wilk
2014-01-01 4:35 ` [PATCH v12 15/18] xen/pvh: Piggyback on PVHVM for grant driver (v2) Konrad Rzeszutek Wilk
2014-01-02 16:32 ` David Vrabel
2014-01-02 18:50 ` Konrad Rzeszutek Wilk
2014-01-03 11:54 ` David Vrabel
2014-01-03 14:44 ` Konrad Rzeszutek Wilk
2014-01-03 15:41 ` David Vrabel
2014-01-03 15:48 ` [Xen-devel] " Konrad Rzeszutek Wilk
2014-01-03 17:20 ` Stefano Stabellini
2014-01-03 18:14 ` Konrad Rzeszutek Wilk
2014-01-03 18:29 ` Stefano Stabellini
2014-01-03 18:39 ` Konrad Rzeszutek Wilk
2014-01-03 19:02 ` Stefano Stabellini
2014-01-03 17:26 ` Stefano Stabellini
2014-01-03 18:20 ` Konrad Rzeszutek Wilk [this message]
2014-01-01 4:35 ` [PATCH v12 16/18] xen/pvh: Piggyback on PVHVM XenBus Konrad Rzeszutek Wilk
2014-01-02 11:43 ` David Vrabel
2014-01-03 17:22 ` Stefano Stabellini
2014-01-01 4:35 ` [PATCH v12 17/18] xen/pvh/arm/arm64: Disable PV code that does not work with PVH (v2) Konrad Rzeszutek Wilk
2014-01-02 11:44 ` David Vrabel
2014-01-03 16:22 ` Stefano Stabellini
2014-01-03 17:59 ` Konrad Rzeszutek Wilk
2014-01-01 4:35 ` [PATCH v12 18/18] xen/pvh: Support ParaVirtualized Hardware extensions (v2) Konrad Rzeszutek Wilk
2014-01-02 11:48 ` David Vrabel
2014-01-02 18:27 ` Konrad Rzeszutek Wilk
2014-01-02 16:50 ` [PATCH v12] Linux Xen PVH support David Vrabel
2014-01-02 19:02 ` Konrad Rzeszutek Wilk
2014-01-03 13:37 ` David Vrabel
2014-01-02 18:39 ` H. Peter Anvin
2014-01-02 19:12 ` Konrad Rzeszutek Wilk
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=20140103182022.GH27019@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=boris.ostrovsky@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mukesh.rathor@oracle.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xenproject.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
Powered by JetHome