Message ID | 20150826012735.8851.49787.stgit@dwillia2-desk3.amr.corp.intel.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Dan Williams |
Headers | show |
On Tue, 25 Aug 2015, Dan Williams wrote: > From: Christoph Hellwig <hch@lst.de> > > Three architectures already define these, and we'll need them genericly > soon. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Dan Williams <dan.j.williams@intel.com> > --- > arch/arm/include/asm/memory.h | 6 ------ > arch/arm64/include/asm/memory.h | 6 ------ > arch/unicore32/include/asm/memory.h | 6 ------ > include/asm-generic/memory_model.h | 6 ++++++ > 4 files changed, 6 insertions(+), 18 deletions(-) > > diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h > index b7f6fb462ea0..98d58bb04ac5 100644 > --- a/arch/arm/include/asm/memory.h > +++ b/arch/arm/include/asm/memory.h > @@ -119,12 +119,6 @@ > #endif > > /* > - * Convert a physical address to a Page Frame Number and back > - */ > -#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) > -#define __pfn_to_phys(pfn) ((phys_addr_t)(pfn) << PAGE_SHIFT) > - > -/* > * Convert a page to/from a physical address > */ > #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) [...] > diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h > index 14909b0b9cae..f20f407ce45d 100644 > --- a/include/asm-generic/memory_model.h > +++ b/include/asm-generic/memory_model.h > @@ -69,6 +69,12 @@ > }) > #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */ > > +/* > + * Convert a physical address to a Page Frame Number and back > + */ > +#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) > +#define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) > + This patch, currently in mainline as commit 012dcef3f0, breaks LPAE on ARM32 with more than 4GB of RAM. The phys_addr_t cast in the original ARM definition is important when LPAE is enabled as phys_addr_t is 64 bits while longs are 32 bits. Nicolas
On 29 September 2015 at 12:21, Nicolas Pitre <nicolas.pitre@linaro.org> wrote: > On Tue, 25 Aug 2015, Dan Williams wrote: > >> From: Christoph Hellwig <hch@lst.de> >> >> Three architectures already define these, and we'll need them genericly >> soon. >> >> Signed-off-by: Christoph Hellwig <hch@lst.de> >> Signed-off-by: Dan Williams <dan.j.williams@intel.com> >> --- >> arch/arm/include/asm/memory.h | 6 ------ >> arch/arm64/include/asm/memory.h | 6 ------ >> arch/unicore32/include/asm/memory.h | 6 ------ >> include/asm-generic/memory_model.h | 6 ++++++ >> 4 files changed, 6 insertions(+), 18 deletions(-) >> >> diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h >> index b7f6fb462ea0..98d58bb04ac5 100644 >> --- a/arch/arm/include/asm/memory.h >> +++ b/arch/arm/include/asm/memory.h >> @@ -119,12 +119,6 @@ >> #endif >> >> /* >> - * Convert a physical address to a Page Frame Number and back >> - */ >> -#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) >> -#define __pfn_to_phys(pfn) ((phys_addr_t)(pfn) << PAGE_SHIFT) >> - >> -/* >> * Convert a page to/from a physical address >> */ >> #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) > > [...] > >> diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h >> index 14909b0b9cae..f20f407ce45d 100644 >> --- a/include/asm-generic/memory_model.h >> +++ b/include/asm-generic/memory_model.h >> @@ -69,6 +69,12 @@ >> }) >> #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */ >> >> +/* >> + * Convert a physical address to a Page Frame Number and back >> + */ >> +#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) >> +#define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) >> + > > This patch, currently in mainline as commit 012dcef3f0, breaks LPAE on > ARM32 with more than 4GB of RAM. The phys_addr_t cast in the original > ARM definition is important when LPAE is enabled as phys_addr_t is 64 > bits while longs are 32 bits. Dan sent my fix above to Linus already, which is in mainline as commit ae4f97696889. Cheers, Tyler
On Tue, 29 Sep 2015, Tyler Baker wrote: > On 29 September 2015 at 12:21, Nicolas Pitre <nicolas.pitre@linaro.org> wrote: > > On Tue, 25 Aug 2015, Dan Williams wrote: > > > >> From: Christoph Hellwig <hch@lst.de> > >> > >> Three architectures already define these, and we'll need them genericly > >> soon. > >> > >> Signed-off-by: Christoph Hellwig <hch@lst.de> > >> Signed-off-by: Dan Williams <dan.j.williams@intel.com> > >> --- > >> arch/arm/include/asm/memory.h | 6 ------ > >> arch/arm64/include/asm/memory.h | 6 ------ > >> arch/unicore32/include/asm/memory.h | 6 ------ > >> include/asm-generic/memory_model.h | 6 ++++++ > >> 4 files changed, 6 insertions(+), 18 deletions(-) > >> > >> diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h > >> index b7f6fb462ea0..98d58bb04ac5 100644 > >> --- a/arch/arm/include/asm/memory.h > >> +++ b/arch/arm/include/asm/memory.h > >> @@ -119,12 +119,6 @@ > >> #endif > >> > >> /* > >> - * Convert a physical address to a Page Frame Number and back > >> - */ > >> -#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) > >> -#define __pfn_to_phys(pfn) ((phys_addr_t)(pfn) << PAGE_SHIFT) > >> - > >> -/* > >> * Convert a page to/from a physical address > >> */ > >> #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) > > > > [...] > > > >> diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h > >> index 14909b0b9cae..f20f407ce45d 100644 > >> --- a/include/asm-generic/memory_model.h > >> +++ b/include/asm-generic/memory_model.h > >> @@ -69,6 +69,12 @@ > >> }) > >> #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */ > >> > >> +/* > >> + * Convert a physical address to a Page Frame Number and back > >> + */ > >> +#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) > >> +#define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) > >> + > > > > This patch, currently in mainline as commit 012dcef3f0, breaks LPAE on > > ARM32 with more than 4GB of RAM. The phys_addr_t cast in the original > > ARM definition is important when LPAE is enabled as phys_addr_t is 64 > > bits while longs are 32 bits. > > Dan sent my fix above to Linus already, which is in mainline as commit > ae4f97696889. Excellent. Somehow I was looking at v4.3-rc1 and not the latest. Nicolas
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index b7f6fb462ea0..98d58bb04ac5 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h @@ -119,12 +119,6 @@ #endif /* - * Convert a physical address to a Page Frame Number and back - */ -#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) -#define __pfn_to_phys(pfn) ((phys_addr_t)(pfn) << PAGE_SHIFT) - -/* * Convert a page to/from a physical address */ #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index f800d45ea226..d808bb688751 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -81,12 +81,6 @@ #define __phys_to_virt(x) ((unsigned long)((x) - PHYS_OFFSET + PAGE_OFFSET)) /* - * Convert a physical address to a Page Frame Number and back - */ -#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) -#define __pfn_to_phys(pfn) ((phys_addr_t)(pfn) << PAGE_SHIFT) - -/* * Convert a page to/from a physical address */ #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) diff --git a/arch/unicore32/include/asm/memory.h b/arch/unicore32/include/asm/memory.h index debafc40200a..3bb0a29fd2d7 100644 --- a/arch/unicore32/include/asm/memory.h +++ b/arch/unicore32/include/asm/memory.h @@ -61,12 +61,6 @@ #endif /* - * Convert a physical address to a Page Frame Number and back - */ -#define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) -#define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) - -/* * Convert a page to/from a physical address */ #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h index 14909b0b9cae..f20f407ce45d 100644 --- a/include/asm-generic/memory_model.h +++ b/include/asm-generic/memory_model.h @@ -69,6 +69,12 @@ }) #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */ +/* + * Convert a physical address to a Page Frame Number and back + */ +#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) +#define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) + #define page_to_pfn __page_to_pfn #define pfn_to_page __pfn_to_page