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

TOMOYO Linux Cross Reference
Linux/arch/x86/coco/tdx/tdx-shared.c

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/x86/coco/tdx/tdx-shared.c (Version linux-6.12-rc7) and /arch/i386/coco/tdx/tdx-shared.c (Version linux-5.4.284)


** Warning: Cannot open xref database.

  1 #include <asm/tdx.h>                                1 
  2 #include <asm/pgtable.h>                          
  3                                                   
  4 static unsigned long try_accept_one(phys_addr_    
  5                                     enum pg_le    
  6 {                                                 
  7         unsigned long accept_size = page_level    
  8         struct tdx_module_args args = {};         
  9         u8 page_size;                             
 10                                                   
 11         if (!IS_ALIGNED(start, accept_size))      
 12                 return 0;                         
 13                                                   
 14         if (len < accept_size)                    
 15                 return 0;                         
 16                                                   
 17         /*                                        
 18          * Pass the page physical address to t    
 19          * pending, private page.                 
 20          *                                        
 21          * Bits 2:0 of RCX encode page size: 0    
 22          */                                       
 23         switch (pg_level) {                       
 24         case PG_LEVEL_4K:                         
 25                 page_size = TDX_PS_4K;            
 26                 break;                            
 27         case PG_LEVEL_2M:                         
 28                 page_size = TDX_PS_2M;            
 29                 break;                            
 30         case PG_LEVEL_1G:                         
 31                 page_size = TDX_PS_1G;            
 32                 break;                            
 33         default:                                  
 34                 return 0;                         
 35         }                                         
 36                                                   
 37         args.rcx = start | page_size;             
 38         if (__tdcall(TDG_MEM_PAGE_ACCEPT, &arg    
 39                 return 0;                         
 40                                                   
 41         return accept_size;                       
 42 }                                                 
 43                                                   
 44 bool tdx_accept_memory(phys_addr_t start, phys    
 45 {                                                 
 46         /*                                        
 47          * For shared->private conversion, acc    
 48          * TDG_MEM_PAGE_ACCEPT TDX module call    
 49          */                                       
 50         while (start < end) {                     
 51                 unsigned long len = end - star    
 52                 unsigned long accept_size;        
 53                                                   
 54                 /*                                
 55                  * Try larger accepts first. I    
 56                  * 1G/2M Secure EPT entries wh    
 57                  * process by cutting number o    
 58                  */                               
 59                                                   
 60                 accept_size = try_accept_one(s    
 61                 if (!accept_size)                 
 62                         accept_size = try_acce    
 63                 if (!accept_size)                 
 64                         accept_size = try_acce    
 65                 if (!accept_size)                 
 66                         return false;             
 67                 start += accept_size;             
 68         }                                         
 69                                                   
 70         return true;                              
 71 }                                                 
 72                                                   
 73 noinstr u64 __tdx_hypercall(struct tdx_module_    
 74 {                                                 
 75         /*                                        
 76          * For TDVMCALL explicitly set RCX to     
 77          * The caller isn't expected to set @a    
 78          */                                       
 79         args->rcx = TDVMCALL_EXPOSE_REGS_MASK;    
 80                                                   
 81         /*                                        
 82          * Failure of __tdcall_saved_ret() ind    
 83          * mechanism itself and that something    
 84          * the TDX module.  __tdx_hypercall_fa    
 85          */                                       
 86         if (__tdcall_saved_ret(TDG_VP_VMCALL,     
 87                 __tdx_hypercall_failed();         
 88                                                   
 89         /* TDVMCALL leaf return code is in R10    
 90         return args->r10;                         
 91 }                                                 
 92                                                   

~ [ 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