aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2015-07-22 09:50:58 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-07-29 05:02:36 -0400
commit78f2613168eca83a218272aa12b680a365ee58d6 (patch)
treee5d601861504a178125c8c52ac8b5459d1b1ede2 /arch/s390/kvm
parent7cbde76b3d55ee299568eb943854c425b015b30c (diff)
KVM: s390: Provide global debug log
In addition to the per VM debug logs, let's provide a global one for KVM-wide events, like new guests or fatal errors. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Diffstat (limited to 'arch/s390/kvm')
-rw-r--r--arch/s390/kvm/kvm-s390.c20
-rw-r--r--arch/s390/kvm/kvm-s390.h7
2 files changed, 26 insertions, 1 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 4c1b5cbea1a6..762103653a29 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -127,6 +127,7 @@ unsigned long kvm_s390_fac_list_mask_size(void)
127} 127}
128 128
129static struct gmap_notifier gmap_notifier; 129static struct gmap_notifier gmap_notifier;
130debug_info_t *kvm_s390_dbf;
130 131
131/* Section: not file related */ 132/* Section: not file related */
132int kvm_arch_hardware_enable(void) 133int kvm_arch_hardware_enable(void)
@@ -151,10 +152,24 @@ void kvm_arch_hardware_unsetup(void)
151 152
152int kvm_arch_init(void *opaque) 153int kvm_arch_init(void *opaque)
153{ 154{
155 kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long));
156 if (!kvm_s390_dbf)
157 return -ENOMEM;
158
159 if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) {
160 debug_unregister(kvm_s390_dbf);
161 return -ENOMEM;
162 }
163
154 /* Register floating interrupt controller interface. */ 164 /* Register floating interrupt controller interface. */
155 return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC); 165 return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
156} 166}
157 167
168void kvm_arch_exit(void)
169{
170 debug_unregister(kvm_s390_dbf);
171}
172
158/* Section: device related */ 173/* Section: device related */
159long kvm_arch_dev_ioctl(struct file *filp, 174long kvm_arch_dev_ioctl(struct file *filp,
160 unsigned int ioctl, unsigned long arg) 175 unsigned int ioctl, unsigned long arg)
@@ -1100,7 +1115,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
1100 mutex_init(&kvm->arch.ipte_mutex); 1115 mutex_init(&kvm->arch.ipte_mutex);
1101 1116
1102 debug_register_view(kvm->arch.dbf, &debug_sprintf_view); 1117 debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
1103 VM_EVENT(kvm, 3, "%s", "vm created"); 1118 VM_EVENT(kvm, 3, "vm created with type %lu", type);
1104 1119
1105 if (type & KVM_VM_S390_UCONTROL) { 1120 if (type & KVM_VM_S390_UCONTROL) {
1106 kvm->arch.gmap = NULL; 1121 kvm->arch.gmap = NULL;
@@ -1117,6 +1132,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
1117 kvm->arch.epoch = 0; 1132 kvm->arch.epoch = 0;
1118 1133
1119 spin_lock_init(&kvm->arch.start_stop_lock); 1134 spin_lock_init(&kvm->arch.start_stop_lock);
1135 KVM_EVENT(3, "vm 0x%p created by pid %u", kvm, current->pid);
1120 1136
1121 return 0; 1137 return 0;
1122out_err: 1138out_err:
@@ -1124,6 +1140,7 @@ out_err:
1124 free_page((unsigned long)kvm->arch.model.fac); 1140 free_page((unsigned long)kvm->arch.model.fac);
1125 debug_unregister(kvm->arch.dbf); 1141 debug_unregister(kvm->arch.dbf);
1126 free_page((unsigned long)(kvm->arch.sca)); 1142 free_page((unsigned long)(kvm->arch.sca));
1143 KVM_EVENT(3, "creation of vm failed: %d", rc);
1127 return rc; 1144 return rc;
1128} 1145}
1129 1146
@@ -1180,6 +1197,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm)
1180 gmap_free(kvm->arch.gmap); 1197 gmap_free(kvm->arch.gmap);
1181 kvm_s390_destroy_adapters(kvm); 1198 kvm_s390_destroy_adapters(kvm);
1182 kvm_s390_clear_float_irqs(kvm); 1199 kvm_s390_clear_float_irqs(kvm);
1200 KVM_EVENT(3, "vm 0x%p destroyed", kvm);
1183} 1201}
1184 1202
1185/* Section: vcpu related */ 1203/* Section: vcpu related */
diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
index 0ee5db11598b..c446aabf60d3 100644
--- a/arch/s390/kvm/kvm-s390.h
+++ b/arch/s390/kvm/kvm-s390.h
@@ -27,6 +27,13 @@ typedef int (*intercept_handler_t)(struct kvm_vcpu *vcpu);
27#define TDB_FORMAT1 1 27#define TDB_FORMAT1 1
28#define IS_ITDB_VALID(vcpu) ((*(char *)vcpu->arch.sie_block->itdba == TDB_FORMAT1)) 28#define IS_ITDB_VALID(vcpu) ((*(char *)vcpu->arch.sie_block->itdba == TDB_FORMAT1))
29 29
30extern debug_info_t *kvm_s390_dbf;
31#define KVM_EVENT(d_loglevel, d_string, d_args...)\
32do { \
33 debug_sprintf_event(kvm_s390_dbf, d_loglevel, d_string "\n", \
34 d_args); \
35} while (0)
36
30#define VM_EVENT(d_kvm, d_loglevel, d_string, d_args...)\ 37#define VM_EVENT(d_kvm, d_loglevel, d_string, d_args...)\
31do { \ 38do { \
32 debug_sprintf_event(d_kvm->arch.dbf, d_loglevel, d_string "\n", \ 39 debug_sprintf_event(d_kvm->arch.dbf, d_loglevel, d_string "\n", \