If nva3_calc_pll() returns less than 0 in drivers/gpu/drm/nouveau/nva3_pm.c:nva3_pm_clock_pre() we'll return without freeing 'pll'. This patch should fix the leak.
Signed-off-by: Jesper Juhl jj@chaosbits.net --- drivers/gpu/drm/nouveau/nva3_pm.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
Compile tested only - no hardware to test for real.
diff --git a/drivers/gpu/drm/nouveau/nva3_pm.c b/drivers/gpu/drm/nouveau/nva3_pm.c index e4b2b9e..80443d2 100644 --- a/drivers/gpu/drm/nouveau/nva3_pm.c +++ b/drivers/gpu/drm/nouveau/nva3_pm.c @@ -137,8 +137,10 @@ nva3_pm_clock_pre(struct drm_device *dev, struct nouveau_pm_level *perflvl,
if (!pll->new_div) { ret = nva3_calc_pll(dev, &limits, khz, &N, NULL, &M, &P); - if (ret < 0) + if (ret < 0) { + kfree(pll); return ERR_PTR(ret); + }
pll->new_pnm = (P << 16) | (N << 8) | M; pll->new_div = 2 - 1;