On Tue, 06 Feb 2007 13:52:37 -0500, Dave Anderson wrote:
How about changing section #3 above to something like this?:
* to the section with that page
*/
if (mi->flags & ADDRESS_SPECIFIED) {
- ulong pfn = mi->spec_addr >> PAGESHIFT();
+ ulong pfn;
+ physaddr_t tmp;
+
+ if (pg_spec) {
+ if (!page_to_phys(mi->spec_addr, &tmp))
+ return;
+ pfn = tmp >> PAGESHIFT();
+ } else
+ pfn = mi->spec_addr >> PAGESHIFT();
section_nr = pfn_to_section_nr(pfn);
}
Thanks, it looks good, but I found another problem.
I applied your patch and tested kmem command.
crash> kmem -p e000000105090000
PAGE PHYSICAL MAPPING INDEX CNT FLAGS
It seems kmem command entered infinite loop. It is another problem.
I found page_to_phys did not return correct physical address.
When mi->spec_addr is 0xe000000105090000, corresponding physical address
is 0x180000000.
crash> kmem -p | grep e000000105090000
e000000105090000 180000000 ------- ----- 0 600200080000
However, page_to_phys returns 0x100000000. I think page_to_phys does not
support sparsemem system.
Takao Indoh