All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  reply	other threads:[~2014-01-03 18:21 UTC|newest]

Thread overview: 169+ 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-01  4:35 ` Konrad Rzeszutek Wilk
2014-01-02 11:13   ` David Vrabel
2014-01-03 15:33     ` Stefano Stabellini
2014-01-03 15:33     ` Stefano Stabellini
2014-01-02 11:13   ` David Vrabel
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  1:34       ` Mukesh Rathor
2014-01-03 11:29         ` David Vrabel
2014-01-03 11:29         ` David Vrabel
2014-01-03 15:37           ` Stefano Stabellini
2014-01-03 15:37           ` Stefano Stabellini
2014-01-03 17:35         ` Konrad Rzeszutek Wilk
2014-01-04  1:13           ` Mukesh Rathor
2014-01-04  1:13           ` Mukesh Rathor
2014-01-03 17:35         ` Konrad Rzeszutek Wilk
2014-01-03 11:25       ` David Vrabel
2014-01-03 11:25       ` David Vrabel
2014-01-02 18:32     ` Konrad Rzeszutek Wilk
2014-01-02 15:32   ` David Vrabel
2014-01-01  4:35 ` [PATCH v12 04/18] xen/pvh: Don't setup P2M tree Konrad Rzeszutek Wilk
2014-01-01  4:35 ` Konrad Rzeszutek Wilk
2014-01-02 11:17   ` David Vrabel
2014-01-02 11:17   ` David Vrabel
2014-01-03 15:41   ` Stefano Stabellini
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-02 11:21   ` David Vrabel
2014-01-03 15:47   ` Stefano Stabellini
2014-01-03 16:02     ` Konrad Rzeszutek Wilk
2014-01-03 16:02     ` Konrad Rzeszutek Wilk
2014-01-03 16:23       ` Stefano Stabellini
2014-01-03 16:23       ` Stefano Stabellini
2014-01-03 15:47   ` 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  1:36     ` Mukesh Rathor
2014-01-03 10:14       ` David Vrabel
2014-01-03 10:14       ` David Vrabel
2014-01-03 15:50     ` Stefano Stabellini
2014-01-03 15:50     ` Stefano Stabellini
2014-01-02 11:24   ` David Vrabel
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 11:27   ` David Vrabel
2014-01-02 18:23     ` Konrad Rzeszutek Wilk
2014-01-02 18:23     ` Konrad Rzeszutek Wilk
2014-01-03 14:39     ` Konrad Rzeszutek Wilk
2014-01-03 14:39     ` Konrad Rzeszutek Wilk
2014-01-03 15:18       ` David Vrabel
2014-01-03 15:18       ` David Vrabel
2014-01-01  4:35 ` Konrad Rzeszutek Wilk
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 11:31   ` David Vrabel
2014-01-02 18:24     ` Konrad Rzeszutek Wilk
2014-01-02 18:24     ` Konrad Rzeszutek Wilk
2014-01-03 11:27       ` David Vrabel
2014-01-03 11:27       ` David Vrabel
2014-01-01  4:35 ` Konrad Rzeszutek Wilk
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-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 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-04  2:25         ` Konrad Rzeszutek Wilk
2014-01-04  1:23       ` Mukesh Rathor
2014-01-02 18:41     ` Konrad Rzeszutek Wilk
2014-01-03 16:30   ` Stefano Stabellini
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-01  4:35 ` Konrad Rzeszutek Wilk
2014-01-02 15:43   ` David Vrabel
2014-01-02 15:43   ` David Vrabel
2014-01-03 16:34   ` Stefano Stabellini
2014-01-03 16:34   ` Stefano Stabellini
2014-01-03 18:10     ` Konrad Rzeszutek Wilk
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-01  4:35 ` Konrad Rzeszutek Wilk
2014-01-02 11:38   ` David Vrabel
2014-01-02 11:38   ` David Vrabel
2014-01-03 16:40   ` Stefano Stabellini
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-02 11:39   ` David Vrabel
2014-01-03 16:43   ` Stefano Stabellini
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 15:09         ` Konrad Rzeszutek Wilk
2014-01-03 12:11       ` David Vrabel
2014-01-02 18:47     ` Konrad Rzeszutek Wilk
2014-01-02 16:27   ` David Vrabel
2014-01-03 16:53   ` Stefano Stabellini
2014-01-03 19:18     ` Konrad Rzeszutek Wilk
2014-01-03 19:18     ` [Xen-devel] " Konrad Rzeszutek Wilk
2014-01-03 16:53   ` Stefano Stabellini
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-02 18:50     ` Konrad Rzeszutek Wilk
2014-01-03 11:54       ` David Vrabel
2014-01-03 11:54       ` David Vrabel
2014-01-03 14:44         ` Konrad Rzeszutek Wilk
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 15:48               ` Konrad Rzeszutek Wilk
2014-01-03 17:20               ` [Xen-devel] " Stefano Stabellini
2014-01-03 18:14                 ` Konrad Rzeszutek Wilk
2014-01-03 18:14                 ` [Xen-devel] " Konrad Rzeszutek Wilk
2014-01-03 18:29                   ` Stefano Stabellini
2014-01-03 18:29                   ` [Xen-devel] " Stefano Stabellini
2014-01-03 18:39                     ` Konrad Rzeszutek Wilk
2014-01-03 18:39                     ` [Xen-devel] " Konrad Rzeszutek Wilk
2014-01-03 19:02                       ` Stefano Stabellini
2014-01-03 19:02                       ` [Xen-devel] " Stefano Stabellini
2014-01-03 17:20               ` Stefano Stabellini
2014-01-03 15:41           ` David Vrabel
2014-01-02 16:32   ` David Vrabel
2014-01-03 17:26   ` Stefano Stabellini
2014-01-03 17:26   ` Stefano Stabellini
2014-01-03 18:20     ` Konrad Rzeszutek Wilk [this message]
2014-01-03 18:20     ` Konrad Rzeszutek Wilk
2014-01-01  4:35 ` [PATCH v12 16/18] xen/pvh: Piggyback on PVHVM XenBus Konrad Rzeszutek Wilk
2014-01-01  4:35 ` Konrad Rzeszutek Wilk
2014-01-02 11:43   ` David Vrabel
2014-01-02 11:43   ` David Vrabel
2014-01-03 17:22   ` Stefano Stabellini
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-02 11:44   ` David Vrabel
2014-01-03 16:22   ` Stefano Stabellini
2014-01-03 16:22   ` Stefano Stabellini
2014-01-03 17:59     ` Konrad Rzeszutek Wilk
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-01  4:35 ` Konrad Rzeszutek Wilk
2014-01-02 11:48   ` David Vrabel
2014-01-02 18:27     ` Konrad Rzeszutek Wilk
2014-01-02 18:27     ` Konrad Rzeszutek Wilk
2014-01-02 11:48   ` David Vrabel
2014-01-02 16:50 ` [PATCH v12] Linux Xen PVH support David Vrabel
2014-01-02 16:50 ` David Vrabel
2014-01-02 19:02   ` Konrad Rzeszutek Wilk
2014-01-03 13:37     ` David Vrabel
2014-01-03 13:37     ` David Vrabel
2014-01-02 19:02   ` Konrad Rzeszutek Wilk
2014-01-02 18:39 ` H. Peter Anvin
2014-01-02 19:12   ` Konrad Rzeszutek Wilk
2014-01-02 19:12   ` Konrad Rzeszutek Wilk
2014-01-02 18:39 ` H. Peter Anvin

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 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.