On Fri, Jul 12, 2024, Xin3 Li wrote: > > > > E.g. if it's somewhere in task_struct, then kvm_on_user_return() > > > > would restore the current task's desired RSP0. > > > > > > So you're suggesting to extend the framework to allow per task constants? > > > > Yeah, or more likely, special case MSR_IA32_FRED_RSP0. If KVM didn't already > > have the user return framework, I wouldn't suggest this as I doubt avoiding > > WRMSR when switching between vCPU tasks will be very meaningful, but it's > > easy to handle FRED_RSP0, so why not. > > Great, I will take the patch. > > It looks to me that this also works for KERNEL GS BASE MSR, no? I don't think so, because the kernel expects MSR_KERNEL_GS_BASE to be accurate when querying GS.base for the current task: unsigned long x86_gsbase_read_task(struct task_struct *task) { unsigned long gsbase; if (task == current) gsbase = x86_gsbase_read_cpu_inactive(); else if (boot_cpu_has(X86_FEATURE_FSGSBASE) || (task->thread.gsindex == 0)) gsbase = task->thread.gsbase; else gsbase = x86_fsgsbase_read_task(task, task->thread.gsindex); return gsbase; }