Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1640183 > unrolled thread

[PATCH v2 0/3] irqchip/mbigen: bugfixs

Started byHanjun Guo <guohanjun@huawei.com>
First post2017-05-12 06:10 +0200
Last post2017-05-12 10:00 +0200
Articles 9 — 5 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 0/3] irqchip/mbigen: bugfixs Hanjun Guo <guohanjun@huawei.com> - 2017-05-12 06:10 +0200
    [PATCH v2 2/3] irqchip/mbigen: Fix potential NULL dereferencing Hanjun Guo <guohanjun@huawei.com> - 2017-05-12 06:10 +0200
      [tip:irq/urgent] irqchip/mbigen: Fix potential NULL dereferencing tip-bot for Hanjun Guo <tipbot@zytor.com> - 2017-05-12 10:40 +0200
    [PATCH v2 3/3] irqchip/mbigen: Fix the clear register offset Hanjun Guo <guohanjun@huawei.com> - 2017-05-12 06:10 +0200
      [tip:irq/urgent] irqchip/mbigen: Fix the clear register offset  calculation tip-bot for MaJun <tipbot@zytor.com> - 2017-05-12 10:40 +0200
    [PATCH v2 1/3] irqchip/mbigen: Fix memory mapping code Hanjun Guo <guohanjun@huawei.com> - 2017-05-12 06:10 +0200
      [tip:irq/urgent] irqchip/mbigen: Fix memory mapping code tip-bot for Hanjun Guo <tipbot@zytor.com> - 2017-05-12 10:40 +0200
    Re: [PATCH v2 0/3] irqchip/mbigen: bugfixs "majun (Euler7)" <majun258@huawei.com> - 2017-05-12 09:00 +0200
    Re: [PATCH v2 0/3] irqchip/mbigen: bugfixs Marc Zyngier <marc.zyngier@arm.com> - 2017-05-12 10:00 +0200

#1640183 — [PATCH v2 0/3] irqchip/mbigen: bugfixs

FromHanjun Guo <guohanjun@huawei.com>
Date2017-05-12 06:10 +0200
Subject[PATCH v2 0/3] irqchip/mbigen: bugfixs
Message-ID<tGa3T-7oh-3@gated-at.bofh.it>
From: Hanjun Guo <hanjun.guo@linaro.org>

Here are 3 bugfixes for mbigen:

