|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] linux PVH broken in 3.16.0-rc7 (arch_gnttab_map_shared)
On 02/08/14 00:46, Mukesh Rathor wrote:
> Hi,
>
> Not sure if this already got reported, but it appears
>
> commit b7dd0e3
> Author: David Vrabel <david.vrabel@xxxxxxxxxx>
> Date: Fri Jul 11 16:42:34 2014 +0100
>
> x86/xen: safely map and unmap grant frames when in atomic context
>
> has broken boot of domU PVH. The reason being arch_gnttab_map_shared
> is getting called before gnttab_shared_vm_area gets initialized by
> arch_gnttab_init(). As the comment says,
>
> --->
> /* Call it _before_ __gnttab_init as we need to initialize the
> * * xen_auto_xlat_grant_frames first. */
> core_initcall(xen_pvh_gnttab_setup);
> <---
>
> we can't wait till arch_gnttab_init is called by __gnttab_init().
Does this fix it? I can't test it because the only box I have easily
available for testing is AMD.
David
8<--------------------------------
x86/xen: use vmap() to map grant table pages in PVH guests
Commit b7dd0e350e0b (x86/xen: safely map and unmap grant frames when
in atomic context) causes PVH guests to crash in
arch_gnttab_map_shared() when they attempted to map the pages for the
grant table.
This use of a PV-specific function during the PVH grant table setup is
non-obvious and not needed. The standard vmap() function does the
right thing.
Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
Reported-by: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx>
---
arch/x86/xen/grant-table.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c
index ebfa9b2..767c9cb 100644
--- a/arch/x86/xen/grant-table.c
+++ b/arch/x86/xen/grant-table.c
@@ -168,6 +168,7 @@ static int __init xlated_setup_gnttab_pages(void)
{
struct page **pages;
xen_pfn_t *pfns;
+ void *vaddr;
int rc;
unsigned int i;
unsigned long nr_grant_frames = gnttab_max_grant_frames();
@@ -193,21 +194,20 @@ static int __init xlated_setup_gnttab_pages(void)
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,
- &xen_auto_xlat_grant_frames.vaddr);
-
- if (rc) {
+ vaddr = vmap(pages, nr_grant_frames, 0, PAGE_KERNEL);
+ if (!vaddr) {
pr_warn("%s Couldn't map %ld pfns rc:%d\n", __func__,
nr_grant_frames, rc);
free_xenballooned_pages(nr_grant_frames, pages);
kfree(pages);
kfree(pfns);
- return rc;
+ return -ENOMEM;
}
kfree(pages);
xen_auto_xlat_grant_frames.pfn = pfns;
xen_auto_xlat_grant_frames.count = nr_grant_frames;
+ xen_auto_xlat_grant_frames.vaddr = vaddr;
return 0;
}
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |