On Sun 2024-03-24 17:00:44, Uwe Kleine-König wrote: > 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 Reviewed-by: Pavel Machek You might want to cc akpm if this does not get picked up. Best regards, Pavel > --- > 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 f548b1bb75fb..e932d25ca7b3 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, > }; > > > base-commit: 70293240c5ce675a67bfc48f419b093023b862b3 -- People of Russia, stop Putin before his war on Ukraine escalates.