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] [day] [month] [year] [list]
Message-ID: <20230118150844.GB4690@thinkpad>
Date:   Wed, 18 Jan 2023 20:38:44 +0530
From:   Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>
To:     Borislav Petkov <bp@...en8.de>
Cc:     andersson@...nel.org, robh+dt@...nel.org,
        krzysztof.kozlowski+dt@...aro.org, tony.luck@...el.com,
        quic_saipraka@...cinc.com, konrad.dybcio@...aro.org,
        linux-arm-msm@...r.kernel.org, linux-kernel@...r.kernel.org,
        james.morse@....com, mchehab@...nel.org, rric@...nel.org,
        linux-edac@...r.kernel.org, quic_ppareek@...cinc.com,
        luca.weiss@...rphone.com, ahalaney@...hat.com, steev@...i.org
Subject: Re: [PATCH v5 16/17] qcom: llcc/edac: Support polling mode for ECC
 handling

On Mon, Jan 16, 2023 at 11:41:26AM +0100, Borislav Petkov wrote:
> On Sun, Jan 15, 2023 at 09:38:25AM +0530, Manivannan Sadhasivam wrote:
> > > You need to request the IRQ first and then set edac_op_state above. I.e., this
> > > devm_request_irq() needs to move in the if (ecc_irq > 0) branch above.
> > 
> > May I know why? I also checked other drivers, most of them are doing the same.
> 
> If the others do it, that doesn't mean it is clean.
> 
> What happens to edac_op_state if devm_request_irq() fails?
> 
> I know I know, the probe function will fail and the driver won't load but still,
> this is sloppy. And it could come down to bite us later, when someone
> reorganizes that function.
> 

OK. I just wanted to know the reasoning behind it.

Thanks,
Mani

> So, do all the error checking method determination - polling or interrupt - in
> one place.  Something like this (totally untested ofc, pasting here the whole
> thing to show what I mean):
> 
> static int qcom_llcc_edac_probe(struct platform_device *pdev)
> {
>         struct llcc_drv_data *llcc_driv_data = pdev->dev.platform_data;
>         struct edac_device_ctl_info *edev_ctl;
>         struct device *dev = &pdev->dev;
>         int ecc_irq;
>         int rc;
> 
>         rc = qcom_llcc_core_setup(llcc_driv_data->bcast_regmap);
>         if (rc)
>                 return rc;
> 
>         /* Allocate edac control info */
>         edev_ctl = edac_device_alloc_ctl_info(0, "qcom-llcc", 1, "bank",
>                                               llcc_driv_data->num_banks, 1,
>                                               NULL, 0,
>                                               edac_device_alloc_index());
> 
>         if (!edev_ctl)
>                 return -ENOMEM;
> 
>         edev_ctl->dev = dev;
>         edev_ctl->mod_name = dev_name(dev);
>         edev_ctl->dev_name = dev_name(dev);
>         edev_ctl->ctl_name = "llcc";
>         edev_ctl->panic_on_ue = LLCC_ERP_PANIC_ON_UE;
> 
>         /* Check if LLCC driver has passed ECC IRQ */
>         ecc_irq = llcc_driv_data->ecc_irq;
>         if (ecc_irq > 0) {
>                 rc = devm_request_irq(dev, ecc_irq, llcc_ecc_irq_handler,
>                                       IRQF_TRIGGER_HIGH, "llcc_ecc", edev_ctl);
>                 if (!rc) {
>                         edac_op_state = EDAC_OPSTATE_INT;
>                         goto irq_done;
>                 }
>         }
> 
>         /* Fall back to polling mode otherwise */
>         edev_ctl->poll_msec = ECC_POLL_MSEC;
>         edev_ctl->edac_check = llcc_ecc_check;
>         edac_op_state = EDAC_OPSTATE_POLL;
> 
> irq_done:
>         rc = edac_device_add_device(edev_ctl);
>         if (rc) {
>                 edac_device_free_ctl_info(edev_ctl);
>                 return rc;
>         }
> 
>         platform_set_drvdata(pdev, edev_ctl);
> 
>         return rc;
> }
> 
> -- 
> Regards/Gruss,
>     Boris.
> 
> https://people.kernel.org/tglx/notes-about-netiquette

-- 
மணிவண்ணன் சதாசிவம்

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