Hi. I faced same probrem, too. I use x86_64 kernel. Your patch fix it. it's very effective. Thanks! 2010年6月18日12:21 Kenji Kaneshige <kaneshige.kenji@xxxxxxxxxxxxxx>: > Hi, > > Here is a updated version (v.3) of patchset to fix ioremap() related > problem found in x86 32-bit mode. The problem is that ioremap() maps > wrong address for the device to which phisical addres higer than > 32-bit is assigned (ioat device in my case). > > The v.3 patches are: > > - [PATCH 1/2] x86: ioremap: fix wrong physical address handling > - [PATCH 2/2] x86: ioremap: fix normal ram range check > > Changelog > --------- > v.2=>v.3: > - Matthew Wilcox suggested changing PAGE_MASK definition. But I think > it is a little risky. Instead of changing PAGE_MASK, v.3 patch uses > PHYSICAL_PAGE_MASK(*) to mask physical address again, as v.1 patch > did. The PHYSICAL_PAGE_MASK doesn't work for higher than 2^44 > physical address because __PHYSICAL_MASK_SHIFT is 44 in x86_32 > PAE(*). But this time, I focus on making 2^44 work correctly. > > (*) Current X86_32 PAE kernel would not work with physical address > higher than 2^44, because PFNs are handled using 32-bit variable > (unsigned long) probably in many places. This seems the reason why > __PHYSICAL_MASK_SHIFT is limited to 44 (=32+12 is the limit we can > fit into an unsigned long pfn). When x86 PAE linux becomes above > 2^44 physical address capable in someday, __PHYSICAL_MASK_SHIFT > should become greater value than 44. > > > v.1=>v.2: > The v.1 patchset was based on my misunderstanding about architectural > limit and linux memory management limit of physical address. So some > patches in v.1 were totally wrong fixes and they are removed. Thanks > to the feedbacks for v.1 patchset, it turned out that phsical address > is handled improperly (higher 32-bits are cleared unexpectedly) also > in the other places than where v.1 patchset fixed. Here are summary of > changes. > > - Stop using PHYSICAL_PAGE_MASK to align physical address because > PHYSICAL_PAGE_MASK would not work if physical address is higher than > 44-bit. > - Fix remaining bugs of physical address handling in ioremap() code > path according to the feedbacks. > - Fix s_show() in vmalloc.c to show high physical address properly. > - Removed changes against phys_addr_valid() ([PATCH 2/4] in v.1). > - Removed changes against warning message in ioremap() ([PATCH 3/4] in > v.1). > > Thanks, > Kenji Kaneshige > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html