All of lore.kernel.org
 help / color / mirror / Atom feed
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: "Leizhen (ThunderTown)" <thunder.leizhen@huawei.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Will Deacon <will.deacon@arm.com>,
	Jason Cooper <jason@lakedaemon.net>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/1] ARM: LPAE: use phys_addr_t instead of unsigned long in outercache hooks
Date: Tue, 29 Dec 2020 10:51:43 +0000	[thread overview]
Message-ID: <20201229105143.GL1551@shell.armlinux.org.uk> (raw)
In-Reply-To: <3a597586-2bce-66cf-b9f8-4bb667a600d0@huawei.com>

On Tue, Dec 29, 2020 at 02:30:56PM +0800, Leizhen (ThunderTown) wrote:
> 
> 
> On 2020/12/26 20:13, Russell King - ARM Linux admin wrote:
> > On Fri, Dec 25, 2020 at 07:44:58PM +0800, Zhen Lei wrote:
> >> The outercache of some Hisilicon SOCs support physical addresses wider
> >> than 32-bits. The unsigned long datatype is not sufficient for mapping
> >> physical addresses >= 4GB. The commit ad6b9c9d78b9 ("ARM: 6671/1: LPAE:
> >> use phys_addr_t instead of unsigned long in outercache functions") has
> >> already modified the outercache functions. But the parameters of the
> >> outercache hooks are not changed. This patch use phys_addr_t instead of
> >> unsigned long in outercache hooks: inv_range, clean_range, flush_range.
> >>
> >> To ensure the outercache that does not support LPAE works properly, do
> >> cast phys_addr_t to unsigned long by adding a middle-tier function.
> > 
> > Please don't do that. The cast can be done inside the L2 functions
> > themselves without needing all these additional functions.
> 
> OK. At first, I wanted to fit in like this:
> 
> -static void l2c220_inv_range(unsigned long start, unsigned long end)
> +static void l2c220_inv_range(phys_addr_t lpae_start, phys_addr_t lpae_end)
>  {
> +  unsigned long start = lpae_start;
> +  unsigned long end = lpae_end;

It sounds like there should be a "but..." clause here. This is exactly
what I'm suggesting you should be doing. Currently, there's a silent
narrowing cast in every single caller of the outer_.*_range() functions
and you're only moving it from the callsites to inside the called
functions.

> > We probably ought to also add some protection against addresses > 4GB,
> > although these are hot paths, so we don't want to add tests in these
> > functions. Maybe instead checking whether the system has memory above
> > 4GB while the L2 cache is being initialised would be a good idea?
> 
> I'm sorry, I didn't quite understand what you meant. Currently, the
> biggest problem is the compilation problem. The sizeof(long) may be
> 32, and the 64-bit physical address cannot be transferred from outcache
> functions to outcache hooks.

What I mean is that we really ought to warn if the L2C310 code tries to
initialise on a system where memory is above 4GB. However, it's very
unlikely that such a system exists, so it's probably fine not implement
a check, but it just feels fragile to be truncating the 64-bit address
to 32-bit on a kernel that _could_ support higher addresses, even though
that's exactly what is happening today (kind of by accident - I don't
think anyone realised.)

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

WARNING: multiple messages have this Message-ID (diff)
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: "Leizhen (ThunderTown)" <thunder.leizhen@huawei.com>
Cc: Jason Cooper <jason@lakedaemon.net>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 1/1] ARM: LPAE: use phys_addr_t instead of unsigned long in outercache hooks
Date: Tue, 29 Dec 2020 10:51:43 +0000	[thread overview]
Message-ID: <20201229105143.GL1551@shell.armlinux.org.uk> (raw)
In-Reply-To: <3a597586-2bce-66cf-b9f8-4bb667a600d0@huawei.com>

