Commit 78f26131 authored by Christian Borntraeger's avatar Christian Borntraeger

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: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
parent 7cbde76b
...@@ -633,7 +633,6 @@ extern char sie_exit; ...@@ -633,7 +633,6 @@ extern char sie_exit;
static inline void kvm_arch_hardware_disable(void) {} static inline void kvm_arch_hardware_disable(void) {}
static inline void kvm_arch_check_processor_compat(void *rtn) {} static inline void kvm_arch_check_processor_compat(void *rtn) {}
static inline void kvm_arch_exit(void) {}
static inline void kvm_arch_sync_events(struct kvm *kvm) {} static inline void kvm_arch_sync_events(struct kvm *kvm) {}
static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {} static inline void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) {}
static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {}
......
...@@ -127,6 +127,7 @@ unsigned long kvm_s390_fac_list_mask_size(void) ...@@ -127,6 +127,7 @@ unsigned long kvm_s390_fac_list_mask_size(void)
} }
static struct gmap_notifier gmap_notifier; static struct gmap_notifier gmap_notifier;
debug_info_t *kvm_s390_dbf;
/* Section: not file related */ /* Section: not file related */
int kvm_arch_hardware_enable(void) int kvm_arch_hardware_enable(void)
...@@ -151,10 +152,24 @@ void kvm_arch_hardware_unsetup(void) ...@@ -151,10 +152,24 @@ void kvm_arch_hardware_unsetup(void)
int kvm_arch_init(void *opaque) int kvm_arch_init(void *opaque)
{ {
kvm_s390_dbf = debug_register("kvm-trace", 32, 1, 7 * sizeof(long));
if (!kvm_s390_dbf)
return -ENOMEM;
if (debug_register_view(kvm_s390_dbf, &debug_sprintf_view)) {
debug_unregister(kvm_s390_dbf);
return -ENOMEM;
}
/* Register floating interrupt controller interface. */ /* Register floating interrupt controller interface. */
return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC); return kvm_register_device_ops(&kvm_flic_ops, KVM_DEV_TYPE_FLIC);
} }
void kvm_arch_exit(void)
{
debug_unregister(kvm_s390_dbf);
}
/* Section: device related */ /* Section: device related */
long kvm_arch_dev_ioctl(struct file *filp, long kvm_arch_dev_ioctl(struct file *filp,
unsigned int ioctl, unsigned long arg) unsigned int ioctl, unsigned long arg)
...@@ -1100,7 +1115,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) ...@@ -1100,7 +1115,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
mutex_init(&kvm->arch.ipte_mutex); mutex_init(&kvm->arch.ipte_mutex);
debug_register_view(kvm->arch.dbf, &debug_sprintf_view); debug_register_view(kvm->arch.dbf, &debug_sprintf_view);
VM_EVENT(kvm, 3, "%s", "vm created"); VM_EVENT(kvm, 3, "vm created with type %lu", type);
if (type & KVM_VM_S390_UCONTROL) { if (type & KVM_VM_S390_UCONTROL) {
kvm->arch.gmap = NULL; kvm->arch.gmap = NULL;
...@@ -1117,6 +1132,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) ...@@ -1117,6 +1132,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
kvm->arch.epoch = 0; kvm->arch.epoch = 0;
spin_lock_init(&kvm->arch.start_stop_lock); spin_lock_init(&kvm->arch.start_stop_lock);
KVM_EVENT(3, "vm 0x%p created by pid %u", kvm, current->pid);
return 0; return 0;
out_err: out_err:
...@@ -1124,6 +1140,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) ...@@ -1124,6 +1140,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
free_page((unsigned long)kvm->arch.model.fac); free_page((unsigned long)kvm->arch.model.fac);
debug_unregister(kvm->arch.dbf); debug_unregister(kvm->arch.dbf);
free_page((unsigned long)(kvm->arch.sca)); free_page((unsigned long)(kvm->arch.sca));
KVM_EVENT(3, "creation of vm failed: %d", rc);
return rc; return rc;
} }
...@@ -1180,6 +1197,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm) ...@@ -1180,6 +1197,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm)
gmap_free(kvm->arch.gmap); gmap_free(kvm->arch.gmap);
kvm_s390_destroy_adapters(kvm); kvm_s390_destroy_adapters(kvm);
kvm_s390_clear_float_irqs(kvm); kvm_s390_clear_float_irqs(kvm);
KVM_EVENT(3, "vm 0x%p destroyed", kvm);
} }
/* Section: vcpu related */ /* Section: vcpu related */
......
...@@ -27,6 +27,13 @@ typedef int (*intercept_handler_t)(struct kvm_vcpu *vcpu); ...@@ -27,6 +27,13 @@ typedef int (*intercept_handler_t)(struct kvm_vcpu *vcpu);
#define TDB_FORMAT1 1 #define TDB_FORMAT1 1
#define IS_ITDB_VALID(vcpu) ((*(char *)vcpu->arch.sie_block->itdba == TDB_FORMAT1)) #define IS_ITDB_VALID(vcpu) ((*(char *)vcpu->arch.sie_block->itdba == TDB_FORMAT1))
extern debug_info_t *kvm_s390_dbf;
#define KVM_EVENT(d_loglevel, d_string, d_args...)\
do { \
debug_sprintf_event(kvm_s390_dbf, d_loglevel, d_string "\n", \
d_args); \
} while (0)
#define VM_EVENT(d_kvm, d_loglevel, d_string, d_args...)\ #define VM_EVENT(d_kvm, d_loglevel, d_string, d_args...)\
do { \ do { \
debug_sprintf_event(d_kvm->arch.dbf, d_loglevel, d_string "\n", \ debug_sprintf_event(d_kvm->arch.dbf, d_loglevel, d_string "\n", \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment