[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.