lkml.org 
[lkml]   [2022]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH v3 50/59] x86/retbleed: Add SKL call thunk
From: Thomas Gleixner <tglx@linutronix.de>

Add the actual SKL call thunk for call depth accounting.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/x86/kernel/callthunks.c | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

--- a/arch/x86/kernel/callthunks.c
+++ b/arch/x86/kernel/callthunks.c
@@ -7,6 +7,7 @@
#include <linux/moduleloader.h>

#include <asm/alternative.h>
+#include <asm/asm-offsets.h>
#include <asm/cpu.h>
#include <asm/ftrace.h>
#include <asm/insn.h>
@@ -55,7 +56,21 @@ static const struct core_text builtin_co
.name = "builtin",
};

-static struct thunk_desc callthunk_desc __ro_after_init;
+asm (
+ ".pushsection .rodata \n"
+ ".global skl_call_thunk_template \n"
+ "skl_call_thunk_template: \n"
+ __stringify(INCREMENT_CALL_DEPTH)" \n"
+ ".global skl_call_thunk_tail \n"
+ "skl_call_thunk_tail: \n"
+ ".popsection \n"
+);
+
+extern u8 skl_call_thunk_template[];
+extern u8 skl_call_thunk_tail[];
+
+#define SKL_TMPL_SIZE \
+ ((unsigned int)(skl_call_thunk_tail - skl_call_thunk_template))

extern void error_entry(void);
extern void xen_error_entry(void);
@@ -157,11 +172,11 @@ static const u8 nops[] = {

static __init_or_module void *patch_dest(void *dest, bool direct)
{
- unsigned int tsize = callthunk_desc.template_size;
+ unsigned int tsize = SKL_TMPL_SIZE;
u8 *pad = dest - tsize;

/* Already patched? */
- if (!bcmp(pad, callthunk_desc.template, tsize))
+ if (!bcmp(pad, skl_call_thunk_template, tsize))
return pad;

/* Ensure there are nops */
@@ -171,9 +186,9 @@ static __init_or_module void *patch_dest
}

if (direct)
- memcpy(pad, callthunk_desc.template, tsize);
+ memcpy(pad, skl_call_thunk_template, tsize);
else
- text_poke_copy_locked(pad, callthunk_desc.template, tsize, true);
+ text_poke_copy_locked(pad, skl_call_thunk_template, tsize, true);
return pad;
}


\
 
 \ /
  Last update: 2022-09-15 13:43    [W:1.160 / U:0.016 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site