Re: [PATCH v17 3/3] EDAC/npcm: Add NPCM memory controller driver

From: Kun-Fa Lin
Date: Sun Dec 25 2022 - 22:51:15 EST


Hi Boris,

Thanks for the review.

> > + u64 addr = 0;
> > + u64 data = 0;
> > + u32 val_h = 0;
> > + u32 val_l, id, synd;
>
> u32 val_h = 0, val_l, id, synd;
> u64 addr = 0, data = 0;
>
> Also, for all your functions:
>
> The EDAC tree preferred ordering of variable declarations at the
> beginning of a function is reverse fir tree order::
>
> struct long_struct_name *descriptive_name;
> unsigned long foo, bar;
> unsigned int tmp;
> int ret;
>
> The above is faster to parse than the reverse ordering::
>
> int ret;
> unsigned int tmp;
> unsigned long foo, bar;
> struct long_struct_name *descriptive_name;
>
> And even more so than random ordering::
>
> unsigned long foo, bar;
> int ret;
> struct long_struct_name *descriptive_name;
> unsigned int tmp;

I'll check all functions and follow this order.

> > + edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1, addr >> PAGE_SHIFT,
> > + addr & ~PAGE_MASK, synd, 0, 0, -1, priv->message,
>
> No need for that linebreak with the trailing piece.
>
> > + "");

> > + u64 addr = 0;
> > + u64 data = 0;
> > + u32 val_h = 0;
> > + u32 val_l, id, synd;
>
> As above.

Check.

> > + regmap_read(npcm_regmap, pdata->ctl_int_status, &status);
> > + if (status & pdata->int_status_ce_mask) {
> > + handle_ce(mci);
> > +
> > + /* acknowledge the CE interrupt */
> > + regmap_write(npcm_regmap, pdata->ctl_int_ack,
> > + pdata->int_ack_ce_mask);
> > + return IRQ_HANDLED;
> > + } else if (status & pdata->int_status_ue_mask) {
> > + handle_ue(mci);
> > +
> > + /* acknowledge the UE interrupt */
> > + regmap_write(npcm_regmap, pdata->ctl_int_ack,
> > + pdata->int_ack_ue_mask);
> > + return IRQ_HANDLED;
> > + }
>
> WARN_ON_ONCE(1);
>
> to catch weird cases.

OK.

> > + /* write syndrome to XOR_CHECK_BITS */
> > + if (priv->error_type == 0) {
>
> if (priv->error_type == ERROR_TYPE_CORRECTABLE
>
> Use defines. Below too.
>
> > + if (priv->location == 0 && priv->bit > 63) {

Will add defines.

> > + edac_printk(KERN_INFO, EDAC_MOD_NAME,
> > + "data bit should not exceed 63\n");
>
> "data bit should not exceed 63 (%d)\n", priv->bit...)
>
> Below too.
>
> > + return count;
> > + }
> > +
> > + if (priv->location == 1 && priv->bit > 7) {
> > + edac_printk(KERN_INFO, EDAC_MOD_NAME,
> > + "checkcode bit should not exceed 7\n");

OK.

> > + syndrome = priv->location ? 1 << priv->bit :
> > + data_synd[priv->bit];
>
> syndrome = priv->location ? 1 << priv->bit
> : data_synd[priv->bit];

Just to confirm the indentation, is it right as follows?

syndrome = priv->location ? 1 << priv->bit
: data_synd[priv->bit];

And I was wondering if I should just remove the line break and let it stick out?

> I'd find it helpful if there were a short recipe in a comment here
> explaining how the injection should be done...
>
> > +static void setup_debugfs(struct mem_ctl_info *mci)
> > +{

OK, will add some injection examples here.

> > + regmap_update_bits(npcm_regmap, pdata->ctl_ecc_en, pdata->ecc_en_mask,
> > + 0);
>
> You have a bunch of those things: the 80 cols rule is not a rigid and a
> static one - you should rather apply common sense. As in:
>
> Does it make sense to have this ugly linebreak with only the 0 argument there?
>
> regmap_update_bits(npcm_regmap, pdata->ctl_ecc_en, pdata->ecc_en_mask,
> 0);
>
> or should I simply let it stick out:
>
> regmap_update_bits(npcm_regmap, pdata->ctl_ecc_en, pdata->ecc_en_mask, 0);
>
> and have much more readable code?
>
> Please apply common sense to all your linebreaks above.

Thanks for the guide.

> > + edac_mc_del_mc(&pdev->dev);
> > + edac_mc_free(mci);
>
> <--- What happens if someone tries to inject errors right at this
> moment, when you've freed the mci?
>
> Hint: you should destroy resources in the opposite order you've
> allocated them.

Understand. I'll correct the destroy order.

Regards,
Marvin