--- /dev/null
+From 8c9eb041cf76038eb3b62ee259607eec9b89f48d Mon Sep 17 00:00:00 2001
+From: Deng-Cheng Zhu <dengcheng.zhu@imgtec.com>
+Date: Tue, 24 Jun 2014 10:31:08 -0700
+Subject: MIPS: KVM: Fix memory leak on VCPU
+
+From: Deng-Cheng Zhu <dengcheng.zhu@imgtec.com>
+
+commit 8c9eb041cf76038eb3b62ee259607eec9b89f48d upstream.
+
+kvm_arch_vcpu_free() is called in 2 code paths:
+
+1) kvm_vm_ioctl()
+ kvm_vm_ioctl_create_vcpu()
+ kvm_arch_vcpu_destroy()
+ kvm_arch_vcpu_free()
+2) kvm_put_kvm()
+ kvm_destroy_vm()
+ kvm_arch_destroy_vm()
+ kvm_mips_free_vcpus()
+ kvm_arch_vcpu_free()
+
+Neither of the paths handles VCPU free. We need to do it in
+kvm_arch_vcpu_free() corresponding to the memory allocation in
+kvm_arch_vcpu_create().
+
+Signed-off-by: Deng-Cheng Zhu <dengcheng.zhu@imgtec.com>
+Reviewed-by: James Hogan <james.hogan@imgtec.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/kvm/kvm_mips.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/mips/kvm/kvm_mips.c
++++ b/arch/mips/kvm/kvm_mips.c
+@@ -389,6 +389,7 @@ void kvm_arch_vcpu_free(struct kvm_vcpu
+
+ kfree(vcpu->arch.guest_ebase);
+ kfree(vcpu->arch.kseg0_commpage);
++ kfree(vcpu);
+ }
+
+ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
--- /dev/null
+From c6c0a6637f9da54f9472144d44f71cf847f92e20 Mon Sep 17 00:00:00 2001
+From: James Hogan <james.hogan@imgtec.com>
+Date: Thu, 29 May 2014 10:16:44 +0100
+Subject: MIPS: KVM: Remove redundant NULL checks before kfree()
+
+From: James Hogan <james.hogan@imgtec.com>
+
+commit c6c0a6637f9da54f9472144d44f71cf847f92e20 upstream.
+
+The kfree() function already NULL checks the parameter so remove the
+redundant NULL checks before kfree() calls in arch/mips/kvm/.
+
+Signed-off-by: James Hogan <james.hogan@imgtec.com>
+Cc: Paolo Bonzini <pbonzini@redhat.com>
+Cc: Gleb Natapov <gleb@kernel.org>
+Cc: kvm@vger.kernel.org
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: linux-mips@linux-mips.org
+Cc: Sanjay Lal <sanjayl@kymasys.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/kvm/kvm_mips.c | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+--- a/arch/mips/kvm/kvm_mips.c
++++ b/arch/mips/kvm/kvm_mips.c
+@@ -149,9 +149,7 @@ void kvm_mips_free_vcpus(struct kvm *kvm
+ if (kvm->arch.guest_pmap[i] != KVM_INVALID_PAGE)
+ kvm_mips_release_pfn_clean(kvm->arch.guest_pmap[i]);
+ }
+-
+- if (kvm->arch.guest_pmap)
+- kfree(kvm->arch.guest_pmap);
++ kfree(kvm->arch.guest_pmap);
+
+ kvm_for_each_vcpu(i, vcpu, kvm) {
+ kvm_arch_vcpu_free(vcpu);
+@@ -389,12 +387,8 @@ void kvm_arch_vcpu_free(struct kvm_vcpu
+
+ kvm_mips_dump_stats(vcpu);
+
+- if (vcpu->arch.guest_ebase)
+- kfree(vcpu->arch.guest_ebase);
+-
+- if (vcpu->arch.kseg0_commpage)
+- kfree(vcpu->arch.kseg0_commpage);
+-
++ kfree(vcpu->arch.guest_ebase);
++ kfree(vcpu->arch.kseg0_commpage);
+ }
+
+ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)