All of lore.kernel.org
 help / color / mirror / Atom feed
* [v.2] clocksource:clps711x-timer:- Unmap a region obtained by remap.
@ 2016-08-22 17:37 Arvind Yadav
  0 siblings, 0 replies; only message in thread
From: Arvind Yadav @ 2016-08-22 17:37 UTC (permalink / raw)
  To: daniel.lezcano, tglx
  Cc: shc_work, linux-kernel, linux-arm-kernel, Arvind Yadav

iounmap frees the mapping when timer id is not matching.

Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com>
---
 drivers/clocksource/clps711x-timer.c | 41 +++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/drivers/clocksource/clps711x-timer.c b/drivers/clocksource/clps711x-timer.c
index 24db6d6..13dc295 100644
--- a/drivers/clocksource/clps711x-timer.c
+++ b/drivers/clocksource/clps711x-timer.c
@@ -33,14 +33,7 @@ static u64 notrace clps711x_sched_clock_read(void)
 
 static int __init _clps711x_clksrc_init(struct clk *clock, void __iomem *base)
 {
-	unsigned long rate;
-
-	if (!base)
-		return -ENOMEM;
-	if (IS_ERR(clock))
-		return PTR_ERR(clock);
-
-	rate = clk_get_rate(clock);
+	unsigned long rate = clk_get_rate(clock);
 
 	tcd = base;
 
@@ -67,13 +60,6 @@ static int __init _clps711x_clkevt_init(struct clk *clock, void __iomem *base,
 	struct clock_event_device *clkevt;
 	unsigned long rate;
 
-	if (!irq)
-		return -EINVAL;
-	if (!base)
-		return -ENOMEM;
-	if (IS_ERR(clock))
-		return PTR_ERR(clock);
-
 	clkevt = kzalloc(sizeof(*clkevt), GFP_KERNEL);
 	if (!clkevt)
 		return -ENOMEM;
@@ -106,16 +92,33 @@ void __init clps711x_clksrc_init(void __iomem *tc1_base, void __iomem *tc2_base,
 #ifdef CONFIG_CLKSRC_OF
 static int __init clps711x_timer_init(struct device_node *np)
 {
-	unsigned int irq = irq_of_parse_and_map(np, 0);
-	struct clk *clock = of_clk_get(np, 0);
-	void __iomem *base = of_iomap(np, 0);
+	unsigned int irq;
+	struct clk *clock;
+	void __iomem *base;
+	int ret;
+
+	irq = irq_of_parse_and_map(np, 0);
+	if (!irq)
+		return -EINVAL;
+
+	clock = of_clk_get(np, 0);
+	if (IS_ERR(clock))
+		return PTR_ERR(clock);
+
+	base = of_iomap(np, 0);
+	if (!base)
+		return -ENOMEM;
 
 	switch (of_alias_get_id(np, "timer")) {
 	case CLPS711X_CLKSRC_CLOCKSOURCE:
 		return _clps711x_clksrc_init(clock, base);
 	case CLPS711X_CLKSRC_CLOCKEVENT:
-		return _clps711x_clkevt_init(clock, base, irq);
+		ret = _clps711x_clkevt_init(clock, base, irq);
+		if (ret)
+			iounmap(base);
+		return ret;
 	default:
+		iounmap(base);
 		return -EINVAL;
 	}
 }
-- 
2.7.4

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-08-22 17:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-22 17:37 [v.2] clocksource:clps711x-timer:- Unmap a region obtained by remap Arvind Yadav

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.