Skip to contentSkip to conversation

x86: ioremap: fix wrong physical address handling in PAT code

PATCH In review Yasuaki Ishimatsu 2 participants 4 messages Jul 22, 2010 – Jul 29, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 x86: ioremap: fix wrong physical address handling in PAT code

From: Yasuaki Ishimatsu <[email protected]>

The following two commits fixed a problem that x86 ioremap() doesn't handle physical address higher than 32-bit properly in X86_32 PAE mode.

ffa71f33a820d1ab3f2fc5723819ac60fb76080b (x86, ioremap: Fix incorrect physical address handling in PAE mode)
35be1b716a475717611b2dc04185e9d80b9cb693 (x86, ioremap: Fix normal ram range check)

But these fixes are not enough, since pat_pagerange_is_ram() in PAT code also has a same problem. This patch fixes it.

---

It is for -tip tree.

arch/x86/mm/pat.c +1 -1
Index: linux-2.6-x86/arch/x86/mm/pat.c
===================================================================
@@ -158,7 +158,7 @@ static unsigned long pat_x_mtrr_type(u64
 	return req_type;
 }
 
-static int pat_pagerange_is_ram(unsigned long start, unsigned long end)
+static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end)
 {
 	int ram_page = 0, not_rampage = 0;
 	unsigned long page_nr;
Reviewed-by on v1 1/1
#1 lore raw

Good catch!

Quoted 39 lines · Yasuaki Ishimatsu

From: Yasuaki Ishimatsu<[email protected]>

The following two commits fixed a problem that x86 ioremap() doesn't handle physical address higher than 32-bit properly in X86_32 PAE mode.

ffa71f33a820d1ab3f2fc5723819ac60fb76080b (x86, ioremap: Fix incorrect physical address handling in PAE mode)
35be1b716a475717611b2dc04185e9d80b9cb693 (x86, ioremap: Fix normal ram range check)

But these fixes are not enough, since pat_pagerange_is_ram() in PAT code also has a same problem. This patch fixes it.

---

It is for -tip tree.

Index: linux-2.6-x86/arch/x86/mm/pat.c
===================================================================

arch/x86/mm/pat.c +1 -2
@@ -158,7 +158,7 @@ static unsigned long pat_x_mtrr_type(u64
  	return req_type;
  }
 
-static int pat_pagerange_is_ram(unsigned long start, unsigned long end)
+static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end)
  {
  	int ram_page = 0, not_rampage = 0;
  	unsigned long page_nr;
 
--

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

#2 lore raw
In reply to Yasuaki Ishimatsu

Hi,

Does anybody see the following patch? It's obviously a bug. Please apply it.

Thanks,
Yasuaki Ishimatsu

Quoted 32 lines

From: Yasuaki Ishimatsu <[email protected]>

The following two commits fixed a problem that x86 ioremap() doesn't handle physical address higher than 32-bit properly in X86_32 PAE mode.

ffa71f33a820d1ab3f2fc5723819ac60fb76080b (x86, ioremap: Fix incorrect physical address handling in PAE mode)
35be1b716a475717611b2dc04185e9d80b9cb693 (x86, ioremap: Fix normal ram range check)

But these fixes are not enough, since pat_pagerange_is_ram() in PAT code also has a same problem. This patch fixes it.

---

It is for -tip tree.

Index: linux-2.6-x86/arch/x86/mm/pat.c
===================================================================

arch/x86/mm/pat.c +1 -1
@@ -158,7 +158,7 @@ static unsigned long pat_x_mtrr_type(u64
 	return req_type;
 }
 
-static int pat_pagerange_is_ram(unsigned long start, unsigned long end)
+static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end)
 {
 	int ram_page = 0, not_rampage = 0;
 	unsigned long page_nr;
#3 lore raw

[tip:x86/mm] x86: Ioremap: fix wrong physical address handling in PAT code

In reply to Yasuaki Ishimatsu
Commit-ID:  3709c857350976408953831f0cf89d19951394a1
Gitweb:     http://git.kernel.org/tip/3709c857350976408953831f0cf89d19951394a1
Author:     Yasuaki Ishimatsu <[email protected]>
AuthorDate: Thu, 22 Jul 2010 14:57:35 +0900
Committer:  Thomas Gleixner <[email protected]>
CommitDate: Thu, 29 Jul 2010 15:26:11 +0200

x86: Ioremap: fix wrong physical address handling in PAT code

The following two commits fixed a problem that x86 ioremap() doesn't handle physical address higher than 32-bit properly in X86_32 PAE mode.

ffa71f33a820d1ab3f2fc5723819ac60fb76080b (x86, ioremap: Fix incorrect physical address handling in PAE mode)

35be1b716a475717611b2dc04185e9d80b9cb693 (x86, ioremap: Fix normal ram range check)

But these fixes are not enough, since pat_pagerange_is_ram() in PAT code also has a same problem. This patch fixes it.

LKML-Reference: <[email protected]>

---
 arch/x86/mm/pat.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/x86/mm/pat.c +1 -1
index acc15b2..03b48c8 100644
@@ -158,7 +158,7 @@ static unsigned long pat_x_mtrr_type(u64 start, u64 end, unsigned long req_type)
 	return req_type;
 }
 
-static int pat_pagerange_is_ram(unsigned long start, unsigned long end)
+static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end)
 {
 	int ram_page = 0, not_rampage = 0;
 	unsigned long page_nr;