~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm64/kernel/relocate_kernel.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/arm64/kernel/relocate_kernel.S (Architecture ppc) and /arch/i386/kernel/relocate_kernel.S (Architecture i386)


  1 /* SPDX-License-Identifier: GPL-2.0-only */       
  2 /*                                                
  3  * kexec for arm64                                
  4  *                                                
  5  * Copyright (C) Linaro.                          
  6  * Copyright (C) Huawei Futurewei Technologies    
  7  * Copyright (C) 2021, Microsoft Corporation.     
  8  * Pasha Tatashin <pasha.tatashin@soleen.com>      
  9  */                                               
 10                                                   
 11 #include <linux/kexec.h>                          
 12 #include <linux/linkage.h>                        
 13                                                   
 14 #include <asm/assembler.h>                        
 15 #include <asm/kexec.h>                            
 16 #include <asm/page.h>                             
 17 #include <asm/sysreg.h>                           
 18 #include <asm/virt.h>                             
 19                                                   
 20 .macro turn_off_mmu tmp1, tmp2                    
 21         mov_q   \tmp1, INIT_SCTLR_EL1_MMU_OFF     
 22         pre_disable_mmu_workaround                
 23         msr     sctlr_el1, \tmp1                  
 24         isb                                       
 25 .endm                                             
 26                                                   
 27 .section    ".kexec_relocate.text", "ax"          
 28 /*                                                
 29  * arm64_relocate_new_kernel - Put a 2nd stage    
 30  *                                                
 31  * The memory that the old kernel occupies may    
 32  * new image to its final location.  To assure    
 33  * arm64_relocate_new_kernel routine which doe    
 34  * all code and data needed by arm64_relocate_    
 35  * symbols arm64_relocate_new_kernel and arm64    
 36  * machine_kexec() routine will copy arm64_rel    
 37  * safe memory that has been set up to be pres    
 38  */                                               
 39 SYM_CODE_START(arm64_relocate_new_kernel)         
 40         /*                                        
 41          * The kimage structure isn't allocate    
 42          * during relocation. We must load any    
 43          * any relocation occurring.              
 44          */                                       
 45         ldr     x28, [x0, #KIMAGE_START]          
 46         ldr     x27, [x0, #KIMAGE_ARCH_EL2_VEC    
 47         ldr     x26, [x0, #KIMAGE_ARCH_DTB_MEM    
 48                                                   
 49         /* Setup the list loop variables. */      
 50         ldr     x18, [x0, #KIMAGE_ARCH_ZERO_PA    
 51         ldr     x17, [x0, #KIMAGE_ARCH_TTBR1]     
 52         ldr     x16, [x0, #KIMAGE_HEAD]           
 53         ldr     x22, [x0, #KIMAGE_ARCH_PHYS_OF    
 54         raw_dcache_line_size x15, x1              
 55         break_before_make_ttbr_switch   x18, x    
 56 .Lloop:                                           
 57         and     x12, x16, PAGE_MASK               
 58         sub     x12, x12, x22                     
 59         /* Test the entry flags. */               
 60 .Ltest_source:                                    
 61         tbz     x16, IND_SOURCE_BIT, .Ltest_in    
 62                                                   
 63         /* Invalidate dest page to PoC. */        
 64         mov     x19, x13                          
 65         copy_page x13, x12, x1, x2, x3, x4, x5    
 66         add     x1, x19, #PAGE_SIZE               
 67         dcache_by_myline_op civac, sy, x19, x1    
 68         b       .Lnext                            
 69 .Ltest_indirection:                               
 70         tbz     x16, IND_INDIRECTION_BIT, .Lte    
 71         mov     x14, x12                          
 72         b       .Lnext                            
 73 .Ltest_destination:                               
 74         tbz     x16, IND_DESTINATION_BIT, .Lne    
 75         mov     x13, x12                          
 76 .Lnext:                                           
 77         ldr     x16, [x14], #8                    
 78         tbz     x16, IND_DONE_BIT, .Lloop         
 79         /* wait for writes from copy_page to f    
 80         dsb     nsh                               
 81         ic      iallu                             
 82         dsb     nsh                               
 83         isb                                       
 84         turn_off_mmu x12, x13                     
 85                                                   
 86         /* Start new image. */                    
 87         cbz     x27, .Lel1                        
 88         mov     x1, x28                           
 89         mov     x2, x26                           
 90         mov     x3, xzr                           
 91         mov     x4, xzr                           
 92         mov     x0, #HVC_SOFT_RESTART             
 93         hvc     #0                                
 94 .Lel1:                                            
 95         mov     x0, x26                           
 96         mov     x1, xzr                           
 97         mov     x2, xzr                           
 98         mov     x3, xzr                           
 99         br      x28                               
100 SYM_CODE_END(arm64_relocate_new_kernel)           
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php