Subject: Re: are device names part of sysfs ABI? (was Re: devicename part of LEDs under ethernet MAC / PHY)

From: Greg Kroah-Hartman <[email-masked]>
Date: Mon, 4 Oct 2021 09:10:35 +0200

On Mon, Oct 04, 2021 at 09:04:38AM +0200, Marek Behún wrote:
> Hi Greg,
> 
> On Mon, 4 Oct 2021 08:37:37 +0200
> Greg Kroah-Hartman <[email-masked]> wrote:
> 
> > On Sun, Oct 03, 2021 at 10:53:38PM +0200, Marek Behún wrote:
> > > Hello Greg,
> > > 
> > > could you give your opinion on this discussion?  
> > 
> > What discussion?  Top posting ruins that :(
> 
> Sorry, the discussion is here
> https://lore.kernel.org/linux-leds/20211001144053.3952474a@thinkpad/T/
> But the basic question is below, so you don't need to read the
> discussion.
> 
> > > Are device names (as returned by dev_name() function) also part of
> > > sysfs ABI? Should these names be stable across reboots / kernel
> > > upgrades?  
> > 
> > Stable in what exact way?
> 
> Example:
> - Board has an ethernet PHYs that is described in DT, and therefore
>   has stable sysfs path (derived from DT path), something like
>     /sys/devices/.../mdio_bus/f1072004.mdio-mii/f1072004.mdio-mii:01

None of the numbers there are "stable", right?

> - The PHY has a subnode describing a LED.
>   The LED subsystem has a different naming scheme (it uses DT node name
>   as a last resort). When everything is okay, the dev_name() of the LED
>   will be something like
>     ethphy42:green:link

Wonderful, but the "42" means nothing.

> - Now suppose that the PHY driver is unloaded and loaded again. The PHY
>   sysfs path is unchanged, but the LED will now be named
>     ethphy43:green:link
> 
> Is this OK?

Yup!

The "link" should point to the device it is associated with, right?  You
need to have some way to refer to the device.

> > Numbering of devices (where a dynamic value is part of a name, like the
> > "42" in "usb42"), is never guaranteed to be stable, but the non-number
> > part of the name (like "usb" is in "usb42") is stable, as that is what
> > you have properly documented in the Documentation/ABI/ files defining
> > the bus and class devices, right?
> 
> It does make sense for removable devices like USB. What I am asking
> is whether it is also OK for devices that have stable DT nodes.

Any device can be "removed" from the system and added back thanks to the
joy of the driver model :)

Also, what prevents your DT from renumbering things in an update to it
in the future?  The kernel doesn't care, and userspace should be able to
handle it.

Again, any numbering scheme is NEVER stable, just because it feels like
it is at the moment for your device, you should NEVER rely on that, but
instead rely on the attributes of the device to determine what it is and
where it is in the device hierarchy (serial number, position location,
partition name, etc.) in order to know what it associated with.

And again, this is 1/2 of the whole reason _why_ we created the unified
driver model in the kernel.  Don't try to go back to the nightmare that
we had in the 2.4 and earlier kernel days please.

thanks,

greg k-h