summaryrefslogtreecommitdiff
path: root/arch/arm/kvm
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@google.com>2019-09-10 10:53:01 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2019-09-10 10:53:01 +0100
commit31f2f42f42b8cfd2b6c65950b7127c50bfd5bbe3 (patch)
treeeb1e47f0a301f0df3f0bb9c5805d5cb8273ffbe2 /arch/arm/kvm
parent93380a03f4476095baed16a8fb1689620d0a6476 (diff)
parent882f8791e1412d81e5cc7a4c379c73195155b40f (diff)
Merge 4.4.192 into android-4.4-p
Changes in 4.4.192 net: tundra: tsi108: use spin_lock_irqsave instead of spin_lock_irq in IRQ context net: tc35815: Explicitly check NET_IP_ALIGN is not zero in tc35815_rx Bluetooth: btqca: Add a short delay before downloading the NVM ibmveth: Convert multicast list size for little-endian system gpio: Fix build error of function redefinition cxgb4: fix a memory leak bug net: myri10ge: fix memory leaks cx82310_eth: fix a memory leak bug net: kalmia: fix memory leaks wimax/i2400m: fix a memory leak bug ravb: Fix use-after-free ravb_tstamp_skb Tools: hv: kvp: eliminate 'may be used uninitialized' warning IB/mlx4: Fix memory leaks ceph: fix buffer free while holding i_ceph_lock in __ceph_setxattr() KVM: arm/arm64: Only skip MMIO insn once libceph: allow ceph_buffer_put() to receive a NULL ceph_buffer spi: bcm2835aux: ensure interrupts are enabled for shared handler spi: bcm2835aux: unifying code between polling and interrupt driven code spi: bcm2835aux: remove dangerous uncontrolled read of fifo spi: bcm2835aux: fix corruptions for longer spi transfers Revert "x86/apic: Include the LDR when clearing out APIC registers" net: fix skb use after free in netpoll net: stmmac: dwmac-rk: Don't fail if phy regulator is absent Linux 4.4.192 Change-Id: I73a2337767b648944825b8b920c2aeee83239c41 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'arch/arm/kvm')
-rw-r--r--arch/arm/kvm/mmio.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c
index ae61e2ea7255..d2efc033ef8b 100644
--- a/arch/arm/kvm/mmio.c
+++ b/arch/arm/kvm/mmio.c
@@ -98,6 +98,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
unsigned int len;
int mask;
+ /* Detect an already handled MMIO return */
+ if (unlikely(!vcpu->mmio_needed))
+ return 0;
+
+ vcpu->mmio_needed = 0;
+
if (!run->mmio.is_write) {
len = run->mmio.len;
if (len > sizeof(unsigned long))
@@ -206,6 +212,7 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run,
run->mmio.is_write = is_write;
run->mmio.phys_addr = fault_ipa;
run->mmio.len = len;
+ vcpu->mmio_needed = 1;
if (!ret) {
/* We handled the access successfully in the kernel. */