On Tue, Dec 29, 2020 at 02:30:56PM +0800, Leizhen (ThunderTown) wrote:
> 
> 
> On 2020/12/26 20:13, Russell King - ARM Linux admin wrote:
> > On Fri, Dec 25, 2020 at 07:44:58PM +0800, Zhen Lei wrote:
> >> The outercache of some Hisilicon SOCs support physical addresses wider
> >> than 32-bits. The unsigned long datatype is not sufficient for mapping
> >> physical addresses >= 4GB. The commit ad6b9c9d78b9 ("ARM: 6671/1: LPAE:
> >> use phys_addr_t instead of unsigned long in outercache functions") has
> >> already modified the outercache functions. But the parameters of the
> >> outercache hooks are not changed. This patch use phys_addr_t instead of
> >> unsigned long in outercache hooks: inv_range, clean_range, flush_range.
> >>
> >> To ensure the outercache that does not support LPAE works properly, do
> >> cast phys_addr_t to unsigned long by adding a middle-tier function.
> > 
> > Please don't do that. The cast can be done inside the L2 functions
> > themselves without needing all these additional functions.
> 
> OK. At first, I wanted to fit in like this:
> 
> -static void l2c220_inv_range(unsigned long start, unsigned long end)
> +static void l2c220_inv_range(phys_addr_t lpae_start, phys_addr_t lpae_end)
>  {
> +  unsigned long start = lpae_start;
> +  unsigned long end = lpae_end;

It sounds like there should be a "but..." clause here. This is exactly
what I'm suggesting you should be doing. Currently, there's a silent
narrowing cast in every single caller of the outer_.*_range() functions
and you're only moving it from the callsites to inside the called
functions.

> > We probably ought to also add some protection against addresses > 4GB,
> > although these are hot paths, so we don't want to add tests in these
> > functions. Maybe instead checking whether the system has memory above
> > 4GB while the L2 cache is being initialised would be a good idea?
> 
> I'm sorry, I didn't quite understand what you meant. Currently, the
> biggest problem is the compilation problem. The sizeof(long) may be
> 32, and the 64-bit physical address cannot be transferred from outcache
> functions to outcache hooks.

What I mean is that we really ought to warn if the L2C310 code tries to
initialise on a system where memory is above 4GB. However, it's very
unlikely that such a system exists, so it's probably fine not implement
a check, but it just feels fragile to be truncating the 64-bit address
to 32-bit on a kernel that _could_ support higher addresses, even though
that's exactly what is happening today (kind of by accident - I don't
think anyone realised.)

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-12-29 10:53 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-25 11:44 [PATCH 1/1] ARM: LPAE: use phys_addr_t instead of unsigned long in outercache hooks Zhen Lei
2020-12-25 11:44 ` Zhen Lei
2020-12-26  2:18 ` Leizhen (ThunderTown)
2020-12-26  2:18   ` Leizhen (ThunderTown)
2020-12-26 12:15   ` Russell King - ARM Linux admin
2020-12-26 12:15     ` Russell King - ARM Linux admin
2020-12-29  6:31     ` Leizhen (ThunderTown)
2020-12-29  6:31       ` Leizhen (ThunderTown)
2020-12-26 12:13 ` Russell King - ARM Linux admin
2020-12-26 12:13   ` Russell King - ARM Linux admin
2020-12-29  6:30   ` Leizhen (ThunderTown)
2020-12-29  6:30     ` Leizhen (ThunderTown)
2020-12-29 10:51     ` Russell King - ARM Linux admin [this message]
2020-12-29 10:51       ` Russell King - ARM Linux admin
2020-12-30  8:08       ` Leizhen (ThunderTown)
2020-12-30  8:08         ` Leizhen (ThunderTown)
2020-12-28  7:00 ` Arnd Bergmann
2020-12-28  7:00   ` Arnd Bergmann
2020-12-29  6:45   ` Leizhen (ThunderTown)
2020-12-29  6:45     ` Leizhen (ThunderTown)
2020-12-29 10:54   ` Russell King - ARM Linux admin
2020-12-29 10:54     ` Russell King - ARM Linux admin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201229105143.GL1551@shell.armlinux.org.uk \
    --to=linux@armlinux.org.uk \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=haojian.zhuang@gmail.com \
    --cc=jason@lakedaemon.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=thunder.leizhen@huawei.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.