All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ira Weiny <ira.weiny@intel.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Rik van Riel <riel@surriel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Dave Hansen <dave.hansen@linux.intel.com>, <x86@kernel.org>,
	<linux-kernel@vger.kernel.org>, <kernel-team@fb.com>
Subject: Re: [RFC PATCH 2/5] entry: Add calls for save/restore auxiliary pt_regs
Date: Tue, 9 Aug 2022 11:38:03 -0700	[thread overview]
Message-ID: <YvKpi/CVHko50PNQ@iweiny-desk3> (raw)
In-Reply-To: <YvJNe2rzXfcogFFX@zn.tnic>

On Tue, Aug 09, 2022 at 02:05:15PM +0200, Borislav Petkov wrote:
> On Fri, Aug 05, 2022 at 10:30:06AM -0700, ira.weiny@intel.com wrote:
> > From: Ira Weiny <ira.weiny@intel.com>
> > 
> > Some architectures have auxiliary pt_regs space available to store
> > information on the stack during exceptions.  This information is easier
> > to obtain and store within C code rather than in arch specific assembly.
> 
> There are others?

Other archs?  not now.

> 
> Because I would've done this whole thing in arch/x86/ only...

Thomas did a lot of work to make the entry code generic.  So I was keeping that
work consistent.  This also helps to ensure I did not miss any places.

> 
> > diff --git a/kernel/entry/common.c b/kernel/entry/common.c
> > index 8c0f334c4b75..a70a0f314aee 100644
> > --- a/kernel/entry/common.c
> > +++ b/kernel/entry/common.c
> > @@ -317,7 +317,7 @@ noinstr irqentry_state_t irqentry_enter(struct pt_regs *regs)
> >  
> >  	if (user_mode(regs)) {
> >  		irqentry_enter_from_user_mode(regs);
> > -		return ret;
> > +		goto aux_save;
> 
> Why do you have to goto and do the instrumentation sandwitch around it
> at the goto label?
> 
> Why not simply do
> 
> 	if (user_mode(regs)) {
> 		irqentry_enter_from_user_mode(regs);
> 		arch_save_aux_pt_regs(regs);
> 		return ret;

I don't believe this is correct because instrumentation is not enabled here.
See below.[1]

There are 3 exit paths from irqentry_enter().  All must call
arch_save_aux_pt_regs().  I felt the maintenance of the code would be easier if
I did not scatter those calls through the function and simply exited 1
place.[1]

FWICT calling instrumentation_{begin,end}() is a noop in production code.  So
there is no real cost to calling instrumentation_begin() -> end -> begin ->
end.  And the goto seemed low enough overhead.  Given the current discussion I
admit I may have made the wrong choice.  But I think I would add some comments
to the below to help future developers.

Ira

[1]

--- a/kernel/entry/common.c
+++ b/kernel/entry/common.c
@@ -317,6 +317,9 @@ noinstr irqentry_state_t irqentry_enter(struct pt_regs *regs)

        if (user_mode(regs)) {
                irqentry_enter_from_user_mode(regs);
+               instrumentation_begin();
+               arch_save_aux_pt_regs(regs);
+               instrumentation_end();
                return ret;
        }

@@ -353,6 +356,7 @@ noinstr irqentry_state_t irqentry_enter(struct pt_regs *regs)
                ct_irq_enter();
                instrumentation_begin();
                trace_hardirqs_off_finish();
+               arch_save_aux_pt_regs(regs);
                instrumentation_end();

                ret.exit_rcu = true;
@@ -369,6 +373,7 @@ noinstr irqentry_state_t irqentry_enter(struct pt_regs *regs)
        instrumentation_begin();
        rcu_irq_enter_check_tick();
        trace_hardirqs_off_finish();
+       arch_save_aux_pt_regs(regs);
        instrumentation_end();

        return ret;



  reply	other threads:[~2022-08-09 19:04 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-05 17:30 [RFC PATCH 0/5] Print CPU at segfault time ira.weiny
2022-08-05 17:30 ` [RFC PATCH 1/5] entry: Pass pt_regs to irqentry_exit_cond_resched() ira.weiny
2022-08-05 18:33   ` Rik van Riel
2022-08-08 10:38   ` Borislav Petkov
2022-08-08 17:34     ` Ira Weiny
2022-08-08 17:38       ` Borislav Petkov
2022-08-08 17:43         ` Dave Hansen
2022-08-08 17:52           ` Borislav Petkov
2022-08-09 23:18     ` Thomas Gleixner
2022-08-10  7:25       ` Thomas Gleixner
2022-08-05 17:30 ` [RFC PATCH 2/5] entry: Add calls for save/restore auxiliary pt_regs ira.weiny
2022-08-05 18:34   ` Rik van Riel
2022-08-09 12:05   ` Borislav Petkov
2022-08-09 18:38     ` Ira Weiny [this message]
2022-08-09 18:49       ` Borislav Petkov
2022-08-09 21:14         ` Thomas Gleixner
2022-08-09 21:38           ` Borislav Petkov
2022-08-09 22:33             ` Ira Weiny
2022-08-09 21:49         ` Ira Weiny
2022-08-09 23:53           ` Thomas Gleixner
2022-08-05 17:30 ` [RFC PATCH 3/5] x86/entry: Add auxiliary pt_regs space ira.weiny
2022-08-05 18:45   ` Rik van Riel
2022-08-05 17:30 ` [RFC PATCH 4/5] x86,mm: print likely CPU at segfault time ira.weiny
2022-08-05 17:30 ` [RFC PATCH 5/5] x86/entry: Store CPU info on exception entry ira.weiny
2022-08-05 18:46   ` Rik van Riel
2022-08-05 18:47   ` Dave Hansen
2022-08-06  9:01     ` Ingo Molnar
2022-08-06  9:11       ` Borislav Petkov
2022-08-07 10:02         ` Ingo Molnar
2022-08-07 10:35           ` Borislav Petkov
2022-08-07 20:02             ` Ira Weiny
2022-08-08 11:03               ` Ingo Molnar
2022-08-08 12:01                 ` Borislav Petkov
2022-08-09 20:06                   ` Thomas Gleixner
2022-08-08 16:16                 ` Dave Hansen
2022-08-08 17:24                   ` Rik van Riel
2022-08-09 21:19                   ` Andy Lutomirski

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=YvKpi/CVHko50PNQ@iweiny-desk3 \
    --to=ira.weiny@intel.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=riel@surriel.com \
    --cc=x86@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.