Re: [PATCH v7 00/22] RISC-V Kendryte K210 support improvements

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Damien,

On Thu, Dec 10, 2020 at 4:41 AM Damien Le Moal <damien.lemoal@xxxxxxx> wrote:
> Changes from v6:
> * Annotate struct platform_driver variables with __refdata to avoid
>   section mismatch compilation errors

Blindly following the advice from kernel test robot <lkp@xxxxxxxxx> is
not always a good idea:

    The variable k210_rst_driver references
    the function __init set_reset_devices()
    If the reference is valid then annotate the
    variable with or __refdata (see linux/init.h) or name the variable:

If your driver's probe function is annotated with __init, you cannot
have a pointer to it in the driver structure, as any binding done after
the freeing of initmem will cause a crash.  Adding the __refdata merely
suppresses the warning, and won't avoid the crash.

There are two solutions for this:
  1. Remove the .probe pointer, and use platform_driver_probe() instead
     of platform_driver_register().
     This guarantees the probe method will be called only once, before
     initmem is freed, but does mean that probe deferral cannot work.
  2. Drop the __init annotation.
     This means the probe method can be called anytime, and supports
     both probe deferral and driver unbind/rebind cycles.

Given the limited amount of RAM on k210, I think option 1 is preferred,
but may require careful tuning of the initialization order using
*_initcall*(), to make sure probe deferral won't ever be needed.

Gr{oetje,eeting}s,

                        Geert


--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux