lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Thu, 2 Dec 2021 02:39:41 +0000
From:   Bryan O'Donoghue <bryan.odonoghue@...aro.org>
To:     Fenglin Wu <quic_fenglinw@...cinc.com>,
        linux-arm-msm@...r.kernel.org, linux-kernel@...r.kernel.org,
        sboyd@...nel.org
Cc:     collinsd@...eaurora.org, subbaram@...eaurora.org,
        tglx@...utronix.de, maz@...nel.org,
        Abhijeet Dharmapurikar <adharmap@...eaurora.org>
Subject: Re: [RESEND PATCH v3 01/10] spmi: pmic-arb: handle spurious interrupt

On 02/12/2021 00:00, Fenglin Wu wrote:
> Call handle_bad_irq() for handling spurious interrupt. While at it,
> add an error print in cleanup_irq() for any spurious interrupt which
> is fired but not having interrupt handler registered.

Being excruciatingly pedantic, I'd suggest breaking this up into two 
patches, one for the ratelimit one for the logical change to the irq 
handling flow.

> Signed-off-by: Abhijeet Dharmapurikar<adharmap@...eaurora.org>
> Signed-off-by: David Collins<collinsd@...eaurora.org>
> Signed-off-by: Fenglin Wu<quic_fenglinw@...cinc.com>
> ---
>   drivers/spmi/spmi-pmic-arb.c | 17 +++++++++++++----
>   1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
> index bbbd311..da629cc 100644
> --- a/drivers/spmi/spmi-pmic-arb.c
> +++ b/drivers/spmi/spmi-pmic-arb.c
> @@ -489,6 +489,8 @@ static void cleanup_irq(struct spmi_pmic_arb *pmic_arb, u16 apid, int id)
>   	u8 per = ppid & 0xFF;
>   	u8 irq_mask = BIT(id);
>   
> +	dev_err_ratelimited(&pmic_arb->spmic->dev, "%s apid=%d sid=0x%x per=0x%x irq=%d\n",
> +			__func__, apid, sid, per, id);
>   	writel_relaxed(irq_mask, pmic_arb->ver_ops->irq_clear(pmic_arb, apid));
>   
>   	if (pmic_arb_write_cmd(pmic_arb->spmic, SPMI_CMD_EXT_WRITEL, sid,
> @@ -502,10 +504,10 @@ static void cleanup_irq(struct spmi_pmic_arb *pmic_arb, u16 apid, int id)
>   				irq_mask, ppid);
>   }
>   
> -static void periph_interrupt(struct spmi_pmic_arb *pmic_arb, u16 apid)
> +static int periph_interrupt(struct spmi_pmic_arb *pmic_arb, u16 apid)
>   {
>   	unsigned int irq;
> -	u32 status, id;
> +	u32 status, id, handled = 0;

If handled were an int

>   	u8 sid = (pmic_arb->apid_data[apid].ppid >> 8) & 0xF;
>   	u8 per = pmic_arb->apid_data[apid].ppid & 0xFF;
>   
> @@ -520,7 +522,10 @@ static void periph_interrupt(struct spmi_pmic_arb *pmic_arb, u16 apid)
>   			continue;
>   		}
>   		generic_handle_irq(irq);
> +		handled++;
>   	}
> +
> +	return (handled) ? 0 : -EINVAL;
>   }

you could "return handled;" and then have

if (periph_interrupt(pmic_arb, apid))
     handled++;

later on

Its not important I suppose but please do at least break this up into 
two separate patches.

---
bod

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