Re: [PATCH 0/4] apply page shift to PFN instead of VA in pfn_to_virt

From: Arnd Bergmann
Date: Wed Jan 31 2024 - 06:49:14 EST


On Wed, Jan 31, 2024, at 06:51, Yan Zhao wrote:
> This is a tiny fix to pfn_to_virt() for some platforms.
>
> The original implementaion of pfn_to_virt() takes PFN instead of PA as the
> input to macro __va, with PAGE_SHIFT applying to the converted VA, which
> is not right under most conditions, especially when there's an offset in
> __va.
>
>
> Yan Zhao (4):
> asm-generic/page.h: apply page shift to PFN instead of VA in
> pfn_to_virt
> csky: apply page shift to PFN instead of VA in pfn_to_virt
> Hexagon: apply page shift to PFN instead of VA in pfn_to_virt
> openrisc: apply page shift to PFN instead of VA in pfn_to_virt

Nice catch, this is clearly a correct fix, and I can take
the series through the asm-generic tree if we want to take
this approach.

I made a couple of interesting observations looking at this patch
though:

- this function is only used in architecture specific code on
m68k, riscv and s390, though a couple of other architectures
have the same definition.

- There is another function that does the same thing called
pfn_to_kaddr(), which is defined on arm, arm64, csky,
loongarch, mips, nios2, powerpc, s390, sh, sparc and x86,
as well as yet another pfn_va() on parisc.

- the asm-generic/page.h file used to be included by h8300, c6x
and blackfin, all of which are now gone. It has no users left
and can just as well get removed, unless we find a new use
for it.

Since it looks like the four broken functions you fix
don't have a single caller, maybe it would be better to
just remove them all?

How exactly did you notice the function being wrong,
did you try to add a user somewhere, or just read through
the code?

Arnd