[PATCH] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing

Jing Zhang posted 1 patch 1 year, 5 months ago
There is a newer version of this series
drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Jing Zhang 1 year, 5 months ago
The alibaba_uncore_pmu driver forgot to clear all interrupt status
in the interrupt processing function. After the PMU counter overflow
interrupt occurred, an interrupt storm occurred, causing the system
to hang.

Therefore, clear the correct interrupt status in the interrupt handling
function to fix it.

Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>
---
 drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
index 38a2947..c6ff1bc 100644
--- a/drivers/perf/alibaba_uncore_drw_pmu.c
+++ b/drivers/perf/alibaba_uncore_drw_pmu.c
@@ -400,7 +400,7 @@ static irqreturn_t ali_drw_pmu_isr(int irq_num, void *data)
 			}
 
 			/* clear common counter intr status */
-			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, 1);
+			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, status);
 			writel(clr_status,
 			       drw_pmu->cfg_base + ALI_DRW_PMU_OV_INTR_CLR);
 		}
-- 
1.8.3.1
Re: [PATCH] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Mark Rutland 1 year, 5 months ago
On Mon, Aug 19, 2024 at 07:48:30PM +0800, Jing Zhang wrote:
> The alibaba_uncore_pmu driver forgot to clear all interrupt status
> in the interrupt processing function. After the PMU counter overflow
> interrupt occurred, an interrupt storm occurred, causing the system
> to hang.
> 
> Therefore, clear the correct interrupt status in the interrupt handling
> function to fix it.
> 
> Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>

Presumably this should have

Fixes: cf7b61073e4526ca ("drivers/perf: add DDR Sub-System Driveway PMU driver for Yitian 710 SoC")

... right?

With that:

Acked-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> ---
>  drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
> index 38a2947..c6ff1bc 100644
> --- a/drivers/perf/alibaba_uncore_drw_pmu.c
> +++ b/drivers/perf/alibaba_uncore_drw_pmu.c
> @@ -400,7 +400,7 @@ static irqreturn_t ali_drw_pmu_isr(int irq_num, void *data)
>  			}
>  
>  			/* clear common counter intr status */
> -			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, 1);
> +			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, status);
>  			writel(clr_status,
>  			       drw_pmu->cfg_base + ALI_DRW_PMU_OV_INTR_CLR);
>  		}
> -- 
> 1.8.3.1
>
Re: [PATCH] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Jing Zhang 1 year, 5 months ago

在 2024/8/20 下午5:18, Mark Rutland 写道:
> On Mon, Aug 19, 2024 at 07:48:30PM +0800, Jing Zhang wrote:
>> The alibaba_uncore_pmu driver forgot to clear all interrupt status
>> in the interrupt processing function. After the PMU counter overflow
>> interrupt occurred, an interrupt storm occurred, causing the system
>> to hang.
>>
>> Therefore, clear the correct interrupt status in the interrupt handling
>> function to fix it.
>>
>> Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>
> 
> Presumably this should have
> 
> Fixes: cf7b61073e4526ca ("drivers/perf: add DDR Sub-System Driveway PMU driver for Yitian 710 SoC")
> 
> ... right?

You are right, I forgot it.

> 
> With that:
> 
> Acked-by: Mark Rutland <mark.rutland@arm.com>
> 
> Mark.
> 
>> ---
>>  drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
>> index 38a2947..c6ff1bc 100644
>> --- a/drivers/perf/alibaba_uncore_drw_pmu.c
>> +++ b/drivers/perf/alibaba_uncore_drw_pmu.c
>> @@ -400,7 +400,7 @@ static irqreturn_t ali_drw_pmu_isr(int irq_num, void *data)
>>  			}
>>  
>>  			/* clear common counter intr status */
>> -			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, 1);
>> +			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, status);
>>  			writel(clr_status,
>>  			       drw_pmu->cfg_base + ALI_DRW_PMU_OV_INTR_CLR);
>>  		}
>> -- 
>> 1.8.3.1
>>
[PATCH v2] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Jing Zhang 1 year, 5 months ago
The alibaba_uncore_pmu driver forgot to clear all interrupt status
in the interrupt processing function. After the PMU counter overflow
interrupt occurred, an interrupt storm occurred, causing the system
to hang.

Therefore, clear the correct interrupt status in the interrupt handling
function to fix it.

