All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Valentin Schneider <valentin.schneider@arm.com>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>,
	alpha <linux-alpha@vger.kernel.org>,
	Jeff Dike <jdike@addtoit.com>,
	Richard Weinberger <richard@nod.at>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	linux-um <linux-um@lists.infradead.org>,
	Brian Cain <bcain@codeaurora.org>,
	linux-hexagon@vger.kernel.org,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Ingo Molnar <mingo@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Daniel Bristot de Oliveira <bristot@redhat.com>,
	Will Deacon <will@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linux-MM <linux-mm@kvack.org>, Ingo Molnar <mingo@redhat.com>,
	Russell King <linux@armlinux.org.uk>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	linux-xtensa@linux-xtensa.org,
	Jani Nikula <jani.nikula@linux.intel.com>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	Shuah Khan <shuah@kernel.org>,
	rcu@vger.kernel.org,
	"open list:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>
Subject: Re: [patch 00/13] preempt: Make preempt count unconditional
Date: Tue, 15 Sep 2020 10:25:50 -0700	[thread overview]
Message-ID: <20200915172550.GO29330@paulmck-ThinkPad-P72> (raw)
In-Reply-To: <CAHk-=win80rdof8Pb=5k6gT9j_v+hz-TQzKPVastZDvBe9RimQ@mail.gmail.com>

On Mon, Sep 14, 2020 at 01:59:15PM -0700, Linus Torvalds wrote:
> On Mon, Sep 14, 2020 at 1:45 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > Recently merged code does:
> >
> >          gfp = preemptible() ? GFP_KERNEL : GFP_ATOMIC;
> >
> > Looks obviously correct, except for the fact that preemptible() is
> > unconditionally false for CONFIF_PREEMPT_COUNT=n, i.e. all allocations in
> > that code use GFP_ATOMIC on such kernels.
> 
> I don't think this is a good reason to entirely get rid of the no-preempt thing.
> 
> The above is just garbage. It's bogus. You can't do it.
> 
> Blaming the no-preempt code for this bug is extremely unfair, imho.
> 
> And the no-preempt code does help make for much better code generation
> for simple spinlocks.
> 
> Where is that horribly buggy recent code? It's not in that exact
> format, certainly, since 'grep' doesn't find it.

It would be convenient for that "gfp =" code to work, as this would
allow better cache locality while invoking RCU callbacks, and would
further provide better robustness to callback floods.  The full story
is quite long, but here are alternatives have not yet been proven to be
abject failures:

1.	Use workqueues to do the allocations in a clean context.
	While waiting for the allocations, the callbacks are queued
	in the old cache-busting manner.  This functions correctly,
	but in the meantime (which on busy systems can be some time)
	the cache locality and robustness are lost.

2.	Provide the ability to allocate memory in raw atomic context.
	This is extremely effective, especially when used in combination
	with #1 above, but as you might suspect, the MM guys don't like
	it much.

In contrast, with Thomas's patch series, call_rcu() and kvfree_rcu()
could just look at preemptible() to see whether or not it was safe to
allocate memory, even in !PREEMPT kernels -- and in the common case,
it almost always would be safe.  It is quite possible that this approach
would work in isolation, or failing that, that adding #1 above would do
the trick.

I understand that this is all very hand-wavy, and I do apologize for that.
If you really want the full sad story with performance numbers and the
works, let me know!

							Thanx, Paul

WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Juri Lelli <juri.lelli@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Ben Segall <bsegall@google.com>, Linux-MM <linux-mm@kvack.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	linux-hexagon@vger.kernel.org, Will Deacon <will@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Brian Cain <bcain@codeaurora.org>,
	Richard Weinberger <richard@nod.at>,
	Russell King <linux@armlinux.org.uk>,
	David Airlie <airlied@linux.ie>, Ingo Molnar <mingo@redhat.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Mel Gorman <mgorman@suse.de>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	Matt Turner <mattst88@gmail.com>,
	Valentin Schneider <valentin.schneider@arm.com>,
	linux-xtensa@linux-xtensa.org, Shuah Khan <shuah@kernel.org>,
	Jeff Dike <jdike@addtoit.com>,
	linux-um <linux-um@lists.infradead.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	rcu@vger.kernel.org, linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Jani Nikula <jani.nikula@linux.intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Richard Henderson <rth@twiddle.net>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Daniel Vetter <daniel@ffwll.ch>,
	alpha <linux-alpha@vger.kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Daniel Bristot de Oliveira <bristot@redhat.com>
