| From ff416450769218046bae64503c7669be2c691554 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 24 Mar 2024 17:00:44 +0100 |
| Subject: media: i2c: et8ek8: Don't strip remove function when driver is |
| builtin |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> |
| |
| [ Upstream commit 545b215736c5c4b354e182d99c578a472ac9bfce ] |
| |
| Using __exit for the remove function results in the remove callback |
| being discarded with CONFIG_VIDEO_ET8EK8=y. When such a device gets |
| unbound (e.g. using sysfs or hotplug), the driver is just removed |
| without the cleanup being performed. This results in resource leaks. Fix |
| it by compiling in the remove callback unconditionally. |
| |
| This also fixes a W=1 modpost warning: |
| |
| WARNING: modpost: drivers/media/i2c/et8ek8/et8ek8: section mismatch in reference: et8ek8_i2c_driver+0x10 (section: .data) -> et8ek8_remove (section: .exit.text) |
| |
| Fixes: c5254e72b8ed ("[media] media: Driver for Toshiba et8ek8 5MP sensor") |
| Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> |
| Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> |
| Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/i2c/et8ek8/et8ek8_driver.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/media/i2c/et8ek8/et8ek8_driver.c b/drivers/media/i2c/et8ek8/et8ek8_driver.c |
| index f548b1bb75fb9..e932d25ca7b3a 100644 |
| --- a/drivers/media/i2c/et8ek8/et8ek8_driver.c |
| +++ b/drivers/media/i2c/et8ek8/et8ek8_driver.c |
| @@ -1475,7 +1475,7 @@ static int et8ek8_probe(struct i2c_client *client) |
| return ret; |
| } |
| |
| -static void __exit et8ek8_remove(struct i2c_client *client) |
| +static void et8ek8_remove(struct i2c_client *client) |
| { |
| struct v4l2_subdev *subdev = i2c_get_clientdata(client); |
| struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev); |
| @@ -1517,7 +1517,7 @@ static struct i2c_driver et8ek8_i2c_driver = { |
| .of_match_table = et8ek8_of_table, |
| }, |
| .probe = et8ek8_probe, |
| - .remove = __exit_p(et8ek8_remove), |
| + .remove = et8ek8_remove, |
| .id_table = et8ek8_id_table, |
| }; |
| |
| -- |
| 2.43.0 |
| |