All of lore.kernel.org
 help / color / mirror / Atom feed
* [BUG][PATCH 0/2 (v.3)] x86: ioremap() problem in X86_32 PAE
@ 2010-06-18  3:21 Kenji Kaneshige
  2010-06-18  3:22 ` [PATCH 1/2] x86: ioremap: fix wrong physical address handling Kenji Kaneshige
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Kenji Kaneshige @ 2010-06-18  3:21 UTC (permalink / raw)
  To: hpa, tglx, mingo, linux-kernel
  Cc: matthew, macro, kamezawa.hiroyu, eike-kernel, jeremy, linux-pci

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


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-02-11  7:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-06-18  3:21 [BUG][PATCH 0/2 (v.3)] x86: ioremap() problem in X86_32 PAE Kenji Kaneshige
2010-06-18  3:22 ` [PATCH 1/2] x86: ioremap: fix wrong physical address handling Kenji Kaneshige
2010-06-18 11:07   ` Jeremy Fitzhardinge
2010-06-21  1:40     ` Kenji Kaneshige
2010-07-09 19:18   ` [tip:x86/mm] x86, ioremap: Fix incorrect physical address handling in PAE mode tip-bot for Kenji Kaneshige
2010-06-18  3:23 ` [PATCH 2/2] x86: ioremap: fix normal ram range check Kenji Kaneshige
2010-07-09 19:19   ` [tip:x86/mm] x86, ioremap: Fix " tip-bot for Kenji Kaneshige
2010-06-18  6:31 ` [BUG][PATCH 0/2 (v.3)] x86: ioremap() problem in X86_32 PAE H. Peter Anvin
2011-02-10 14:11 ` TAKADA Yoshihito
2011-02-11  7:55   ` Kenji Kaneshige

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.