Lines Matching full:plugin
2 * QEMU Plugin Core code
17 #include "qemu/plugin.h"
23 #include "plugin.h"
32 struct qemu_plugin_state plugin; variable
39 id_p = g_hash_table_lookup(plugin.id_ht, &id); in plugin_id_to_ctx_locked()
42 error_report("plugin: invalid plugin id %" PRIu64, id); in plugin_id_to_ctx_locked()
58 run_on_cpu_data mask = RUN_ON_CPU_HOST_ULONG(*plugin.mask); in plugin_cpu_update__locked()
74 if (QLIST_EMPTY_RCU(&plugin.cb_lists[ev])) { in plugin_unregister_cb__locked()
75 clear_bit(ev, plugin.mask); in plugin_unregister_cb__locked()
76 g_hash_table_foreach(plugin.cpu_ht, plugin_cpu_update__locked, NULL); in plugin_unregister_cb__locked()
96 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in plugin_vcpu_cb__simple()
119 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in plugin_cb__simple()
142 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in plugin_cb__udata()
159 QEMU_LOCK_GUARD(&plugin.lock); in do_plugin_register_cb()
161 /* if the plugin is on its way out, ignore this request */ in do_plugin_register_cb()
177 QLIST_INSERT_HEAD_RCU(&plugin.cb_lists[ev], cb, entry); in do_plugin_register_cb()
178 if (!test_bit(ev, plugin.mask)) { in do_plugin_register_cb()
179 set_bit(ev, plugin.mask); in do_plugin_register_cb()
180 g_hash_table_foreach(plugin.cpu_ht, plugin_cpu_update__locked, in do_plugin_register_cb()
209 size_t scoreboard_size = plugin.scoreboard_alloc_size; in plugin_grow_scoreboards__locked()
225 if (QLIST_EMPTY(&plugin.scoreboards)) { in plugin_grow_scoreboards__locked()
227 plugin.scoreboard_alloc_size = scoreboard_size; in plugin_grow_scoreboards__locked()
234 * plugin.scoreboard_alloc_size was not yet written. in plugin_grow_scoreboards__locked()
236 qemu_rec_mutex_unlock(&plugin.lock); in plugin_grow_scoreboards__locked()
241 qemu_rec_mutex_lock(&plugin.lock); in plugin_grow_scoreboards__locked()
243 if (scoreboard_size > plugin.scoreboard_alloc_size) { in plugin_grow_scoreboards__locked()
245 QLIST_FOREACH(score, &plugin.scoreboards, entry) { in plugin_grow_scoreboards__locked()
248 plugin.scoreboard_alloc_size = scoreboard_size; in plugin_grow_scoreboards__locked()
260 qemu_rec_mutex_lock(&plugin.lock); in qemu_plugin_vcpu_init__async()
261 plugin.num_vcpus = MAX(plugin.num_vcpus, cpu->cpu_index + 1); in qemu_plugin_vcpu_init__async()
263 success = g_hash_table_insert(plugin.cpu_ht, &cpu->cpu_index, in qemu_plugin_vcpu_init__async()
267 qemu_rec_mutex_unlock(&plugin.lock); in qemu_plugin_vcpu_init__async()
274 /* Plugin initialization must wait until the cpu start executing code */ in qemu_plugin_vcpu_init_hook()
285 qemu_rec_mutex_lock(&plugin.lock); in qemu_plugin_vcpu_exit_hook()
286 success = g_hash_table_remove(plugin.cpu_ht, &cpu->cpu_index); in qemu_plugin_vcpu_exit_hook()
288 qemu_rec_mutex_unlock(&plugin.lock); in qemu_plugin_vcpu_exit_hook()
312 qemu_rec_mutex_lock(&plugin.lock); in qemu_plugin_vcpu_for_each()
315 g_hash_table_foreach(plugin.cpu_ht, plugin_vcpu_for_each, &args); in qemu_plugin_vcpu_for_each()
316 qemu_rec_mutex_unlock(&plugin.lock); in qemu_plugin_vcpu_for_each()
473 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in qemu_plugin_tb_trans_cb()
498 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in qemu_plugin_vcpu_syscall()
520 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in qemu_plugin_vcpu_syscall_ret()
530 if (cpu->cpu_index < plugin.num_vcpus) { in qemu_plugin_vcpu_idle_cb()
537 if (cpu->cpu_index < plugin.num_vcpus) { in qemu_plugin_vcpu_resume_cb()
568 qht_iter_remove(&plugin.dyn_cb_arr_ht, free_dyn_cb_arr, NULL); in qemu_plugin_flush_cb()
569 qht_reset(&plugin.dyn_cb_arr_ht); in qemu_plugin_flush_cb()
664 * must be called before acquiring plugin.lock. in qemu_plugin_user_exit()
666 * while plugin.lock is not held. in qemu_plugin_user_exit()
670 qemu_rec_mutex_lock(&plugin.lock); in qemu_plugin_user_exit()
676 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { in qemu_plugin_user_exit()
684 qemu_rec_mutex_unlock(&plugin.lock); in qemu_plugin_user_exit()
699 qemu_rec_mutex_lock(&plugin.lock); in qemu_plugin_user_prefork_lock()
706 qemu_rec_mutex_init(&plugin.lock); in qemu_plugin_user_postfork()
708 qemu_rec_mutex_unlock(&plugin.lock); in qemu_plugin_user_postfork()
722 QLIST_INIT(&plugin.cb_lists[i]); in plugin_init()
724 qemu_rec_mutex_init(&plugin.lock); in plugin_init()
725 plugin.id_ht = g_hash_table_new(g_int64_hash, g_int64_equal); in plugin_init()
726 plugin.cpu_ht = g_hash_table_new(g_int_hash, g_int_equal); in plugin_init()
727 QLIST_INIT(&plugin.scoreboards); in plugin_init()
728 plugin.scoreboard_alloc_size = 16; /* avoid frequent reallocation */ in plugin_init()
729 QTAILQ_INIT(&plugin.ctxs); in plugin_init()
730 qht_init(&plugin.dyn_cb_arr_ht, plugin_dyn_cb_arr_cmp, 16, in plugin_init()
737 return plugin.num_vcpus; in plugin_num_vcpus()
745 g_array_set_size(score->data, plugin.scoreboard_alloc_size); in plugin_scoreboard_new()
747 qemu_rec_mutex_lock(&plugin.lock); in plugin_scoreboard_new()
748 QLIST_INSERT_HEAD(&plugin.scoreboards, score, entry); in plugin_scoreboard_new()
749 qemu_rec_mutex_unlock(&plugin.lock); in plugin_scoreboard_new()
756 qemu_rec_mutex_lock(&plugin.lock); in plugin_scoreboard_free()
758 qemu_rec_mutex_unlock(&plugin.lock); in plugin_scoreboard_free()