• Home
  • Raw
  • Download

Lines Matching refs:f

112 	struct kmmio_fault_page *f;  in get_kmmio_fault_page()  local
120 list_for_each_entry_rcu(f, head, list) { in get_kmmio_fault_page()
121 if (f->addr == addr) in get_kmmio_fault_page()
122 return f; in get_kmmio_fault_page()
154 static int clear_page_presence(struct kmmio_fault_page *f, bool clear) in clear_page_presence() argument
157 pte_t *pte = lookup_address(f->addr, &level); in clear_page_presence()
160 pr_err("no pte for addr 0x%08lx\n", f->addr); in clear_page_presence()
166 clear_pmd_presence((pmd_t *)pte, clear, &f->old_presence); in clear_page_presence()
169 clear_pte_presence(pte, clear, &f->old_presence); in clear_page_presence()
176 flush_tlb_one_kernel(f->addr); in clear_page_presence()
191 static int arm_kmmio_fault_page(struct kmmio_fault_page *f) in arm_kmmio_fault_page() argument
194 WARN_ONCE(f->armed, KERN_ERR pr_fmt("kmmio page already armed.\n")); in arm_kmmio_fault_page()
195 if (f->armed) { in arm_kmmio_fault_page()
197 f->addr, f->count, !!f->old_presence); in arm_kmmio_fault_page()
199 ret = clear_page_presence(f, true); in arm_kmmio_fault_page()
201 f->addr); in arm_kmmio_fault_page()
202 f->armed = true; in arm_kmmio_fault_page()
207 static void disarm_kmmio_fault_page(struct kmmio_fault_page *f) in disarm_kmmio_fault_page() argument
209 int ret = clear_page_presence(f, false); in disarm_kmmio_fault_page()
211 KERN_ERR "kmmio disarming at 0x%08lx failed.\n", f->addr); in disarm_kmmio_fault_page()
212 f->armed = false; in disarm_kmmio_fault_page()
377 struct kmmio_fault_page *f; in add_kmmio_fault_page() local
379 f = get_kmmio_fault_page(addr); in add_kmmio_fault_page()
380 if (f) { in add_kmmio_fault_page()
381 if (!f->count) in add_kmmio_fault_page()
382 arm_kmmio_fault_page(f); in add_kmmio_fault_page()
383 f->count++; in add_kmmio_fault_page()
387 f = kzalloc(sizeof(*f), GFP_ATOMIC); in add_kmmio_fault_page()
388 if (!f) in add_kmmio_fault_page()
391 f->count = 1; in add_kmmio_fault_page()
392 f->addr = addr; in add_kmmio_fault_page()
394 if (arm_kmmio_fault_page(f)) { in add_kmmio_fault_page()
395 kfree(f); in add_kmmio_fault_page()
399 list_add_rcu(&f->list, kmmio_page_list(f->addr)); in add_kmmio_fault_page()
408 struct kmmio_fault_page *f; in release_kmmio_fault_page() local
410 f = get_kmmio_fault_page(addr); in release_kmmio_fault_page()
411 if (!f) in release_kmmio_fault_page()
414 f->count--; in release_kmmio_fault_page()
415 BUG_ON(f->count < 0); in release_kmmio_fault_page()
416 if (!f->count) { in release_kmmio_fault_page()
417 disarm_kmmio_fault_page(f); in release_kmmio_fault_page()
418 if (!f->scheduled_for_release) { in release_kmmio_fault_page()
419 f->release_next = *release_list; in release_kmmio_fault_page()
420 *release_list = f; in release_kmmio_fault_page()
421 f->scheduled_for_release = true; in release_kmmio_fault_page()
479 struct kmmio_fault_page *f = dr->release_list; in rcu_free_kmmio_fault_pages() local
480 while (f) { in rcu_free_kmmio_fault_pages()
481 struct kmmio_fault_page *next = f->release_next; in rcu_free_kmmio_fault_pages()
482 BUG_ON(f->count); in rcu_free_kmmio_fault_pages()
483 kfree(f); in rcu_free_kmmio_fault_pages()
484 f = next; in rcu_free_kmmio_fault_pages()
493 struct kmmio_fault_page *f = dr->release_list; in remove_kmmio_fault_pages() local
498 while (f) { in remove_kmmio_fault_pages()
499 if (!f->count) { in remove_kmmio_fault_pages()
500 list_del_rcu(&f->list); in remove_kmmio_fault_pages()
501 prevp = &f->release_next; in remove_kmmio_fault_pages()
503 *prevp = f->release_next; in remove_kmmio_fault_pages()
504 f->release_next = NULL; in remove_kmmio_fault_pages()
505 f->scheduled_for_release = false; in remove_kmmio_fault_pages()
507 f = *prevp; in remove_kmmio_fault_pages()