linux-leds.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] leds: trigger: netdev: Check offload ability on interface up
@ 2024-10-01  2:45 Marek Vasut
  2024-10-02 23:21 ` Andrew Lunn
  2024-10-03 12:06 ` Andrew Lunn
  0 siblings, 2 replies; 12+ messages in thread
From: Marek Vasut @ 2024-10-01  2:45 UTC (permalink / raw)
  To: linux-leds
  Cc: Marek Vasut, Alexandre Torgue, Andrew Lunn, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

The trigger_data->hw_control indicates whether the LED is controlled by HW
offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
currently called only from netdev_led_attr_store(), i.e. when writing any
sysfs attribute of the netdev trigger instance associated with a PHY LED.

The can_hw_control() calls validate_net_dev() which internally calls
led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
is not attached.

At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
only when the interface is brought up and is detached again when the
interface is brought down. In case e.g. udev rules configure the netdev
LED trigger sysfs attributes before the interface is brought up, then when
the interface is brought up, the LEDs are not blinking.

This is because trigger_data->hw_control = can_hw_control() was called
when udev wrote the sysfs attribute files, before the interface was up,
so can_hw_control() resp. validate_net_dev() returned false, and the
trigger_data->hw_control = can_hw_control() was never called again to
update the trigger_data->hw_control content and let the offload take
over the LED blinking.

Call data->hw_control = can_hw_control() from netdev_trig_notify() to
update the offload capability of the LED when the UP notification arrives.
This makes the LEDs blink after the interface is brought up.

On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
in place, boot the machine with cable plugged in, and the LEDs won't work
without this patch once the interface is brought up, even if they should:
"
ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
"

Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Christian Marangi <ansuelsmth@gmail.com>
Cc: Christophe Roullier <christophe.roullier@foss.st.com>
Cc: Daniel Golle <daniel@makrotopia.org>
Cc: Heiner Kallweit <hkallweit1@gmail.com>
Cc: Lee Jones <lee@kernel.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: kernel@dh-electronics.com
Cc: linux-leds@vger.kernel.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Cc: netdev@vger.kernel.org
---
 drivers/leds/trigger/ledtrig-netdev.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/leds/trigger/ledtrig-netdev.c b/drivers/leds/trigger/ledtrig-netdev.c
