diff mbox series

[v2] ARM: s3c: irq-s3c24xx: Fix return value check for s3c24xx_init_intc()

Message ID 20210901123557.1043953-1-liu.yun@linux.dev
State New
Headers show
Series [v2] ARM: s3c: irq-s3c24xx: Fix return value check for s3c24xx_init_intc() | expand

Commit Message

Jackie Liu Sept. 1, 2021, 12:35 p.m. UTC
From: Jackie Liu <liuyun01@kylinos.cn>

The s3c24xx_init_intc() returns an error pointer upon failure, not NULL.
let's add an error pointer check in s3c24xx_handle_irq.

s3c_intc[0] is not NULL or ERR, we can simplify the code.

Fixes: 1f629b7a3ced ("ARM: S3C24XX: transform irq handling into a declarative form")
Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
---
 arch/arm/mach-s3c/irq-s3c24xx.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

Comments

Jackie Liu Sept. 6, 2021, 10:23 a.m. UTC | #1
Hi, krzysztof. Any suggestion?

--
BR, Jackie Liu

在 2021/9/1 下午8:35, Jackie Liu 写道:
> From: Jackie Liu <liuyun01@kylinos.cn>

> 

> The s3c24xx_init_intc() returns an error pointer upon failure, not NULL.

> let's add an error pointer check in s3c24xx_handle_irq.

> 

> s3c_intc[0] is not NULL or ERR, we can simplify the code.

> 

> Fixes: 1f629b7a3ced ("ARM: S3C24XX: transform irq handling into a declarative form")

> Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>

> ---

>   arch/arm/mach-s3c/irq-s3c24xx.c | 21 +++++++++++++++++----

>   1 file changed, 17 insertions(+), 4 deletions(-)

> 

> diff --git a/arch/arm/mach-s3c/irq-s3c24xx.c b/arch/arm/mach-s3c/irq-s3c24xx.c

> index 0c631c14a817..df471d322493 100644

> --- a/arch/arm/mach-s3c/irq-s3c24xx.c

> +++ b/arch/arm/mach-s3c/irq-s3c24xx.c

> @@ -362,11 +362,24 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,

>   static asmlinkage void __exception_irq_entry s3c24xx_handle_irq(struct pt_regs *regs)

>   {

>   	do {

> -		if (likely(s3c_intc[0]))

> -			if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))

> -				continue;

> +		/* For platform based machines, neither ERR nor NULL can happen here.

> +		 * The s3c24xx_handle_irq() will be set as IRQ handler iff this succeeds:

> +		 *

> +		 *    s3c_intc[0] = s3c24xx_init_intc()

> +		 *

> +		 * If this fails, the next calls to s3c24xx_init_intc() won't be executed.

> +		 *

> +		 * For DT machine, s3c_init_intc_of() could set the IRQ handler without

> +		 * setting s3c_intc[0] only if it was called with num_ctrl=0. There is no

> +		 * such code path, so again the s3c_intc[0] will have a valid pointer if

> +		 * set_handle_irq() is called.

> +		 *

> +		 * Therefore in s3c24xx_handle_irq(), the s3c_intc[0] is always something.

> +		 */

> +		if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))

> +			continue;

>   

> -		if (s3c_intc[2])

> +		if (!IS_ERR_OR_NULL(s3c_intc[2]))

>   			if (s3c24xx_handle_intc(s3c_intc[2], regs, 64))

>   				continue;

>   

>
Krzysztof Kozlowski Sept. 6, 2021, 10:52 a.m. UTC | #2
On 06/09/2021 12:23, Jackie Liu wrote:
> Hi, krzysztof. Any suggestion?

> 


No, looks good, but it's a merge window time so this will wait.


Best regards,
Krzysztof
Krzysztof Kozlowski Sept. 15, 2021, 7:50 a.m. UTC | #3
On Wed, 1 Sep 2021 20:35:57 +0800, Jackie Liu wrote:
> From: Jackie Liu <liuyun01@kylinos.cn>

> 

> The s3c24xx_init_intc() returns an error pointer upon failure, not NULL.

> let's add an error pointer check in s3c24xx_handle_irq.

> 

> s3c_intc[0] is not NULL or ERR, we can simplify the code.

> 

> [...]


Applied, thanks!

[1/1] ARM: s3c: irq-s3c24xx: Fix return value check for s3c24xx_init_intc()
      commit: 2aa717473ce96c93ae43a5dc8c23cedc8ce7dd9f

Best regards,
-- 
Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
diff mbox series

Patch

diff --git a/arch/arm/mach-s3c/irq-s3c24xx.c b/arch/arm/mach-s3c/irq-s3c24xx.c
index 0c631c14a817..df471d322493 100644
--- a/arch/arm/mach-s3c/irq-s3c24xx.c
+++ b/arch/arm/mach-s3c/irq-s3c24xx.c
@@ -362,11 +362,24 @@  static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,
 static asmlinkage void __exception_irq_entry s3c24xx_handle_irq(struct pt_regs *regs)
 {
 	do {
-		if (likely(s3c_intc[0]))
-			if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))
-				continue;
+		/* For platform based machines, neither ERR nor NULL can happen here.
+		 * The s3c24xx_handle_irq() will be set as IRQ handler iff this succeeds:
+		 *
+		 *    s3c_intc[0] = s3c24xx_init_intc()
+		 *
+		 * If this fails, the next calls to s3c24xx_init_intc() won't be executed.
+		 *
+		 * For DT machine, s3c_init_intc_of() could set the IRQ handler without
+		 * setting s3c_intc[0] only if it was called with num_ctrl=0. There is no
+		 * such code path, so again the s3c_intc[0] will have a valid pointer if
+		 * set_handle_irq() is called.
+		 *
+		 * Therefore in s3c24xx_handle_irq(), the s3c_intc[0] is always something.
+		 */
+		if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))
+			continue;
 
-		if (s3c_intc[2])
+		if (!IS_ERR_OR_NULL(s3c_intc[2]))
 			if (s3c24xx_handle_intc(s3c_intc[2], regs, 64))
 				continue;