+++ /dev/null
-From aeb6b7c6b6ef84ab496189cdbc698426092aa46c Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 5 Jun 2023 09:12:22 -0700
-Subject: drm/vmwgfx: Add unwind hints around RBP clobber
-
-From: Josh Poimboeuf <jpoimboe@kernel.org>
-
-[ Upstream commit a9da8247627eefc73f909bf945031a5431a53993 ]
-
-VMware high-bandwidth hypercalls take the RBP register as input. This
-breaks basic frame pointer convention, as RBP should never be clobbered.
-
-So frame pointer unwinding is broken for the instructions surrounding
-the hypercalls. Fortunately this doesn't break live patching with
-CONFIG_FRAME_POINTER, as it only unwinds from blocking tasks, and stack
-traces from preempted tasks are already marked unreliable anyway.
-
-However, for live patching with ORC, this could actually be a
-theoretical problem if vmw_port_hb_{in,out}() were still compiled with a
-frame pointer due to having an aligned stack. In practice that hasn't
-seemed to be an issue since the objtool warnings have only been seen
-with CONFIG_FRAME_POINTER.
-
-Add unwind hint annotations to tell the ORC unwinder to mark stack
-traces as unreliable.
-
-Fixes the following warnings:
-
- vmlinux.o: warning: objtool: vmw_port_hb_in+0x1df: return with modified stack frame
- vmlinux.o: warning: objtool: vmw_port_hb_out+0x1dd: return with modified stack frame
-
-Fixes: 89da76fde68d ("drm/vmwgfx: Add VMWare host messaging capability")
-Reported-by: kernel test robot <lkp@intel.com>
-Link: https://lore.kernel.org/oe-kbuild-all/202305160135.97q0Elax-lkp@intel.com/
-Link: https://lore.kernel.org/r/4c795f2d87bc0391cf6543bcb224fa540b55ce4b.1685981486.git.jpoimboe@kernel.org
-Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/include/asm/unwind_hints.h | 9 +++++++++
- drivers/gpu/drm/vmwgfx/vmwgfx_msg_x86.h | 16 ++++++++++++----
- 2 files changed, 21 insertions(+), 4 deletions(-)
-
-diff --git a/arch/x86/include/asm/unwind_hints.h b/arch/x86/include/asm/unwind_hints.h
-index 01cb9692b160a..85cc57cb65392 100644
---- a/arch/x86/include/asm/unwind_hints.h
-+++ b/arch/x86/include/asm/unwind_hints.h
-@@ -76,9 +76,18 @@
-
- #else
-
-+#define UNWIND_HINT_UNDEFINED \
-+ UNWIND_HINT(UNWIND_HINT_TYPE_UNDEFINED, 0, 0, 0)
-+
- #define UNWIND_HINT_FUNC \
- UNWIND_HINT(UNWIND_HINT_TYPE_FUNC, ORC_REG_SP, 8, 0)
-
-+#define UNWIND_HINT_SAVE \
-+ UNWIND_HINT(UNWIND_HINT_TYPE_SAVE, 0, 0, 0)
-+
-+#define UNWIND_HINT_RESTORE \
-+ UNWIND_HINT(UNWIND_HINT_TYPE_RESTORE, 0, 0, 0)
-+
- #endif /* __ASSEMBLY__ */
-
- #endif /* _ASM_X86_UNWIND_HINTS_H */
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg_x86.h b/drivers/gpu/drm/vmwgfx/vmwgfx_msg_x86.h
-index 0b74ca2dfb7bd..23899d743a903 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg_x86.h
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg_x86.h
-@@ -105,10 +105,14 @@
- flags, magic, bp, \
- eax, ebx, ecx, edx, si, di) \
- ({ \
-- asm volatile ("push %%rbp;" \
-+ asm volatile ( \
-+ UNWIND_HINT_SAVE \
-+ "push %%rbp;" \
-+ UNWIND_HINT_UNDEFINED \
- "mov %12, %%rbp;" \
- VMWARE_HYPERCALL_HB_OUT \
-- "pop %%rbp;" : \
-+ "pop %%rbp;" \
-+ UNWIND_HINT_RESTORE : \
- "=a"(eax), \
- "=b"(ebx), \
- "=c"(ecx), \
-@@ -130,10 +134,14 @@
- flags, magic, bp, \
- eax, ebx, ecx, edx, si, di) \
- ({ \
-- asm volatile ("push %%rbp;" \
-+ asm volatile ( \
-+ UNWIND_HINT_SAVE \
-+ "push %%rbp;" \
-+ UNWIND_HINT_UNDEFINED \
- "mov %12, %%rbp;" \
- VMWARE_HYPERCALL_HB_IN \
-- "pop %%rbp" : \
-+ "pop %%rbp;" \
-+ UNWIND_HINT_RESTORE : \
- "=a"(eax), \
- "=b"(ebx), \
- "=c"(ecx), \
---
-2.39.2
-