diff options
author | Hamo <hamo.by@gmail.com> | 2011-12-15 01:23:16 -0500 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-12-27 04:22:33 -0500 |
commit | 4f69b6805c4f818cf7f4126978cc4a54c489119f (patch) | |
tree | 74f32a6cb922e285bfbeb5dba4ef872088fb8d55 /virt | |
parent | d546cb406ea0d83e2d39ec14221957a24f88a622 (diff) |
KVM: ensure that debugfs entries have been created
by checking the return value from kvm_init_debug, we
can ensure that the entries under debugfs for KVM have
been created correctly.
Signed-off-by: Yang Bai <hamo.by@gmail.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'virt')
-rw-r--r-- | virt/kvm/kvm_main.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 0835c4b90d2f..7287bf5d1c9e 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -2654,15 +2654,29 @@ static const struct file_operations *stat_fops[] = { | |||
2654 | [KVM_STAT_VM] = &vm_stat_fops, | 2654 | [KVM_STAT_VM] = &vm_stat_fops, |
2655 | }; | 2655 | }; |
2656 | 2656 | ||
2657 | static void kvm_init_debug(void) | 2657 | static int kvm_init_debug(void) |
2658 | { | 2658 | { |
2659 | int r = -EFAULT; | ||
2659 | struct kvm_stats_debugfs_item *p; | 2660 | struct kvm_stats_debugfs_item *p; |
2660 | 2661 | ||
2661 | kvm_debugfs_dir = debugfs_create_dir("kvm", NULL); | 2662 | kvm_debugfs_dir = debugfs_create_dir("kvm", NULL); |
2662 | for (p = debugfs_entries; p->name; ++p) | 2663 | if (kvm_debugfs_dir == NULL) |
2664 | goto out; | ||
2665 | |||
2666 | for (p = debugfs_entries; p->name; ++p) { | ||
2663 | p->dentry = debugfs_create_file(p->name, 0444, kvm_debugfs_dir, | 2667 | p->dentry = debugfs_create_file(p->name, 0444, kvm_debugfs_dir, |
2664 | (void *)(long)p->offset, | 2668 | (void *)(long)p->offset, |
2665 | stat_fops[p->kind]); | 2669 | stat_fops[p->kind]); |
2670 | if (p->dentry == NULL) | ||
2671 | goto out_dir; | ||
2672 | } | ||
2673 | |||
2674 | return 0; | ||
2675 | |||
2676 | out_dir: | ||
2677 | debugfs_remove_recursive(kvm_debugfs_dir); | ||
2678 | out: | ||
2679 | return r; | ||
2666 | } | 2680 | } |
2667 | 2681 | ||
2668 | static void kvm_exit_debug(void) | 2682 | static void kvm_exit_debug(void) |
@@ -2806,10 +2820,16 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, | |||
2806 | kvm_preempt_ops.sched_in = kvm_sched_in; | 2820 | kvm_preempt_ops.sched_in = kvm_sched_in; |
2807 | kvm_preempt_ops.sched_out = kvm_sched_out; | 2821 | kvm_preempt_ops.sched_out = kvm_sched_out; |
2808 | 2822 | ||
2809 | kvm_init_debug(); | 2823 | r = kvm_init_debug(); |
2824 | if (r) { | ||
2825 | printk(KERN_ERR "kvm: create debugfs files failed\n"); | ||
2826 | goto out_undebugfs; | ||
2827 | } | ||
2810 | 2828 | ||
2811 | return 0; | 2829 | return 0; |
2812 | 2830 | ||
2831 | out_undebugfs: | ||
2832 | unregister_syscore_ops(&kvm_syscore_ops); | ||
2813 | out_unreg: | 2833 | out_unreg: |
2814 | kvm_async_pf_deinit(); | 2834 | kvm_async_pf_deinit(); |
2815 | out_free: | 2835 | out_free: |