From: Thomas Gleixner <tglx@linutronix.de>
To: andrew.cooper3@citrix.com, Xin Li <xin3.li@intel.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org,
kvm@vger.kernel.org, xen-devel@lists.xenproject.org
Cc: mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, luto@kernel.org,
pbonzini@redhat.com, seanjc@google.com, peterz@infradead.org,
jgross@suse.com, ravi.v.shankar@intel.com, mhiramat@kernel.org,
jiangshanlai@gmail.com
Subject: Re: [PATCH v10 03/38] x86/msr: Add the WRMSRNS instruction support
Date: Fri, 15 Sep 2023 02:42:49 +0200 [thread overview]
Message-ID: <87r0n01d2u.ffs@tglx> (raw)
In-Reply-To: <7ba4ae3e-f75d-66a8-7669-b6eb17c1aa1c@citrix.com>
On Fri, Sep 15 2023 at 00:46, andrew wrote:
> On 15/09/2023 12:00 am, Thomas Gleixner wrote:
> What I meant was "there should be the two top-level APIs, and under the
> covers they DTRT". Part of doing the right thing is to wire up paravirt
> for configs where that is specified.
>
> Anything else is going to force people to write logic of the form:
>
> if (WRMSRNS && !XENPV)
> wrmsr_ns(...)
> else
> wrmsr(...)
>
> which is going to be worse overall.
I already agreed with that for generic code which might be affected by
PV. But code which is explicitely depending on something which never can
be affected by PV _and_ is in a performance sensitive code path really
wants to be able to use the native variant explicitely.
> And there really is one example of this antipattern already in the
> series.
No. There is no antipattern in this series. The only place which uses
wrmsrns() is:
@@ -70,9 +70,13 @@ static inline void update_task_stack(str
#ifdef CONFIG_X86_32
this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0);
#else
- /* Xen PV enters the kernel on the thread stack. */
- if (cpu_feature_enabled(X86_FEATURE_XENPV))
+ if (cpu_feature_enabled(X86_FEATURE_FRED)) {
+ /* WRMSRNS is a baseline feature for FRED. */
+ wrmsrns(MSR_IA32_FRED_RSP0, (unsigned long)task_stack_page(task) + THREAD_SIZE);
+ } else if (cpu_feature_enabled(X86_FEATURE_XENPV)) {
+ /* Xen PV enters the kernel on the thread stack. */
load_sp0(task_top_of_stack(task));
+ }
#endif
}
The XENPV condition exists already today and is required independent of
FRED, no?
I deliberately distinguished #1 and #3 on my proposed todo list exactly
because the above use case really wants #1 without the extra bells and
whistles of a generic PV patchable wrmrs_ns() variant. Why?
No matter how clever the enhanced PV implementation might be, it is
guaranteed to generate worse code than the straight forward native
inline assembly. Simply because it has to prevent the compiler from
being overly clever on optimizations as it obviously mandates wider
register restrictions, while the pure native variant (independent of
the availability of X86_FEATURE_WRMSRNS) ony mandates the requirements
of WRMSR[NS], but not the extra register indirection of the call ABI.
I'm not debating that any other code pattern like you pointed out in
some generic code would be horrible, but I'm not buying your strawman
related to this particular usage site.
Thanks,
tglx
next prev parent reply other threads:[~2023-09-15 0:42 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-14 4:47 [PATCH v10 00/38] x86: enable FRED for x86-64 Xin Li
2023-09-14 4:47 ` [PATCH v10 01/38] x86/cpufeatures: Add the cpu feature bit for WRMSRNS Xin Li
2023-09-14 4:47 ` [PATCH v10 02/38] x86/opcode: Add the WRMSRNS instruction to the x86 opcode map Xin Li
2023-09-15 5:47 ` Masami Hiramatsu
2023-09-14 4:47 ` [PATCH v10 03/38] x86/msr: Add the WRMSRNS instruction support Xin Li
2023-09-14 6:02 ` Juergen Gross
2023-09-14 13:01 ` andrew.cooper3
2023-09-14 14:05 ` andrew.cooper3
2023-09-14 23:00 ` Thomas Gleixner
2023-09-14 23:34 ` H. Peter Anvin
2023-09-14 23:46 ` andrew.cooper3
2023-09-15 0:12 ` Thomas Gleixner
2023-09-15 0:33 ` andrew.cooper3
2023-09-15 0:38 ` H. Peter Anvin
2023-09-15 1:46 ` andrew.cooper3
2023-09-15 2:06 ` H. Peter Anvin
2023-09-15 0:42 ` Thomas Gleixner [this message]
2023-09-15 1:01 ` H. Peter Anvin
2023-09-15 1:16 ` andrew.cooper3
2023-09-15 5:32 ` Juergen Gross
2023-09-20 15:00 ` Peter Zijlstra
2023-09-20 15:04 ` Juergen Gross
2023-09-20 7:58 ` Nikolay Borisov
2023-09-20 8:18 ` Li, Xin3
2023-09-22 8:16 ` Li, Xin3
2023-09-22 15:00 ` Thomas Gleixner
2023-09-22 23:21 ` Li, Xin3
2023-09-14 4:47 ` [PATCH v10 04/38] x86/entry: Remove idtentry_sysvec from entry_{32,64}.S Xin Li
2023-09-14 4:47 ` [PATCH v10 05/38] x86/trapnr: Add event type macros to <asm/trapnr.h> Xin Li
2023-09-14 14:22 ` andrew.cooper3
2023-09-14 4:47 ` [PATCH v10 06/38] Documentation/x86/64: Add a documentation for FRED Xin Li
2023-09-20 9:44 ` Nikolay Borisov
2023-09-14 4:47 ` [PATCH v10 07/38] x86/fred: Add Kconfig option for FRED (CONFIG_X86_FRED) Xin Li
2023-09-14 4:47 ` [PATCH v10 08/38] x86/cpufeatures: Add the cpu feature bit for FRED Xin Li
2023-09-14 6:03 ` Juergen Gross
2023-09-14 6:09 ` Jan Beulich
2023-09-14 13:15 ` andrew.cooper3
2023-09-15 1:07 ` Thomas Gleixner
2023-09-15 5:27 ` Juergen Gross
2023-09-14 4:47 ` [PATCH v10 09/38] x86/fred: Disable FRED support if CONFIG_X86_FRED is disabled Xin Li
2023-09-20 10:19 ` Nikolay Borisov
2023-09-14 4:47 ` [PATCH v10 10/38] x86/fred: Disable FRED by default in its early stage Xin Li
2023-09-14 4:47 ` [PATCH v10 11/38] x86/opcode: Add ERET[US] instructions to the x86 opcode map Xin Li
2023-09-14 4:47 ` [PATCH v10 12/38] x86/objtool: Teach objtool about ERET[US] Xin Li
2023-09-14 4:47 ` [PATCH v10 13/38] x86/cpu: Add X86_CR4_FRED macro Xin Li
2023-09-20 10:50 ` Nikolay Borisov
2023-09-20 17:25 ` Li, Xin3
2023-09-14 4:47 ` [PATCH v10 14/38] x86/cpu: Add MSR numbers for FRED configuration Xin Li
2023-09-14 4:47 ` [PATCH v10 15/38] x86/ptrace: Cleanup the definition of the pt_regs structure Xin Li
2023-09-14 4:47 ` [PATCH v10 16/38] x86/ptrace: Add FRED additional information to " Xin Li
2023-09-20 12:57 ` Nikolay Borisov
2023-09-20 17:23 ` Li, Xin3
2023-09-21 6:07 ` Nikolay Borisov
2023-09-21 6:24 ` Li, Xin3
2023-09-14 4:47 ` [PATCH v10 17/38] x86/fred: Add a new header file for FRED definitions Xin Li
2023-09-14 4:47 ` [PATCH v10 18/38] x86/fred: Reserve space for the FRED stack frame Xin Li
2023-09-14 4:47 ` [PATCH v10 19/38] x86/fred: Update MSR_IA32_FRED_RSP0 during task switch Xin Li
2023-09-14 4:47 ` [PATCH v10 20/38] x86/fred: Disallow the swapgs instruction when FRED is enabled Xin Li
2023-09-14 4:47 ` [PATCH v10 21/38] x86/fred: No ESPFIX needed " Xin Li
2023-09-14 4:47 ` [PATCH v10 22/38] x86/fred: Allow single-step trap and NMI when starting a new task Xin Li
2023-09-14 4:47 ` [PATCH v10 23/38] x86/fred: Make exc_page_fault() work for FRED Xin Li
2023-09-14 4:47 ` [PATCH v10 24/38] x86/idtentry: Incorporate definitions/declarations of the FRED entries Xin Li
2023-09-14 4:47 ` [PATCH v10 25/38] x86/fred: Add a debug fault entry stub for FRED Xin Li
2023-09-14 4:47 ` [PATCH v10 26/38] x86/fred: Add a NMI " Xin Li
2023-09-14 4:47 ` [PATCH v10 27/38] x86/fred: Add a machine check " Xin Li
2023-09-14 4:47 ` [PATCH v10 28/38] x86/fred: FRED entry/exit and dispatch code Xin Li
2023-09-21 9:48 ` Nikolay Borisov
2023-09-21 10:08 ` Thomas Gleixner
2023-09-21 17:54 ` Li, Xin3
2023-09-14 4:47 ` [PATCH v10 29/38] x86/traps: Add sysvec_install() to install a system interrupt handler Xin Li
2023-09-14 4:47 ` [PATCH v10 30/38] x86/fred: Let ret_from_fork_asm() jmp to asm_fred_exit_user when FRED is enabled Xin Li
2023-09-14 4:47 ` [PATCH v10 31/38] x86/fred: Fixup fault on ERETU by jumping to fred_entrypoint_user Xin Li
2023-09-14 4:47 ` [PATCH v10 32/38] x86/entry/calling: Allow PUSH_AND_CLEAR_REGS being used beyond actual entry code Xin Li
2023-09-14 4:48 ` [PATCH v10 33/38] x86/entry: Add fred_entry_from_kvm() for VMX to handle IRQ/NMI Xin Li
2023-09-20 17:54 ` Paolo Bonzini
2023-09-20 23:10 ` Li, Xin3
2023-09-21 12:11 ` Nikolay Borisov
2023-09-21 12:38 ` Paolo Bonzini
2023-09-14 4:48 ` [PATCH v10 34/38] KVM: VMX: Call fred_entry_from_kvm() for IRQ/NMI handling Xin Li
2023-09-20 17:54 ` Paolo Bonzini
2023-09-14 4:48 ` [PATCH v10 35/38] x86/syscall: Split IDT syscall setup code into idt_syscall_init() Xin Li
2023-09-14 4:48 ` [PATCH v10 36/38] x86/fred: Add fred_syscall_init() Xin Li
2023-09-19 8:28 ` Thomas Gleixner
2023-09-20 4:33 ` Li, Xin3
2023-09-20 8:18 ` Thomas Gleixner
2023-09-21 2:24 ` H. Peter Anvin
2023-09-14 4:48 ` [PATCH v10 37/38] x86/fred: Add FRED initialization functions Xin Li
2023-09-14 4:48 ` [PATCH v10 38/38] x86/fred: Invoke FRED initialization code to enable FRED Xin Li
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=87r0n01d2u.ffs@tglx \
--to=tglx@linutronix.de \
--cc=andrew.cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=jiangshanlai@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-edac@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=seanjc@google.com \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=xin3.li@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).