From: Peter Zijlstra <peterz@infradead.org>
To: Nikolay Borisov <nik.borisov@suse.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
David.Kaplan@amd.com, Andrew.Cooper3@citrix.com,
jpoimboe@kernel.org, gregkh@linuxfoundation.org
Subject: Re: [PATCH v2 10/11] x86/alternatives: Simplify ALTERNATIVE_n()
Date: Wed, 16 Aug 2023 00:44:19 +0200 [thread overview]
Message-ID: <20230815224419.GF971582@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <78fc3de7-9e7c-3fd0-e7d3-c94a3cc1df02@suse.com>
On Tue, Aug 15, 2023 at 11:49:16PM +0300, Nikolay Borisov wrote:
>
>
> On 14.08.23 г. 14:44 ч., Peter Zijlstra wrote:
> > Instead of making increasingly complicated ALTERNATIVE_n()
> > implementations, use a nested alternative expression.
> >
> > The only difference between:
> >
> > ALTERNATIVE_2(oldinst, newinst1, flag1, newinst2, flag2)
> >
> > and
> >
> > ALTERNATIVE(ALTERNATIVE(oldinst, newinst1, flag1),
> > newinst2, flag2)
> >
> > is that the outer alternative can add additional padding when the
> > inner alternative is the shorter one, which then results in
> > alt_instr::instrlen being inconsistent.
> >
> > However, this is easily remedied since the alt_instr entries will be
> > consecutive and it is trivial to compute the max(alt_instr::instrlen)
> > at runtime while patching.
> >
> > Specifically, after this patch the ALTERNATIVE_2 macro, after CPP
> > expansion (and manual layout), looks like this:
> >
> > .macro ALTERNATIVE_2 oldinstr, newinstr1, ft_flags1, newinstr2, ft_flags2
> > 140:
> >
> > 140: \oldinstr ;
> > 141: .skip -(((144f-143f)-(141b-140b)) > 0) * ((144f-143f)-(141b-140b)),0x90 ;
> > 142: .pushsection .altinstructions,"a" ;
> > altinstr_entry 140b,143f,\ft_flags1,142b-140b,144f-143f ;
> > .popsection ; .pushsection .altinstr_replacement,"ax" ;
> > 143: \newinstr1 ;
> > 144: .popsection ; ;
> >
> > 141: .skip -(((144f-143f)-(141b-140b)) > 0) * ((144f-143f)-(141b-140b)),0x90 ;
> > 142: .pushsection .altinstructions,"a" ;
> > altinstr_entry 140b,143f,\ft_flags2,142b-140b,144f-143f ;
> > .popsection ;
> > .pushsection .altinstr_replacement,"ax" ;
> > 143: \newinstr2 ;
> > 144: .popsection ;
> > .endm
> >
> > The only label that is ambiguous is 140, however they all reference
> > the same spot, so that doesn't matter.
> >
> > NOTE: obviously only @oldinstr may be an alternative; making @newinstr
> > an alternative would mean patching .altinstr_replacement which very
> > likely isn't what is intended, also the labels will be confused in
> > that case.
> >
>
> Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
>
> Ps. I feel very "enlightened" knowing that GAS uses -1 to represent true ...
Ah, but only sometimes ;-)
next prev parent reply other threads:[~2023-08-15 22:45 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-14 11:44 [PATCH v2 00/11] Fix up SRSO stuff Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 01/11] x86/cpu: Fixup __x86_return_thunk Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] x86/cpu: Fix __x86_return_thunk symbol type tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 02/11] x86/cpu: Fix up srso_safe_ret() and __x86_return_thunk() Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 03/11] objtool/x86: Fix SRSO mess Peter Zijlstra
2023-08-14 12:54 ` Andrew.Cooper3
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 11:59 ` Peter Zijlstra
2023-08-16 20:31 ` Josh Poimboeuf
2023-08-16 22:08 ` [PATCH] objtool/x86: Fixup frame-pointer vs rethunk Peter Zijlstra
2023-08-16 22:22 ` Josh Poimboeuf
2023-08-17 8:39 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 04/11] x86/alternative: Make custom return thunk unconditional Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 05/11] x86/cpu: Clean up SRSO return thunk mess Peter Zijlstra
2023-08-14 13:02 ` Borislav Petkov
2023-08-14 17:48 ` Borislav Petkov
2023-08-15 21:29 ` Nathan Chancellor
2023-08-15 22:43 ` Peter Zijlstra
2023-08-16 7:38 ` Borislav Petkov
2023-08-16 14:52 ` Nathan Chancellor
2023-08-16 15:08 ` Borislav Petkov
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 18:58 ` Nathan Chancellor
2023-08-16 19:24 ` Borislav Petkov
2023-08-16 19:30 ` Nathan Chancellor
2023-08-16 19:42 ` Borislav Petkov
2023-08-16 19:57 ` Borislav Petkov
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 06/11] x86/cpu: Rename original retbleed methods Peter Zijlstra
2023-08-14 19:41 ` Josh Poimboeuf
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 07/11] x86/cpu: Rename srso_(.*)_alias to srso_alias_\1 Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 08/11] x86/cpu: Cleanup the untrain mess Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 09/11] x86/cpu/kvm: Provide UNTRAIN_RET_VM Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 10/11] x86/alternatives: Simplify ALTERNATIVE_n() Peter Zijlstra
2023-08-15 20:49 ` Nikolay Borisov
2023-08-15 22:44 ` Peter Zijlstra [this message]
2023-09-07 8:31 ` Borislav Petkov
2023-09-07 11:09 ` Peter Zijlstra
2023-09-07 11:11 ` Peter Zijlstra
2023-09-07 11:16 ` Peter Zijlstra
2023-09-07 15:06 ` Borislav Petkov
2023-09-07 15:30 ` Borislav Petkov
2023-09-09 7:50 ` Borislav Petkov
2023-09-09 9:25 ` Peter Zijlstra
2023-09-09 9:42 ` Peter Zijlstra
2023-09-10 14:42 ` Borislav Petkov
2023-09-12 9:27 ` Peter Zijlstra
2023-09-12 9:44 ` Peter Zijlstra
2023-09-13 4:37 ` Borislav Petkov
2023-09-13 8:46 ` Peter Zijlstra
2023-09-13 14:38 ` Borislav Petkov
2023-09-13 16:14 ` Peter Zijlstra
2023-09-15 7:46 ` Peter Zijlstra
2023-09-15 7:51 ` Peter Zijlstra
2023-09-15 12:05 ` Borislav Petkov
2023-09-13 4:24 ` Borislav Petkov
2023-08-14 11:44 ` [PATCH v2 11/11] x86/cpu: Use fancy alternatives to get rid of entry_untrain_ret() Peter Zijlstra
2023-08-14 16:44 ` [PATCH v2 00/11] Fix up SRSO stuff Borislav Petkov
2023-08-14 19:51 ` Josh Poimboeuf
2023-08-14 19:57 ` Borislav Petkov
2023-08-14 20:01 ` Josh Poimboeuf
2023-08-14 20:09 ` Borislav Petkov
2023-08-15 14:26 ` [PATCH] x86/srso: Explain the untraining sequences a bit more Borislav Petkov
2023-08-15 15:41 ` Nikolay Borisov
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=20230815224419.GF971582@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=Andrew.Cooper3@citrix.com \
--cc=David.Kaplan@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nik.borisov@suse.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome