Message ID | 20201004193202.4044-4-rikard.falkeborn@gmail.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | w1: Constify w1_family_ops | expand |
Hi, On Sun, Oct 04, 2020 at 09:32:02PM +0200, Rikard Falkeborn wrote: > The only usage of these structs is to assign their address to the fops > field in the w1_family struct, which is a const pointer. Make them const > to allow the compiler to put them in read-only memory. > > This was done with the following Coccinelle semantic patch > (http://coccinelle.lip6.fr/): > > // <smpl> > @r1 disable optional_qualifier @ > identifier i; > position p; > @@ > static struct w1_family_ops i@p = {...}; > > @ok1@ > identifier r1.i; > position p; > identifier s; > @@ > static struct w1_family s = { > .fops=&i@p, > }; > > @bad1@ > position p!={r1.p,ok1.p}; > identifier r1.i; > @@ > i@p > > @depends on !bad1 disable optional_qualifier@ > identifier r1.i; > @@ > static > +const > struct w1_family_ops i={}; > // </smpl> > > Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com> > --- I suggest that this simply goes through the w1 tree together with the other patches: Acked-by: Sebastian Reichel <sre@kernel.org> -- Sebastian > drivers/power/supply/bq27xxx_battery_hdq.c | 2 +- > drivers/power/supply/ds2760_battery.c | 2 +- > drivers/power/supply/max1721x_battery.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/power/supply/bq27xxx_battery_hdq.c b/drivers/power/supply/bq27xxx_battery_hdq.c > index 12b10dad77d3..922759ab2e04 100644 > --- a/drivers/power/supply/bq27xxx_battery_hdq.c > +++ b/drivers/power/supply/bq27xxx_battery_hdq.c > @@ -97,7 +97,7 @@ static void bq27xxx_battery_hdq_remove_slave(struct w1_slave *sl) > bq27xxx_battery_teardown(di); > } > > -static struct w1_family_ops bq27xxx_battery_hdq_fops = { > +static const struct w1_family_ops bq27xxx_battery_hdq_fops = { > .add_slave = bq27xxx_battery_hdq_add_slave, > .remove_slave = bq27xxx_battery_hdq_remove_slave, > }; > diff --git a/drivers/power/supply/ds2760_battery.c b/drivers/power/supply/ds2760_battery.c > index 11bed88a89fa..695bb6747400 100644 > --- a/drivers/power/supply/ds2760_battery.c > +++ b/drivers/power/supply/ds2760_battery.c > @@ -795,7 +795,7 @@ static const struct of_device_id w1_ds2760_of_ids[] = { > }; > #endif > > -static struct w1_family_ops w1_ds2760_fops = { > +static const struct w1_family_ops w1_ds2760_fops = { > .add_slave = w1_ds2760_add_slave, > .remove_slave = w1_ds2760_remove_slave, > .groups = w1_ds2760_groups, > diff --git a/drivers/power/supply/max1721x_battery.c b/drivers/power/supply/max1721x_battery.c > index 9ca895b0dabb..1b1a36f8e929 100644 > --- a/drivers/power/supply/max1721x_battery.c > +++ b/drivers/power/supply/max1721x_battery.c > @@ -431,7 +431,7 @@ static int devm_w1_max1721x_add_device(struct w1_slave *sl) > return 0; > } > > -static struct w1_family_ops w1_max1721x_fops = { > +static const struct w1_family_ops w1_max1721x_fops = { > .add_slave = devm_w1_max1721x_add_device, > }; > > -- > 2.28.0 >
diff --git a/drivers/power/supply/bq27xxx_battery_hdq.c b/drivers/power/supply/bq27xxx_battery_hdq.c index 12b10dad77d3..922759ab2e04 100644 --- a/drivers/power/supply/bq27xxx_battery_hdq.c +++ b/drivers/power/supply/bq27xxx_battery_hdq.c @@ -97,7 +97,7 @@ static void bq27xxx_battery_hdq_remove_slave(struct w1_slave *sl) bq27xxx_battery_teardown(di); } -static struct w1_family_ops bq27xxx_battery_hdq_fops = { +static const struct w1_family_ops bq27xxx_battery_hdq_fops = { .add_slave = bq27xxx_battery_hdq_add_slave, .remove_slave = bq27xxx_battery_hdq_remove_slave, }; diff --git a/drivers/power/supply/ds2760_battery.c b/drivers/power/supply/ds2760_battery.c index 11bed88a89fa..695bb6747400 100644 --- a/drivers/power/supply/ds2760_battery.c +++ b/drivers/power/supply/ds2760_battery.c @@ -795,7 +795,7 @@ static const struct of_device_id w1_ds2760_of_ids[] = { }; #endif -static struct w1_family_ops w1_ds2760_fops = { +static const struct w1_family_ops w1_ds2760_fops = { .add_slave = w1_ds2760_add_slave, .remove_slave = w1_ds2760_remove_slave, .groups = w1_ds2760_groups, diff --git a/drivers/power/supply/max1721x_battery.c b/drivers/power/supply/max1721x_battery.c index 9ca895b0dabb..1b1a36f8e929 100644 --- a/drivers/power/supply/max1721x_battery.c +++ b/drivers/power/supply/max1721x_battery.c @@ -431,7 +431,7 @@ static int devm_w1_max1721x_add_device(struct w1_slave *sl) return 0; } -static struct w1_family_ops w1_max1721x_fops = { +static const struct w1_family_ops w1_max1721x_fops = { .add_slave = devm_w1_max1721x_add_device, };
The only usage of these structs is to assign their address to the fops field in the w1_family struct, which is a const pointer. Make them const to allow the compiler to put them in read-only memory. This was done with the following Coccinelle semantic patch (http://coccinelle.lip6.fr/): // <smpl> @r1 disable optional_qualifier @ identifier i; position p; @@ static struct w1_family_ops i@p = {...}; @ok1@ identifier r1.i; position p; identifier s; @@ static struct w1_family s = { .fops=&i@p, }; @bad1@ position p!={r1.p,ok1.p}; identifier r1.i; @@ i@p @depends on !bad1 disable optional_qualifier@ identifier r1.i; @@ static +const struct w1_family_ops i={}; // </smpl> Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com> --- drivers/power/supply/bq27xxx_battery_hdq.c | 2 +- drivers/power/supply/ds2760_battery.c | 2 +- drivers/power/supply/max1721x_battery.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)