From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gavin Shan Subject: [PATCH 17/22] powerpc/kvm: Connect EEH RTAS emulation backend Date: Mon, 5 May 2014 11:28:06 +1000 Message-ID: <1399253291-3975-18-git-send-email-gwshan@linux.vnet.ibm.com> References: <1399253291-3975-1-git-send-email-gwshan@linux.vnet.ibm.com> Cc: alex.williamson@redhat.com, benh@kernel.crashing.org, aik@ozlabs.ru, qiudayu@linux.vnet.ibm.com, Gavin Shan To: linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, kvm-ppc@vger.kernel.org Return-path: Received: from e23smtp08.au.ibm.com ([202.81.31.141]:55044 "EHLO e23smtp08.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754091AbaEEB2E (ORCPT ); Sun, 4 May 2014 21:28:04 -0400 Received: from /spool/local by e23smtp08.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 5 May 2014 11:28:02 +1000 In-Reply-To: <1399253291-3975-1-git-send-email-gwshan@linux.vnet.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: The patch intends to connect the KVM module with the backend for EEH RTAS emulation. In turn, we can handle the EEH RTAS services from the guest. Signed-off-by: Gavin Shan --- arch/powerpc/include/asm/kvm_ppc.h | 7 +++++++ arch/powerpc/kvm/book3s_rtas.c | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h index 4096f16..18b51a1 100644 --- a/arch/powerpc/include/asm/kvm_ppc.h +++ b/arch/powerpc/include/asm/kvm_ppc.h @@ -29,6 +29,9 @@ #include #include #include +#ifdef CONFIG_KVM_EEH +#include +#endif #ifdef CONFIG_PPC_BOOK3S #include #else @@ -166,6 +169,10 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, struct kvm_interrupt *irq); extern int kvm_vm_ioctl_rtas_define_token(struct kvm *kvm, void __user *argp); extern int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu); extern void kvmppc_rtas_tokens_free(struct kvm *kvm); +#ifdef CONFIG_KVM_EEH +extern void kvmppc_eeh_rtas(struct kvm_vcpu *vcpu, + struct rtas_args *args, int flag); +#endif extern int kvmppc_xics_set_xive(struct kvm *kvm, u32 irq, u32 server, u32 priority); extern int kvmppc_xics_get_xive(struct kvm *kvm, u32 irq, u32 *server, diff --git a/arch/powerpc/kvm/book3s_rtas.c b/arch/powerpc/kvm/book3s_rtas.c index 7a05315..17bdb4a 100644 --- a/arch/powerpc/kvm/book3s_rtas.c +++ b/arch/powerpc/kvm/book3s_rtas.c @@ -16,6 +16,8 @@ #include #include #include +#include +#include #ifdef CONFIG_KVM_XICS static void kvm_rtas_set_xive(struct kvm_vcpu *vcpu, struct rtas_args *args) @@ -103,6 +105,24 @@ out: } #endif /* CONFIG_KVM_XICS */ +#ifdef CONFIG_KVM_EEH + +#define KVM_RTAS_EEH_FUNC(name, flag) \ +static void kvm_rtas_eeh_##name(struct kvm_vcpu *vcpu, \ + struct rtas_args *args) \ +{ \ + kvmppc_eeh_rtas(vcpu, args, flag); \ +} + +KVM_RTAS_EEH_FUNC(set_option, eeh_rtas_set_option) +KVM_RTAS_EEH_FUNC(set_reset, eeh_rtas_set_slot_reset) +KVM_RTAS_EEH_FUNC(read_state2, eeh_rtas_read_slot_reset_state2) +KVM_RTAS_EEH_FUNC(addr_info2, eeh_rtas_get_config_addr_info2) +KVM_RTAS_EEH_FUNC(error_detail, eeh_rtas_slot_error_detail) +KVM_RTAS_EEH_FUNC(configure_pe, eeh_rtas_configure_pe) + +#endif /* CONFIG_KVM_EEH */ + struct rtas_handler { void (*handler)(struct kvm_vcpu *vcpu, struct rtas_args *args); char *name; @@ -115,6 +135,26 @@ static struct rtas_handler rtas_handlers[] = { { .name = "ibm,int-off", .handler = kvm_rtas_int_off }, { .name = "ibm,int-on", .handler = kvm_rtas_int_on }, #endif +#ifdef CONFIG_KVM_EEH + { .name = "ibm,set-eeh-option", + .handler = kvm_rtas_eeh_set_option + }, + { .name = "ibm,set-slot-reset", + .handler = kvm_rtas_eeh_set_reset + }, + { .name = "ibm,read-slot-reset-state2", + .handler = kvm_rtas_eeh_read_state2 + }, + { .name = "ibm,get-config-addr-info2", + .handler = kvm_rtas_eeh_addr_info2 + }, + { .name = "ibm,slot-error-detail", + .handler = kvm_rtas_eeh_error_detail + }, + { .name = "ibm,configure-pe", + .handler = kvm_rtas_eeh_configure_pe + } +#endif /* CONFIG_KVM_EEH */ }; struct rtas_token_definition { -- 1.8.3.2