From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Arnd Bergmann <arnd@kernel.org>
Cc: v.narang@samsung.com, a.sahrawat@samsung.com,
Marc Zyngier <maz@kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Vincent Whitchurch <vincent.whitchurch@axis.com>,
Nick Desaulniers <ndesaulniers@google.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Nathan Huckleberry <nhuck@google.com>,
Jian Cai <caij2003@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Dmitry Safonov <0x7f454c46@gmail.com>,
Maninder Singh <maninder1.s@samsung.com>,
Andrew Morton <akpm@linux-foundation.org>,
Will Deacon <will@kernel.org>,
Valentin Schneider <valentin.schneider@arm.com>,
Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 2/3] arm: introduce IRQ stacks
Date: Wed, 21 Oct 2020 13:57:40 +0100 [thread overview]
Message-ID: <20201021125740.GM1551@shell.armlinux.org.uk> (raw)
In-Reply-To: <20201021124542.GL1551@shell.armlinux.org.uk>
On Wed, Oct 21, 2020 at 01:45:42PM +0100, Russell King - ARM Linux admin wrote:
> On Wed, Oct 21, 2020 at 02:42:48PM +0200, Arnd Bergmann wrote:
> > (also resending this reply from @kernel.org)
> >
> > On Fri, Oct 16, 2020 at 12:19 PM Arnd Bergmann <arnd@arndb.de> wrote:
> > > On Thu, Oct 8, 2020 at 9:20 AM Maninder Singh <maninder1.s@samsung.com> wrote:
> > > >
> > > > This patch adds code for switching to IRQ stack.
> > > > IRQ stack and Kernel SVC stack have below design.
> > > >
> > > > IRQ STACK:-
> > > > ------------ IRQ stack top
> > > > | |
> > > > ------------
> > > > . .
> > > > . .
> > > > . .
> > > > ------------
> > > > | sp | <- irq_stack_base + 0x8
> > > > ------------
> > > > | fp | <- irq_stack_base + 0x4
> > > > ------------
> > > > |tinfo_ptr | /* pointer to thread info */
> > > > irq_stack_ptr --> ------------ IRQ stack base
> > > >
> > > > Kernel SVC stack:-
> > > > ------------ Kernel stack top
> > > > | |
> > > > ------------
> > > > . .
> > > > . .
> > > > . .
> > > > ------------
> > > > | |
> > > > | |
> > > > ------------
> > > > |tinfo_ptr | /* pointer to thread info */
> > > > ------------ Kernel stack base
> > >
> > > The extra indirection doesn't look great, and I don't see any of the
> > > other architectures need that. Since we can access percpu data
> > > without going through thread_info, maybe doing the same as
> > > x86 would work here:
> > >
> > > - define 'current' as 'this_cpu_read_stable(current_task);'
> > > - convert to CONFIG_THREAD_INFO_IN_TASK
>
> That means we need to also code that up in assembly - remember, we
> need to access thread_info from assembly code.
Note also that there is a circular dependency involved. If you make
thread_info accessible via per-cpu, then:
#ifndef __my_cpu_offset
#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
#endif
#ifdef CONFIG_DEBUG_PREEMPT
#define my_cpu_offset per_cpu_offset(smp_processor_id())
#else
#define my_cpu_offset __my_cpu_offset
#endif
smp_processor_id() ultimately ends up as raw_smp_processor_id() which
is:
#define raw_smp_processor_id() (current_thread_info()->cpu)
and if current_thread_info() itself involves reading from per-cpu data,
we end up recursing... infinitely.
This is why I said in the other thread:
"We don't do it because we don't have a separate register to be able
to store the thread_info pointer, and copying that lump between the
SVC and IRQ stack will add massively to IRQ latency, especially for
older machines."
--
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
WARNING: multiple messages have this Message-ID (diff)
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Arnd Bergmann <arnd@kernel.org>
Cc: v.narang@samsung.com, a.sahrawat@samsung.com,
Andrew Morton <akpm@linux-foundation.org>,
Marc Zyngier <maz@kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Vincent Whitchurch <vincent.whitchurch@axis.com>,
Nick Desaulniers <ndesaulniers@google.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Valentin Schneider <valentin.schneider@arm.com>,
Dmitry Safonov <0x7f454c46@gmail.com>,
Maninder Singh <maninder1.s@samsung.com>,
Thomas Gleixner <tglx@linutronix.de>,
Nathan Huckleberry <nhuck@google.com>,
Will Deacon <will@kernel.org>, Jian Cai <caij2003@gmail.com>,
Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 2/3] arm: introduce IRQ stacks
Date: Wed, 21 Oct 2020 13:57:40 +0100 [thread overview]
Message-ID: <20201021125740.GM1551@shell.armlinux.org.uk> (raw)
In-Reply-To: <20201021124542.GL1551@shell.armlinux.org.uk>
On Wed, Oct 21, 2020 at 01:45:42PM +0100, Russell King - ARM Linux admin wrote:
> On Wed, Oct 21, 2020 at 02:42:48PM +0200, Arnd Bergmann wrote:
> > (also resending this reply from @kernel.org)
> >
> > On Fri, Oct 16, 2020 at 12:19 PM Arnd Bergmann <arnd@arndb.de> wrote:
> > > On Thu, Oct 8, 2020 at 9:20 AM Maninder Singh <maninder1.s@samsung.com> wrote:
> > > >
> > > > This patch adds code for switching to IRQ stack.
> > > > IRQ stack and Kernel SVC stack have below design.
> > > >
> > > > IRQ STACK:-
> > > > ------------ IRQ stack top
> > > > | |
> > > > ------------
> > > > . .
> > > > . .
> > > > . .
> > > > ------------
> > > > | sp | <- irq_stack_base + 0x8
> > > > ------------
> > > > | fp | <- irq_stack_base + 0x4
> > > > ------------
> > > > |tinfo_ptr | /* pointer to thread info */
> > > > irq_stack_ptr --> ------------ IRQ stack base
> > > >
> > > > Kernel SVC stack:-
> > > > ------------ Kernel stack top
> > > > | |
> > > > ------------
> > > > . .
> > > > . .
> > > > . .
> > > > ------------
> > > > | |
> > > > | |
> > > > ------------
> > > > |tinfo_ptr | /* pointer to thread info */
> > > > ------------ Kernel stack base
> > >
> > > The extra indirection doesn't look great, and I don't see any of the
> > > other architectures need that. Since we can access percpu data
> > > without going through thread_info, maybe doing the same as
> > > x86 would work here:
> > >
> > > - define 'current' as 'this_cpu_read_stable(current_task);'
> > > - convert to CONFIG_THREAD_INFO_IN_TASK
>
> That means we need to also code that up in assembly - remember, we
> need to access thread_info from assembly code.
Note also that there is a circular dependency involved. If you make
thread_info accessible via per-cpu, then:
#ifndef __my_cpu_offset
#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
#endif
#ifdef CONFIG_DEBUG_PREEMPT
#define my_cpu_offset per_cpu_offset(smp_processor_id())
#else
#define my_cpu_offset __my_cpu_offset
#endif
smp_processor_id() ultimately ends up as raw_smp_processor_id() which
is:
#define raw_smp_processor_id() (current_thread_info()->cpu)
and if current_thread_info() itself involves reading from per-cpu data,
we end up recursing... infinitely.
This is why I said in the other thread:
"We don't do it because we don't have a separate register to be able
to store the thread_info pointer, and copying that lump between the
SVC and IRQ stack will add massively to IRQ latency, especially for
older machines."
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2020-10-21 12:59 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20201008071628epcas5p24d196a6023a47a3b0bfa7b7f231ec811@epcas5p2.samsung.com>
2020-10-08 7:15 ` [PATCH 0/3] IRQ stack support for ARM Maninder Singh
2020-10-08 7:15 ` Maninder Singh
2020-10-08 7:15 ` [PATCH 1/3] arm: introduce self pointer in thread info Maninder Singh
2020-10-08 7:15 ` Maninder Singh
2020-10-08 7:15 ` [PATCH 2/3] arm: introduce IRQ stacks Maninder Singh
2020-10-08 7:15 ` Maninder Singh
[not found] ` <CAK8P3a2RYeNiTy9QmwFVKtFifXxWc9XfAT6ThPoSH9wGYsKGpA@mail.gmail.com>
2020-10-21 12:42 ` Arnd Bergmann
2020-10-21 12:42 ` Arnd Bergmann
2020-10-21 12:45 ` Russell King - ARM Linux admin
2020-10-21 12:45 ` Russell King - ARM Linux admin
2020-10-21 12:55 ` Arnd Bergmann
2020-10-21 12:55 ` Arnd Bergmann
2020-10-21 12:57 ` Russell King - ARM Linux admin [this message]
2020-10-21 12:57 ` Russell King - ARM Linux admin
2020-10-21 13:46 ` Vaneet Narang
2020-10-21 13:46 ` Vaneet Narang
2020-10-21 15:59 ` Arnd Bergmann
2020-10-21 15:59 ` Arnd Bergmann
2020-11-09 14:45 ` Tony Lindgren
2020-11-09 14:45 ` Tony Lindgren
2020-11-09 19:10 ` Arnd Bergmann
2020-11-09 19:10 ` Arnd Bergmann
2020-11-10 9:19 ` Tony Lindgren
2020-11-10 9:19 ` Tony Lindgren
2020-11-10 10:04 ` Arnd Bergmann
2020-11-10 10:04 ` Arnd Bergmann
2020-11-10 12:04 ` Tony Lindgren
2020-11-10 12:04 ` Tony Lindgren
2020-11-10 13:35 ` Arnd Bergmann
2020-11-10 13:35 ` Arnd Bergmann
2020-11-11 6:56 ` Tony Lindgren
2020-11-11 6:56 ` Tony Lindgren
2020-10-08 7:15 ` [PATCH 3/3] arm: Modify stack trace and dump for use with irq stack Maninder Singh
2020-10-08 7:15 ` Maninder Singh
2020-10-08 7:53 ` [PATCH 0/3] IRQ stack support for ARM Sebastian Andrzej Siewior
2020-10-08 7:53 ` Sebastian Andrzej Siewior
2020-10-08 8:30 ` Russell King - ARM Linux admin
2020-10-08 8:30 ` Russell King - ARM Linux admin
2020-10-15 20:59 ` Nick Desaulniers
2020-10-15 20:59 ` Nick Desaulniers
2020-10-15 21:16 ` Florian Fainelli
2020-10-15 21:16 ` Florian Fainelli
[not found] ` <CAK8P3a0h=D8_Kn_fpHbsik_jf4to2jayxj7K7B7=HaNFzKqNnw@mail.gmail.com>
2020-10-21 11:58 ` Arnd Bergmann
2020-10-21 11:58 ` Arnd Bergmann
2020-10-21 12:34 ` Russell King - ARM Linux admin
2020-10-21 12:34 ` Russell King - ARM Linux admin
2020-10-21 12:46 ` Arnd Bergmann
2020-10-21 12:46 ` Arnd Bergmann
2020-10-08 13:04 [PATCH 2/3] arm: introduce IRQ stacks kernel test robot
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=20201021125740.GM1551@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=0x7f454c46@gmail.com \
--cc=a.sahrawat@samsung.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=caij2003@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maninder1.s@samsung.com \
--cc=maz@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nhuck@google.com \
--cc=tglx@linutronix.de \
--cc=v.narang@samsung.com \
--cc=valentin.schneider@arm.com \
--cc=vincent.whitchurch@axis.com \
--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.