These patches add labels in the initializations of structure fields (c99 initializers). The complete semantic patch thta makes this change is shown below. This rule ignores cases where the initialization is just 0 or NULL, where some of the fields already use labels, and where there are nested structures.
// <smpl> @ok1@ identifier i1,i2; position p; @@
struct i1 i2@p = { (0|NULL) };
@ok2@ identifier i1,i2,i3; position p; expression e; @@
struct i1 i2@p = { ..., .i3 = e, ... };
@ok3@ identifier i1,i2; position p; @@
struct i1 i2@p = { ..., { ... }, ... };
@decl@ identifier i1,fld; type T; field list[n] fs; @@
struct i1 { fs T fld; ...};
@bad@ identifier decl.i1,i2; expression e; position p != {ok1.p,ok2.p,ok3.p}; constant nm; initializer list[decl.n] is; position fix; @@
struct i1 i2@p = { is, ( nm(...) | e@fix ) ,...};
@@ identifier decl.i1,i2,decl.fld; expression e; position bad.p, bad.fix; @@
struct i1 i2@p = { ..., + .fld = e - e@fix ,...}; // </smpl>
From: Julia Lawall Julia.Lawall@lip6.fr
Use c99 initializers for structures.
A simplified version of the semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/)
// <smpl> @decl@ identifier i1,fld; type T; field list[n] fs; @@
struct i1 { fs T fld; ...};
@bad@ identifier decl.i1,i2; expression e; initializer list[decl.n] is; @@
struct i1 i2 = { is, + .fld = e - e ,...}; // </smpl>
Signed-off-by: Julia Lawall Julia.Lawall@lip6.fr
--- The patches in this series do not depend on each other.
drivers/gpu/drm/sti/sti_vtac.c | 12 ++++++++++-- drivers/gpu/drm/drm_edid.c | 34 +++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/sti/sti_vtac.c b/drivers/gpu/drm/sti/sti_vtac.c index 82a51d4..4576536 100644 --- a/drivers/gpu/drm/sti/sti_vtac.c +++ b/drivers/gpu/drm/sti/sti_vtac.c @@ -56,8 +56,16 @@ struct sti_vtac_mode { u32 phyts_per_pixel; };
-static const struct sti_vtac_mode vtac_mode_main = {0x2, 0x2, VTAC_5_PPP}; -static const struct sti_vtac_mode vtac_mode_aux = {0x1, 0x0, VTAC_17_PPP}; +static const struct sti_vtac_mode vtac_mode_main = { + .vid_in_width = 0x2, + .phyts_width = 0x2, + .phyts_per_pixel = VTAC_5_PPP +}; +static const struct sti_vtac_mode vtac_mode_aux = { + .vid_in_width = 0x1, + .phyts_width = 0x0, + .phyts_per_pixel = VTAC_17_PPP +};
/** * VTAC structure diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1dbf3bc..a28c330 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2103,7 +2103,11 @@ static int add_inferred_modes(struct drm_connector *connector, struct edid *edid) { struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, + .preferred = 0, + .quirks = 0, + .modes = 0 };
if (version_greater(edid, 1, 0)) @@ -2169,7 +2173,11 @@ add_established_modes(struct drm_connector *connector, struct edid *edid) ((edid->established_timings.mfg_rsvd & 0x80) << 9); int i, modes = 0; struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, + .preferred = 0, + .quirks = 0, + .modes = 0 };
for (i = 0; i <= EDID_EST_TIMINGS; i++) { @@ -2227,7 +2235,11 @@ add_standard_modes(struct drm_connector *connector, struct edid *edid) { int i, modes = 0; struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, + .preferred = 0, + .quirks = 0, + .modes = 0 };
for (i = 0; i < EDID_STD_TIMINGS; i++) { @@ -2313,7 +2325,11 @@ static int add_cvt_modes(struct drm_connector *connector, struct edid *edid) { struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, + .preferred = 0, + .quirks = 0, + .modes = 0 };
if (version_greater(edid, 1, 2)) @@ -2357,11 +2373,11 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid, u32 quirks) { struct detailed_mode_closure closure = { - connector, - edid, - 1, - quirks, - 0 + .connector = connector, + .edid = edid, + .preferred = 1, + .quirks = quirks, + .modes = 0 };
if (closure.preferred && !version_greater(edid, 1, 3))
On Sat, Aug 23, 2014 at 01:20:28PM +0200, Julia Lawall wrote:
For this patch, I think it would make sense to drop initializations of preferred/quirks/modes to 0, since a designated initializer may skip fields to leave them initialized to 0.
With that change: Reviewed-by: Josh Triplett josh@joshtriplett.org
From: Julia Lawall Julia.Lawall@lip6.fr
Use c99 initializers for structures.
Drop 0 initializers in drivers/gpu/drm/sti/sti_vtac.c. A 0x0 initializer is left in vtac_mode_aux in drivers/gpu/drm/sti/sti_vtac.c to highlight the relation to vtac_mode_main.
A simplified version of the semantic match that finds the first problem is as follows: (http://coccinelle.lip6.fr/)
// <smpl> @decl@ identifier i1,fld; type T; field list[n] fs; @@
struct i1 { fs T fld; ...};
@bad@ identifier decl.i1,i2; expression e; initializer list[decl.n] is; @@
struct i1 i2 = { is, + .fld = e - e ,...}; // </smpl>
Signed-off-by: Julia Lawall Julia.Lawall@lip6.fr
--- The patches in this series do not depend on each other.
v2: Drop 0 initializers and add trailing commas at the suggestions of Josh Triplett.
drivers/gpu/drm/drm_edid.c | 21 ++++++++++++--------- drivers/gpu/drm/sti/sti_vtac.c | 12 ++++++++++-- 2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/sti/sti_vtac.c b/drivers/gpu/drm/sti/sti_vtac.c index 82a51d4..4576536 100644 --- a/drivers/gpu/drm/sti/sti_vtac.c +++ b/drivers/gpu/drm/sti/sti_vtac.c @@ -56,8 +56,16 @@ struct sti_vtac_mode { u32 phyts_per_pixel; };
-static const struct sti_vtac_mode vtac_mode_main = {0x2, 0x2, VTAC_5_PPP}; -static const struct sti_vtac_mode vtac_mode_aux = {0x1, 0x0, VTAC_17_PPP}; +static const struct sti_vtac_mode vtac_mode_main = { + .vid_in_width = 0x2, + .phyts_width = 0x2, + .phyts_per_pixel = VTAC_5_PPP, +}; +static const struct sti_vtac_mode vtac_mode_aux = { + .vid_in_width = 0x1, + .phyts_width = 0x0, + .phyts_per_pixel = VTAC_17_PPP, +};
/** * VTAC structure diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1dbf3bc..859ae1c 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -2103,7 +2103,8 @@ static int add_inferred_modes(struct drm_connector *connector, struct edid *edid) { struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, };
if (version_greater(edid, 1, 0)) @@ -2169,7 +2170,8 @@ add_established_modes(struct drm_connector *connector, struct edid *edid) ((edid->established_timings.mfg_rsvd & 0x80) << 9); int i, modes = 0; struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, };
for (i = 0; i <= EDID_EST_TIMINGS; i++) { @@ -2227,7 +2229,8 @@ add_standard_modes(struct drm_connector *connector, struct edid *edid) { int i, modes = 0; struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, };
for (i = 0; i < EDID_STD_TIMINGS; i++) { @@ -2313,7 +2316,8 @@ static int add_cvt_modes(struct drm_connector *connector, struct edid *edid) { struct detailed_mode_closure closure = { - connector, edid, 0, 0, 0 + .connector = connector, + .edid = edid, };
if (version_greater(edid, 1, 2)) @@ -2357,11 +2361,10 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid, u32 quirks) { struct detailed_mode_closure closure = { - connector, - edid, - 1, - quirks, - 0 + .connector = connector, + .edid = edid, + .preferred = 1, + .quirks = quirks, };
if (closure.preferred && !version_greater(edid, 1, 3))
On Sat, Aug 23, 2014 at 06:09:56PM +0200, Julia Lawall wrote:
Slurped into my drm topic branch for 3.18 to make sure it doesn't get lost. -Daniel
On Sat, Aug 23, 2014 at 01:20:22PM +0200, Julia Lawall wrote:
I responded to patches 6 and 8 with comments; for the rest (1-5, 7, 9): Reviewed-by: Josh Triplett josh@joshtriplett.org
dri-devel@lists.freedesktop.org