Subject: Re: [patch 00/13] preempt: Make preempt count unconditional
Date: Tue, 15 Sep 2020 10:25:50 -0700	[thread overview]
Message-ID: <20200915172550.GO29330@paulmck-ThinkPad-P72> (raw)
In-Reply-To: <CAHk-=win80rdof8Pb=5k6gT9j_v+hz-TQzKPVastZDvBe9RimQ@mail.gmail.com>

On Mon, Sep 14, 2020 at 01:59:15PM -0700, Linus Torvalds wrote:
> On Mon, Sep 14, 2020 at 1:45 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > Recently merged code does:
> >
> >          gfp = preemptible() ? GFP_KERNEL : GFP_ATOMIC;
> >
> > Looks obviously correct, except for the fact that preemptible() is
> > unconditionally false for CONFIF_PREEMPT_COUNT=n, i.e. all allocations in
> > that code use GFP_ATOMIC on such kernels.
> 
> I don't think this is a good reason to entirely get rid of the no-preempt thing.
> 
> The above is just garbage. It's bogus. You can't do it.
> 
> Blaming the no-preempt code for this bug is extremely unfair, imho.
> 
> And the no-preempt code does help make for much better code generation
> for simple spinlocks.
> 
> Where is that horribly buggy recent code? It's not in that exact
> format, certainly, since 'grep' doesn't find it.

It would be convenient for that "gfp =" code to work, as this would
allow better cache locality while invoking RCU callbacks, and would
further provide better robustness to callback floods.  The full story
is quite long, but here are alternatives have not yet been proven to be
abject failures:

1.	Use workqueues to do the allocations in a clean context.
	While waiting for the allocations, the callbacks are queued
	in the old cache-busting manner.  This functions correctly,
	but in the meantime (which on busy systems can be some time)
	the cache locality and robustness are lost.

2.	Provide the ability to allocate memory in raw atomic context.
	This is extremely effective, especially when used in combination
	with #1 above, but as you might suspect, the MM guys don't like
	it much.

In contrast, with Thomas's patch series, call_rcu() and kvfree_rcu()
could just look at preemptible() to see whether or not it was safe to
allocate memory, even in !PREEMPT kernels -- and in the common case,
it almost always would be safe.  It is quite possible that this approach
would work in isolation, or failing that, that adding #1 above would do
the trick.

I understand that this is all very hand-wavy, and I do apologize for that.
If you really want the full sad story with performance numbers and the
works, let me know!

							Thanx, Paul

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

WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Juri Lelli <juri.lelli@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Ben Segall <bsegall@google.com>, Linux-MM <linux-mm@kvack.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	linux-hexagon@vger.kernel.org, Will Deacon <will@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Brian Cain <bcain@codeaurora.org>,
	Richard Weinberger <richard@nod.at>,
	Russell King <linux@armlinux.org.uk>,
	David Airlie <airlied@linux.ie>, Ingo Molnar <mingo@redhat.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Mel Gorman <mgorman@suse.de>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	Matt Turner <mattst88@gmail.com>,
	Valentin Schneider <valentin.schneider@arm.com>,
	linux-xtensa@linux-xtensa.org, Shuah Khan <shuah@kernel.org>,
	Jeff Dike <jdike@addtoit.com>,
	linux-um <linux-um@lists.infradead.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	rcu@vger.kernel.org, linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Richard Henderson <rth@twiddle.net>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	alpha <linux-alpha@vger.kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Daniel Bristot de Oliveira <bristot@redhat.com>
