* [PATCH] Fix mem.c so that X Windows can restart
@ 2006-05-25 19:32 Donald D. Dugger
2006-05-25 20:52 ` Keir Fraser
0 siblings, 1 reply; 3+ messages in thread
From: Donald D. Dugger @ 2006-05-25 19:32 UTC (permalink / raw)
To: xen-devel
This patch fixes the problem where you cannot start X Windows on Dom0 after
you have created an HVM guest. The problem is that X uses `mmap' to map
1 page at physical address 0 with read/write permission. Before an HVM
guest is created this check at around line 1496 of `mm.c':
if ( unlikely((x & (PGT_type_mask|PGT_va_mask)) != type) )
causes the offending code from this patch to be bypassed and X's `mmap'
call works. After an HVM guest is created the check at 1496 of `mm.c' is
now true and the code from this patch is executed, causing the `mmap' call to
erroneously fail.
I'd be curious if someone can explain what this code is trying to do and,
if this patch is appropriate, it should be applied.
Signed-off-by: Don Dugger <donald.d.dugger@intel.com>
--
Don Dugger
"Censeo Toto nos in Kansa esse decisse." - D. Gale
Donald.D.Dugger@intel.com
Ph: (303)440-1368
diff -r ad33b3882867 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Wed May 24 19:41:47 2006 +0100
+++ b/xen/arch/x86/mm.c Thu May 25 10:47:51 2006 -0600
@@ -1537,9 +1537,7 @@ int get_page_type(struct page_info *page
return 0;
#endif
/* Fixme: add code to propagate va_unknown to subtables. */
- if ( ((type & PGT_type_mask) >= PGT_l2_page_table) &&
- !shadow_mode_refcounts(page_get_owner(page)) )
- return 0;
+
/* This table is possibly mapped at multiple locations. */
nx &= ~PGT_va_mask;
nx |= PGT_va_unknown;
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Fix mem.c so that X Windows can restart
2006-05-25 19:32 [PATCH] Fix mem.c so that X Windows can restart Donald D. Dugger
@ 2006-05-25 20:52 ` Keir Fraser
2006-05-25 22:14 ` Clyde Griffin
0 siblings, 1 reply; 3+ messages in thread
From: Keir Fraser @ 2006-05-25 20:52 UTC (permalink / raw)
To: Donald D. Dugger; +Cc: xen-devel, Jun Nakajima
On 25 May 2006, at 20:32, Donald D. Dugger wrote:
> This patch fixes the problem where you cannot start X Windows on Dom0
> after
> you have created an HVM guest. The problem is that X uses `mmap' to
> map
> 1 page at physical address 0 with read/write permission. Before an HVM
> guest is created this check at around line 1496 of `mm.c':
>
> if ( unlikely((x & (PGT_type_mask|PGT_va_mask)) != type) )
>
> causes the offending code from this patch to be bypassed and X's `mmap'
> call works. After an HVM guest is created the check at 1496 of `mm.c'
> is
> now true and the code from this patch is executed, causing the `mmap'
> call to
> erroneously fail.
This is totally bogus. That test (line 1496) should *never* be true for
pages that are not type PGT_l*_page_table. I think some HVM code is
indexing frame_table with a zero frame number and then fiddling with
fields in that very first page_info structure. That's very bad -- in
fact it's tempting to add some assertions about page 0 to be tested at
various suitable moments to prevent this sort of bad behaviour.
-- Keir
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Fix mem.c so that X Windows can restart
2006-05-25 20:52 ` Keir Fraser
@ 2006-05-25 22:14 ` Clyde Griffin
0 siblings, 0 replies; 3+ messages in thread
From: Clyde Griffin @ 2006-05-25 22:14 UTC (permalink / raw)
To: Keir Fraser, Donald D. Dugger; +Cc: xen-devel, Jun Nakajima
>>> On 5/25/2006 at 2:52 PM, in message
<6c2ece1dc117d8bbafad32bb376eb273@cl.cam.ac.uk>, Keir Fraser
<Keir.Fraser@cl.cam.ac.uk> wrote:
> On 25 May 2006, at 20:32, Donald D. Dugger wrote:
>
>> This patch fixes the problem where you cannot start X Windows on
Dom0
>> after
>> you have created an HVM guest. The problem is that X uses `mmap' to
>> map
>> 1 page at physical address 0 with read/write permission. Before an
HVM
>> guest is created this check at around line 1496 of `mm.c':
>>
>> if ( unlikely((x & (PGT_type_mask|PGT_va_mask)) != type) )
>>
>> causes the offending code from this patch to be bypassed and X's
`mmap'
>> call works. After an HVM guest is created the check at 1496 of
`mm.c'
>> is
>> now true and the code from this patch is executed, causing the
`mmap'
>> call to
>> erroneously fail.
>
> This is totally bogus. That test (line 1496) should *never* be true
for
> pages that are not type PGT_l*_page_table. I think some HVM code is
> indexing frame_table with a zero frame number and then fiddling with
> fields in that very first page_info structure. That's very bad -- in
> fact it's tempting to add some assertions about page 0 to be tested
at
> various suitable moments to prevent this sort of bad behaviour.
Keir,
We hit this very frequently. Any chance you could put together a patch
with the asserts in place so we can throw it into our code base to try
and catch the problem?
Clyde
>
> -- Keir
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-05-25 22:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-25 19:32 [PATCH] Fix mem.c so that X Windows can restart Donald D. Dugger
2006-05-25 20:52 ` Keir Fraser
2006-05-25 22:14 ` Clyde Griffin
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.