All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Alexandre Ghiti" <alex@ghiti.fr>,
	"Samuel Holland" <samuel.holland@sifive.com>,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>
Cc: "Palmer Dabbelt" <palmer@dabbelt.com>,
	linux-riscv@lists.infradead.org,
	"Albert Ou" <aou@eecs.berkeley.edu>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Charlie Jenkins" <charlie@rivosinc.com>,
	guoren <guoren@kernel.org>, "Jisheng Zhang" <jszhang@kernel.org>,
	"Kemeng Shi" <shikemeng@huaweicloud.com>,
	"Matthew Wilcox" <willy@infradead.org>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Paul Walmsley" <paul.walmsley@sifive.com>,
	"Xiao W Wang" <xiao.w.wang@intel.com>,
	"Yangyu Chen" <cyy@cyyself.name>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] riscv: Define TASK_SIZE_MAX for __access_ok()
Date: Sun, 24 Mar 2024 23:05:52 +0100	[thread overview]
Message-ID: <b0a07878-a9f1-40aa-b177-423b05137d2e@app.fastmail.com> (raw)
In-Reply-To: <b5624bba-9917-421b-8ef0-4515d442f80b@ghiti.fr>

On Tue, Mar 19, 2024, at 17:51, Alexandre Ghiti wrote:
> On 18/03/2024 22:29, Samuel Holland wrote:
>> On 2024-03-18 3:50 PM, Alexandre Ghiti wrote:
>>> On Wed, Mar 13, 2024 at 7:00 PM Samuel Holland
>> It looks like the call to fixup_exception() [added
>> in 416721ff05fd ("riscv, mm: Perform BPF exhandler fixup on page fault")] is
>> only intended to catch null pointer dereferences. So making the change wouldn't
>> have any functional impact, but it would still be a valid optimization.
>>
>>> Or I was wondering if it would not be better to do like x86 and use an
>>> alternative, it would be more correct (even though I believe your
>>> solution works)
>>> https://elixir.bootlin.com/linux/latest/source/arch/x86/include/asm/page_64.h#L82.
>> What would be the benefit of using an alternative? Any access to an address
>> between TASK_SIZE and TASK_SIZE_MAX is guaranteed to generate a page fault, so
>> the only benefit I see is returning -EFAULT slightly faster at the cost of
>> applying a few hundred alternatives at boot. But it's possible I'm missing
>> something.
>
>
> The use of alternatives allows to return right away if the buffer is 
> beyond the usable user address space, and it's not just "slightly 
> faster" for some cases (a very large buffer with only a few bytes being 
> beyond the limit or someone could fault-in all the user pages and fail 
> very late...etc). access_ok() is here to guarantee that such situations 
> don't happen, so actually it makes more sense to use an alternative to 
> avoid that.

The access_ok() function really wants a compile-time constant
value for TASK_SIZE_MAX so it can do constant folding for
repeated calls inside of one function, so for configurations
with a boot-time selected TASK_SIZE_64 it's already not ideal,
with or without alternatives.

If I read the current code correctly, riscv doesn't even
have a way to build with a compile-time selected
VA_BITS/PGDIR_SIZE, which is probably a better place to
start optimizing, since this rarely needs to be selected
dynamically.

      Arnd

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

WARNING: multiple messages have this Message-ID (diff)
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Alexandre Ghiti" <alex@ghiti.fr>,
	"Samuel Holland" <samuel.holland@sifive.com>,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>
Cc: "Palmer Dabbelt" <palmer@dabbelt.com>,
	linux-riscv@lists.infradead.org,
	"Albert Ou" <aou@eecs.berkeley.edu>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Charlie Jenkins" <charlie@rivosinc.com>,
	guoren <guoren@kernel.org>, "Jisheng Zhang" <jszhang@kernel.org>,
	"Kemeng Shi" <shikemeng@huaweicloud.com>,
	"Matthew Wilcox" <willy@infradead.org>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Paul Walmsley" <paul.walmsley@sifive.com>,
	"Xiao W Wang" <xiao.w.wang@intel.com>,
	"Yangyu Chen" <cyy@cyyself.name>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] riscv: Define TASK_SIZE_MAX for __access_ok()
Date: Sun, 24 Mar 2024 23:05:52 +0100	[thread overview]
Message-ID: <b0a07878-a9f1-40aa-b177-423b05137d2e@app.fastmail.com> (raw)
In-Reply-To: <b5624bba-9917-421b-8ef0-4515d442f80b@ghiti.fr>

