Re: [PATCH] Input: amijoy - mark amijoy_phys as __initconst

From: Thorsten Blum

Date: Sat Nov 07 2026 - 18:59:36 EST


Hi Dmitry,

On Sat, Nov 07, 2026 at 03:19:38PM -0800, Dmitry Torokhov wrote:
> Hi Thorsten,
>
> On Sat, Nov 07, 2026 at 06:47:38PM +0100, Thorsten Blum wrote:
> > amijoy_phys is only read by the __init function amijoy_init().
> >
> > Also declare amijoy_phys as const.
> ...
> > -static char *amijoy_phys[2] = { "amijoy/input0", "amijoy/input1" };
> > +static const char * const amijoy_phys[2] __initconst = {
> > + "amijoy/input0",
> > + "amijoy/input1",
> > +};
>
> While this technically works because __initconst only places the pointer
> array itself into .init.rodata and leaves the string literals in .rodata,
> I find it too subtle and fragile. input_register_device() retains the
> dev->phys pointer for the entire lifetime of the input device, so if
> anyone later turns amijoy_phys into a 2D char array to avoid pointer
> indirection, the strings themselves will move into .init.rodata and
> dev->phys will become a dangling pointer after init (with no warning
> from modpost since the reference is inside amijoy_init()).

Thanks for the feedback.

> Could we either just mark amijoy_phys as const without __initconst (it
> is only 8 bytes on m68k), or drop amijoy_phys altogether and do:
>
> amijoy_dev[i]->phys = i ? "amijoy/input1" : "amijoy/input0";
>
> in amijoy_init() (which stays in .init.text anyway)?

I prefer to drop it then. v2 is here:
https://lore.kernel.org/lkml/20261107234349.382944-3-blum@xxxxxxxxxx/

Thanks,
Thorsten