Message ID | 20170707075928.2938-1-gregory.clement@free-electrons.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Florian, I forgot to CC you on this patch. Gregory On ven., juil. 07 2017, Gregory CLEMENT <gregory.clement@free-electrons.com> wrote: > As we already did for Armada XP switch from virt_to_phys() to > __pa_symbol(). > > The reason for it was well explained by Mark Rutland so let's quote him: > > "virt_to_phys() is intended to operate on the linear/direct mapping of > RAM. > > __pa_symbol() is intended to operate on the kernel mapping, which may > not be in the linear/direct mapping on all architectures. e.g. arm64 and > x86_64 map the kernel image and RAM separately. > > On 32-bit ARM the kernel image mapping is tied to the linear/direct > mapping, so that works, but as it's semantically wrong (and broken for > generic code), the DEBUG_VIRTUAL checks complain." > > Fixes: db88977894ab ("arm: mvebu: support for SMP on 98DX3336 SoC") > Cc: <stable@vger.kernel.org> > Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> > --- > > Hi Chris, > > with this patch I don't expect any regression, hover it would be nice > if you can test it. > > Thanks, > > Gregory > > arch/arm/mach-mvebu/platsmp.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c > index e62273aacb43..4ffbbd217e82 100644 > --- a/arch/arm/mach-mvebu/platsmp.c > +++ b/arch/arm/mach-mvebu/platsmp.c > @@ -211,7 +211,7 @@ static int mv98dx3236_resume_set_cpu_boot_addr(int hw_cpu, void *boot_addr) > return PTR_ERR(base); > > writel(0, base + MV98DX3236_CPU_RESUME_CTRL_REG); > - writel(virt_to_phys(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); > + writel(__pa_symbol(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); > > iounmap(base); > > -- > 2.13.2 >
On 07/07/2017 01:02 AM, Gregory CLEMENT wrote: > Hi Florian, > > I forgot to CC you on this patch. > > Gregory > > On ven., juil. 07 2017, Gregory CLEMENT <gregory.clement@free-electrons.com> wrote: > >> As we already did for Armada XP switch from virt_to_phys() to >> __pa_symbol(). >> >> The reason for it was well explained by Mark Rutland so let's quote him: >> >> "virt_to_phys() is intended to operate on the linear/direct mapping of >> RAM. >> >> __pa_symbol() is intended to operate on the kernel mapping, which may >> not be in the linear/direct mapping on all architectures. e.g. arm64 and >> x86_64 map the kernel image and RAM separately. >> >> On 32-bit ARM the kernel image mapping is tied to the linear/direct >> mapping, so that works, but as it's semantically wrong (and broken for >> generic code), the DEBUG_VIRTUAL checks complain." >> >> Fixes: db88977894ab ("arm: mvebu: support for SMP on 98DX3336 SoC") >> Cc: <stable@vger.kernel.org> >> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Thanks!
On 07/07/17 19:59, Gregory CLEMENT wrote: > As we already did for Armada XP switch from virt_to_phys() to > __pa_symbol(). > > The reason for it was well explained by Mark Rutland so let's quote him: > > "virt_to_phys() is intended to operate on the linear/direct mapping of > RAM. > > __pa_symbol() is intended to operate on the kernel mapping, which may > not be in the linear/direct mapping on all architectures. e.g. arm64 and > x86_64 map the kernel image and RAM separately. > > On 32-bit ARM the kernel image mapping is tied to the linear/direct > mapping, so that works, but as it's semantically wrong (and broken for > generic code), the DEBUG_VIRTUAL checks complain." > > Fixes: db88977894ab ("arm: mvebu: support for SMP on 98DX3336 SoC") > Cc: <stable@vger.kernel.org> > Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> > --- > > Hi Chris, > > with this patch I don't expect any regression, hover it would be nice > if you can test it. Works for me Tested-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Hi, On ven., juil. 07 2017, Gregory CLEMENT <gregory.clement@free-electrons.com> wrote: > As we already did for Armada XP switch from virt_to_phys() to > __pa_symbol(). > > The reason for it was well explained by Mark Rutland so let's quote him: > > "virt_to_phys() is intended to operate on the linear/direct mapping of > RAM. > > __pa_symbol() is intended to operate on the kernel mapping, which may > not be in the linear/direct mapping on all architectures. e.g. arm64 and > x86_64 map the kernel image and RAM separately. > > On 32-bit ARM the kernel image mapping is tied to the linear/direct > mapping, so that works, but as it's semantically wrong (and broken for > generic code), the DEBUG_VIRTUAL checks complain." > > Fixes: db88977894ab ("arm: mvebu: support for SMP on 98DX3336 SoC") > Cc: <stable@vger.kernel.org> > Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Applied on mvebu/fixes with the tags from Chris and Floriant. Gregory > --- > > Hi Chris, > > with this patch I don't expect any regression, hover it would be nice > if you can test it. > > Thanks, > > Gregory > > arch/arm/mach-mvebu/platsmp.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c > index e62273aacb43..4ffbbd217e82 100644 > --- a/arch/arm/mach-mvebu/platsmp.c > +++ b/arch/arm/mach-mvebu/platsmp.c > @@ -211,7 +211,7 @@ static int mv98dx3236_resume_set_cpu_boot_addr(int hw_cpu, void *boot_addr) > return PTR_ERR(base); > > writel(0, base + MV98DX3236_CPU_RESUME_CTRL_REG); > - writel(virt_to_phys(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); > + writel(__pa_symbol(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); > > iounmap(base); > > -- > 2.13.2 >
diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c index e62273aacb43..4ffbbd217e82 100644 --- a/arch/arm/mach-mvebu/platsmp.c +++ b/arch/arm/mach-mvebu/platsmp.c @@ -211,7 +211,7 @@ static int mv98dx3236_resume_set_cpu_boot_addr(int hw_cpu, void *boot_addr) return PTR_ERR(base); writel(0, base + MV98DX3236_CPU_RESUME_CTRL_REG); - writel(virt_to_phys(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); + writel(__pa_symbol(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); iounmap(base);
As we already did for Armada XP switch from virt_to_phys() to __pa_symbol(). The reason for it was well explained by Mark Rutland so let's quote him: "virt_to_phys() is intended to operate on the linear/direct mapping of RAM. __pa_symbol() is intended to operate on the kernel mapping, which may not be in the linear/direct mapping on all architectures. e.g. arm64 and x86_64 map the kernel image and RAM separately. On 32-bit ARM the kernel image mapping is tied to the linear/direct mapping, so that works, but as it's semantically wrong (and broken for generic code), the DEBUG_VIRTUAL checks complain." Fixes: db88977894ab ("arm: mvebu: support for SMP on 98DX3336 SoC") Cc: <stable@vger.kernel.org> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> --- Hi Chris, with this patch I don't expect any regression, hover it would be nice if you can test it. Thanks, Gregory arch/arm/mach-mvebu/platsmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)