lkml.org 
[lkml]   [2023]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v3 23/32] x86/fred: update MSR_IA32_FRED_RSP0 during task switch
    Date
    From: "H. Peter Anvin (Intel)" <hpa@zytor.com>

    MSR_IA32_FRED_RSP0 is used during ring 3 event delivery, and needs to
    be updated to point to the top of next task stack during task switch.

    Update MSR_IA32_FRED_RSP0 with WRMSR instruction for now, and will use
    WRMSRNS/WRMSRLIST for performance once it gets upstreamed.

    Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
    Signed-off-by: Xin Li <xin3.li@intel.com>
    ---
    arch/x86/include/asm/switch_to.h | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h
    index 5c91305d09d2..00fd85abc1d2 100644
    --- a/arch/x86/include/asm/switch_to.h
    +++ b/arch/x86/include/asm/switch_to.h
    @@ -68,9 +68,16 @@ static inline void update_task_stack(struct task_struct *task)
    #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)) {
    + /*
    + * Will use WRMSRNS/WRMSRLIST for performance once it's upstreamed.
    + */
    + wrmsrl(MSR_IA32_FRED_RSP0,
    + task_top_of_stack(task) + TOP_OF_KERNEL_STACK_PADDING);
    + } 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
    }

    --
    2.34.1
    \
     
     \ /
      Last update: 2023-03-27 00:34    [W:4.161 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site