Zhen Lei
2021-May-11 08:28 UTC
[Nouveau] [PATCH v2 0/2] Fix ida leak and error return code
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(-) -- 2.26.0.106.g9fadedd
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 at 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
Zhen Lei
2021-May-11 08:28 UTC
[Nouveau] [PATCH v2 2/2] drm/nouveau: Fix error return code in nouveau_backlight_init()
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 at free.fr> Signed-off-by: Zhen Lei <thunder.leizhen at 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; } -- 2.26.0.106.g9fadedd