v1 --> v2: 1. Add Patch 1 to fix ida leak 2. Modifies nouveau_get_backlight_name() to propagate the actual error code
Zhen Lei (2): drm/nouveau: Fix ida leak drm/nouveau: Fix error return code in nouveau_backlight_init()
drivers/gpu/drm/nouveau/nouveau_backlight.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
When the 'nb' value allocated from 'bl_ida' is greater than or equal to 100, it will not be released. In fact, we can simplify operations by limiting the range of idas that can be applied for.
By the way, delete the const modifier of the local variable 'nb'.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to interfaces") Signed-off-by: Zhen Lei thunder.leizhen@huawei.com --- drivers/gpu/drm/nouveau/nouveau_backlight.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c index 72f35a2babcb20e..d1c998e645fb4b6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c @@ -51,8 +51,9 @@ static bool nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE], struct nouveau_backlight *bl) { - const int nb = ida_simple_get(&bl_ida, 0, 0, GFP_KERNEL); - if (nb < 0 || nb >= 100) + int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL); + + if (nb < 0) return false; if (nb > 0) snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
Why remove the const modifier on `nb`?
On 2021-05-11 — 16:28, Zhen Lei wrote:
When the 'nb' value allocated from 'bl_ida' is greater than or equal to 100, it will not be released. In fact, we can simplify operations by limiting the range of idas that can be applied for.
By the way, delete the const modifier of the local variable 'nb'.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to interfaces") Signed-off-by: Zhen Lei thunder.leizhen@huawei.com
drivers/gpu/drm/nouveau/nouveau_backlight.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c index 72f35a2babcb20e..d1c998e645fb4b6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c @@ -51,8 +51,9 @@ static bool nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE], struct nouveau_backlight *bl) {
- const int nb = ida_simple_get(&bl_ida, 0, 0, GFP_KERNEL);
- if (nb < 0 || nb >= 100)
- int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL);
- if (nb < 0) return false; if (nb > 0) snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
-- 2.26.0.106.g9fadedd
Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
On 2021/5/12 14:39, Pierre Moreau wrote:
Why remove the const modifier on `nb`?
A non-pointer local variable, I don't think it's necessary to add const modifier to make the syntax too complicated.
On 2021-05-11 — 16:28, Zhen Lei wrote:
When the 'nb' value allocated from 'bl_ida' is greater than or equal to 100, it will not be released. In fact, we can simplify operations by limiting the range of idas that can be applied for.
By the way, delete the const modifier of the local variable 'nb'.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to interfaces") Signed-off-by: Zhen Lei thunder.leizhen@huawei.com
drivers/gpu/drm/nouveau/nouveau_backlight.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c index 72f35a2babcb20e..d1c998e645fb4b6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c @@ -51,8 +51,9 @@ static bool nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE], struct nouveau_backlight *bl) {
- const int nb = ida_simple_get(&bl_ida, 0, 0, GFP_KERNEL);
- if (nb < 0 || nb >= 100)
- int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL);
- if (nb < 0) return false; if (nb > 0) snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
-- 2.26.0.106.g9fadedd
Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
.
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to interfaces") Suggested-by: Pierre Moreau pierre.morrow@free.fr Signed-off-by: Zhen Lei thunder.leizhen@huawei.com --- drivers/gpu/drm/nouveau/nouveau_backlight.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c index d1c998e645fb4b6..f0856adbe775624 100644 --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c @@ -47,20 +47,20 @@ struct nouveau_backlight { int id; };
-static bool +static int nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE], struct nouveau_backlight *bl) { int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL);
if (nb < 0) - return false; + return nb; if (nb > 0) snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb); else snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight"); bl->id = nb; - return true; + return 0; }
static int @@ -273,7 +273,8 @@ nouveau_backlight_init(struct drm_connector *connector) if (!bl) return -ENOMEM;
- if (!nouveau_get_backlight_name(backlight_name, bl)) { + ret = nouveau_get_backlight_name(backlight_name, bl); + if (ret) { NV_ERROR(drm, "Failed to retrieve a unique name for the backlight interface\n"); goto fail_alloc; }
Reviewed-by: Pierre Moreau pierre.morrow@free.fr
On 2021-05-11 — 16:28, Zhen Lei wrote:
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to interfaces") Suggested-by: Pierre Moreau pierre.morrow@free.fr Signed-off-by: Zhen Lei thunder.leizhen@huawei.com
drivers/gpu/drm/nouveau/nouveau_backlight.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c index d1c998e645fb4b6..f0856adbe775624 100644 --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c @@ -47,20 +47,20 @@ struct nouveau_backlight { int id; };
-static bool +static int nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE], struct nouveau_backlight *bl) { int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL);
if (nb < 0)
return false;
if (nb > 0) snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb); else snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight"); bl->id = nb;return nb;
- return true;
- return 0;
}
static int @@ -273,7 +273,8 @@ nouveau_backlight_init(struct drm_connector *connector) if (!bl) return -ENOMEM;
- if (!nouveau_get_backlight_name(backlight_name, bl)) {
- ret = nouveau_get_backlight_name(backlight_name, bl);
- if (ret) { NV_ERROR(drm, "Failed to retrieve a unique name for the backlight interface\n"); goto fail_alloc; }
-- 2.26.0.106.g9fadedd
Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
dri-devel@lists.freedesktop.org