@@ -522,7 +522,7 @@ static int kvm_init_mmu_notifier(struct kvm *kvm)
522522
523523#endif /* CONFIG_MMU_NOTIFIER && GVM_ARCH_WANT_MMU_NOTIFIER */
524524
525- static struct kvm_memslots * kvm_alloc_memslots (struct kvm * kvm )
525+ static struct kvm_memslots * kvm_alloc_memslots (void )
526526{
527527 int i ;
528528 struct kvm_memslots * slots ;
@@ -536,10 +536,8 @@ static struct kvm_memslots *kvm_alloc_memslots(struct kvm *kvm)
536536 * code of handling generation number wrap-around.
537537 */
538538 slots -> generation = -150 ;
539- for (i = 0 ; i < GVM_MEM_SLOTS_NUM ; i ++ ) {
539+ for (i = 0 ; i < GVM_MEM_SLOTS_NUM ; i ++ )
540540 slots -> id_to_index [i ] = slots -> memslots [i ].id = i ;
541- slots -> memslots [i ].kvm = kvm ;
542- }
543541
544542 return slots ;
545543}
@@ -624,7 +622,7 @@ static struct kvm *kvm_create_vm(size_t type)
624622
625623 r = - ENOMEM ;
626624 for (i = 0 ; i < GVM_ADDRESS_SPACE_NUM ; i ++ ) {
627- kvm -> memslots [i ] = kvm_alloc_memslots (kvm );
625+ kvm -> memslots [i ] = kvm_alloc_memslots ();
628626 if (!kvm -> memslots [i ])
629627 goto out_err_no_srcu ;
630628 }
@@ -691,7 +689,6 @@ static void kvm_destroy_vm(struct kvm *kvm)
691689 kvm_arch_destroy_vm (kvm );
692690 for (i = 0 ; i < GVM_ADDRESS_SPACE_NUM ; i ++ )
693691 kvm_free_memslots (kvm , kvm -> memslots [i ]);
694- kfree (kvm -> rp_bitmap );
695692 cleanup_srcu_struct (& kvm -> irq_srcu );
696693 cleanup_srcu_struct (& kvm -> srcu );
697694 kvm_arch_free_vm (kvm );
@@ -1299,25 +1296,6 @@ static int gvm_pin_user_memory(size_t addr, struct pmem_lock *pmem_lock)
12991296 return 0 ;
13001297}
13011298
1302- static int kvm_is_ram_prot (struct kvm * kvm , gfn_t gfn );
1303- static int kvm_should_ram_prot_exit (struct kvm * kvm , gfn_t gfn )
1304- {
1305- struct kvm_vcpu * vcpu ;
1306-
1307- if (!kvm_is_ram_prot (kvm , gfn ))
1308- return 0 ;
1309-
1310- /*
1311- * We assume get user pages always run
1312- * in the vcpu thread requesting that
1313- * page.
1314- */
1315- vcpu = kvm_get_vcpu_by_thread (kvm , PsGetCurrentThread ());
1316- vcpu -> run -> exit_reason = GVM_EXIT_RAM_PROT ;
1317- vcpu -> run -> rp .gfn = gfn ;
1318- return 1 ;
1319- }
1320-
13211299kvm_pfn_t __gfn_to_pfn_memslot (struct kvm_memory_slot * slot , gfn_t gfn ,
13221300 bool atomic , bool * async , bool write_fault ,
13231301 bool * writable )
@@ -1346,9 +1324,6 @@ kvm_pfn_t __gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn,
13461324 writable = NULL ;
13471325 }
13481326
1349- if (kvm_should_ram_prot_exit (slot -> kvm , gfn ))
1350- return 0 ;
1351-
13521327 pmem_lock = & slot -> pmem_lock [gfn - slot -> base_gfn ];
13531328 spin_lock (& pmem_lock -> lock );
13541329 if (!pmem_lock -> lock_mdl ) {
@@ -1416,9 +1391,6 @@ int gfn_to_pfn_many_atomic(struct kvm_memory_slot *slot, gfn_t gfn,
14161391 return 0 ;
14171392
14181393 for (i = 0 ; i < nr_pages ; i ++ ) {
1419- if (kvm_should_ram_prot_exit (slot -> kvm , gfn + i ))
1420- return 0 ;
1421-
14221394 pmem_lock = & slot -> pmem_lock [gfn + i - slot -> base_gfn ];
14231395 spin_lock (& pmem_lock -> lock );
14241396 if (!pmem_lock -> lock_mdl ) {
@@ -1936,109 +1908,6 @@ static int kvm_vm_ioctl_kick_vcpu(PDEVICE_OBJECT pDevObj, PIRP pIrp, void *arg)
19361908 return 0 ;
19371909}
19381910
1939- static bool kvm_is_valid_prot_flags (u32 flags )
1940- {
1941- return (flags == RP_NOACCESS || flags == RP_RDWREX );
1942- }
1943-
1944- static int kvm_adjust_rp_bitmap (struct kvm * kvm , u64 size )
1945- {
1946- int old_size , new_size ;
1947- size_t * old_bitmap , * new_bitmap ;
1948-
1949- if (kvm -> rp_bitmap_size >= size )
1950- return 0 ;
1951-
1952- new_size = ALIGN (size , (u64 )BITS_PER_LONG ) / 8 ;
1953- new_bitmap = kvm_kvzalloc (new_size );
1954- if (!new_bitmap )
1955- return - ENOMEM ;
1956-
1957- old_size = kvm -> rp_bitmap_size ;
1958- old_bitmap = kvm -> rp_bitmap ;
1959-
1960- memcpy (new_bitmap , old_bitmap , old_size );
1961-
1962- kvm -> rp_bitmap = new_bitmap ;
1963- kvm -> rp_bitmap_size = new_size ;
1964-
1965- return 0 ;
1966- }
1967-
1968- /*
1969- * For set bulk bitmap instead of looping set_bit
1970- */
1971- static inline void set_bits_in_long (size_t * byte , int start , int nbits , bool set )
1972- {
1973- size_t mask ;
1974-
1975- BUG_ON (byte == NULL );
1976- BUG_ON (start < 0 || start > BITS_PER_LONG );
1977- BUG_ON (nbits < 0 || start + nbits > BITS_PER_LONG );
1978-
1979- mask = ((1 << nbits ) - 1 ) << start ;
1980- if (set )
1981- * byte |= mask ;
1982- else
1983- * byte &= ~mask ;
1984- }
1985-
1986- static void set_bit_block (size_t * bitmap , u64 start , u64 nbits , bool set )
1987- {
1988- u64 first_long_index = start / BITS_PER_LONG ;
1989- u64 last_long_index = (start + nbits - 1 ) / BITS_PER_LONG ;
1990- u64 i ;
1991- int first_bit_index = (int )(start % BITS_PER_LONG );
1992- int last_bit_index = (int )((start + nbits - 1 ) % BITS_PER_LONG );
1993-
1994- if (first_long_index == last_long_index ) {
1995- set_bits_in_long (& bitmap [first_long_index ], first_bit_index , (int )nbits ,
1996- set );
1997- return ;
1998- }
1999-
2000- set_bits_in_long (& bitmap [first_long_index ], first_bit_index ,
2001- BITS_PER_LONG - first_bit_index , set );
2002- for (i = first_long_index + 1 ; i < last_long_index ; i ++ ) {
2003- bitmap [i ] = set ? (size_t )-1 : 0 ;
2004- }
2005- set_bits_in_long (& bitmap [last_long_index ], 0 , last_bit_index + 1 , set );
2006- }
2007-
2008- static int kvm_is_ram_prot (struct kvm * kvm , gfn_t gfn )
2009- {
2010- if (!kvm -> rp_bitmap )
2011- return 0 ;
2012-
2013- return test_bit (gfn , kvm -> rp_bitmap );
2014- }
2015-
2016- static int kvm_vm_ioctl_ram_prot (struct kvm * kvm , struct gvm_ram_protect * rp )
2017- {
2018- int r = - EFAULT ;
2019- gfn_t first_gfn = rp -> pa >> PAGE_SHIFT ;
2020- gfn_t last_gfn = (rp -> pa + rp -> size - 1 ) >> PAGE_SHIFT ;
2021-
2022- if (!rp -> reserved )
2023- return - EINVAL ;
2024-
2025- if (!kvm_is_valid_prot_flags (rp -> flags ))
2026- return - EINVAL ;
2027-
2028- r = kvm_adjust_rp_bitmap (kvm , last_gfn + 1 );
2029- if (r )
2030- return r ;
2031-
2032- set_bit_block (kvm -> rp_bitmap , first_gfn , last_gfn + 1 - first_gfn ,
2033- rp -> flags == RP_NOACCESS );
2034-
2035- /* only need flush shadow when page access right is lowered */
2036- if (rp -> flags == RP_NOACCESS )
2037- kvm_arch_flush_shadow_all (kvm );
2038-
2039- return 0 ;
2040- }
2041-
20421911NTSTATUS kvm_vcpu_ioctl (PDEVICE_OBJECT pDevObj , PIRP pIrp ,
20431912 unsigned int ioctl )
20441913{
@@ -2269,13 +2138,6 @@ NTSTATUS kvm_vm_ioctl(PDEVICE_OBJECT pDevObj, PIRP pIrp,
22692138 case GVM_KICK_VCPU :
22702139 r = kvm_vm_ioctl_kick_vcpu (pDevObj , pIrp , argp );
22712140 break ;
2272- case GVM_RAM_PROTECT :
2273- struct gvm_ram_protect rp ;
2274-
2275- r = - EFAULT ;
2276- RtlCopyBytes (& rp , pIrp -> AssociatedIrp .SystemBuffer , sizeof (rp ));
2277- r = kvm_vm_ioctl_ram_prot (kvm , & rp );
2278- break ;
22792141#ifdef CONFIG_HAVE_GVM_MSI
22802142 case GVM_SIGNAL_MSI : {
22812143 struct kvm_msi msi ;
0 commit comments