Fixes: cf7b61073e45 ("drivers/perf: add DDR Sub-System Driveway PMU driver for Yitian 710 SoC")
Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>
Reviewed-by: Shuai Xue <xueshuai@linux.alibaba.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
---
 drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
index 38a2947..c6ff1bc 100644
--- a/drivers/perf/alibaba_uncore_drw_pmu.c
+++ b/drivers/perf/alibaba_uncore_drw_pmu.c
@@ -400,7 +400,7 @@ static irqreturn_t ali_drw_pmu_isr(int irq_num, void *data)
 			}
 
 			/* clear common counter intr status */
-			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, 1);
+			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, status);
 			writel(clr_status,
 			       drw_pmu->cfg_base + ALI_DRW_PMU_OV_INTR_CLR);
 		}
-- 
1.8.3.1
Re: [PATCH v2] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Will Deacon 1 year, 5 months ago
On Thu, 22 Aug 2024 11:33:31 +0800, Jing Zhang wrote:
> The alibaba_uncore_pmu driver forgot to clear all interrupt status
> in the interrupt processing function. After the PMU counter overflow
> interrupt occurred, an interrupt storm occurred, causing the system
> to hang.
> 
> Therefore, clear the correct interrupt status in the interrupt handling
> function to fix it.
> 
> [...]

Applied to will (for-next/perf), thanks!

[1/1] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
      https://git.kernel.org/will/c/a3dd920977dc

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev
Re: [PATCH v2] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Mark Rutland 1 year, 5 months ago
Will, are you happy to pick this up?

Mark.

On Thu, Aug 22, 2024 at 11:33:31AM +0800, Jing Zhang wrote:
> The alibaba_uncore_pmu driver forgot to clear all interrupt status
> in the interrupt processing function. After the PMU counter overflow
> interrupt occurred, an interrupt storm occurred, causing the system
> to hang.
> 
> Therefore, clear the correct interrupt status in the interrupt handling
> function to fix it.
> 
> Fixes: cf7b61073e45 ("drivers/perf: add DDR Sub-System Driveway PMU driver for Yitian 710 SoC")
> Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>
> Reviewed-by: Shuai Xue <xueshuai@linux.alibaba.com>
> Acked-by: Mark Rutland <mark.rutland@arm.com>
> ---
>  drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
> index 38a2947..c6ff1bc 100644
> --- a/drivers/perf/alibaba_uncore_drw_pmu.c
> +++ b/drivers/perf/alibaba_uncore_drw_pmu.c
> @@ -400,7 +400,7 @@ static irqreturn_t ali_drw_pmu_isr(int irq_num, void *data)
>  			}
>  
>  			/* clear common counter intr status */
> -			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, 1);
> +			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, status);
>  			writel(clr_status,
>  			       drw_pmu->cfg_base + ALI_DRW_PMU_OV_INTR_CLR);
>  		}
> -- 
> 1.8.3.1
>
Re: [PATCH] drivers/perf: Fix ali_drw_pmu driver interrupt status clearing
Posted by Shuai Xue 1 year, 5 months ago

在 2024/8/19 19:48, Jing Zhang 写道:
> The alibaba_uncore_pmu driver forgot to clear all interrupt status
> in the interrupt processing function. After the PMU counter overflow
> interrupt occurred, an interrupt storm occurred, causing the system
> to hang.
> 
> Therefore, clear the correct interrupt status in the interrupt handling
> function to fix it.
> 
> Signed-off-by: Jing Zhang <renyu.zj@linux.alibaba.com>
> ---
>   drivers/perf/alibaba_uncore_drw_pmu.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
> index 38a2947..c6ff1bc 100644
> --- a/drivers/perf/alibaba_uncore_drw_pmu.c
> +++ b/drivers/perf/alibaba_uncore_drw_pmu.c
> @@ -400,7 +400,7 @@ static irqreturn_t ali_drw_pmu_isr(int irq_num, void *data)
>   			}
>   
>   			/* clear common counter intr status */
> -			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, 1);
> +			clr_status = FIELD_PREP(ALI_DRW_PMCOM_CNT_OV_INTR_MASK, status);
>   			writel(clr_status,
>   			       drw_pmu->cfg_base + ALI_DRW_PMU_OV_INTR_CLR);
>   		}

Yes, it is a bug due to typo.

Thank you.

Reviewed-by: Shuai Xue <xueshuai@linux.alibaba.com>

Shuai