Subject: Re: [patch 00/13] preempt: Make preempt count unconditional
Date: Tue, 15 Sep 2020 10:25:50 -0700	[thread overview]
Message-ID: <20200915172550.GO29330@paulmck-ThinkPad-P72> (raw)
In-Reply-To: <CAHk-=win80rdof8Pb=5k6gT9j_v+hz-TQzKPVastZDvBe9RimQ@mail.gmail.com>

On Mon, Sep 14, 2020 at 01:59:15PM -0700, Linus Torvalds wrote:
> On Mon, Sep 14, 2020 at 1:45 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > Recently merged code does:
> >
> >          gfp = preemptible() ? GFP_KERNEL : GFP_ATOMIC;
> >
> > Looks obviously correct, except for the fact that preemptible() is
> > unconditionally false for CONFIF_PREEMPT_COUNT=n, i.e. all allocations in
> > that code use GFP_ATOMIC on such kernels.
> 
> I don't think this is a good reason to entirely get rid of the no-preempt thing.
> 
> The above is just garbage. It's bogus. You can't do it.
> 
> Blaming the no-preempt code for this bug is extremely unfair, imho.
> 
> And the no-preempt code does help make for much better code generation
> for simple spinlocks.
> 
> Where is that horribly buggy recent code? It's not in that exact
> format, certainly, since 'grep' doesn't find it.

It would be convenient for that "gfp =" code to work, as this would
allow better cache locality while invoking RCU callbacks, and would
further provide better robustness to callback floods.  The full story
is quite long, but here are alternatives have not yet been proven to be
abject failures:

1.	Use workqueues to do the allocations in a clean context.
	While waiting for the allocations, the callbacks are queued
	in the old cache-busting manner.  This functions correctly,
	but in the meantime (which on busy systems can be some time)
	the cache locality and robustness are lost.

2.	Provide the ability to allocate memory in raw atomic context.
	This is extremely effective, especially when used in combination
	with #1 above, but as you might suspect, the MM guys don't like
	it much.

In contrast, with Thomas's patch series, call_rcu() and kvfree_rcu()
could just look at preemptible() to see whether or not it was safe to
allocate memory, even in !PREEMPT kernels -- and in the common case,
it almost always would be safe.  It is quite possible that this approach
would work in isolation, or failing that, that adding #1 above would do
the trick.

I understand that this is all very hand-wavy, and I do apologize for that.
If you really want the full sad story with performance numbers and the
works, let me know!

							Thanx, Paul
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Juri Lelli <juri.lelli@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Ben Segall <bsegall@google.com>, Linux-MM <linux-mm@kvack.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	linux-hexagon@vger.kernel.org, Will Deacon <will@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Brian Cain <bcain@codeaurora.org>,
	Richard Weinberger <richard@nod.at>,
	Russell King <linux@armlinux.org.uk>,
	David Airlie <airlied@linux.ie>, Ingo Molnar <mingo@redhat.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Mel Gorman <mgorman@suse.de>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	Matt Turner <mattst88@gmail.com>,
	Valentin Schneider <valentin.schneider@arm.com>,
	linux-xtensa@linux-xtensa.org, Shuah Khan <shuah@kernel.org>,
	Jeff Dike <jdike@addtoit.com>,
	linux-um <linux-um@lists.infradead.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	rcu@vger.kernel.org, linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Thomas Gleixner <tglx@linutronix.de>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Richard Henderson <rth@twiddle.net>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	alpha <linux-alpha@vger.kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Daniel Bristot de Oliveira <bristot@redhat.com>
Subject: Re: [Intel-gfx] [patch 00/13] preempt: Make preempt count unconditional
Date: Tue, 15 Sep 2020 10:25:50 -0700	[thread overview]
Message-ID: <20200915172550.GO29330@paulmck-ThinkPad-P72> (raw)
In-Reply-To: <CAHk-=win80rdof8Pb=5k6gT9j_v+hz-TQzKPVastZDvBe9RimQ@mail.gmail.com>

