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

TOMOYO Linux Cross Reference
Linux/arch/x86/xen/grant-table.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/x86/xen/grant-table.c (Version linux-6.11-rc3) and /arch/sparc/xen/grant-table.c (Version linux-5.1.21)


  1 // SPDX-License-Identifier: GPL-2.0 OR MIT          1 
  2 /*********************************************    
  3  * grant_table.c                                  
  4  * x86 specific part                              
  5  *                                                
  6  * Granting foreign access to our memory reser    
  7  *                                                
  8  * Copyright (c) 2005-2006, Christopher Clark     
  9  * Copyright (c) 2004-2005, K A Fraser            
 10  * Copyright (c) 2008 Isaku Yamahata <yamahata    
 11  *                    VA Linux Systems Japan.     
 12  */                                               
 13                                                   
 14 #include <linux/sched.h>                          
 15 #include <linux/mm.h>                             
 16 #include <linux/slab.h>                           
 17 #include <linux/vmalloc.h>                        
 18                                                   
 19 #include <xen/interface/xen.h>                    
 20 #include <xen/page.h>                             
 21 #include <xen/grant_table.h>                      
 22 #include <xen/xen.h>                              
 23                                                   
 24                                                   
 25 static struct gnttab_vm_area {                    
 26         struct vm_struct *area;                   
 27         pte_t **ptes;                             
 28         int idx;                                  
 29 } gnttab_shared_vm_area, gnttab_status_vm_area    
 30                                                   
 31 int arch_gnttab_map_shared(unsigned long *fram    
 32                            unsigned long max_n    
 33                            void **__shared)       
 34 {                                                 
 35         void *shared = *__shared;                 
 36         unsigned long addr;                       
 37         unsigned long i;                          
 38                                                   
 39         if (shared == NULL)                       
 40                 *__shared = shared = gnttab_sh    
 41                                                   
 42         addr = (unsigned long)shared;             
 43                                                   
 44         for (i = 0; i < nr_gframes; i++) {        
 45                 set_pte_at(&init_mm, addr, gnt    
 46                            mfn_pte(frames[i],     
 47                 addr += PAGE_SIZE;                
 48         }                                         
 49                                                   
 50         return 0;                                 
 51 }                                                 
 52                                                   
 53 int arch_gnttab_map_status(uint64_t *frames, u    
 54                            unsigned long max_n    
 55                            grant_status_t **__    
 56 {                                                 
 57         grant_status_t *shared = *__shared;       
 58         unsigned long addr;                       
 59         unsigned long i;                          
 60                                                   
 61         if (shared == NULL)                       
 62                 *__shared = shared = gnttab_st    
 63                                                   
 64         addr = (unsigned long)shared;             
 65                                                   
 66         for (i = 0; i < nr_gframes; i++) {        
 67                 set_pte_at(&init_mm, addr, gnt    
 68                            mfn_pte(frames[i],     
 69                 addr += PAGE_SIZE;                
 70         }                                         
 71                                                   
 72         return 0;                                 
 73 }                                                 
 74                                                   
 75 void arch_gnttab_unmap(void *shared, unsigned     
 76 {                                                 
 77         pte_t **ptes;                             
 78         unsigned long addr;                       
 79         unsigned long i;                          
 80                                                   
 81         if (shared == gnttab_status_vm_area.ar    
 82                 ptes = gnttab_status_vm_area.p    
 83         else                                      
 84                 ptes = gnttab_shared_vm_area.p    
 85                                                   
 86         addr = (unsigned long)shared;             
 87                                                   
 88         for (i = 0; i < nr_gframes; i++) {        
 89                 set_pte_at(&init_mm, addr, pte    
 90                 addr += PAGE_SIZE;                
 91         }                                         
 92 }                                                 
 93                                                   
 94 static int gnttab_apply(pte_t *pte, unsigned l    
 95 {                                                 
 96         struct gnttab_vm_area *area = data;       
 97                                                   
 98         area->ptes[area->idx++] = pte;            
 99         return 0;                                 
100 }                                                 
101                                                   
102 static int arch_gnttab_valloc(struct gnttab_vm    
103 {                                                 
104         area->ptes = kmalloc_array(nr_frames,     
105         if (area->ptes == NULL)                   
106                 return -ENOMEM;                   
107         area->area = get_vm_area(PAGE_SIZE * n    
108         if (!area->area)                          
109                 goto out_free_ptes;               
110         if (apply_to_page_range(&init_mm, (uns    
111                         PAGE_SIZE * nr_frames,    
112                 goto out_free_vm_area;            
113         return 0;                                 
114 out_free_vm_area:                                 
115         free_vm_area(area->area);                 
116 out_free_ptes:                                    
117         kfree(area->ptes);                        
118         return -ENOMEM;                           
119 }                                                 
120                                                   
121 static void arch_gnttab_vfree(struct gnttab_vm    
122 {                                                 
123         free_vm_area(area->area);                 
124         kfree(area->ptes);                        
125 }                                                 
126                                                   
127 int arch_gnttab_init(unsigned long nr_shared,     
128 {                                                 
129         int ret;                                  
130                                                   
131         if (!xen_pv_domain())                     
132                 return 0;                         
133                                                   
134         ret = arch_gnttab_valloc(&gnttab_share    
135         if (ret < 0)                              
136                 return ret;                       
137                                                   
138         /*                                        
139          * Always allocate the space for the s    
140          * we're migrated to a host with V2 su    
141          */                                       
142         ret = arch_gnttab_valloc(&gnttab_statu    
143         if (ret < 0)                              
144                 goto err;                         
145                                                   
146         return 0;                                 
147 err:                                              
148         arch_gnttab_vfree(&gnttab_shared_vm_ar    
149         return -ENOMEM;                           
150 }                                                 
151                                                   
152 #ifdef CONFIG_XEN_PVH                             
153 #include <xen/events.h>                           
154 #include <xen/xen-ops.h>                          
155 static int __init xen_pvh_gnttab_setup(void)      
156 {                                                 
157         if (!xen_pvh_domain())                    
158                 return -ENODEV;                   
159                                                   
160         xen_auto_xlat_grant_frames.count = gnt    
161                                                   
162         return xen_xlate_map_ballooned_pages(&    
163                                              &    
164                                              x    
165 }                                                 
166 /* Call it _before_ __gnttab_init as we need t    
167  * xen_auto_xlat_grant_frames first. */           
168 core_initcall(xen_pvh_gnttab_setup);              
169 #endif                                            
170                                                   

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