Fix memory leak within tegra_dc_probe
Bug
200130473
Bug
200102293
Change-Id: I138822422b45807b097b090108c43e9c7c095080
Signed-off-by: Sagar Kadamati <skadamati@nvidia.com>
Reviewed-on: http://git-master/r/789475
(cherry picked from commit
f7dc4cf349ffc73c002a903cbd3608eae52652e1)
Signed-off-by: Yogish Kulkarni <yogishk@nvidia.com>
Reviewed-on: http://git-master/r/759443
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
struct tegra_dc_lvds_data *lvds = tegra_dc_get_outdata(dc);
if (!tegra_edid_get_monspecs(lvds->edid, &specs))
tegra_dc_set_fb_mode(dc, specs.modedb, false);
+ kfree(specs.modedb);
}
#ifndef CONFIG_TEGRA_ISOMGR
u8 checksum = 0;
u8 *data;
+ memset(specs, 0x0, sizeof(struct fb_monspecs));
new_data = vzalloc(SZ_32K + sizeof(struct tegra_edid_pvt));
if (!new_data)
return -ENOMEM;
goto fail;
}
- memset(specs, 0x0, sizeof(struct fb_monspecs));
memset(&new_data->eld, 0x0, sizeof(new_data->eld));
fb_edid_to_monspecs(data, specs);
if (specs->modedb == NULL) {
if (tegra_dc_hpd(dc) && (!dc->initialized)) {
if (!tegra_edid_get_monspecs(hdmi->edid, &specs))
tegra_dc_set_fb_mode(dc, specs.modedb, false);
+ kfree(specs.modedb);
} else
tegra_dc_set_fb_mode(dc, &tegra_dc_vga_mode, false);
}
tegra_dc_set_fb_mode(dc,
&tegra_dc_vga_mode, false);
}
+ kfree(specs.modedb);
} else
tegra_dc_set_fb_mode(dc, &tegra_dc_vga_mode, false);
}
if (work_state.edid_reads >= MAX_EDID_READ_ATTEMPTS) {
pr_info("Failed to read EDID after %d times. Giving up.\n",
work_state.edid_reads);
+ kfree(specs.modedb);
goto end_disabled;
} else {
hdmi_state_machine_set_state_l(HDMI_STATE_CHECK_EDID,
CHECK_EDID_DELAY_MS);
}
+ kfree(specs.modedb);
return;
}
+ kfree(specs.modedb);
if (tegra_edid_get_eld(hdmi->edid, &hdmi->eld) < 0) {
pr_err("error populating eld\n");