On Mon, Sep 14, 2020 at 01:59:15PM -0700, Linus Torvalds wrote:
> On Mon, Sep 14, 2020 at 1:45 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > Recently merged code does:
> >
> >          gfp = preemptible() ? GFP_KERNEL : GFP_ATOMIC;
> >
> > Looks obviously correct, except for the fact that preemptible() is
> > unconditionally false for CONFIF_PREEMPT_COUNT=n, i.e. all allocations in
> > that code use GFP_ATOMIC on such kernels.
> 
> I don't think this is a good reason to entirely get rid of the no-preempt thing.
> 
> The above is just garbage. It's bogus. You can't do it.
> 
> Blaming the no-preempt code for this bug is extremely unfair, imho.
> 
> And the no-preempt code does help make for much better code generation
> for simple spinlocks.
> 
> Where is that horribly buggy recent code? It's not in that exact
> format, certainly, since 'grep' doesn't find it.

It would be convenient for that "gfp =" code to work, as this would
allow better cache locality while invoking RCU callbacks, and would
further provide better robustness to callback floods.  The full story
is quite long, but here are alternatives have not yet been proven to be
abject failures:

1.	Use workqueues to do the allocations in a clean context.
	While waiting for the allocations, the callbacks are queued
	in the old cache-busting manner.  This functions correctly,
	but in the meantime (which on busy systems can be some time)
	the cache locality and robustness are lost.

2.	Provide the ability to allocate memory in raw atomic context.
	This is extremely effective, especially when used in combination
	with #1 above, but as you might suspect, the MM guys don't like
	it much.

In contrast, with Thomas's patch series, call_rcu() and kvfree_rcu()
could just look at preemptible() to see whether or not it was safe to
allocate memory, even in !PREEMPT kernels -- and in the common case,
it almost always would be safe.  It is quite possible that this approach
would work in isolation, or failing that, that adding #1 above would do
the trick.

I understand that this is all very hand-wavy, and I do apologize for that.
If you really want the full sad story with performance numbers and the
works, let me know!

							Thanx, Paul
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Juri Lelli <juri.lelli@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Ben Segall <bsegall@google.com>, Linux-MM <linux-mm@kvack.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	linux-hexagon@vger.kernel.org, Will Deacon <will@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Brian Cain <bcain@codeaurora.org>,
	Richard Weinberger <richard@nod.at>,
	Russell King <linux@armlinux.org.uk>,
	David Airlie <airlied@linux.ie>, Ingo Molnar <mingo@redhat.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Mel Gorman <mgorman@suse.de>, intel-
Subject: Re: [patch 00/13] preempt: Make preempt count unconditional
Date: Tue, 15 Sep 2020 10:25:50 -0700	[thread overview]
Message-ID: <20200915172550.GO29330@paulmck-ThinkPad-P72> (raw)
In-Reply-To: <CAHk-=win80rdof8Pb=5k6gT9j_v+hz-TQzKPVastZDvBe9RimQ@mail.gmail.com>

On Mon, Sep 14, 2020 at 01:59:15PM -0700, Linus Torvalds wrote:
> On Mon, Sep 14, 2020 at 1:45 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > Recently merged code does:
> >
> >          gfp = preemptible() ? GFP_KERNEL : GFP_ATOMIC;
> >
> > Looks obviously correct, except for the fact that preemptible() is
> > unconditionally false for CONFIF_PREEMPT_COUNT=n, i.e. all allocations in
> > that code use GFP_ATOMIC on such kernels.
> 
> I don't think this is a good reason to entirely get rid of the no-preempt thing.
> 
> The above is just garbage. It's bogus. You can't do it.
> 
> Blaming the no-preempt code for this bug is extremely unfair, imho.
> 
> And the no-preempt code does help make for much better code generation
> for simple spinlocks.
> 
> Where is that horribly buggy recent code? It's not in that exact
> format, certainly, since 'grep' doesn't find it.

It would be convenient for that "gfp =" code to work, as this would
allow better cache locality while invoking RCU callbacks, and would
further provide better robustness to callback floods.  The full story
is quite long, but here are alternatives have not yet been proven to be
abject failures:

1.	Use workqueues to do the allocations in a clean context.
	While waiting for the allocations, the callbacks are queued
	in the old cache-busting manner.  This functions correctly,
	but in the meantime (which on busy systems can be some time)
	the cache locality and robustness are lost.

