On 2012-06-12 07:12, Andreas Färber wrote: > This looks fishy to me... why should the kernel use a bigger address > space than hardware? For arm on x86_64 such a workaround was not > necessary iirc.
I can tell you what I observe. That with a certain sequence of allocations the x86_64 kernel will quit accepting an address "near" (1<<38) as a hint for where to allocate memory and begin returning an addresses near (1<<48). Further, the logic in find_mmap_vma tries about 5 times (with different hints) to get a target-page-aligned address at a lower address, all of which fail: the kernel continues to return the (1<<48) address. At which point one wonders why we should keep refusing the (1<<48) address when the target is in fact 64-bit capable. I believe the host vs target page size difference plays a part in this, which is why you wouldn't see this on arm. All of the other targets with page size larger than 4k are 64 bit, and set TARGET_VIRT_ADDR_SPACE_BITS to 64. So Alpha was unique in being an 8k page size with T_B_A_S_B < 48, and so probably unique in being able to tickle this problem. r~