Lines Matching refs:kml
181 static bool kvm_slots_grow(KVMMemoryListener *kml, unsigned int nr_slots_new) in kvm_slots_grow() argument
183 unsigned int i, cur = kml->nr_slots_allocated; in kvm_slots_grow()
198 assert(kml->slots); in kvm_slots_grow()
199 slots = g_renew(KVMSlot, kml->slots, nr_slots_new); in kvm_slots_grow()
212 kml->slots = slots; in kvm_slots_grow()
213 kml->nr_slots_allocated = nr_slots_new; in kvm_slots_grow()
219 static bool kvm_slots_double(KVMMemoryListener *kml) in kvm_slots_double() argument
221 return kvm_slots_grow(kml, kml->nr_slots_allocated * 2); in kvm_slots_double()
250 static KVMSlot *kvm_get_free_slot(KVMMemoryListener *kml) in kvm_get_free_slot() argument
255 for (i = 0; i < kml->nr_slots_allocated; i++) { in kvm_get_free_slot()
256 if (kml->slots[i].memory_size == 0) { in kvm_get_free_slot()
257 return &kml->slots[i]; in kvm_get_free_slot()
267 n = kml->nr_slots_allocated; in kvm_get_free_slot()
268 if (kvm_slots_double(kml)) { in kvm_get_free_slot()
269 return &kml->slots[n]; in kvm_get_free_slot()
276 static KVMSlot *kvm_alloc_slot(KVMMemoryListener *kml) in kvm_alloc_slot() argument
278 KVMSlot *slot = kvm_get_free_slot(kml); in kvm_alloc_slot()
288 static KVMSlot *kvm_lookup_matching_slot(KVMMemoryListener *kml, in kvm_lookup_matching_slot() argument
294 for (i = 0; i < kml->nr_slots_allocated; i++) { in kvm_lookup_matching_slot()
295 KVMSlot *mem = &kml->slots[i]; in kvm_lookup_matching_slot()
332 KVMMemoryListener *kml = &s->memory_listener; in kvm_physical_memory_addr_from_host() local
336 for (i = 0; i < kml->nr_slots_allocated; i++) { in kvm_physical_memory_addr_from_host()
337 KVMSlot *mem = &kml->slots[i]; in kvm_physical_memory_addr_from_host()
350 static int kvm_set_user_memory_region(KVMMemoryListener *kml, KVMSlot *slot, bool new) in kvm_set_user_memory_region() argument
356 mem.slot = slot->slot | (kml->as_id << 16); in kvm_set_user_memory_region()
621 static int kvm_slot_update_flags(KVMMemoryListener *kml, KVMSlot *mem, in kvm_slot_update_flags() argument
632 return kvm_set_user_memory_region(kml, mem, false); in kvm_slot_update_flags()
635 static int kvm_section_update_flags(KVMMemoryListener *kml, in kvm_section_update_flags() argument
651 mem = kvm_lookup_matching_slot(kml, start_addr, slot_size); in kvm_section_update_flags()
657 ret = kvm_slot_update_flags(kml, mem, section->mr); in kvm_section_update_flags()
671 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, listener); in kvm_log_start() local
678 r = kvm_section_update_flags(kml, section); in kvm_log_start()
688 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, listener); in kvm_log_stop() local
695 r = kvm_section_update_flags(kml, section); in kvm_log_stop()
775 KVMMemoryListener *kml; in kvm_dirty_ring_mark_page() local
782 kml = s->as[as_id].ml; in kvm_dirty_ring_mark_page()
783 mem = &kml->slots[slot_id]; in kvm_dirty_ring_mark_page()
980 static void kvm_physical_sync_dirty_bitmap(KVMMemoryListener *kml, in kvm_physical_sync_dirty_bitmap() argument
991 mem = kvm_lookup_matching_slot(kml, start_addr, slot_size); in kvm_physical_sync_dirty_bitmap()
1127 static int kvm_physical_log_clear(KVMMemoryListener *kml, in kvm_physical_log_clear() argument
1150 for (i = 0; i < kml->nr_slots_allocated; i++) { in kvm_physical_log_clear()
1151 mem = &kml->slots[i]; in kvm_physical_log_clear()
1168 ret = kvm_log_clear_one_slot(mem, kml->as_id, offset, count); in kvm_physical_log_clear()
1449 static void kvm_set_phys_mem(KVMMemoryListener *kml, in kvm_set_phys_mem() argument
1486 mem = kvm_lookup_matching_slot(kml, start_addr, slot_size); in kvm_set_phys_mem()
1521 err = kvm_set_user_memory_region(kml, mem, false); in kvm_set_phys_mem()
1529 kml->nr_slots_used--; in kvm_set_phys_mem()
1537 mem = kvm_alloc_slot(kml); in kvm_set_phys_mem()
1538 mem->as_id = kml->as_id; in kvm_set_phys_mem()
1548 err = kvm_set_user_memory_region(kml, mem, true); in kvm_set_phys_mem()
1568 kml->nr_slots_used++; in kvm_set_phys_mem()
1682 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, listener); in kvm_region_add() local
1688 QSIMPLEQ_INSERT_TAIL(&kml->transaction_add, update, next); in kvm_region_add()
1694 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, listener); in kvm_region_del() local
1700 QSIMPLEQ_INSERT_TAIL(&kml->transaction_del, update, next); in kvm_region_del()
1705 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, in kvm_region_commit() local
1710 if (QSIMPLEQ_EMPTY(&kml->transaction_add) && in kvm_region_commit()
1711 QSIMPLEQ_EMPTY(&kml->transaction_del)) { in kvm_region_commit()
1722 u1 = QSIMPLEQ_FIRST(&kml->transaction_del); in kvm_region_commit()
1723 u2 = QSIMPLEQ_FIRST(&kml->transaction_add); in kvm_region_commit()
1749 while (!QSIMPLEQ_EMPTY(&kml->transaction_del)) { in kvm_region_commit()
1750 u1 = QSIMPLEQ_FIRST(&kml->transaction_del); in kvm_region_commit()
1751 QSIMPLEQ_REMOVE_HEAD(&kml->transaction_del, next); in kvm_region_commit()
1753 kvm_set_phys_mem(kml, &u1->section, false); in kvm_region_commit()
1758 while (!QSIMPLEQ_EMPTY(&kml->transaction_add)) { in kvm_region_commit()
1759 u1 = QSIMPLEQ_FIRST(&kml->transaction_add); in kvm_region_commit()
1760 QSIMPLEQ_REMOVE_HEAD(&kml->transaction_add, next); in kvm_region_commit()
1763 kvm_set_phys_mem(kml, &u1->section, true); in kvm_region_commit()
1777 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, listener); in kvm_log_sync() local
1780 kvm_physical_sync_dirty_bitmap(kml, section); in kvm_log_sync()
1786 KVMMemoryListener *kml = container_of(l, KVMMemoryListener, listener); in kvm_log_sync_global() local
1795 for (i = 0; i < kml->nr_slots_allocated; i++) { in kvm_log_sync_global()
1796 mem = &kml->slots[i]; in kvm_log_sync_global()
1819 KVMMemoryListener *kml = container_of(listener, KVMMemoryListener, listener); in kvm_log_clear() local
1822 r = kvm_physical_log_clear(kml, section); in kvm_log_clear()
1905 void kvm_memory_listener_register(KVMState *s, KVMMemoryListener *kml, in kvm_memory_listener_register() argument
1910 kml->as_id = as_id; in kvm_memory_listener_register()
1912 kvm_slots_grow(kml, KVM_MEMSLOTS_NR_ALLOC_DEFAULT); in kvm_memory_listener_register()
1914 QSIMPLEQ_INIT(&kml->transaction_add); in kvm_memory_listener_register()
1915 QSIMPLEQ_INIT(&kml->transaction_del); in kvm_memory_listener_register()
1917 kml->listener.region_add = kvm_region_add; in kvm_memory_listener_register()
1918 kml->listener.region_del = kvm_region_del; in kvm_memory_listener_register()
1919 kml->listener.commit = kvm_region_commit; in kvm_memory_listener_register()
1920 kml->listener.log_start = kvm_log_start; in kvm_memory_listener_register()
1921 kml->listener.log_stop = kvm_log_stop; in kvm_memory_listener_register()
1922 kml->listener.priority = MEMORY_LISTENER_PRIORITY_ACCEL; in kvm_memory_listener_register()
1923 kml->listener.name = name; in kvm_memory_listener_register()
1926 kml->listener.log_sync_global = kvm_log_sync_global; in kvm_memory_listener_register()
1928 kml->listener.log_sync = kvm_log_sync; in kvm_memory_listener_register()
1929 kml->listener.log_clear = kvm_log_clear; in kvm_memory_listener_register()
1932 memory_listener_register(&kml->listener, as); in kvm_memory_listener_register()
1937 s->as[i].ml = kml; in kvm_memory_listener_register()