This patch fixes pfn_to_kaddr() to use phys_addr_t. Without this,
this macro is broken on LPAE systems. For physical addresses above
first 4GB result of shifting pfn with PAGE_SHIFT may be truncated.
Signed-off-by: Vitaly Andrianov <[email protected]>
---
arch/arm/include/asm/memory.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
index 184def0..063ef31 100644
--- a/arch/arm/include/asm/memory.h
+++ b/arch/arm/include/asm/memory.h
@@ -291,7 +291,7 @@ static inline void *phys_to_virt(phys_addr_t x)
*/
#define __pa(x) __virt_to_phys((unsigned long)(x))
#define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x)))
-#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
+#define pfn_to_kaddr(pfn) __va((phys_addr_t)(pfn) << PAGE_SHIFT)
extern phys_addr_t (*arch_virt_to_idmap)(unsigned long x);
--
1.9.1
On 6/23/2015 8:13 AM, Vitaly Andrianov wrote:
> This patch fixes pfn_to_kaddr() to use phys_addr_t. Without this,
> this macro is broken on LPAE systems. For physical addresses above
> first 4GB result of shifting pfn with PAGE_SHIFT may be truncated.
>
> Signed-off-by: Vitaly Andrianov <[email protected]>
> ---
Looks a valid fix.
RMK, Nico, what you say ?
> arch/arm/include/asm/memory.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
> index 184def0..063ef31 100644
> --- a/arch/arm/include/asm/memory.h
> +++ b/arch/arm/include/asm/memory.h
> @@ -291,7 +291,7 @@ static inline void *phys_to_virt(phys_addr_t x)
> */
> #define __pa(x) __virt_to_phys((unsigned long)(x))
> #define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x)))
> -#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
> +#define pfn_to_kaddr(pfn) __va((phys_addr_t)(pfn) << PAGE_SHIFT)
>
> extern phys_addr_t (*arch_virt_to_idmap)(unsigned long x);
>
>
On Wed, 24 Jun 2015, santosh shilimkar wrote:
> On 6/23/2015 8:13 AM, Vitaly Andrianov wrote:
> > This patch fixes pfn_to_kaddr() to use phys_addr_t. Without this,
> > this macro is broken on LPAE systems. For physical addresses above
> > first 4GB result of shifting pfn with PAGE_SHIFT may be truncated.
> >
> > Signed-off-by: Vitaly Andrianov <[email protected]>
> > ---
> Looks a valid fix.
>
> RMK, Nico, what you say ?
Looks fine to me.
Acked-by: Nicolas Pitre <[email protected]>
>
> > arch/arm/include/asm/memory.h | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
> > index 184def0..063ef31 100644
> > --- a/arch/arm/include/asm/memory.h
> > +++ b/arch/arm/include/asm/memory.h
> > @@ -291,7 +291,7 @@ static inline void *phys_to_virt(phys_addr_t x)
> > */
> > #define __pa(x) __virt_to_phys((unsigned long)(x))
> > #define __va(x) ((void
> > *)__phys_to_virt((phys_addr_t)(x)))
> > -#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
> > +#define pfn_to_kaddr(pfn) __va((phys_addr_t)(pfn) << PAGE_SHIFT)
> >
> > extern phys_addr_t (*arch_virt_to_idmap)(unsigned long x);
> >
> >
>
>
On 6/25/2015 9:33 AM, Nicolas Pitre wrote:
> On Wed, 24 Jun 2015, santosh shilimkar wrote:
>
>> On 6/23/2015 8:13 AM, Vitaly Andrianov wrote:
>>> This patch fixes pfn_to_kaddr() to use phys_addr_t. Without this,
>>> this macro is broken on LPAE systems. For physical addresses above
>>> first 4GB result of shifting pfn with PAGE_SHIFT may be truncated.
>>>
>>> Signed-off-by: Vitaly Andrianov <[email protected]>
>>> ---
>> Looks a valid fix.
>>
>> RMK, Nico, what you say ?
>
> Looks fine to me.
>
> Acked-by: Nicolas Pitre <[email protected]>
>
Thanks Nico.
Vitaly,
I suggest you to drop this patch into RMK's patch system with
mine and Nico's ack.
Regards,
Santosh