summaryrefslogtreecommitdiffstats
path: root/arch/ia64/kvm/process.c
diff options
context:
space:
mode:
authorYang Zhang <yang.zhang@intel.com>2009-03-23 03:31:04 -0400
committerAvi Kivity <avi@redhat.com>2009-06-10 11:48:34 +0300
commit362c1055e58ecd25a9393c520ab263c80b147497 (patch)
tree76fe99925f7ce1e9bf14733658ea51b4dd025703 /arch/ia64/kvm/process.c
parenta8b876b1a469cb364fee16ba3aef01613a1231cc (diff)
downloadlinux-362c1055e58ecd25a9393c520ab263c80b147497.tar.bz2
KVM: ia64: enable external interrupt in vmm
Currently, the interrupt enable bit is cleared when in the vmm. This patch sets the bit and the external interrupts can be dealt with when in the vmm. This improves the I/O performance. Signed-off-by: Yang Zhang <yang.zhang@intel.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/ia64/kvm/process.c')
-rw-r--r--arch/ia64/kvm/process.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/ia64/kvm/process.c b/arch/ia64/kvm/process.c
index b1dc80952d91..a8f84da04b49 100644
--- a/arch/ia64/kvm/process.c
+++ b/arch/ia64/kvm/process.c
@@ -652,20 +652,25 @@ void kvm_ia64_handle_break(unsigned long ifa, struct kvm_pt_regs *regs,
unsigned long isr, unsigned long iim)
{
struct kvm_vcpu *v = current_vcpu;
+ long psr;
if (ia64_psr(regs)->cpl == 0) {
/* Allow hypercalls only when cpl = 0. */
if (iim == DOMN_PAL_REQUEST) {
+ local_irq_save(psr);
set_pal_call_data(v);
vmm_transition(v);
get_pal_call_result(v);
vcpu_increment_iip(v);
+ local_irq_restore(psr);
return;
} else if (iim == DOMN_SAL_REQUEST) {
+ local_irq_save(psr);
set_sal_call_data(v);
vmm_transition(v);
get_sal_call_result(v);
vcpu_increment_iip(v);
+ local_irq_restore(psr);
return;
}
}