Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e6ab4ca authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Greg Kroah-Hartman
Browse files

x86/speculation: Rework speculative_store_bypass_update()



commit 0270be3e34efb05a88bc4c422572ece038ef3608 upstream

The upcoming support for the virtual SPEC_CTRL MSR on AMD needs to reuse
speculative_store_bypass_update() to avoid code duplication. Add an
argument for supplying a thread info (TIF) value and create a wrapper
speculative_store_bypass_update_current() which is used at the existing
call site.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8e1c285a
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -42,6 +42,11 @@ extern void speculative_store_bypass_ht_init(void);
static inline void speculative_store_bypass_ht_init(void) { }
#endif

extern void speculative_store_bypass_update(void);
extern void speculative_store_bypass_update(unsigned long tif);

static inline void speculative_store_bypass_update_current(void)
{
	speculative_store_bypass_update(current_thread_info()->flags);
}

#endif
+1 −1
Original line number Diff line number Diff line
@@ -598,7 +598,7 @@ static int ssb_prctl_set(struct task_struct *task, unsigned long ctrl)
	 * mitigation until it is next scheduled.
	 */
	if (task == current && update)
		speculative_store_bypass_update();
		speculative_store_bypass_update_current();

	return 0;
}
+2 −2
Original line number Diff line number Diff line
@@ -415,10 +415,10 @@ static __always_inline void __speculative_store_bypass_update(unsigned long tifn
		intel_set_ssb_state(tifn);
}

void speculative_store_bypass_update(void)
void speculative_store_bypass_update(unsigned long tif)
{
	preempt_disable();
	__speculative_store_bypass_update(current_thread_info()->flags);
	__speculative_store_bypass_update(tif);
	preempt_enable();
}