Re: [PATCH 3/4] x86/kexec(): Reset TDX private memory on platforms with TDX erratum

From: Huang, Kai
Date: Thu Feb 01 2024 - 09:48:15 EST




On 1/02/2024 10:39 pm, Kirill A. Shutemov wrote:
On Thu, Feb 01, 2024 at 10:22:18PM +0800, Huang, Kai wrote:


On 1/02/2024 6:03 am, Kirill A. Shutemov wrote:
On Wed, Jan 31, 2024 at 01:21:39PM -0800, Dave Hansen wrote:
#ifdef CONFIG_KEXEC_JUMP
if (image->preserve_context)
save_processor_state();
+ else
+ tdx_reset_memory();
+#else
+ tdx_reset_memory();
#endif

Wow, that's awfully hard to read. I really wish folks' gag reflex would
kick in when they see stuff like this to get them to spend an additional
15 seconds to turn this into:

if (IS_ENABLED(CONFIG_KEXEC_JUMP) && image->preserve_context)
save_processor_state();
else
tdx_reset_memory();

save_processor_state() is declared under CONFIG_PM_SLEEP, so I guess your
variant might break build in some cases without updated suspend.h.

I tried. If I turn off both SUSPEND and HIBERNATION in the Kconfig I got
build error:

arch/x86/kernel/machine_kexec_64.c:325:17: error: implicit declaration of
function ‘save_processor_state’ [-Werror=implicit-function-declaration]
325 | save_processor_state();
| ^~~~~~~~~~~~~~~~~~~~

Moving save_processor_state() declaration outside all defines would do the
trick.

Something like the patch below.

But finding the right spot for the move can be tricky. I don't particular
like where I moved it.


I don't feel I have enough justification to do such change.

As I replied in another email, how about:

#ifdef CONFIG_KEXEC_JUMP
if (image->preserve_context)
save_processor_state();
else
#endif
tdx_reset_memory();

Not ideal, but looks slightly better?

But I'll leave to Dave to comment.