Lines Matching refs:f

104 	struct kmmio_fault_page *f;  in get_kmmio_fault_page()  local
108 list_for_each_entry_rcu(f, head, list) { in get_kmmio_fault_page()
109 if (f->page == page) in get_kmmio_fault_page()
110 return f; in get_kmmio_fault_page()
137 static int clear_page_presence(struct kmmio_fault_page *f, bool clear) in clear_page_presence() argument
140 pte_t *pte = lookup_address(f->page, &level); in clear_page_presence()
143 pr_err("no pte for page 0x%08lx\n", f->page); in clear_page_presence()
149 clear_pmd_presence((pmd_t *)pte, clear, &f->old_presence); in clear_page_presence()
152 clear_pte_presence(pte, clear, &f->old_presence); in clear_page_presence()
159 __flush_tlb_one(f->page); in clear_page_presence()
174 static int arm_kmmio_fault_page(struct kmmio_fault_page *f) in arm_kmmio_fault_page() argument
177 WARN_ONCE(f->armed, KERN_ERR pr_fmt("kmmio page already armed.\n")); in arm_kmmio_fault_page()
178 if (f->armed) { in arm_kmmio_fault_page()
180 f->page, f->count, !!f->old_presence); in arm_kmmio_fault_page()
182 ret = clear_page_presence(f, true); in arm_kmmio_fault_page()
184 f->page); in arm_kmmio_fault_page()
185 f->armed = true; in arm_kmmio_fault_page()
190 static void disarm_kmmio_fault_page(struct kmmio_fault_page *f) in disarm_kmmio_fault_page() argument
192 int ret = clear_page_presence(f, false); in disarm_kmmio_fault_page()
194 KERN_ERR "kmmio disarming 0x%08lx failed.\n", f->page); in disarm_kmmio_fault_page()
195 f->armed = false; in disarm_kmmio_fault_page()
359 struct kmmio_fault_page *f; in add_kmmio_fault_page() local
362 f = get_kmmio_fault_page(page); in add_kmmio_fault_page()
363 if (f) { in add_kmmio_fault_page()
364 if (!f->count) in add_kmmio_fault_page()
365 arm_kmmio_fault_page(f); in add_kmmio_fault_page()
366 f->count++; in add_kmmio_fault_page()
370 f = kzalloc(sizeof(*f), GFP_ATOMIC); in add_kmmio_fault_page()
371 if (!f) in add_kmmio_fault_page()
374 f->count = 1; in add_kmmio_fault_page()
375 f->page = page; in add_kmmio_fault_page()
377 if (arm_kmmio_fault_page(f)) { in add_kmmio_fault_page()
378 kfree(f); in add_kmmio_fault_page()
382 list_add_rcu(&f->list, kmmio_page_list(f->page)); in add_kmmio_fault_page()
391 struct kmmio_fault_page *f; in release_kmmio_fault_page() local
394 f = get_kmmio_fault_page(page); in release_kmmio_fault_page()
395 if (!f) in release_kmmio_fault_page()
398 f->count--; in release_kmmio_fault_page()
399 BUG_ON(f->count < 0); in release_kmmio_fault_page()
400 if (!f->count) { in release_kmmio_fault_page()
401 disarm_kmmio_fault_page(f); in release_kmmio_fault_page()
402 if (!f->scheduled_for_release) { in release_kmmio_fault_page()
403 f->release_next = *release_list; in release_kmmio_fault_page()
404 *release_list = f; in release_kmmio_fault_page()
405 f->scheduled_for_release = true; in release_kmmio_fault_page()
453 struct kmmio_fault_page *f = dr->release_list; in rcu_free_kmmio_fault_pages() local
454 while (f) { in rcu_free_kmmio_fault_pages()
455 struct kmmio_fault_page *next = f->release_next; in rcu_free_kmmio_fault_pages()
456 BUG_ON(f->count); in rcu_free_kmmio_fault_pages()
457 kfree(f); in rcu_free_kmmio_fault_pages()
458 f = next; in rcu_free_kmmio_fault_pages()
467 struct kmmio_fault_page *f = dr->release_list; in remove_kmmio_fault_pages() local
472 while (f) { in remove_kmmio_fault_pages()
473 if (!f->count) { in remove_kmmio_fault_pages()
474 list_del_rcu(&f->list); in remove_kmmio_fault_pages()
475 prevp = &f->release_next; in remove_kmmio_fault_pages()
477 *prevp = f->release_next; in remove_kmmio_fault_pages()
478 f->release_next = NULL; in remove_kmmio_fault_pages()
479 f->scheduled_for_release = false; in remove_kmmio_fault_pages()
481 f = *prevp; in remove_kmmio_fault_pages()