On 18/11/15 17:21, Boris Ostrovsky wrote:
> On 11/18/2015 11:16 AM, Wei Liu wrote:
>> On Wed, Nov 18, 2015 at 11:11:16AM -0500, Boris Ostrovsky wrote:
>>> On 11/12/2015 08:43 AM, Juergen Gross wrote:
>>>> In order to prepare a p2m list outside of the initial kernel mapping
>>>> do a rework of the domain builder's page table handler. The goal is
>>>> to be able to use common helpers for page table allocation and setup
>>>> for initial kernel page tables and page tables mapping the p2m list.
>>>> This is achieved by supporting multiple mapping areas. The mapped
>>>> virtual addresses of the single areas must not overlap, while the
>>>> page tables of a new area added might already be partially present.
>>>> Especially the top level page table is existing only once, of course.
>>>>
>>>> Currently restrict the number of mappings to 1 because the only mapping
>>>> now is the initial mapping created by toolstack. There should not be
>>>> behaviour change and guest visible change introduced.
>>>>
>>>> Signed-off-by: Juergen Gross <jgr...@suse.com>
>>>> Reviewed-by: Wei Liu <wei.l...@citrix.com
>>>> ---
>>>>   tools/libxc/xc_dom_x86.c | 479
>>>> ++++++++++++++++++++++++-----------------------
>>>>   tools/libxc/xg_private.h |  39 +---
>>>>   2 files changed, 252 insertions(+), 266 deletions(-)
>>> This broke PVH. I get a triple fault (somewhere in clear_page(), so the
>>> guest have run a little)
>>>
>> Is there any output? We just noticed 32 bit pvgrub is broken. Not sure
>> these two problems are related but the more information the better.
> 
> 
> Not much:
> 
> (d3) mapping kernel into physical memory
> (XEN) d3v0 Triple fault - invoking HVM shutdown action 0
> 
> I then looked at RIP and it was pointing to 'mov    %rax,(%rdi)' in
> clear_page_orig(). I didn't check what %rdi was.

I think I've found the bug. I dropped the special case for pvh to
map page tables writable. Can you try the attached patch, please?


Juergen

diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
index 7279fa2..d529518 100644
--- a/tools/libxc/xc_dom_x86.c
+++ b/tools/libxc/xc_dom_x86.c
@@ -380,7 +380,7 @@ static x86_pgentry_t get_pg_prot_x86(struct xc_dom_image *dom, int l,
         map = domx86->maps + m;
         pfn_s = map->lvls[domx86->params->levels - 1].pfn;
         pfn_e = map->area.pgtables + pfn_s;
-        if ( pfn >= pfn_s && pfn < pfn_e )
+        if ( !dom->pvh_enabled && pfn >= pfn_s && pfn < pfn_e )
             return prot & ~_PAGE_RW;
     }
 
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to