[PATCH v2 16/16] ARM: KVM: timer: use of_node_put() once done with DT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx>
---
 arch/arm/kvm/arch_timer.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/arch/arm/kvm/arch_timer.c b/arch/arm/kvm/arch_timer.c
index 3435915..6cb9aa3 100644
--- a/arch/arm/kvm/arch_timer.c
+++ b/arch/arm/kvm/arch_timer.c
@@ -202,7 +202,8 @@ int kvm_timer_hyp_init(void)
 	ppi = irq_of_parse_and_map(np, 2);
 	if (!ppi) {
 		kvm_err("kvm_arch_timer: no virtual timer interrupt\n");
-		return -EINVAL;
+		err = -EINVAL;
+		goto out;
 	}
 
 	err = request_percpu_irq(ppi, kvm_arch_timer_handler,
@@ -210,7 +211,7 @@ int kvm_timer_hyp_init(void)
 	if (err) {
 		kvm_err("kvm_arch_timer: can't request interrupt %d (%d)\n",
 			ppi, err);
-		return err;
+		goto out;
 	}
 
 	timer_irq.irq = ppi;
@@ -218,21 +219,23 @@ int kvm_timer_hyp_init(void)
 	err = register_cpu_notifier(&kvm_timer_cpu_nb);
 	if (err) {
 		kvm_err("Cannot register timer CPU notifier\n");
-		goto out;
+		goto out_free;
 	}
 
 	wqueue = create_singlethread_workqueue("kvm_arch_timer");
 	if (!wqueue) {
 		err = -ENOMEM;
-		goto out;
+		goto out_free;
 	}
 
 	kvm_info("%s IRQ%d\n", np->name, ppi);
 	on_each_cpu(kvm_timer_init_interrupt, NULL, 1);
 
-	return 0;
-out:
+	goto out;
+out_free:
 	free_percpu_irq(ppi, kvm_get_running_vcpus());
+out:
+	of_node_put(np);
 	return err;
 }
 
-- 
1.8.0.1



_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux