|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] PAE xen + linux kernel boots ...
> The hypervisor was taking a pagefault in ptwr_emulated_update() when
> pl1e (a map_domain_mem() mapped page) was dereferenced to be
> copied. pl1e is a 64 bit type with pae, but only the first 4 bytes
> were getting mapped, and there was a case where pl1e would straddle
> a page boundary,
Huh? page table entries must be 8-byte aligned, so they never ever
can cross a page border. Must be something else.
> -void *map_domain_mem(unsigned long pa)
> +void *map_domain_mem(unsigned long long pa)
Hmm, I guess the most sane approach is to add a new type for
physical addresses, simply using "unsigned long long" isn't
a good idea ...
> - idx = map_idx = (map_idx + 1) & (MAPCACHE_ENTRIES - 1);
> + idx = map_idx = (map_idx + 2) & (MAPCACHE_ENTRIES - 1);
> cache[idx] = l1e_create_phys(pa, __PAGE_HYPERVISOR);
> + cache[idx + 1] = l1e_create_phys(pa + sizeof(u32), __PAGE_HYPERVISOR);
That looks a bit fishy, like hiding a bug somewhere else.
And most likely will break for non-pae ...
Gerd
--
#define printk(args...) fprintf(stderr, ## args)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|