Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1640183 > unrolled thread
| Started by | Hanjun Guo <guohanjun@huawei.com> |
|---|---|
| First post | 2017-05-12 06:10 +0200 |
| Last post | 2017-05-12 10:00 +0200 |
| Articles | 9 — 5 participants |
Back to article view | Back to linux.kernel
[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
| From | Hanjun Guo <guohanjun@huawei.com> |
|---|---|
| Date | 2017-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]
| From | Hanjun Guo <guohanjun@huawei.com> |
|---|---|
| Date | 2017-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]
| From | tip-bot for Hanjun Guo <tipbot@zytor.com> |
|---|---|
| Date | 2017-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]
| From | Hanjun Guo <guohanjun@huawei.com> |
|---|---|
| Date | 2017-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]
| From | tip-bot for MaJun <tipbot@zytor.com> |
|---|---|
| Date | 2017-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]
| From | Hanjun Guo <guohanjun@huawei.com> |
|---|---|
| Date | 2017-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]
| From | tip-bot for Hanjun Guo <tipbot@zytor.com> |
|---|---|
| Date | 2017-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]
| From | "majun (Euler7)" <majun258@huawei.com> |
|---|---|
| Date | 2017-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]
| From | Marc Zyngier <marc.zyngier@arm.com> |
|---|---|
| Date | 2017-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