On Fri, May 27, 2011 at 12:37:31AM +0900, takuo.koguchi.sw(a)hitachi.com wrote:
40
41 #if (defined(CONFIG_SPARSEMEM) && defined(CONFIG_VMSPLIT_3G))
42
43 #define __phys_to_virt(phys) \
44 ((phys) >= EBI1_PHYS_OFFSET ? \
45 (phys) - EBI1_PHYS_OFFSET + EBI1_PAGE_OFFSET : \
46 (phys) - EBI0_PHYS_OFFSET + EBI0_PAGE_OFFSET)
47
48 #define __virt_to_phys(virt) \
49 ((virt) >= EBI1_PAGE_OFFSET ? \
50 (virt) - EBI1_PAGE_OFFSET + EBI1_PHYS_OFFSET : \
51 (virt) - EBI0_PAGE_OFFSET + EBI0_PHYS_OFFSET)
52
53 #endif
Aha, now I think I know what is wrong here -- your platform is one of those
where normal v<->p translation does not apply!
And I guess VTOP/PTOV needs modification in accordance with
__phys_to_virt
and __virt_to_phys.
Yup, I think that in this case modifying VTOP/PTOV should solve the problem.
To solve this in generic way, is a bit harder. Maybe it is time to add some
platform specific code to crash which can override these kinds of things?