On Wed, Feb 19, 2020 at 11:52:39AM +0100, Johan Hovold wrote: > On Thu, Feb 13, 2020 at 10:16:00AM +0100, Uwe Kleine-König wrote: > > From: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> > > > > Usage is as follows: > > > > myled=ledname > > tty=ttyS0 > > > > echo tty > /sys/class/leds/$myled/trigger > > cat /sys/class/tty/$tty/dev > /sys/class/leds/$myled/dev > > > > . When this new trigger is active it periodically checks the tty's > > statistics and when it changed since the last check the led is flashed > > once. > > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> > > --- > > > +static ssize_t dev_store(struct device *dev, > > + struct device_attribute *attr, const char *buf, > > + size_t size) > > +{ > > + struct ledtrig_tty_data *trigger_data = led_trigger_get_drvdata(dev); > > + struct tty_struct *tty; > > + dev_t d; > > + int ret; > > + > > + if (size == 0 || (size == 1 && buf[0] == '\n')) { > > + tty = NULL; > > + } else { > > + ret = kstrtodev_t(buf, &d); > > + if (ret < 0) > > + return ret; > > + > > + tty = tty_kopen_shared(d); > > I really don't have time to look at this, but having the led-trigger > keep the port open looks fundamentally broken (consider modem-control > signals, power, etc). If I understand correctly calling tty_kopen_shared() doesn't open the device, just keep it referenced which prevents it to disappear. Unless I miss something it doesn't result in the tty's .open() being called. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |