aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2013-04-16 18:37:57 -0400
committerAlexander Graf <agraf@suse.de>2013-04-26 14:27:25 -0400
commit5efdb4be598fc2af6937c3387586635ddf6fd2c8 (patch)
treed29783ce903314e669463e7365a4cebb16db9bc5 /arch/powerpc
parentde9ba2f36368d21314860ee24893a6ffef01e548 (diff)
KVM: PPC: MPIC: Add support for KVM_IRQ_LINE
Now that all pieces are in place for reusing generic irq infrastructure, we can copy x86's implementation of KVM_IRQ_LINE irq injection and simply reuse it for PPC, as it will work there just as well. Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/include/uapi/asm/kvm.h1
-rw-r--r--arch/powerpc/kvm/powerpc.c13
2 files changed, 14 insertions, 0 deletions
diff --git a/arch/powerpc/include/uapi/asm/kvm.h b/arch/powerpc/include/uapi/asm/kvm.h
index ca871067a69b..03c7819a44a3 100644
--- a/arch/powerpc/include/uapi/asm/kvm.h
+++ b/arch/powerpc/include/uapi/asm/kvm.h
@@ -26,6 +26,7 @@
26#define __KVM_HAVE_SPAPR_TCE 26#define __KVM_HAVE_SPAPR_TCE
27#define __KVM_HAVE_PPC_SMT 27#define __KVM_HAVE_PPC_SMT
28#define __KVM_HAVE_IRQCHIP 28#define __KVM_HAVE_IRQCHIP
29#define __KVM_HAVE_IRQ_LINE
29 30
30struct kvm_regs { 31struct kvm_regs {
31 __u64 pc; 32 __u64 pc;
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index 5d046bbdf11f..d8e81e6c1afe 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -33,6 +33,7 @@
33#include <asm/cputhreads.h> 33#include <asm/cputhreads.h>
34#include <asm/irqflags.h> 34#include <asm/irqflags.h>
35#include "timing.h" 35#include "timing.h"
36#include "irq.h"
36#include "../mm/mmu_decl.h" 37#include "../mm/mmu_decl.h"
37 38
38#define CREATE_TRACE_POINTS 39#define CREATE_TRACE_POINTS
@@ -939,6 +940,18 @@ static int kvm_vm_ioctl_get_pvinfo(struct kvm_ppc_pvinfo *pvinfo)
939 return 0; 940 return 0;
940} 941}
941 942
943int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event,
944 bool line_status)
945{
946 if (!irqchip_in_kernel(kvm))
947 return -ENXIO;
948
949 irq_event->status = kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID,
950 irq_event->irq, irq_event->level,
951 line_status);
952 return 0;
953}
954
942long kvm_arch_vm_ioctl(struct file *filp, 955long kvm_arch_vm_ioctl(struct file *filp,
943 unsigned int ioctl, unsigned long arg) 956 unsigned int ioctl, unsigned long arg)
944{ 957{