On Tue, Mar 19, 2024, at 17:51, Alexandre Ghiti wrote:
> On 18/03/2024 22:29, Samuel Holland wrote:
>> On 2024-03-18 3:50 PM, Alexandre Ghiti wrote:
>>> On Wed, Mar 13, 2024 at 7:00 PM Samuel Holland
>> It looks like the call to fixup_exception() [added
>> in 416721ff05fd ("riscv, mm: Perform BPF exhandler fixup on page fault")] is
>> only intended to catch null pointer dereferences. So making the change wouldn't
>> have any functional impact, but it would still be a valid optimization.
>>
>>> Or I was wondering if it would not be better to do like x86 and use an
>>> alternative, it would be more correct (even though I believe your
>>> solution works)
>>> https://elixir.bootlin.com/linux/latest/source/arch/x86/include/asm/page_64.h#L82.
>> What would be the benefit of using an alternative? Any access to an address
>> between TASK_SIZE and TASK_SIZE_MAX is guaranteed to generate a page fault, so
>> the only benefit I see is returning -EFAULT slightly faster at the cost of
>> applying a few hundred alternatives at boot. But it's possible I'm missing
>> something.
>
>
> The use of alternatives allows to return right away if the buffer is 
> beyond the usable user address space, and it's not just "slightly 
> faster" for some cases (a very large buffer with only a few bytes being 
> beyond the limit or someone could fault-in all the user pages and fail 
> very late...etc). access_ok() is here to guarantee that such situations 
> don't happen, so actually it makes more sense to use an alternative to 
> avoid that.

The access_ok() function really wants a compile-time constant
value for TASK_SIZE_MAX so it can do constant folding for
repeated calls inside of one function, so for configurations
with a boot-time selected TASK_SIZE_64 it's already not ideal,
with or without alternatives.

If I read the current code correctly, riscv doesn't even
have a way to build with a compile-time selected
VA_BITS/PGDIR_SIZE, which is probably a better place to
start optimizing, since this rarely needs to be selected
dynamically.

      Arnd

  parent reply	other threads:[~2024-03-24 22:06 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-13 17:59 [PATCH] riscv: Define TASK_SIZE_MAX for __access_ok() Samuel Holland
2024-03-13 17:59 ` Samuel Holland
2024-03-18 20:50 ` Alexandre Ghiti
2024-03-18 20:50   ` Alexandre Ghiti
2024-03-18 21:29   ` Samuel Holland
2024-03-18 21:29     ` Samuel Holland
2024-03-19 16:51     ` Alexandre Ghiti
2024-03-19 16:51       ` Alexandre Ghiti
2024-03-24 19:42       ` David Laight
2024-03-24 19:42         ` David Laight
2024-03-25  7:30         ` Alexandre Ghiti
2024-03-25  7:30           ` Alexandre Ghiti
2024-03-25  9:30           ` David Laight
2024-03-25  9:30             ` David Laight
2024-03-25 16:39           ` Mark Rutland
2024-03-25 16:39             ` Mark Rutland
2024-03-25 18:02             ` Arnd Bergmann
2024-03-25 18:02               ` Arnd Bergmann
2024-03-25 18:30               ` Mark Rutland
2024-03-25 18:30                 ` Mark Rutland
2024-03-25 19:20                 ` Samuel Holland
2024-03-25 19:20                   ` Samuel Holland
2024-03-25 20:38                 ` Arnd Bergmann
2024-03-25 20:38                   ` Arnd Bergmann
2024-03-26 10:19                   ` David Laight
2024-03-26 10:19                     ` David Laight
2024-03-26 14:49                     ` Mark Rutland
2024-03-26 14:49                       ` Mark Rutland
2024-03-25 20:12             ` Alexandre Ghiti
2024-03-25 20:12               ` Alexandre Ghiti
2024-03-24 22:05       ` Arnd Bergmann [this message]
2024-03-24 22:05         ` Arnd Bergmann
2024-03-25  7:25         ` Alexandre Ghiti
2024-03-25  7:25           ` Alexandre Ghiti
2024-03-25 11:15           ` Arnd Bergmann
2024-03-25 11:15             ` Arnd Bergmann
2024-03-25 20:40 ` Arnd Bergmann
2024-03-25 20:40   ` Arnd Bergmann

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=b0a07878-a9f1-40aa-b177-423b05137d2e@app.fastmail.com \
    --to=arnd@arndb.de \
    --cc=akpm@linux-foundation.org \
    --cc=alex@ghiti.fr \
    --cc=alexghiti@rivosinc.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=charlie@rivosinc.com \
    --cc=cyy@cyyself.name \
    --cc=guoren@kernel.org \
    --cc=jszhang@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=rppt@kernel.org \
    --cc=samuel.holland@sifive.com \
    --cc=shikemeng@huaweicloud.com \
    --cc=willy@infradead.org \
    --cc=xiao.w.wang@intel.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.