[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <8d8b5d79-4b70-4ad0-9496-8d409495cbc9@foss.st.com>
Date: Mon, 5 Jan 2026 08:51:03 +0100
From: Patrice CHOTARD <patrice.chotard@...s.st.com>
To: Sean Young <sean@...s.org>, Andrzej Hajda <andrzej.hajda@...el.com>, "Neil
Armstrong" <neil.armstrong@...aro.org>, Robert Foss <rfoss@...nel.org>,
Laurent Pinchart <Laurent.pinchart@...asonboard.com>, Jonas Karlman
<jonas@...boo.se>, Jernej Skrabec <jernej.skrabec@...il.com>, "Maarten
Lankhorst" <maarten.lankhorst@...ux.intel.com>, Maxime Ripard
<mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>, David Airlie
<airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Bruno Prémont <bonbons@...ux-vserver.org>, Jiri Kosina
<jikos@...nel.org>, Benjamin Tissoires <bentiss@...nel.org>, Hans Verkuil
<hverkuil@...nel.org>, Mauro Carvalho Chehab <mchehab@...nel.org>, "Maxim
Levitsky" <maximlevitsky@...il.com>, Chen-Yu Tsai <wens@...nel.org>, "Samuel
Holland" <samuel@...lland.org>, David Härdeman
<david@...deman.nu>, Benjamin Valentin <benpicco@...glemail.com>, "Greg
Kroah-Hartman" <gregkh@...uxfoundation.org>
CC: Haotian Zhang <vulab@...as.ac.cn>, <dri-devel@...ts.freedesktop.org>,
<linux-kernel@...r.kernel.org>, <linux-input@...r.kernel.org>,
<linux-media@...r.kernel.org>, <linux-arm-kernel@...ts.infradead.org>,
<linux-sunxi@...ts.linux.dev>, <linux-staging@...ts.linux.dev>
Subject: Re: [PATCH] media: rc: rc_unregister_device() should not call
rc_free_device()
On 12/20/25 23:27, Sean Young wrote:
> rc_unregister_device() does two things: it marks the device as
> unregistered, so no new commands can be issued via the lirc chardev,
> and also frees the rc device. Device drivers want to both cancel
> in-flight commands (i.e. kill urbs) and prevent further commands from
> being issued. Only once both are done, can we really free the rc device,
> because it might be referenced in urb callbacks. This is impossible to
> do with the current way of things.
>
> This change removes the implicit call to rc_free_device() from
> rc_unregister_device(). This means that device drivers can call
> rc_unregister_device() in their remove or disconnect function, then cancel
> all the urbs and interrupts before explicitly calling rc_free_device().
>
> Note this is an alternative fix for an issue found by Haotian Zhang, see
> the Closes: tags.
>
> Reported-by: Haotian Zhang <vulab@...as.ac.cn>
> Closes: https://lore.kernel.org/linux-media/20251114101432.2566-1-vulab@iscas.ac.cn
> Closes: https://lore.kernel.org/linux-media/20251114101418.2548-1-vulab@iscas.ac.cn
> Closes: https://lore.kernel.org/linux-media/20251114101346.2530-1-vulab@iscas.ac.cn/
> Closes: https://lore.kernel.org/linux-media/20251114090605.2413-1-vulab@iscas.ac.cn/
> Signed-off-by: Sean Young <sean@...s.org>
> ---
> drivers/gpu/drm/bridge/sil-sii8620.c | 1 +
> drivers/hid/hid-picolcd_cir.c | 1 +
> drivers/media/cec/core/cec-core.c | 2 +-
> drivers/media/common/siano/smsir.c | 1 +
> drivers/media/i2c/ir-kbd-i2c.c | 2 ++
> drivers/media/pci/bt8xx/bttv-input.c | 1 +
> drivers/media/pci/cx23885/cx23885-input.c | 1 +
> drivers/media/pci/cx88/cx88-input.c | 1 +
> drivers/media/pci/dm1105/dm1105.c | 1 +
> drivers/media/pci/mantis/mantis_input.c | 1 +
> drivers/media/pci/saa7134/saa7134-input.c | 1 +
> drivers/media/pci/smipcie/smipcie-ir.c | 1 +
> drivers/media/pci/ttpci/budget-ci.c | 1 +
> drivers/media/rc/ati_remote.c | 4 ++--
> drivers/media/rc/ene_ir.c | 2 +-
> drivers/media/rc/fintek-cir.c | 3 ++-
> drivers/media/rc/igorplugusb.c | 1 +
> drivers/media/rc/iguanair.c | 1 +
> drivers/media/rc/img-ir/img-ir-hw.c | 3 ++-
> drivers/media/rc/img-ir/img-ir-raw.c | 3 ++-
> drivers/media/rc/imon.c | 3 ++-
> drivers/media/rc/ir-hix5hd2.c | 2 +-
> drivers/media/rc/ir_toy.c | 1 +
> drivers/media/rc/ite-cir.c | 2 +-
> drivers/media/rc/mceusb.c | 1 +
> drivers/media/rc/rc-ir-raw.c | 5 -----
> drivers/media/rc/rc-loopback.c | 1 +
> drivers/media/rc/rc-main.c | 6 +-----
> drivers/media/rc/redrat3.c | 4 +++-
> drivers/media/rc/st_rc.c | 2 +-
> drivers/media/rc/streamzap.c | 3 ++-
> drivers/media/rc/sunxi-cir.c | 1 +
> drivers/media/rc/ttusbir.c | 2 +-
> drivers/media/rc/winbond-cir.c | 2 +-
> drivers/media/rc/xbox_remote.c | 3 ++-
> drivers/media/usb/au0828/au0828-input.c | 1 +
> drivers/media/usb/dvb-usb-v2/dvb_usb_core.c | 1 +
> drivers/media/usb/dvb-usb/dvb-usb-remote.c | 6 ++++--
> drivers/media/usb/em28xx/em28xx-input.c | 1 +
> drivers/staging/media/av7110/av7110_ir.c | 1 +
> include/media/rc-core.h | 2 --
> 41 files changed, 52 insertions(+), 30 deletions(-)
>
[...]
> diff --git a/drivers/media/rc/st_rc.c b/drivers/media/rc/st_rc.c
> index 6b70bac5f45d6..0ba06bfc9e14b 100644
> --- a/drivers/media/rc/st_rc.c
> +++ b/drivers/media/rc/st_rc.c
> @@ -203,6 +203,7 @@ static void st_rc_remove(struct platform_device *pdev)
> device_init_wakeup(&pdev->dev, false);
> clk_disable_unprepare(rc_dev->sys_clock);
> rc_unregister_device(rc_dev->rdev);
> + rc_free_device(rc_dev->rdev);
> }
>
> static int st_rc_open(struct rc_dev *rdev)
> @@ -334,7 +335,6 @@ static int st_rc_probe(struct platform_device *pdev)
> return ret;
> rcerr:
> rc_unregister_device(rdev);
> - rdev = NULL;
> clkerr:
> clk_disable_unprepare(rc_dev->sys_clock);
> err:
> diff --git a/drivers/media/rc/streamzap.c b/drivers/media/rc/streamzap.c
> index d3b48a0dd1f47..b9b241fe46ea1 100644
Reviewed-by: Patrice Chotard <patrice.chotard@...s.st.com>
Thanks
Patrice
Powered by blists - more mailing lists