2.	Provide the ability to allocate memory in raw atomic context.
	This is extremely effective, especially when used in combination
	with #1 above, but as you might suspect, the MM guys don't like
	it much.

In contrast, with Thomas's patch series, call_rcu() and kvfree_rcu()
could just look at preemptible() to see whether or not it was safe to
allocate memory, even in !PREEMPT kernels -- and in the common case,
it almost always would be safe.  It is quite possible that this approach
would work in isolation, or failing that, that adding #1 above would do
the trick.

I understand that this is all very hand-wavy, and I do apologize for that.
If you really want the full sad story with performance numbers and the
works, let me know!

							Thanx, Paul

  parent reply	other threads:[~2020-09-15 17:47 UTC|newest]

Thread overview: 282+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-14 20:42 [patch 00/13] preempt: Make preempt count unconditional Thomas Gleixner
2020-09-14 20:42 ` Thomas Gleixner
2020-09-14 20:42 ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42 ` Thomas Gleixner
2020-09-14 20:42 ` Thomas Gleixner
2020-09-14 20:42 ` [patch 01/13] lib/debug: Remove pointless ARCH_NO_PREEMPT dependencies Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 02/13] preempt: Make preempt count unconditional Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 03/13] preempt: Clenaup PREEMPT_COUNT leftovers Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-16 10:56   ` Valentin Schneider
2020-09-16 10:56     ` Valentin Schneider
2020-09-16 10:56     ` [Intel-gfx] " Valentin Schneider
2020-09-16 10:56     ` Valentin Schneider
2020-09-14 20:42 ` [patch 04/13] lockdep: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-15 16:11   ` Will Deacon
2020-09-15 16:11     ` Will Deacon
2020-09-15 16:11     ` [Intel-gfx] " Will Deacon
2020-09-15 16:11     ` Will Deacon
2020-09-15 16:11     ` Will Deacon
2020-09-14 20:42 ` [patch 05/13] mm/pagemap: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-15  0:52   ` kernel test robot
2020-09-15  0:52     ` kernel test robot
2020-09-15  2:40   ` kernel test robot
2020-09-15  5:28   ` kernel test robot
2020-09-14 20:42 ` [patch 06/13] locking/bitspinlock: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-15 16:10   ` Will Deacon
2020-09-15 16:10     ` Will Deacon
2020-09-15 16:10     ` [Intel-gfx] " Will Deacon
2020-09-15 16:10     ` Will Deacon
2020-09-15 16:10     ` Will Deacon
2020-09-14 20:42 ` [patch 07/13] uaccess: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 08/13] sched: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-16 10:56   ` Valentin Schneider
2020-09-16 10:56     ` Valentin Schneider
2020-09-16 10:56     ` [Intel-gfx] " Valentin Schneider
2020-09-16 10:56     ` Valentin Schneider
2020-09-14 20:42 ` [patch 09/13] ARM: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 10/13] xtensa: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 11/13] drm/i915: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 12/13] rcutorture: " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42 ` [patch 13/13] preempt: Remove PREEMPT_COUNT from Kconfig Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` [Intel-gfx] " Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:42   ` Thomas Gleixner
2020-09-14 20:54 ` [patch 00/13] preempt: Make preempt count unconditional Steven Rostedt
2020-09-14 20:54   ` Steven Rostedt
2020-09-14 20:54   ` [Intel-gfx] " Steven Rostedt
2020-09-14 20:54   ` Steven Rostedt
2020-09-14 20:54   ` Steven Rostedt
2020-09-14 20:59 ` Linus Torvalds
2020-09-14 20:59   ` Linus Torvalds
2020-09-14 20:59   ` [Intel-gfx] " Linus Torvalds
2020-09-14 20:59   ` Linus Torvalds
2020-09-14 20:59   ` Linus Torvalds
2020-09-14 21:55   ` Thomas Gleixner
2020-09-14 21:55     ` Thomas Gleixner
2020-09-14 21:55     ` Thomas Gleixner
2020-09-14 21:55     ` [Intel-gfx] " Thomas Gleixner
2020-09-14 21:55     ` Thomas Gleixner
2020-09-14 21:55     ` Thomas Gleixner
2020-09-14 22:24     ` Linus Torvalds
2020-09-14 22:24       ` Linus Torvalds
2020-09-14 22:24       ` [Intel-gfx] " Linus Torvalds
2020-09-14 22:24       ` Linus Torvalds
2020-09-14 22:37       ` Linus Torvalds
2020-09-14 22:37         ` Linus Torvalds
2020-09-14 22:37         ` [Intel-gfx] " Linus Torvalds
2020-09-14 22:37         ` Linus Torvalds
2020-09-15  3:21         ` [PATCH] crypto: lib/chacha20poly1305 - Set SG_MITER_ATOMIC unconditionally Herbert Xu
2020-09-15  3:21           ` Herbert Xu
2020-09-15  3:21           ` Herbert Xu
2020-09-15  3:21           ` [Intel-gfx] " Herbert Xu
2020-09-15  3:21           ` Herbert Xu
2020-09-15  3:30         ` Herbert Xu
2020-09-15  6:03           ` Ard Biesheuvel
2020-09-15  6:40             ` Herbert Xu
2020-09-15  6:45           ` Linus Torvalds
2020-09-15  6:55             ` Linus Torvalds
2020-09-15  7:05               ` Herbert Xu
2020-09-15  7:10                 ` Ard Biesheuvel
2020-09-15  9:34                 ` Thomas Gleixner
2020-09-15 10:02                   ` Ard Biesheuvel
2020-09-15 10:05                     ` Herbert Xu
2020-09-15 10:08                       ` Ard Biesheuvel
2020-09-15 10:10                         ` Herbert Xu
2020-09-15 19:04                           ` Thomas Gleixner
2020-09-15  7:08               ` Ard Biesheuvel
2020-09-15  6:20         ` [patch 00/13] preempt: Make preempt count unconditional Ard Biesheuvel
2020-09-15  6:20           ` Ard Biesheuvel
2020-09-15  6:20           ` [Intel-gfx] " Ard Biesheuvel
2020-09-15  6:20           ` Ard Biesheuvel
2020-09-15  6:20           ` Ard Biesheuvel
2020-09-15  6:22           ` Herbert Xu
2020-09-15  6:22             ` Herbert Xu
2020-09-15  6:22             ` Herbert Xu
2020-09-15  6:22             ` [Intel-gfx] " Herbert Xu
2020-09-15  6:22             ` Herbert Xu
2020-09-15  6:39             ` Linus Torvalds
2020-09-15  6:39               ` Linus Torvalds
2020-09-15  6:39               ` [Intel-gfx] " Linus Torvalds
2020-09-15  6:39               ` Linus Torvalds
2020-09-15  6:39               ` Linus Torvalds
2020-09-15  7:24               ` Thomas Gleixner
2020-09-15  7:24                 ` Thomas Gleixner
2020-09-15  7:24                 ` [Intel-gfx] " Thomas Gleixner
2020-09-15 17:29                 ` Linus Torvalds
2020-09-15 17:29                   ` Linus Torvalds
2020-09-15 17:29                   ` [Intel-gfx] " Linus Torvalds
2020-09-15 17:29                   ` Linus Torvalds
2020-09-15 17:29                   ` Linus Torvalds
2020-09-15  8:39       ` Thomas Gleixner
2020-09-15  8:39         ` Thomas Gleixner
2020-09-15  8:39         ` Thomas Gleixner
2020-09-15  8:39         ` [Intel-gfx] " Thomas Gleixner
2020-09-15  8:39         ` Thomas Gleixner
2020-09-15 17:35         ` Linus Torvalds
2020-09-15 17:35           ` Linus Torvalds
2020-09-15 17:35           ` [Intel-gfx] " Linus Torvalds
2020-09-15 17:35           ` Linus Torvalds
2020-09-15 17:35           ` Linus Torvalds
2020-09-15 19:57           ` Thomas Gleixner
2020-09-15 19:57             ` Thomas Gleixner
2020-09-15 19:57             ` Thomas Gleixner
2020-09-15 19:57             ` [Intel-gfx] " Thomas Gleixner
2020-09-15 19:57             ` Thomas Gleixner
2020-09-15 19:57             ` Thomas Gleixner
2020-09-16 18:34             ` Linus Torvalds
2020-09-16 18:34               ` Linus Torvalds
2020-09-16 18:34               ` [Intel-gfx] " Linus Torvalds
2020-09-16 18:34               ` Linus Torvalds
2020-09-16 18:34               ` Linus Torvalds
2020-09-16  7:37           ` Daniel Vetter
2020-09-16  7:37             ` Daniel Vetter
2020-09-16  7:37             ` [Intel-gfx] " Daniel Vetter
2020-09-16  7:37             ` Daniel Vetter
2020-09-16  7:37             ` Daniel Vetter
2020-09-16 15:29             ` Paul E. McKenney
2020-09-16 15:29               ` Paul E. McKenney
2020-09-16 15:29               ` [Intel-gfx] " Paul E. McKenney
2020-09-16 15:29               ` Paul E. McKenney
2020-09-16 15:29               ` Paul E. McKenney
2020-09-16 18:32               ` Linus Torvalds
2020-09-16 18:32                 ` Linus Torvalds
2020-09-16 18:32                 ` [Intel-gfx] " Linus Torvalds
2020-09-16 18:32                 ` Linus Torvalds
2020-09-16 18:32                 ` Linus Torvalds
2020-09-16 20:43                 ` Paul E. McKenney
2020-09-16 20:43                   ` Paul E. McKenney
2020-09-16 20:43                   ` [Intel-gfx] " Paul E. McKenney
2020-09-16 20:43                   ` Paul E. McKenney
2020-09-16 20:43                   ` Paul E. McKenney
2020-09-17  6:38                 ` Ard Biesheuvel
2020-09-17  6:38                   ` Ard Biesheuvel
2020-09-17  6:38                   ` [Intel-gfx] " Ard Biesheuvel
2020-09-17  6:38                   ` Ard Biesheuvel
2020-09-17  6:38                   ` Ard Biesheuvel
2020-09-16 20:29               ` Daniel Vetter
2020-09-16 20:29                 ` Daniel Vetter
2020-09-16 20:29                 ` [Intel-gfx] " Daniel Vetter
2020-09-16 20:29                 ` Daniel Vetter
2020-09-16 20:29                 ` Daniel Vetter
2020-09-16 20:58                 ` Paul E. McKenney
2020-09-16 20:58                   ` Paul E. McKenney
2020-09-16 20:58                   ` [Intel-gfx] " Paul E. McKenney
2020-09-16 20:58                   ` Paul E. McKenney
2020-09-16 20:58                   ` Paul E. McKenney
2020-09-16 21:43                   ` Daniel Vetter
2020-09-16 21:43                     ` Daniel Vetter
2020-09-16 21:43                     ` [Intel-gfx] " Daniel Vetter
2020-09-16 21:43                     ` Daniel Vetter
2020-09-16 21:43                     ` Daniel Vetter
2020-09-16 22:39                     ` Paul E. McKenney
2020-09-16 22:39                       ` Paul E. McKenney
2020-09-16 22:39                       ` [Intel-gfx] " Paul E. McKenney
2020-09-16 22:39                       ` Paul E. McKenney
2020-09-16 22:39                       ` Paul E. McKenney
2020-09-17  7:52                       ` Daniel Vetter
2020-09-17  7:52                         ` Daniel Vetter
2020-09-17  7:52                         ` [Intel-gfx] " Daniel Vetter
2020-09-17  7:52                         ` Daniel Vetter
2020-09-17  7:52                         ` Daniel Vetter
2020-09-17 16:28                         ` Paul E. McKenney
2020-09-17 16:28                           ` Paul E. McKenney
2020-09-17 16:28                           ` [Intel-gfx] " Paul E. McKenney
2020-09-17 16:28                           ` Paul E. McKenney
2020-09-17 16:28                           ` Paul E. McKenney
2020-09-29  8:19                     ` Michal Hocko
2020-09-29  8:23                       ` [Intel-gfx] " Michal Hocko
2020-09-29  8:23                       ` Michal Hocko
2020-09-29  8:23                       ` Michal Hocko
2020-09-29  8:23                       ` Michal Hocko
2020-09-29  8:21                       ` [Intel-gfx] " Michal Hocko
2020-09-29  8:21                       ` Michal Hocko
2020-09-29  8:21                       ` Michal Hocko
2020-09-29  8:21                       ` Michal Hocko
2020-09-29  8:20                       ` [Intel-gfx] " Michal Hocko
2020-09-29  8:20                       ` Michal Hocko
2020-09-29  8:20                       ` Michal Hocko
2020-09-29  8:20                       ` Michal Hocko
2020-09-29  8:19                       ` [Intel-gfx] " Michal Hocko
2020-09-29  8:19                       ` Michal Hocko
2020-09-29  8:19                       ` Michal Hocko
2020-09-29  8:19                       ` Michal Hocko
2020-09-29  8:19                       ` Michal Hocko
2020-09-29  8:19                       ` [Intel-gfx] " Michal Hocko
2020-09-29  8:19                       ` Michal Hocko
2020-09-29  8:19                       ` Michal Hocko
2020-09-29  9:00                       ` Daniel Vetter
2020-09-29  9:00                         ` Daniel Vetter
2020-09-29  9:00                         ` [Intel-gfx] " Daniel Vetter
2020-09-29  9:00                         ` Daniel Vetter
2020-09-29  9:00                         ` Daniel Vetter
2020-09-29 14:54                         ` Michal Hocko
2020-09-29 14:54                           ` Michal Hocko
2020-09-29 14:54                           ` [Intel-gfx] " Michal Hocko
2020-09-29 14:54                           ` Michal Hocko
2020-09-29 14:54                           ` Michal Hocko
2020-09-16 19:23     ` Matthew Wilcox
2020-09-16 19:23       ` Matthew Wilcox
2020-09-16 19:23       ` [Intel-gfx] " Matthew Wilcox
2020-09-16 19:23       ` Matthew Wilcox
2020-09-16 19:23       ` Matthew Wilcox
2020-09-16 20:48       ` Paul E. McKenney
2020-09-16 20:48         ` Paul E. McKenney
2020-09-16 20:48         ` [Intel-gfx] " Paul E. McKenney
2020-09-16 20:48         ` Paul E. McKenney
2020-09-16 20:48         ` Paul E. McKenney
2020-09-15 17:25   ` Paul E. McKenney [this message]
2020-09-15 17:25     ` Paul E. McKenney
2020-09-15 17:25     ` [Intel-gfx] " Paul E. McKenney
2020-09-15 17:25     ` Paul E. McKenney
2020-09-15 17:25     ` Paul E. McKenney
2020-09-15 17:25     ` Paul E. McKenney
2020-09-14 22:01 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for " Patchwork

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=20200915172550.GO29330@paulmck-ThinkPad-P72 \
    --to=paulmck@kernel.org \
    --cc=airlied@linux.ie \
    --cc=akpm@linux-foundation.org \
    --cc=anton.ivanov@cambridgegreys.com \
    --cc=bcain@codeaurora.org \
    --cc=bigeasy@linutronix.de \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=chris@zankel.net \
    --cc=daniel@ffwll.ch \
    --cc=dietmar.eggemann@arm.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=geert@linux-m68k.org \
    --cc=ink@jurassic.park.msu.ru \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=jcmvbkbc@gmail.com \
    --cc=jdike@addtoit.com \
    --cc=jiangshanlai@gmail.com \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=josh@joshtriplett.org \
    --cc=juri.lelli@redhat.com \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-hexagon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-um@lists.infradead.org \
    --cc=linux-xtensa@linux-xtensa.org \
    --cc=linux@armlinux.org.uk \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mattst88@gmail.com \
    --cc=mgorman@suse.de \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rcu@vger.kernel.org \
    --cc=richard@nod.at \
    --cc=rodrigo.vivi@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=rth@twiddle.net \
    --cc=shuah@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=valentin.schneider@arm.com \
    --cc=vincent.guittot@linaro.org \
    --cc=will@kernel.org \
    /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.