Lines Matching refs:gmem

51 static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t start,
56 struct kvm *kvm = gmem->kvm;
59 xa_for_each_range(&gmem->bindings, index, slot, start, end - 1) {
60 pgoff_t pgoff = slot->gmem.pgoff;
86 static void kvm_gmem_invalidate_end(struct kvm_gmem *gmem, pgoff_t start,
89 struct kvm *kvm = gmem->kvm;
91 if (xa_find(&gmem->bindings, &start, end - 1, XA_PRESENT)) {
103 struct kvm_gmem *gmem;
111 list_for_each_entry(gmem, gmem_list, entry)
112 kvm_gmem_invalidate_begin(gmem, start, end);
116 list_for_each_entry(gmem, gmem_list, entry)
117 kvm_gmem_invalidate_end(gmem, start, end);
197 struct kvm_gmem *gmem = file->private_data;
199 struct kvm *kvm = gmem->kvm;
213 xa_for_each(&gmem->bindings, index, slot)
214 rcu_assign_pointer(slot->gmem.file, NULL);
223 kvm_gmem_invalidate_begin(gmem, 0, -1ul);
224 kvm_gmem_invalidate_end(gmem, 0, -1ul);
226 list_del(&gmem->entry);
232 xa_destroy(&gmem->bindings);
233 kfree(gmem);
243 * Do not return slot->gmem.file if it has already been closed;
245 * kvm_gmem_release() clears slot->gmem.file, and you do not
248 return get_file_active(&slot->gmem.file);
273 struct kvm_gmem *gmem;
281 list_for_each_entry(gmem, gmem_list, entry)
282 kvm_gmem_invalidate_begin(gmem, start, end);
293 list_for_each_entry(gmem, gmem_list, entry)
294 kvm_gmem_invalidate_end(gmem, start, end);
329 const char *anon_name = "[kvm-gmem]";
330 struct kvm_gmem *gmem;
339 gmem = kzalloc(sizeof(*gmem), GFP_KERNEL);
340 if (!gmem) {
345 file = anon_inode_create_getfile(anon_name, &kvm_gmem_fops, gmem,
368 gmem->kvm = kvm;
369 xa_init(&gmem->bindings);
370 list_add(&gmem->entry, &inode->i_mapping->i_private_list);
376 kfree(gmem);
402 struct kvm_gmem *gmem;
407 BUILD_BUG_ON(sizeof(gfn_t) != sizeof(slot->gmem.pgoff));
416 gmem = file->private_data;
417 if (gmem->kvm != kvm)
431 if (!xa_empty(&gmem->bindings) &&
432 xa_find(&gmem->bindings, &start, end - 1, XA_PRESENT)) {
442 rcu_assign_pointer(slot->gmem.file, file);
443 slot->gmem.pgoff = start;
445 xa_store_range(&gmem->bindings, start, end - 1, slot, GFP_KERNEL);
461 unsigned long start = slot->gmem.pgoff;
463 struct kvm_gmem *gmem;
474 gmem = file->private_data;
477 xa_store_range(&gmem->bindings, start, end - 1, NULL, GFP_KERNEL);
478 rcu_assign_pointer(slot->gmem.file, NULL);
488 pgoff_t index = gfn - slot->base_gfn + slot->gmem.pgoff;
489 struct kvm_gmem *gmem;
499 gmem = file->private_data;
501 if (WARN_ON_ONCE(xa_load(&gmem->bindings, index) != slot)) {