All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarkko Sakkinen <jarkko@kernel.org>
To: Thorsten Blum <thorsten.blum@linux.dev>
Cc: Dave Hansen <dave.hansen@linux.intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86/sgx: Use goto to remove redundant if check in sgx_encl_init
Date: Thu, 11 Dec 2025 22:15:30 +0200	[thread overview]
Message-ID: <aTsmYkI3ThbsfpIH@kernel.org> (raw)
In-Reply-To: <aTsjqDtWoIO_p60j@kernel.org>

On Thu, Dec 11, 2025 at 10:03:56PM +0200, Jarkko Sakkinen wrote:
> On Wed, Dec 10, 2025 at 04:48:08PM +0100, Thorsten Blum wrote:
> > On 10. Dec 2025, at 16:32, Jarkko Sakkinen wrote:
> > > On Wed, Dec 10, 2025 at 02:00:35PM +0100, Thorsten Blum wrote:
> > >> Immediately break out of both loops when 'ret != SGX_UNMASKED_EVENT'
> > >> instead of checking for the same condition again in the outer loop.
> > >> 
> > >> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> > >> ---
> > >> [...]
> > > 
> > > I don't think moving code around is very useful.
> > 
> > The patch doesn't actually move any code around, but it removes up to 50
> > (SGX_EINIT_SLEEP_COUNT) duplicate and therefore unnecessary if checks in
> > the outer for loop.
> 
> Temporary change for generating disassembly:
> 
> ❯ git diff
> diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c
> index 66f1efa16fbb..da43613eb837 100644
> --- a/arch/x86/kernel/cpu/sgx/ioctl.c
> +++ b/arch/x86/kernel/cpu/sgx/ioctl.c
> @@ -464,8 +464,8 @@ static long sgx_ioc_enclave_add_pages(struct sgx_encl *encl, void __user *arg)
>         return ret;
>  }
> 
> -static int sgx_encl_init(struct sgx_encl *encl, struct sgx_sigstruct *sigstruct,
> -                        void *token)
> +int sgx_encl_init(struct sgx_encl *encl, struct sgx_sigstruct *sigstruct,
> +                 void *token)
>  {
>         u64 mrsigner[4];
>         int i, j;
> 
> 
> Then I A/B by doing
> 
> gdb -q -batch -ex 'set pagination off' -ex 'disassemble sgx_ioctl' .clangd/vmlinux > sgx_ioctl_a.txt
> gdb -q -batch -ex 'set pagination off' -ex 'disassemble sgx_ioctl' .clangd/vmlinux > sgx_ioctl_b.txt
> 
> ❯ diff -u sgx_ioctl_a.txt  sgx_ioctl_b.txt
> --- sgx_ioctl_a.txt     2025-12-11 21:59:59.660197371 +0200
> +++ sgx_ioctl_b.txt     2025-12-11 22:00:50.713917112 +0200
> @@ -12,31 +12,31 @@
>  mov    %rdx,0x20(%rsp)
>  lock btsq $0x1,0x10(%rbx)
>  mov    $0xfffffffffffffff0,%rax
> -jb     0xffffffff812275ac <sgx_ioctl+1402>
> +jb     0xffffffff812275ad <sgx_ioctl+1402>
>  cmp    $0xc018a407,%esi
> -je     0xffffffff812273ce <sgx_ioctl+924>
> -ja     0xffffffff81227098 <sgx_ioctl+102>
> +je     0xffffffff812273cf <sgx_ioctl+924>
> +ja     0xffffffff81227099 <sgx_ioctl+102>
>  cmp    $0x4008a402,%esi
> -je     0xffffffff81227174 <sgx_ioctl+322>
> +je     0xffffffff81227175 <sgx_ioctl+322>
>  cmp    $0x4008a403,%esi
> -je     0xffffffff81227253 <sgx_ioctl+545>
> +je     0xffffffff81227254 <sgx_ioctl+545>
>  cmp    $0x4008a400,%esi
> -je     0xffffffff812270c6 <sgx_ioctl+148>
> -jmp    0xffffffff812270bc <sgx_ioctl+138>
> +je     0xffffffff812270c7 <sgx_ioctl+148>
> +jmp    0xffffffff812270bd <sgx_ioctl+138>
>  cmp    $0xc028a406,%esi
> -je     0xffffffff8122732f <sgx_ioctl+765>
> +je     0xffffffff81227330 <sgx_ioctl+765>
>  cmp    $0xc030a401,%esi
> -je     0xffffffff81227162 <sgx_ioctl+304>
> +je     0xffffffff81227163 <sgx_ioctl+304>
>  cmp    $0xc028a405,%esi
> -je     0xffffffff81227298 <sgx_ioctl+614>
> +je     0xffffffff81227299 <sgx_ioctl+614>
>  mov    $0xfffffdfd,%eax
> -jmp    0xffffffff812275a5 <sgx_ioctl+1395>
> +jmp    0xffffffff812275a6 <sgx_ioctl+1395>
>  xor    %esi,%esi
>  mov    $0xffffffffffffffea,%rax
>  mov    %rsi,0x40(%rsp)
>  mov    0x10(%rbx),%rdx
>  and    $0x10,%dl
> -jne    0xffffffff812275a5 <sgx_ioctl+1395>
> +jne    0xffffffff812275a6 <sgx_ioctl+1395>
>  mov    0x20(%rsp),%rsi
>  mov    $0x8,%edx
>  lea    0x40(%rsp),%rdi
> @@ -44,39 +44,39 @@
>  mov    %rax,%rdx
>  mov    $0xfffffffffffffff2,%rax
>  test   %rdx,%rdx
> -jne    0xffffffff812275a5 <sgx_ioctl+1395>
> -mov    0x437ed1(%rip),%rdi        # 0xffffffff8165efe0 <kmalloc_caches+96>
> +jne    0xffffffff812275a6 <sgx_ioctl+1395>
> +mov    0x437ed0(%rip),%rdi        # 0xffffffff8165efe0 <kmalloc_caches+96>
>  mov    $0x1000,%edx
>  mov    $0xcc0,%esi
>  call   0xffffffff812cdde9 <__kmalloc_cache_noprof>
>  mov    %rax,%r13
>  mov    $0xfffffffffffffff4,%rax
>  test   %r13,%r13
> -je     0xffffffff812275a5 <sgx_ioctl+1395>
> +je     0xffffffff812275a6 <sgx_ioctl+1395>
>  mov    0x40(%rsp),%rsi
>  mov    $0x1000,%edx
>  mov    %r13,%rdi
>  mov    $0xfffffff2,%r12d
>  call   0xffffffff8133b725 <_copy_from_user>
>  test   %rax,%rax
> -jne    0xffffffff81227243 <sgx_ioctl+529>
> +jne    0xffffffff81227244 <sgx_ioctl+529>
>  mov    %r13,%rsi
>  mov    %rbx,%rdi
>  call   0xffffffff812267da <sgx_encl_create>
> -jmp    0xffffffff81227240 <sgx_ioctl+526>
> +jmp    0xffffffff81227241 <sgx_ioctl+526>
>  mov    0x20(%rsp),%rsi
>  mov    %rbx,%rdi
>  call   0xffffffff812269b2 <sgx_ioc_enclave_add_pages>
> -jmp    0xffffffff812275a5 <sgx_ioctl+1395>
> +jmp    0xffffffff812275a6 <sgx_ioctl+1395>
>  xor    %ecx,%ecx
>  mov    $0xffffffffffffffea,%rax
>  mov    %rcx,0x40(%rsp)
>  mov    0x10(%rbx),%rdx
>  and    $0x10,%dl
> -je     0xffffffff812275a5 <sgx_ioctl+1395>
> +je     0xffffffff812275a6 <sgx_ioctl+1395>
>  mov    0x10(%rbx),%rdx
>  bt     $0x8,%edx
> -jb     0xffffffff812275a5 <sgx_ioctl+1395>
> +jb     0xffffffff812275a6 <sgx_ioctl+1395>
>  mov    0x20(%rsp),%rsi
>  mov    $0x8,%edx
>  lea    0x40(%rsp),%rdi
> @@ -84,15 +84,15 @@
>  mov    %rax,%rdx
>  mov    $0xfffffffffffffff2,%rax
>  test   %rdx,%rdx
> -jne    0xffffffff812275a5 <sgx_ioctl+1395>
> -mov    0x437e15(%rip),%rdi        # 0xffffffff8165efe0 <kmalloc_caches+96>
> +jne    0xffffffff812275a6 <sgx_ioctl+1395>
> +mov    0x437e14(%rip),%rdi        # 0xffffffff8165efe0 <kmalloc_caches+96>
>  mov    $0x1000,%edx
>  mov    $0xcc0,%esi
>  call   0xffffffff812cdde9 <__kmalloc_cache_noprof>
>  mov    %rax,%r13
>  mov    $0xfffffffffffffff4,%rax
>  test   %r13,%r13
> -je     0xffffffff812275a5 <sgx_ioctl+1395>
> +je     0xffffffff812275a6 <sgx_ioctl+1395>
>  lea    0x800(%r13),%r14
>  xor    %eax,%eax
>  mov    $0x4c,%ecx
> @@ -104,13 +104,13 @@
>  mov    0x40(%rsp),%rsi
>  call   0xffffffff8133b725 <_copy_from_user>
>  test   %rax,%rax
> -jne    0xffffffff81227243 <sgx_ioctl+529>
> +jne    0xffffffff81227244 <sgx_ioctl+529>
>  mov    0x10(%r13),%eax
>  test   %eax,%eax
> -je     0xffffffff81227232 <sgx_ioctl+512>
> +je     0xffffffff81227233 <sgx_ioctl+512>
>  mov    $0xffffffea,%r12d
>  cmp    $0x8086,%eax
> -jne    0xffffffff81227243 <sgx_ioctl+529>
> +jne    0xffffffff81227244 <sgx_ioctl+529>
>  mov    %r14,%rdx
>  mov    %r13,%rsi
>  mov    %rbx,%rdi
> @@ -119,7 +119,7 @@
>  mov    %r13,%rdi
>  call   0xffffffff812ce269 <kfree>
>  movslq %r12d,%rax
> -jmp    0xffffffff812275a5 <sgx_ioctl+1395>
> +jmp    0xffffffff812275a6 <sgx_ioctl+1395>
>  xor    %edx,%edx
>  mov    0x20(%rsp),%rsi
>  lea    0x40(%rsp),%rdi
> @@ -129,12 +129,12 @@
>  mov    %rax,%rdx
>  mov    $0xfffffffffffffff2,%rax
>  test   %rdx,%rdx
> -jne    0xffffffff812275a5 <sgx_ioctl+1395>
> +jne    0xffffffff812275a6 <sgx_ioctl+1395>
>  mov    0x40(%rsp),%esi
>  lea    0x80(%rbx),%rdi
> -call   0xffffffff81228220 <sgx_set_attribute>
> +call   0xffffffff81228221 <sgx_set_attribute>
>  cltq
> -jmp    0xffffffff812275a5 <sgx_ioctl+1395>
> +jmp    0xffffffff812275a6 <sgx_ioctl+1395>
>  lea    0x40(%rsp),%r13
>  xor    %eax,%eax
>  mov    $0xa,%ecx
> @@ -144,32 +144,32 @@
>  call   0xffffffff81226369 <sgx_ioc_sgx2_ready>
>  movslq %eax,%r12
>  test   %r12,%r12
> -jne    0xffffffff812273c6 <sgx_ioctl+916>
> +jne    0xffffffff812273c7 <sgx_ioctl+916>
>  mov    0x20(%rsp),%rsi
>  mov    $0x28,%edx
>  mov    %r13,%rdi
>  call   0xffffffff8133b725 <_copy_from_user>
>  test   %rax,%rax
> -jne    0xffffffff81227367 <sgx_ioctl+821>
> +jne    0xffffffff81227368 <sgx_ioctl+821>
>  mov    0x48(%rsp),%rdx
>  mov    0x40(%rsp),%rsi
>  mov    %rbx,%rdi
>  mov    $0xffffffffffffffea,%r12
>  call   0xffffffff81226339 <sgx_validate_offset_length>
>  test   %eax,%eax
> -jne    0xffffffff812273c6 <sgx_ioctl+916>
> +jne    0xffffffff812273c7 <sgx_ioctl+916>
>  mov    0x50(%rsp),%rax
>  cmp    $0x7,%rax
> -ja     0xffffffff812273c6 <sgx_ioctl+916>
> +ja     0xffffffff812273c7 <sgx_ioctl+916>
>  and    $0x3,%eax
>  cmp    $0x2,%rax
> -je     0xffffffff812273c6 <sgx_ioctl+916>
> +je     0xffffffff812273c7 <sgx_ioctl+916>
>  mov    0x58(%rsp),%rax
>  or     0x60(%rsp),%rax
> -jne    0xffffffff812273c6 <sgx_ioctl+916>
> +jne    0xffffffff812273c7 <sgx_ioctl+916>
>  mov    %r13,%rsi
>  call   0xffffffff81226611 <sgx_enclave_restrict_permissions>
> -jmp    0xffffffff812273ac <sgx_ioctl+890>
> +jmp    0xffffffff812273ad <sgx_ioctl+890>
>  lea    0x40(%rsp),%r13
>  xor    %eax,%eax
>  mov    $0xa,%ecx
> @@ -179,27 +179,27 @@
>  call   0xffffffff81226369 <sgx_ioc_sgx2_ready>
>  movslq %eax,%r12
>  test   %r12,%r12
> -jne    0xffffffff812273c6 <sgx_ioctl+916>
> +jne    0xffffffff812273c7 <sgx_ioctl+916>
>  mov    0x20(%rsp),%rsi
>  mov    $0x28,%edx
>  mov    %r13,%rdi
>  call   0xffffffff8133b725 <_copy_from_user>
>  test   %rax,%rax
> -je     0xffffffff81227370 <sgx_ioctl+830>
> +je     0xffffffff81227371 <sgx_ioctl+830>
>  mov    $0xfffffffffffffff2,%r12
> -jmp    0xffffffff812273c6 <sgx_ioctl+916>
> +jmp    0xffffffff812273c7 <sgx_ioctl+916>
>  mov    0x48(%rsp),%rdx
>  mov    0x40(%rsp),%rsi
>  mov    %rbx,%rdi
>  mov    $0xffffffffffffffea,%r12
>  call   0xffffffff81226339 <sgx_validate_offset_length>
>  test   %eax,%eax
> -jne    0xffffffff812273c6 <sgx_ioctl+916>
> +jne    0xffffffff812273c7 <sgx_ioctl+916>
>  cmpq   $0xff,0x50(%rsp)
> -ja     0xffffffff812273c6 <sgx_ioctl+916>
> +ja     0xffffffff812273c7 <sgx_ioctl+916>
>  mov    0x58(%rsp),%rax
>  or     0x60(%rsp),%rax
> -jne    0xffffffff812273c6 <sgx_ioctl+916>
> +jne    0xffffffff812273c7 <sgx_ioctl+916>
>  mov    %r13,%rsi
>  call   0xffffffff81226413 <sgx_enclave_modify_types>
>  mov    0x20(%rsp),%rdi
> @@ -208,9 +208,9 @@
>  mov    %rax,%r12
>  call   0xffffffff8133b81f <_copy_to_user>
>  test   %rax,%rax
> -jne    0xffffffff81227367 <sgx_ioctl+821>
> +jne    0xffffffff81227368 <sgx_ioctl+821>
>  mov    %r12d,%eax
> -jmp    0xffffffff812275a5 <sgx_ioctl+1395>
> +jmp    0xffffffff812275a6 <sgx_ioctl+1395>
>  lea    0x28(%rsp),%r15
>  xor    %eax,%eax
>  mov    $0x6,%ecx
> @@ -220,15 +220,15 @@
>  call   0xffffffff81226369 <sgx_ioc_sgx2_ready>
>  movslq %eax,%r14
>  test   %r14,%r14
> -jne    0xffffffff812275a2 <sgx_ioctl+1392>
> +jne    0xffffffff812275a3 <sgx_ioctl+1392>
>  mov    0x20(%rsp),%rsi
>  mov    $0x18,%edx
>  mov    %r15,%rdi
>  call   0xffffffff8133b725 <_copy_from_user>
>  test   %rax,%rax
> -je     0xffffffff81227416 <sgx_ioctl+996>
> +je     0xffffffff81227417 <sgx_ioctl+996>
>  mov    $0xfffffffffffffff2,%r14
> -jmp    0xffffffff812275a2 <sgx_ioctl+1392>
> +jmp    0xffffffff812275a3 <sgx_ioctl+1392>
>  mov    0x30(%rsp),%rdx
>  mov    0x28(%rsp),%rsi
>  mov    %rbx,%rdi
> @@ -236,10 +236,10 @@
>  call   0xffffffff81226339 <sgx_validate_offset_length>
>  mov    %eax,%r12d
>  test   %eax,%eax
> -jne    0xffffffff812275a2 <sgx_ioctl+1392>
> +jne    0xffffffff812275a3 <sgx_ioctl+1392>
>  mov    0x38(%rsp),%r13
>  test   %r13,%r13
> -jne    0xffffffff812275a2 <sgx_ioctl+1392>
> +jne    0xffffffff812275a3 <sgx_ioctl+1392>
>  lea    0x48(%rsp),%rdx
>  mov    $0xe,%ecx
>  mov    %rdx,%rdi
> @@ -248,12 +248,12 @@
>  movq   $0x7,0x40(%rsp)
>  mov    %rax,0x18(%rsp)
>  cmp    0x30(%rsp),%r13
> -jae    0xffffffff8122757f <sgx_ioctl+1357>
> +jae    0xffffffff81227580 <sgx_ioctl+1357>
>  mov    0x28(%rsp),%rax
>  add    (%rbx),%rax
>  add    %r13,%rax
>  mov    %rax,0x10(%rsp)
> -call   0xffffffff81227e7c <sgx_reclaim_direct>
> +call   0xffffffff81227e7d <sgx_reclaim_direct>
>  mov    0x18(%rsp),%rdi
>  call   0xffffffff81427ce9 <mutex_lock>
>  mov    0x10(%rsp),%rsi
> @@ -261,32 +261,32 @@
>  call   0xffffffff81225b7e <sgx_encl_load_page>
>  mov    %rax,%r14
>  cmp    $0xfffffffffffff000,%rax
> -jbe    0xffffffff812274c0 <sgx_ioctl+1166>
> +jbe    0xffffffff812274c1 <sgx_ioctl+1166>
>  xor    %r12d,%r12d
>  cmp    $0xfffffffffffffff0,%rax
>  sete   %r12b
>  lea    -0xe(%r12,%r12,2),%r12d
> -jmp    0xffffffff81227575 <sgx_ioctl+1347>
> +jmp    0xffffffff81227576 <sgx_ioctl+1347>
>  mov    0x8(%rax),%eax
>  and    $0xffff00,%eax
>  cmp    $0x400,%eax
> -je     0xffffffff812274d8 <sgx_ioctl+1190>
> +je     0xffffffff812274d9 <sgx_ioctl+1190>
>  or     $0xffffffff,%r12d
> -jmp    0xffffffff81227575 <sgx_ioctl+1347>
> +jmp    0xffffffff81227576 <sgx_ioctl+1347>
>  mov    0x10(%r14),%rdi
>  call   0xffffffff812262fc <sgx_get_epc_virt_addr>
>  mov    %rax,%rsi
>  lea    0x40(%rsp),%rdi
>  call   0xffffffff81226328 <__emodpr>
>  bt     $0x1e,%eax
> -jae    0xffffffff812274cf <sgx_ioctl+1181>
> +jae    0xffffffff812274d0 <sgx_ioctl+1181>
>  and    $0xbfffffff,%eax
>  cmp    $0xe,%eax
> -jne    0xffffffff812274cf <sgx_ioctl+1181>
> +jne    0xffffffff812274d0 <sgx_ioctl+1181>
>  mov    0x10(%r14),%rdi
> -call   0xffffffff812279e0 <sgx_unmark_page_reclaimable>
> +call   0xffffffff812279e1 <sgx_unmark_page_reclaimable>
>  test   %eax,%eax
> -jne    0xffffffff8122756f <sgx_ioctl+1341>
> +jne    0xffffffff81227570 <sgx_ioctl+1341>
>  mov    0x18(%rsp),%rdi
>  add    $0x1000,%r13
>  call   0xffffffff81427360 <mutex_unlock>
> @@ -309,7 +309,7 @@
>  call   0xffffffff812ce269 <kfree>
>  mov    0x18(%rsp),%rdi
>  call   0xffffffff81427360 <mutex_unlock>
> -jmp    0xffffffff81227469 <sgx_ioctl+1079>
> +jmp    0xffffffff8122746a <sgx_ioctl+1079>
>  mov    $0xfffffff0,%r12d
>  mov    0x18(%rsp),%rdi
>  call   0xffffffff81427360 <mutex_unlock>
> @@ -320,7 +320,7 @@
>  mov    %r13,0x38(%rsp)
>  call   0xffffffff8133b81f <_copy_to_user>
>  test   %rax,%rax
> -jne    0xffffffff8122740a <sgx_ioctl+984>
> +jne    0xffffffff8122740b <sgx_ioctl+984>
>  mov    %r14d,%eax
>  lock andb $0xfd,0x10(%rbx)
>  cltq
> 
> How would you interpret this?
> 
> > 
> > Thanks,
> > Thorsten
> > 

Oops, sorry, here's against sgx_encl_init():

~/work/kernel.org/jarkko/linux-tpmdd queue*
❯ diff -u sgx_ioctl_a.txt  sgx_ioctl_b.txt
--- sgx_ioctl_a.txt     2025-12-11 22:11:57.444562168 +0200
+++ sgx_ioctl_b.txt     2025-12-11 22:12:08.308829402 +0200
@@ -4,81 +4,81 @@
 mov    $0x8,%ecx
 push   %r14
 push   %r13
+mov    %rdi,%r13
 push   %r12
 push   %rbp
-mov    %rdi,%rbp
+mov    $0xfffffff3,%ebp
 push   %rbx
 sub    $0x30,%rsp
-mov    %rdx,(%rsp)
-mov    0x80(%rbp),%rdx
 lea    0x10(%rsp),%rdi
+mov    %rdx,0x8(%rsp)
 rep stos %eax,%es:(%rdi)
-mov    $0xfffffff3,%eax
-not    %rdx
-and    0x78(%rbp),%rdx
-jne    0xffffffff81227023 <sgx_encl_init+335>
-mov    0x3a0(%rsi),%rdx
+mov    0x80(%r13),%rax
+not    %rax
+and    0x78(%r13),%rax
+jne    0xffffffff81227022 <sgx_encl_init+334>
+mov    0x3a0(%rsi),%rax
 mov    %rsi,%rbx
-and    0x3b0(%rsi),%rdx
-mov    $0xffffffea,%eax
-and    0x6ebb47(%rip),%rdx        # 0xffffffff81912a78 <sgx_attributes_reserved_mask>
-jne    0xffffffff81227023 <sgx_encl_init+335>
-mov    0x384(%rsi),%edx
-and    0x388(%rsi),%edx
-and    0x6ebb27(%rip),%edx        # 0xffffffff81912a70 <sgx_misc_reserved_mask>
-jne    0xffffffff81227023 <sgx_encl_init+335>
-mov    0x3a8(%rsi),%rdx
-and    0x3b8(%rsi),%rdx
-and    0x5f920c(%rip),%rdx        # 0xffffffff81820170 <sgx_xfrm_reserved_mask>
-jne    0xffffffff81227023 <sgx_encl_init+335>
-lea    0x10(%rsp),%rdx
-lea    0x20(%rbp),%r14
-mov    $0x32,%r12d
-mov    $0x2,%r15d
+and    0x3b0(%rsi),%rax
+mov    $0xffffffea,%ebp
+and    0x6ebb46(%rip),%rax        # 0xffffffff81912a78 <sgx_attributes_reserved_mask>
+jne    0xffffffff81227022 <sgx_encl_init+334>
+mov    0x384(%rsi),%eax
+and    0x388(%rsi),%eax
+and    0x6ebb26(%rip),%eax        # 0xffffffff81912a70 <sgx_misc_reserved_mask>
+jne    0xffffffff81227022 <sgx_encl_init+334>
+mov    0x3a8(%rsi),%rax
+and    0x3b8(%rsi),%rax
+and    0x5f920b(%rip),%rax        # 0xffffffff81820170 <sgx_xfrm_reserved_mask>
+jne    0xffffffff81227022 <sgx_encl_init+334>
 lea    0x80(%rsi),%rdi
+lea    0x10(%rsp),%rdx
 mov    $0x180,%esi
+mov    $0x32,%r12d
 call   0xffffffff81345271 <sha256>
-mov    %r14,%rdi
+lea    0x20(%r13),%rax
+mov    %rax,%rdi
+mov    %rax,(%rsp)
 call   0xffffffff81427ce9 <mutex_lock>
-mov    $0x14,%r13d
-mov    0x60(%rbp),%rdi
+mov    $0x14,%r15d
+mov    0x60(%r13),%rdi
 call   0xffffffff812262fc <sgx_get_epc_virt_addr>
-mov    %rax,0x8(%rsp)
+mov    %rax,%rbp
 lea    0x10(%rsp),%rdi
-call   0xffffffff812281fd <sgx_update_lepubkeyhash>
-mov    %r15d,%eax
-mov    (%rsp),%rdx
-mov    0x8(%rsp),%rcx
+call   0xffffffff812281fe <sgx_update_lepubkeyhash>
+mov    $0x2,%eax
+mov    0x8(%rsp),%rdx
+mov    %rbp,%rcx
 encls
+mov    %eax,%r14d
+mov    %eax,%ebp
 cmp    $0x80,%eax
-jne    0xffffffff81226ff3 <sgx_encl_init+287>
-dec    %r13d
-jne    0xffffffff81226f9e <sgx_encl_init+202>
+jne    0xffffffff81226ff4 <sgx_encl_init+288>
+dec    %r15d
+jne    0xffffffff81226f9d <sgx_encl_init+201>
 mov    $0x14,%edi
 call   0xffffffff8127e4b1 <msleep_interruptible>
-mov    %gs:0x6d9035(%rip),%rdi        # 0xffffffff81900018 <current_task>
+mov    %gs:0x6d9032(%rip),%rdi        # 0xffffffff81900018 <current_task>
 call   0xffffffff81226387 <signal_pending>
 test   %eax,%eax
-jne    0xffffffff81227009 <sgx_encl_init+309>
+jne    0xffffffff81227008 <sgx_encl_init+308>
 dec    %r12d
-jne    0xffffffff81226f98 <sgx_encl_init+196>
-jmp    0xffffffff81226ffd <sgx_encl_init+297>
-bt     $0x1e,%eax
-jb     0xffffffff81227010 <sgx_encl_init+316>
-test   %eax,%eax
-je     0xffffffff81227002 <sgx_encl_init+302>
-or     $0xffffffff,%eax
-jmp    0xffffffff81227015 <sgx_encl_init+321>
-lock orb $0x1,0x11(%rbp)
-jmp    0xffffffff81227015 <sgx_encl_init+321>
-mov    $0xfffffe00,%eax
-jmp    0xffffffff81227015 <sgx_encl_init+321>
-mov    $0xfffffffb,%eax
-mov    %r14,%rdi
-mov    %eax,(%rsp)
+jne    0xffffffff81226f97 <sgx_encl_init+195>
+bt     $0x1e,%r14d
+jb     0xffffffff8122700f <sgx_encl_init+315>
+test   %r14d,%r14d
+jne    0xffffffff81227016 <sgx_encl_init+322>
+lock orb $0x1,0x11(%r13)
+jmp    0xffffffff81227019 <sgx_encl_init+325>
+mov    $0xfffffe00,%ebp
+jmp    0xffffffff81227019 <sgx_encl_init+325>
+mov    $0xfffffffb,%ebp
+jmp    0xffffffff81227019 <sgx_encl_init+325>
+or     $0xffffffff,%ebp
+mov    (%rsp),%rdi
 call   0xffffffff81427360 <mutex_unlock>
-mov    (%rsp),%eax
 add    $0x30,%rsp
+mov    %ebp,%eax
 pop    %rbx
 pop    %rbp
 pop    %r12

It pretty much does what I said i.e., shuffles a new location for a code block.

BR, Jarkko

  reply	other threads:[~2025-12-11 20:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-10 13:00 [PATCH] x86/sgx: Use goto to remove redundant if check in sgx_encl_init Thorsten Blum
2025-12-10 15:32 ` Jarkko Sakkinen
2025-12-10 15:48   ` Thorsten Blum
2025-12-11 20:03     ` Jarkko Sakkinen
2025-12-11 20:15       ` Jarkko Sakkinen [this message]
2025-12-12 21:05         ` Thorsten Blum
2025-12-13 19:11           ` Jarkko Sakkinen
2025-12-13 19:14             ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aTsmYkI3ThbsfpIH@kernel.org \
    --to=jarkko@kernel.org \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sgx@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=thorsten.blum@linux.dev \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.