static int __init probe_init(void) { int result; int i; for (i = 0; i < ARRAY_SIZE(probe_array); i++) { result = marker_probe_register(probe_array[i].name, probe_array[i].format, probe_array[i].probe_func, &probe_array[i]); if (result) printk(KERN_INFO "Unable to register probe %s\n", probe_array[i].name); } return 0; }
static int do_kvm_trace_enable(struct kvm_user_trace_setup *kuts) { struct kvm_trace *kt; int i, r = -ENOMEM; if (!kuts->buf_size || !kuts->buf_nr) return -EINVAL; kt = kzalloc(sizeof(*kt), GFP_KERNEL); if (!kt) goto err; r = -EIO; atomic_set(&kt->lost_records, 0); kt->lost_file = debugfs_create_file("lost_records", 0444, kvm_debugfs_dir, kt, &kvm_trace_lost_ops); if (!kt->lost_file) goto err; kt->rchan = relay_open("trace", kvm_debugfs_dir, kuts->buf_size, kuts->buf_nr, &kvm_relay_callbacks, kt); if (!kt->rchan) goto err; kvm_trace = kt; for (i = 0; i < ARRAY_SIZE(kvm_trace_probes); i++) { struct kvm_trace_probe *p = &kvm_trace_probes[i]; r = marker_probe_register(p->name, p->format, p->probe_func, p); if (r) printk(KERN_INFO "Unable to register probe %s\n", p->name); } kvm_trace->trace_state = KVM_TRACE_STATE_RUNNING; return 0; err: if (kt) { if (kt->lost_file) debugfs_remove(kt->lost_file); if (kt->rchan) relay_close(kt->rchan); kfree(kt); } return r; }