From: Colin Ian King colin.king@canonical.com
Currently a loop scans through the connector list checking for connectors that do not match a specific criteria. The use of the continue statement is a little unintuitive and can confuse static analysis checking. Invert the criteria matching logic and use a break to terminate the loop once the first suitable connector has been found.
Thanks to Patrik Jakobsson for explaining the original intent of the code and suggesting this change.
Addresses-Coverity: ("Continue has no effect") Signed-off-by: Colin Ian King colin.king@canonical.com --- drivers/gpu/drm/gma500/oaktrail_lvds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c index 432bdcc57ac9..8541dcf237eb 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c @@ -113,8 +113,8 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
/* Find the connector we're trying to set up */ list_for_each_entry(connector, &mode_config->connector_list, head) { - if (!connector->encoder || connector->encoder->crtc != crtc) - continue; + if (connector->encoder && connector->encoder->crtc == crtc) + break; }
if (!connector) {
On Fri, Jun 18, 2021 at 8:35 PM Colin King colin.king@canonical.com wrote:
From: Colin Ian King colin.king@canonical.com
Currently a loop scans through the connector list checking for connectors that do not match a specific criteria. The use of the continue statement is a little unintuitive and can confuse static analysis checking. Invert the criteria matching logic and use a break to terminate the loop once the first suitable connector has been found.
Thanks to Patrik Jakobsson for explaining the original intent of the code and suggesting this change.
Applied to drm-misc-next
Thanks for the patch!
On Fri, Jun 18, 2021 at 07:35:24PM +0100, Colin King wrote:
From: Colin Ian King colin.king@canonical.com
Currently a loop scans through the connector list checking for connectors that do not match a specific criteria. The use of the continue statement is a little unintuitive and can confuse static analysis checking. Invert the criteria matching logic and use a break to terminate the loop once the first suitable connector has been found.
Thanks to Patrik Jakobsson for explaining the original intent of the code and suggesting this change.
Addresses-Coverity: ("Continue has no effect") Signed-off-by: Colin Ian King colin.king@canonical.com
drivers/gpu/drm/gma500/oaktrail_lvds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c index 432bdcc57ac9..8541dcf237eb 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c @@ -113,8 +113,8 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
/* Find the connector we're trying to set up */ list_for_each_entry(connector, &mode_config->connector_list, head) {
if (!connector->encoder || connector->encoder->crtc != crtc)
continue;
if (connector->encoder && connector->encoder->crtc == crtc)
break;
}
if (!connector) {
This test is wrong/impossible. It should be:
if (list_entry_is_head(connector, &mode_config->connector_list, head)) {
regards, dan carpenter
On Sat, Jun 19, 2021 at 3:40 PM Dan Carpenter dan.carpenter@oracle.com wrote:
On Fri, Jun 18, 2021 at 07:35:24PM +0100, Colin King wrote:
From: Colin Ian King colin.king@canonical.com
Currently a loop scans through the connector list checking for connectors that do not match a specific criteria. The use of the continue statement is a little unintuitive and can confuse static analysis checking. Invert the criteria matching logic and use a break to terminate the loop once the first suitable connector has been found.
Thanks to Patrik Jakobsson for explaining the original intent of the code and suggesting this change.
Addresses-Coverity: ("Continue has no effect") Signed-off-by: Colin Ian King colin.king@canonical.com
drivers/gpu/drm/gma500/oaktrail_lvds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c index 432bdcc57ac9..8541dcf237eb 100644 --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c @@ -113,8 +113,8 @@ static void oaktrail_lvds_mode_set(struct drm_encoder *encoder,
/* Find the connector we're trying to set up */ list_for_each_entry(connector, &mode_config->connector_list, head) {
if (!connector->encoder || connector->encoder->crtc != crtc)
continue;
if (connector->encoder && connector->encoder->crtc == crtc)
break; } if (!connector) {
This test is wrong/impossible. It should be:
if (list_entry_is_head(connector, &mode_config->connector_list, head)) {
Right, we should be back at the head if no match was found. Actually, when looking closer, we should use drm_for_each_connector_iter() when walking the connector list together with proper locking.
-Patrik
regards, dan carpenter
dri-devel@lists.freedesktop.org