index 4b0863db901a9..c15efe3e50780 100644
--- a/drivers/leds/trigger/ledtrig-netdev.c
+++ b/drivers/leds/trigger/ledtrig-netdev.c
@@ -605,6 +605,8 @@ static int netdev_trig_notify(struct notifier_block *nb,
 		trigger_data->net_dev = NULL;
 		break;
 	case NETDEV_UP:
+		trigger_data->hw_control = can_hw_control(trigger_data);
+		fallthrough;
 	case NETDEV_CHANGE:
 		get_device_state(trigger_data);
 		/* Refresh link_speed visibility */
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-01  2:45 [PATCH] leds: trigger: netdev: Check offload ability on interface up Marek Vasut
@ 2024-10-02 23:21 ` Andrew Lunn
  2024-10-03  0:47   ` Marek Vasut
  2024-10-03 12:06 ` Andrew Lunn
  1 sibling, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2024-10-02 23:21 UTC (permalink / raw)
  To: Marek Vasut
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On Tue, Oct 01, 2024 at 04:45:23AM +0200, Marek Vasut wrote:
> The trigger_data->hw_control indicates whether the LED is controlled by HW
> offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
> currently called only from netdev_led_attr_store(), i.e. when writing any
> sysfs attribute of the netdev trigger instance associated with a PHY LED.
> 
> The can_hw_control() calls validate_net_dev() which internally calls
> led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
> for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
> is not attached.
> 
> At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
> only when the interface is brought up and is detached again when the
> interface is brought down. In case e.g. udev rules configure the netdev
> LED trigger sysfs attributes before the interface is brought up, then when
> the interface is brought up, the LEDs are not blinking.
> 
> This is because trigger_data->hw_control = can_hw_control() was called
> when udev wrote the sysfs attribute files, before the interface was up,
> so can_hw_control() resp. validate_net_dev() returned false, and the
> trigger_data->hw_control = can_hw_control() was never called again to
> update the trigger_data->hw_control content and let the offload take
> over the LED blinking.
> 
> Call data->hw_control = can_hw_control() from netdev_trig_notify() to
> update the offload capability of the LED when the UP notification arrives.
> This makes the LEDs blink after the interface is brought up.

Have you run this code with lockdep enabled? There have been some
deadlocks, or potential deadlocks in this area.

> 
> On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
> in place, boot the machine with cable plugged in, and the LEDs won't work
> without this patch once the interface is brought up, even if they should:
> "
> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
> "

Nice use of udev. I had not thought about using it for this.

	Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-02 23:21 ` Andrew Lunn
@ 2024-10-03  0:47   ` Marek Vasut
  2024-10-03 12:05     ` Andrew Lunn
  2025-11-17 11:18     ` Marek Vasut
  0 siblings, 2 replies; 12+ messages in thread
From: Marek Vasut @ 2024-10-03  0:47 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On 10/3/24 1:21 AM, Andrew Lunn wrote:
> On Tue, Oct 01, 2024 at 04:45:23AM +0200, Marek Vasut wrote:
>> The trigger_data->hw_control indicates whether the LED is controlled by HW
>> offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
>> currently called only from netdev_led_attr_store(), i.e. when writing any
>> sysfs attribute of the netdev trigger instance associated with a PHY LED.
>>
>> The can_hw_control() calls validate_net_dev() which internally calls
>> led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
>> for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
>> is not attached.
>>
>> At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
>> only when the interface is brought up and is detached again when the
>> interface is brought down. In case e.g. udev rules configure the netdev
>> LED trigger sysfs attributes before the interface is brought up, then when
>> the interface is brought up, the LEDs are not blinking.
>>
>> This is because trigger_data->hw_control = can_hw_control() was called
>> when udev wrote the sysfs attribute files, before the interface was up,
>> so can_hw_control() resp. validate_net_dev() returned false, and the
>> trigger_data->hw_control = can_hw_control() was never called again to
>> update the trigger_data->hw_control content and let the offload take
>> over the LED blinking.
>>
>> Call data->hw_control = can_hw_control() from netdev_trig_notify() to
>> update the offload capability of the LED when the UP notification arrives.
>> This makes the LEDs blink after the interface is brought up.
> 
> Have you run this code with lockdep enabled? There have been some
> deadlocks, or potential deadlocks in this area.

Now I did on next 20241002 , no lockdep splat reported .

>> On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
>> in place, boot the machine with cable plugged in, and the LEDs won't work
>> without this patch once the interface is brought up, even if they should:
>> "
>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
>> "
> 
> Nice use of udev. I had not thought about using it for this.
Is there some other way to configure the netdev-triggered PHY LEDs ?
I still feel the udev rule is somewhat brittle and fragile, and also not 
available early enough for default PHY LED configuration, i.e. the LEDs 
are not blinking when I use e.g. ip=/nfsroot= when booting from NFS root 
until the userspace started, which is not nice. The only alternative I 
can imagine is default configuration in DT, which was already rejected a 
few years ago.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-03  0:47   ` Marek Vasut
@ 2024-10-03 12:05     ` Andrew Lunn
  2024-10-03 12:15       ` Marek Vasut
  2025-11-17 11:18     ` Marek Vasut
  1 sibling, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2024-10-03 12:05 UTC (permalink / raw)
  To: Marek Vasut
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

> > Nice use of udev. I had not thought about using it for this.

> Is there some other way to configure the netdev-triggered PHY LEDs ?
> I still feel the udev rule is somewhat brittle and fragile, and also not
> available early enough for default PHY LED configuration, i.e. the LEDs are
> not blinking when I use e.g. ip=/nfsroot= when booting from NFS root until
> the userspace started, which is not nice. The only alternative I can imagine
> is default configuration in DT, which was already rejected a few years ago.

Device tree is the only early way i can think of, especially for NFS
root.

What has clearly been rejected is each vendor having their own DT
binding. But i think we might have more success with one generic
binding for all MAC/PHY LEDs.

The way i was thinking about it, was to describe the label on the
front panel. That is hardware you are describing, so fits DT.

We are clearly in the grey area for DT, so i can understand some push
back on this from the DT Maintainers.

	Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-01  2:45 [PATCH] leds: trigger: netdev: Check offload ability on interface up Marek Vasut
  2024-10-02 23:21 ` Andrew Lunn
@ 2024-10-03 12:06 ` Andrew Lunn
  2024-12-13 22:15   ` Marek Vasut
  1 sibling, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2024-10-03 12:06 UTC (permalink / raw)
  To: Marek Vasut
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On Tue, Oct 01, 2024 at 04:45:23AM +0200, Marek Vasut wrote:
> The trigger_data->hw_control indicates whether the LED is controlled by HW
> offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
> currently called only from netdev_led_attr_store(), i.e. when writing any
> sysfs attribute of the netdev trigger instance associated with a PHY LED.
> 
> The can_hw_control() calls validate_net_dev() which internally calls
> led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
> for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
> is not attached.
> 
> At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
> only when the interface is brought up and is detached again when the
> interface is brought down. In case e.g. udev rules configure the netdev
> LED trigger sysfs attributes before the interface is brought up, then when
> the interface is brought up, the LEDs are not blinking.
> 
> This is because trigger_data->hw_control = can_hw_control() was called
> when udev wrote the sysfs attribute files, before the interface was up,
> so can_hw_control() resp. validate_net_dev() returned false, and the
> trigger_data->hw_control = can_hw_control() was never called again to
> update the trigger_data->hw_control content and let the offload take
> over the LED blinking.
> 
> Call data->hw_control = can_hw_control() from netdev_trig_notify() to
> update the offload capability of the LED when the UP notification arrives.
> This makes the LEDs blink after the interface is brought up.
> 
> On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
> in place, boot the machine with cable plugged in, and the LEDs won't work
> without this patch once the interface is brought up, even if they should:
> "
> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
> "
> 
> Signed-off-by: Marek Vasut <marex@denx.de>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-03 12:05     ` Andrew Lunn
@ 2024-10-03 12:15       ` Marek Vasut
  0 siblings, 0 replies; 12+ messages in thread
From: Marek Vasut @ 2024-10-03 12:15 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On 10/3/24 2:05 PM, Andrew Lunn wrote:
>>> Nice use of udev. I had not thought about using it for this.
> 
>> Is there some other way to configure the netdev-triggered PHY LEDs ?
>> I still feel the udev rule is somewhat brittle and fragile, and also not
>> available early enough for default PHY LED configuration, i.e. the LEDs are
>> not blinking when I use e.g. ip=/nfsroot= when booting from NFS root until
>> the userspace started, which is not nice. The only alternative I can imagine
>> is default configuration in DT, which was already rejected a few years ago.
> 
> Device tree is the only early way i can think of, especially for NFS
> root.
> 
> What has clearly been rejected is each vendor having their own DT
> binding. But i think we might have more success with one generic
> binding for all MAC/PHY LEDs.

Right now I have this (for one of the PHY LEDs):

led@0 {
         reg = <0>;
         color = <LED_COLOR_ID_GREEN>;
         function = LED_FUNCTION_WAN;
         linux,default-trigger = "netdev";
};

What about be useful is to set the link_10/100/1000 and rx/tx flags here 
somehow. It cannot be 'function' because that is already used to define 
the port purpose.

Maybe something like 'led-pattern' property used by 'pattern' trigger 
would work ? Some sort of "led-netdev-flags = LINK10 | LINK100;" ?

> The way i was thinking about it, was to describe the label on the
> front panel. That is hardware you are describing, so fits DT.
> 
> We are clearly in the grey area for DT, so i can understand some push
> back on this from the DT Maintainers.

It would be a policy, yes.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-03 12:06 ` Andrew Lunn
@ 2024-12-13 22:15   ` Marek Vasut
  2024-12-14 15:20     ` Andrew Lunn
  0 siblings, 1 reply; 12+ messages in thread
From: Marek Vasut @ 2024-12-13 22:15 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On 10/3/24 2:06 PM, Andrew Lunn wrote:
> On Tue, Oct 01, 2024 at 04:45:23AM +0200, Marek Vasut wrote:
>> The trigger_data->hw_control indicates whether the LED is controlled by HW
>> offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
>> currently called only from netdev_led_attr_store(), i.e. when writing any
>> sysfs attribute of the netdev trigger instance associated with a PHY LED.
>>
>> The can_hw_control() calls validate_net_dev() which internally calls
>> led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
>> for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
>> is not attached.
>>
>> At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
>> only when the interface is brought up and is detached again when the
>> interface is brought down. In case e.g. udev rules configure the netdev
>> LED trigger sysfs attributes before the interface is brought up, then when
>> the interface is brought up, the LEDs are not blinking.
>>
>> This is because trigger_data->hw_control = can_hw_control() was called
>> when udev wrote the sysfs attribute files, before the interface was up,
>> so can_hw_control() resp. validate_net_dev() returned false, and the
>> trigger_data->hw_control = can_hw_control() was never called again to
>> update the trigger_data->hw_control content and let the offload take
>> over the LED blinking.
>>
>> Call data->hw_control = can_hw_control() from netdev_trig_notify() to
>> update the offload capability of the LED when the UP notification arrives.
>> This makes the LEDs blink after the interface is brought up.
>>
>> On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
>> in place, boot the machine with cable plugged in, and the LEDs won't work
>> without this patch once the interface is brought up, even if they should:
>> "
>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
>> "
>>
>> Signed-off-by: Marek Vasut <marex@denx.de>
> 
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Is there anything blocking this patch from being picked up ?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-12-13 22:15   ` Marek Vasut
@ 2024-12-14 15:20     ` Andrew Lunn
  2024-12-16  9:35       ` Lee Jones
  0 siblings, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2024-12-14 15:20 UTC (permalink / raw)
  To: Marek Vasut
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On Fri, Dec 13, 2024 at 11:15:09PM +0100, Marek Vasut wrote:
> On 10/3/24 2:06 PM, Andrew Lunn wrote:
> > On Tue, Oct 01, 2024 at 04:45:23AM +0200, Marek Vasut wrote:
> > > The trigger_data->hw_control indicates whether the LED is controlled by HW
> > > offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
> > > currently called only from netdev_led_attr_store(), i.e. when writing any
> > > sysfs attribute of the netdev trigger instance associated with a PHY LED.
> > > 
> > > The can_hw_control() calls validate_net_dev() which internally calls
> > > led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
> > > for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
> > > is not attached.
> > > 
> > > At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
> > > only when the interface is brought up and is detached again when the
> > > interface is brought down. In case e.g. udev rules configure the netdev
> > > LED trigger sysfs attributes before the interface is brought up, then when
> > > the interface is brought up, the LEDs are not blinking.
> > > 
> > > This is because trigger_data->hw_control = can_hw_control() was called
> > > when udev wrote the sysfs attribute files, before the interface was up,
> > > so can_hw_control() resp. validate_net_dev() returned false, and the
> > > trigger_data->hw_control = can_hw_control() was never called again to
> > > update the trigger_data->hw_control content and let the offload take
> > > over the LED blinking.
> > > 
> > > Call data->hw_control = can_hw_control() from netdev_trig_notify() to
> > > update the offload capability of the LED when the UP notification arrives.
> > > This makes the LEDs blink after the interface is brought up.
> > > 
> > > On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
> > > in place, boot the machine with cable plugged in, and the LEDs won't work
> > > without this patch once the interface is brought up, even if they should:
> > > "
> > > ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
> > > ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
> > > "
> > > 
> > > Signed-off-by: Marek Vasut <marex@denx.de>
> > 
> > Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Is there anything blocking this patch from being picked up ?

I think this should be going via the LED Maintainer. Please check with
Lee.

	Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-12-14 15:20     ` Andrew Lunn
@ 2024-12-16  9:35       ` Lee Jones
  2024-12-16  9:52         ` Andrew Lunn
  0 siblings, 1 reply; 12+ messages in thread
From: Lee Jones @ 2024-12-16  9:35 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Marek Vasut, linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

On Sat, 14 Dec 2024, Andrew Lunn wrote:

> On Fri, Dec 13, 2024 at 11:15:09PM +0100, Marek Vasut wrote:
> > On 10/3/24 2:06 PM, Andrew Lunn wrote:
> > > On Tue, Oct 01, 2024 at 04:45:23AM +0200, Marek Vasut wrote:
> > > > The trigger_data->hw_control indicates whether the LED is controlled by HW
> > > > offload, i.e. the PHY. The trigger_data->hw_control = can_hw_control() is
> > > > currently called only from netdev_led_attr_store(), i.e. when writing any
> > > > sysfs attribute of the netdev trigger instance associated with a PHY LED.
> > > > 
> > > > The can_hw_control() calls validate_net_dev() which internally calls
> > > > led_cdev->hw_control_get_device(), which is phy_led_hw_control_get_device()
> > > > for PHY LEDs. The phy_led_hw_control_get_device() returns NULL if the PHY
> > > > is not attached.
> > > > 
> > > > At least in case of DWMAC (STM32MP, iMX8M, ...), the PHY device is attached
> > > > only when the interface is brought up and is detached again when the
> > > > interface is brought down. In case e.g. udev rules configure the netdev
> > > > LED trigger sysfs attributes before the interface is brought up, then when
> > > > the interface is brought up, the LEDs are not blinking.
> > > > 
> > > > This is because trigger_data->hw_control = can_hw_control() was called
> > > > when udev wrote the sysfs attribute files, before the interface was up,
> > > > so can_hw_control() resp. validate_net_dev() returned false, and the
> > > > trigger_data->hw_control = can_hw_control() was never called again to
> > > > update the trigger_data->hw_control content and let the offload take
> > > > over the LED blinking.
> > > > 
> > > > Call data->hw_control = can_hw_control() from netdev_trig_notify() to
> > > > update the offload capability of the LED when the UP notification arrives.
> > > > This makes the LEDs blink after the interface is brought up.
> > > > 
> > > > On STM32MP13xx with RTL8211F, it is enough to have the following udev rule
> > > > in place, boot the machine with cable plugged in, and the LEDs won't work
> > > > without this patch once the interface is brought up, even if they should:
> > > > "
> > > > ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="end0"
> > > > ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name}="end0"
> > > > "
> > > > 
> > > > Signed-off-by: Marek Vasut <marex@denx.de>
> > > 
> > > Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> > Is there anything blocking this patch from being picked up ?
> 
> I think this should be going via the LED Maintainer. Please check with

It looked like the conversation was continuing.

If you have everything tied up, rather than relying on maintainers to
keep up with the branching conversations of 100's of patch-sets, it's
best to collect the tags you have and submit a [RESEND].

-- 
Lee Jones [李琼斯]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-12-16  9:35       ` Lee Jones
@ 2024-12-16  9:52         ` Andrew Lunn
  0 siblings, 0 replies; 12+ messages in thread
From: Andrew Lunn @ 2024-12-16  9:52 UTC (permalink / raw)
  To: Lee Jones
  Cc: Marek Vasut, linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit,
	Lukasz Majewski, Pavel Machek, kernel, linux-stm32, netdev

> It looked like the conversation was continuing.

Yes, it did, for nice to have additional functionality. But i think
the base patch is good to go, and it has my Reviewed-by:.

I expect there will be a resend coming soon :-)

	Andrew

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2024-10-03  0:47   ` Marek Vasut
  2024-10-03 12:05     ` Andrew Lunn
@ 2025-11-17 11:18     ` Marek Vasut
  2025-11-19 16:09       ` Marek Vasut
  1 sibling, 1 reply; 12+ messages in thread
From: Marek Vasut @ 2025-11-17 11:18 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Pavel Machek, kernel, linux-stm32, netdev

On 10/3/24 2:47 AM, Marek Vasut wrote:

Hello again,

>>> On STM32MP13xx with RTL8211F, it is enough to have the following udev 
>>> rule
>>> in place, boot the machine with cable plugged in, and the LEDs won't 
>>> work
>>> without this patch once the interface is brought up, even if they 
>>> should:
>>> "
>>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", 
>>> ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", 
>>> ATTR{link_1000}="1", ATTR{device_name}="end0"
>>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", 
>>> ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", ATTR{device_name} 
>>> ="end0"
>>> "
>>
>> Nice use of udev. I had not thought about using it for this.

I might have been a bit too hasty with this. The following is only a 
quick preliminary FYI, I am still investigating the details.

I observe on 6.18-rc6 (ST STM32MP13xx , so STM32 DWMAC ethernet, and 
RTL8211F PHY), that if I use the these udev rules (SoC has two MACs, 
there are two rules for each MAC, and 2 rules for each of two LEDs on 
each MAC PHY , therefore four rules in total ; the rules for both MACs 
are identical):

"
ACTION=="add|change", SUBSYSTEM=="leds", 
KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", 
ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", 
ATTR{device_name}="ethsom0"
ACTION=="add|change", SUBSYSTEM=="leds", 
KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", 
ATTR{tx}="1", ATTR{device_name}="ethsom0"

ACTION=="add|change", SUBSYSTEM=="leds", 
KERNEL=="stmmac-1:01:green:lan", ATTR{trigger}="netdev", 
ATTR{link_10}="1", ATTR{link_100}="1", ATTR{link_1000}="1", 
ATTR{device_name}="ethsom1"
ACTION=="add|change", SUBSYSTEM=="leds", 
KERNEL=="stmmac-1:01:yellow:lan", ATTR{trigger}="netdev", ATTR{rx}="1", 
ATTR{tx}="1", ATTR{device_name}="ethsom1"
"

I get this backtrace. Notice the "sysfs: cannot create duplicate 
filename ..." part , I suspect there is some subtle race condition ?

"
sysfs: cannot create duplicate filename 
'/devices/platform/soc/5c007000.bus/5800e000.ethernet/mdio_bus/stmmac-1/stmmac-1:01/leds/stmmac-1:01:green:lan/link_10'
CPU: 0 UID: 0 PID: 153 Comm: (udev-worker) Not tainted 6.18.0-rc6 #1 
PREEMPT
Hardware name: STM32 (Device Tree Support)
Call trace:
  unwind_backtrace from show_stack+0x18/0x1c
  show_stack from dump_stack_lvl+0x54/0x68
  dump_stack_lvl from sysfs_warn_dup+0x58/0x6c
  sysfs_warn_dup from sysfs_add_file_mode_ns+0xf0/0x130
  sysfs_add_file_mode_ns from internal_create_group+0x344/0x480
  internal_create_group from internal_create_groups+0x48/0x6c
  internal_create_groups from led_trigger_set+0x1e4/0x278
  led_trigger_set from led_trigger_write+0xe0/0x118
  led_trigger_write from sysfs_kf_bin_write+0x98/0xa0
  sysfs_kf_bin_write from kernfs_fop_write_iter+0x14c/0x198
  kernfs_fop_write_iter from vfs_write+0x170/0x1d4
  vfs_write from ksys_write+0x7c/0xd0
  ksys_write from ret_fast_syscall+0x0/0x54
Exception stack(0xedbf1fa8 to 0xedbf1ff0)
1fa0:                   00000006 bec4476c 00000015 bec4476c 00000006 
00000001
1fc0: 00000006 bec4476c 000e7698 00000004 00000006 fffffff7 00000000 
000d1710
1fe0: 00000004 bec44578 b6c34397 b6bb15e6
leds stmmac-1:01:green:lan: Failed to add trigger attributes
"

If I find out more, I will get back to this thread.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] leds: trigger: netdev: Check offload ability on interface up
  2025-11-17 11:18     ` Marek Vasut
@ 2025-11-19 16:09       ` Marek Vasut
  0 siblings, 0 replies; 12+ messages in thread
From: Marek Vasut @ 2025-11-19 16:09 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-leds, Alexandre Torgue, Christian Marangi,
	Christophe Roullier, Daniel Golle, Heiner Kallweit, Lee Jones,
	Pavel Machek, kernel, linux-stm32, netdev, Vladimir Oltean

On 11/17/25 12:18 PM, Marek Vasut wrote:

Hello one more time,

>>>> On STM32MP13xx with RTL8211F, it is enough to have the following 
>>>> udev rule
>>>> in place, boot the machine with cable plugged in, and the LEDs won't 
>>>> work
>>>> without this patch once the interface is brought up, even if they 
>>>> should:
>>>> "
>>>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:green:wan", 
>>>> ATTR{trigger}="netdev", ATTR{link_10}="1", ATTR{link_100}="1", 
>>>> ATTR{link_1000}="1", ATTR{device_name}="end0"
>>>> ACTION=="add", SUBSYSTEM=="leds", KERNEL=="stmmac-0:01:yellow:wan", 
>>>> ATTR{trigger}="netdev", ATTR{rx}="1", ATTR{tx}="1", 
>>>> ATTR{device_name} ="end0"
>>>> "
>>>
>>> Nice use of udev. I had not thought about using it for this.
> 
> I might have been a bit too hasty with this. The following is only a 
> quick preliminary FYI, I am still investigating the details.
> 
> I observe on 6.18-rc6 (ST STM32MP13xx , so STM32 DWMAC ethernet, and 
> RTL8211F PHY), that if I use the these udev rules (SoC has two MACs, 
> there are two rules for each MAC, and 2 rules for each of two LEDs on 
> each MAC PHY , therefore four rules in total ; the rules for both MACs 
> are identical):
> 
> "
> ACTION=="add|change", SUBSYSTEM=="leds", 
> KERNEL=="stmmac-0:01:green:wan", ATTR{trigger}="netdev", ATTR{link_10} 
> ="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="ethsom0"
> ACTION=="add|change", SUBSYSTEM=="leds", 
> KERNEL=="stmmac-0:01:yellow:wan", ATTR{trigger}="netdev", ATTR{rx}="1", 
> ATTR{tx}="1", ATTR{device_name}="ethsom0"
> 
> ACTION=="add|change", SUBSYSTEM=="leds", 
> KERNEL=="stmmac-1:01:green:lan", ATTR{trigger}="netdev", ATTR{link_10} 
> ="1", ATTR{link_100}="1", ATTR{link_1000}="1", ATTR{device_name}="ethsom1"
> ACTION=="add|change", SUBSYSTEM=="leds", 
> KERNEL=="stmmac-1:01:yellow:lan", ATTR{trigger}="netdev", ATTR{rx}="1", 
> ATTR{tx}="1", ATTR{device_name}="ethsom1"
> "
> 
> I get this backtrace. Notice the "sysfs: cannot create duplicate 
> filename ..." part , I suspect there is some subtle race condition ?
> 
> "
> sysfs: cannot create duplicate filename '/devices/platform/ 
> soc/5c007000.bus/5800e000.ethernet/mdio_bus/stmmac-1/stmmac-1:01/leds/ 
> stmmac-1:01:green:lan/link_10'
> CPU: 0 UID: 0 PID: 153 Comm: (udev-worker) Not tainted 6.18.0-rc6 #1 
> PREEMPT
> Hardware name: STM32 (Device Tree Support)
> Call trace:
>   unwind_backtrace from show_stack+0x18/0x1c
>   show_stack from dump_stack_lvl+0x54/0x68
>   dump_stack_lvl from sysfs_warn_dup+0x58/0x6c
>   sysfs_warn_dup from sysfs_add_file_mode_ns+0xf0/0x130
>   sysfs_add_file_mode_ns from internal_create_group+0x344/0x480
>   internal_create_group from internal_create_groups+0x48/0x6c
>   internal_create_groups from led_trigger_set+0x1e4/0x278
>   led_trigger_set from led_trigger_write+0xe0/0x118
>   led_trigger_write from sysfs_kf_bin_write+0x98/0xa0
>   sysfs_kf_bin_write from kernfs_fop_write_iter+0x14c/0x198
>   kernfs_fop_write_iter from vfs_write+0x170/0x1d4
>   vfs_write from ksys_write+0x7c/0xd0
>   ksys_write from ret_fast_syscall+0x0/0x54
> Exception stack(0xedbf1fa8 to 0xedbf1ff0)
> 1fa0:                   00000006 bec4476c 00000015 bec4476c 00000006 
> 00000001
> 1fc0: 00000006 bec4476c 000e7698 00000004 00000006 fffffff7 00000000 
> 000d1710
> 1fe0: 00000004 bec44578 b6c34397 b6bb15e6
> leds stmmac-1:01:green:lan: Failed to add trigger attributes
> "
> 
> If I find out more, I will get back to this thread.

I've been tracking it all the way to kernfs, but so far without much 
success.

I found commit 52c47742f79d ("leds: triggers: send uevent when changing 
triggers") which indicates the udev rules above are likely wrong, but 
they still shouldn't corrupt sysfs the way they do, right ?

If you have any hint how to find out what is actually going on, I would 
be much grateful. I already tried KASAN on this and LOCKDEP, but neither 
triggers. I was also adding a lot of trace_printk() into netdev LED 
trigger, but all I could find is the link_* attributes are removed, then 
added again, and the kernel complains the link_10 attribute already exists.

I also noticed that if I try to list /sys/...stmmac-1:01:green:lan/ 
directory after the splat with netdev trigger set, the result of the 
listing is not always the same, sometimes there are the netdev trigger 
attributes, sometimes not, and sometimes they are corrupted.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2025-11-19 17:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-01  2:45 [PATCH] leds: trigger: netdev: Check offload ability on interface up Marek Vasut
2024-10-02 23:21 ` Andrew Lunn
2024-10-03  0:47   ` Marek Vasut
2024-10-03 12:05     ` Andrew Lunn
2024-10-03 12:15       ` Marek Vasut
2025-11-17 11:18     ` Marek Vasut
2025-11-19 16:09       ` Marek Vasut
2024-10-03 12:06 ` Andrew Lunn
2024-12-13 22:15   ` Marek Vasut
2024-12-14 15:20     ` Andrew Lunn
2024-12-16  9:35       ` Lee Jones
2024-12-16  9:52         ` Andrew Lunn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).