Patch 1 is a critical bugfix which to fix the mbigen probe failure,
commit 216646e4d82e ("irqchip/mbigen: Fix return value check in
mbigen_device_probe()") introduced this breakage;

Patch 2 fixes a potential NULL dereferencing;

Patch 3 fixes a wrong clear register offset;

v1 -> v2:
 - Rebase on top of lastest Linus tree (09d79d1 Merge tag
   'docs-4.12-2' of git://git.lwn.net/linux);

 - Fix a checkpatch error.

Thanks
Hanjun

Hanjun Guo (2):
  irqchip/mbigen: Fix memory mapping code
  irqchip/mbigen: Fix potential NULL dereferencing

MaJun (1):
  irqchip/mbigen: Fix the clear register offset

 drivers/irqchip/irq-mbigen.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

-- 
1.7.12.4

[toc] | [next] | [standalone]


#1640185 — [PATCH v2 2/3] irqchip/mbigen: Fix potential NULL dereferencing

FromHanjun Guo <guohanjun@huawei.com>
Date2017-05-12 06:10 +0200
Subject[PATCH v2 2/3] irqchip/mbigen: Fix potential NULL dereferencing
Message-ID<tGa3T-7oh-7@gated-at.bofh.it>
In reply to#1640183
From: Hanjun Guo <hanjun.guo@linaro.org>

platform_get_resource() may return NULL, add proper
check to avoid potential NULL dereferencing.

Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
---
 drivers/irqchip/irq-mbigen.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index 0f5e66e..2fa1e45 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -337,6 +337,9 @@ static int mbigen_device_probe(struct platform_device *pdev)
 	mgn_chip->pdev = pdev;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res)
+		return -EINVAL;
+
 	mgn_chip->base = devm_ioremap(&pdev->dev, res->start,
 				      resource_size(res));
 	if (!mgn_chip->base) {
-- 
1.7.12.4

[toc] | [prev] | [next] | [standalone]


#1640317 — [tip:irq/urgent] irqchip/mbigen: Fix potential NULL dereferencing

Fromtip-bot for Hanjun Guo <tipbot@zytor.com>
Date2017-05-12 10:40 +0200
Subject[tip:irq/urgent] irqchip/mbigen: Fix potential NULL dereferencing
Message-ID<tGehb-1Nr-17@gated-at.bofh.it>
In reply to#1640185
Commit-ID:  ad7cc3c0c57d77b442db323056354d0e49833569
Gitweb:     http://git.kernel.org/tip/ad7cc3c0c57d77b442db323056354d0e49833569
Author:     Hanjun Guo <hanjun.guo@linaro.org>
AuthorDate: Fri, 12 May 2017 11:55:27 +0800
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 12 May 2017 10:25:37 +0200

irqchip/mbigen: Fix potential NULL dereferencing

platform_get_resource() may return NULL, add proper
check to avoid potential NULL dereferencing.

Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: linuxarm@huawei.com
Cc: Wei Yongjun <weiyongjun1@huawei.com>
Cc: MaJun <majun258@huawei.com>
Link: http://lkml.kernel.org/r/1494561328-39514-3-git-send-email-guohanjun@huawei.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 drivers/irqchip/irq-mbigen.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index 0f5e66e..2fa1e45 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -337,6 +337,9 @@ static int mbigen_device_probe(struct platform_device *pdev)
 	mgn_chip->pdev = pdev;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res)
+		return -EINVAL;
+
 	mgn_chip->base = devm_ioremap(&pdev->dev, res->start,
 				      resource_size(res));
 	if (!mgn_chip->base) {

[toc] | [prev] | [next] | [standalone]


#1640187 — [PATCH v2 3/3] irqchip/mbigen: Fix the clear register offset

FromHanjun Guo <guohanjun@huawei.com>
Date2017-05-12 06:10 +0200
Subject[PATCH v2 3/3] irqchip/mbigen: Fix the clear register offset
Message-ID<tGa3U-7oh-13@gated-at.bofh.it>
In reply to#1640183
From: MaJun <majun258@huawei.com>

Don't minus reserved interrupts (64) when get the clear
register offset, because the clear register space includes
the space of these 64 interrupts.

This bug wasn't discovered until we running the driver on
a new platform with an updated firmware. It turns out that
there is a timeout mechanism to clear the register in the
mbigen which is for debug purpose and should be turned off,
but because of configuration mistake in firmware, this
function was turned on and covered up the bug in clear offset
calculate, it's time to fix it now.

Fixes: a6c2f87b8820 ("irqchip/mbigen: Implement the mbigen irq chip operation functions")
Signed-off-by: MaJun <majun258@huawei.com>
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
---
 drivers/irqchip/irq-mbigen.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index 2fa1e45..57a860c 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -106,10 +106,7 @@ static inline void get_mbigen_type_reg(irq_hw_number_t hwirq,
 static inline void get_mbigen_clear_reg(irq_hw_number_t hwirq,
 					u32 *mask, u32 *addr)
 {
-	unsigned int ofst;
-
-	hwirq -= RESERVED_IRQ_PER_MBIGEN_CHIP;
-	ofst = hwirq / 32 * 4;
+	unsigned int ofst = hwirq / 32 * 4;
 
 	*mask = 1 << (hwirq % 32);
 	*addr = ofst + REG_MBIGEN_CLEAR_OFFSET;
-- 
1.7.12.4

[toc] | [prev] | [next] | [standalone]


#1640318 — [tip:irq/urgent] irqchip/mbigen: Fix the clear register offset calculation

Fromtip-bot for MaJun <tipbot@zytor.com>
Date2017-05-12 10:40 +0200
Subject[tip:irq/urgent] irqchip/mbigen: Fix the clear register offset calculation
Message-ID<tGehb-1Nr-19@gated-at.bofh.it>
In reply to#1640187
Commit-ID:  9459a04b6a5a09967eec94a1b66f0a74312819d9
Gitweb:     http://git.kernel.org/tip/9459a04b6a5a09967eec94a1b66f0a74312819d9
Author:     MaJun <majun258@huawei.com>
AuthorDate: Fri, 12 May 2017 11:55:28 +0800
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 12 May 2017 10:25:38 +0200

irqchip/mbigen: Fix the clear register offset calculation

The register array offset for clearing an interrupt is calculated by:

    offset = (hwirq - RESERVED_IRQ_PER_MBIGEN_CHIP) / 32;

This is wrong because the clear register array includes the reserved
interrupts. So the clear operation ends up in the wrong register.

This went unnoticed so far, because the hardware clears the real bit
through a timeout mechanism when the hardware is configured in debug
mode. That debug mode was enabled on early generations of the hardware, so
the problem was papered over.

On newer hardware with updated firmware the debug mode was disabled, so the
bits did not get cleared which causes the system to malfunction.

Remove the subtraction of RESERVED_IRQ_PER_MBIGEN_CHIP, so the correct
register is accessed.

[ tglx: Rewrote changelog ]

Fixes: a6c2f87b8820 ("irqchip/mbigen: Implement the mbigen irq chip operation functions")
Signed-off-by: MaJun <majun258@huawei.com>
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: linuxarm@huawei.com
Cc: Wei Yongjun <weiyongjun1@huawei.com>
Link: http://lkml.kernel.org/r/1494561328-39514-4-git-send-email-guohanjun@huawei.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 drivers/irqchip/irq-mbigen.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index 2fa1e45..31d6b5a 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -106,10 +106,7 @@ static inline void get_mbigen_type_reg(irq_hw_number_t hwirq,
 static inline void get_mbigen_clear_reg(irq_hw_number_t hwirq,
 					u32 *mask, u32 *addr)
 {
-	unsigned int ofst;
-
-	hwirq -= RESERVED_IRQ_PER_MBIGEN_CHIP;
-	ofst = hwirq / 32 * 4;
+	unsigned int ofst = (hwirq / 32) * 4;
 
 	*mask = 1 << (hwirq % 32);
 	*addr = ofst + REG_MBIGEN_CLEAR_OFFSET;

[toc] | [prev] | [next] | [standalone]


#1640188 — [PATCH v2 1/3] irqchip/mbigen: Fix memory mapping code

FromHanjun Guo <guohanjun@huawei.com>
Date2017-05-12 06:10 +0200
Subject[PATCH v2 1/3] irqchip/mbigen: Fix memory mapping code
Message-ID<tGa3U-7oh-15@gated-at.bofh.it>
In reply to#1640183
From: Hanjun Guo <hanjun.guo@linaro.org>

Some mbigens share memory regions, and devm_ioremap_resource
does not allow to share resources which will break the probe
of mbigen, in opposition to devm_ioremap.

This patch restores back usage of devm_ioremap function, but
with proper error handling and logging.

Fixes: 216646e4d82e ("irqchip/mbigen: Fix return value check in mbigen_device_probe()")
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
---
 drivers/irqchip/irq-mbigen.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index d2306c8..0f5e66e 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -337,9 +337,12 @@ static int mbigen_device_probe(struct platform_device *pdev)
 	mgn_chip->pdev = pdev;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	mgn_chip->base = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(mgn_chip->base))
-		return PTR_ERR(mgn_chip->base);
+	mgn_chip->base = devm_ioremap(&pdev->dev, res->start,
+				      resource_size(res));
+	if (!mgn_chip->base) {
+		dev_err(&pdev->dev, "failed to ioremap %pR\n", res);
+		return -ENOMEM;
+	}
 
 	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node)
 		err = mbigen_of_create_domain(pdev, mgn_chip);
-- 
1.7.12.4

[toc] | [prev] | [next] | [standalone]


#1640312 — [tip:irq/urgent] irqchip/mbigen: Fix memory mapping code

Fromtip-bot for Hanjun Guo <tipbot@zytor.com>
Date2017-05-12 10:40 +0200
Subject[tip:irq/urgent] irqchip/mbigen: Fix memory mapping code
Message-ID<tGehb-1Nr-1@gated-at.bofh.it>
In reply to#1640188
Commit-ID:  5ba9b0a14132d0b8d97affe909f324045a968d03
Gitweb:     http://git.kernel.org/tip/5ba9b0a14132d0b8d97affe909f324045a968d03
Author:     Hanjun Guo <hanjun.guo@linaro.org>
AuthorDate: Fri, 12 May 2017 11:55:26 +0800
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 12 May 2017 10:25:37 +0200

irqchip/mbigen: Fix memory mapping code

Some mbigens share memory regions, and devm_ioremap_resource
does not allow to share resources which will break the probe
of mbigen, in opposition to devm_ioremap.

This patch restores back usage of devm_ioremap function, but
with proper error handling and logging.

Fixes: 216646e4d82e ("irqchip/mbigen: Fix return value check in mbigen_device_probe()")
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: linuxarm@huawei.com
Cc: Wei Yongjun <weiyongjun1@huawei.com>
Cc: MaJun <majun258@huawei.com>
Link: http://lkml.kernel.org/r/1494561328-39514-2-git-send-email-guohanjun@huawei.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 drivers/irqchip/irq-mbigen.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c
index d2306c8..0f5e66e 100644
--- a/drivers/irqchip/irq-mbigen.c
+++ b/drivers/irqchip/irq-mbigen.c
@@ -337,9 +337,12 @@ static int mbigen_device_probe(struct platform_device *pdev)
 	mgn_chip->pdev = pdev;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	mgn_chip->base = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(mgn_chip->base))
-		return PTR_ERR(mgn_chip->base);
+	mgn_chip->base = devm_ioremap(&pdev->dev, res->start,
+				      resource_size(res));
+	if (!mgn_chip->base) {
+		dev_err(&pdev->dev, "failed to ioremap %pR\n", res);
+		return -ENOMEM;
+	}
 
 	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node)
 		err = mbigen_of_create_domain(pdev, mgn_chip);

[toc] | [prev] | [next] | [standalone]


#1640234

From"majun (Euler7)" <majun258@huawei.com>
Date2017-05-12 09:00 +0200
Message-ID<tGcIp-Ap-9@gated-at.bofh.it>
In reply to#1640183
Hi Hanjun,
	This patchset is fine to me and make my
D05 machine work again.So,

Tested-by: MaJun <majun258@huawei.com>

Thanks
Majun

在 2017/5/12 11:55, Hanjun Guo 写道:
> From: Hanjun Guo <hanjun.guo@linaro.org>
> 
> Here are 3 bugfixes for mbigen:
> 
> Patch 1 is a critical bugfix which to fix the mbigen probe failure,
> commit 216646e4d82e ("irqchip/mbigen: Fix return value check in
> mbigen_device_probe()") introduced this breakage;
> 
> Patch 2 fixes a potential NULL dereferencing;
> 
> Patch 3 fixes a wrong clear register offset;
> 
> v1 -> v2:
>  - Rebase on top of lastest Linus tree (09d79d1 Merge tag
>    'docs-4.12-2' of git://git.lwn.net/linux);
> 
>  - Fix a checkpatch error.
> 
> Thanks
> Hanjun
> 
> Hanjun Guo (2):
>   irqchip/mbigen: Fix memory mapping code
>   irqchip/mbigen: Fix potential NULL dereferencing
> 
> MaJun (1):
>   irqchip/mbigen: Fix the clear register offset
> 
>  drivers/irqchip/irq-mbigen.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 

[toc] | [prev] | [next] | [standalone]


#1640282

FromMarc Zyngier <marc.zyngier@arm.com>
Date2017-05-12 10:00 +0200
Message-ID<tGdEv-1eG-37@gated-at.bofh.it>
In reply to#1640183
On 12/05/17 04:55, Hanjun Guo wrote:
> From: Hanjun Guo <hanjun.guo@linaro.org>
> 
> Here are 3 bugfixes for mbigen:
> 
> Patch 1 is a critical bugfix which to fix the mbigen probe failure,
> commit 216646e4d82e ("irqchip/mbigen: Fix return value check in
> mbigen_device_probe()") introduced this breakage;
> 
> Patch 2 fixes a potential NULL dereferencing;
> 
> Patch 3 fixes a wrong clear register offset;
> 
> v1 -> v2:
>  - Rebase on top of lastest Linus tree (09d79d1 Merge tag
>    'docs-4.12-2' of git://git.lwn.net/linux);
> 
>  - Fix a checkpatch error.
> 
> Thanks
> Hanjun
> 
> Hanjun Guo (2):
>   irqchip/mbigen: Fix memory mapping code
>   irqchip/mbigen: Fix potential NULL dereferencing
> 
> MaJun (1):
>   irqchip/mbigen: Fix the clear register offset
> 
>  drivers/irqchip/irq-mbigen.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 

For the whole series:

Acked-by: Marc Zyngier <marc.zyngier@arm.com>

	M.
-- 
Jazz is not dead. It just smells funny...

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web