mmc: sdhci: fix align_buffer memory leak on re-initialization
sdhci_init() allocates a 512KB aligned bounce buffer for controllers with SDHCI_QUIRK_32BIT_DMA_ADDR. In the non-DM code path, sdhci_init() is registered as ops->init and called on every mmc_init(). Each call allocates a new buffer without checking or freeing the previous one, leaking 512KB per re-initialization. Fix by guarding the allocation with !host->align_buffer so it only allocates on the first call. Reviewed-by: Tanmay Kathpalia <tanmay.kathpalia@altera.com> Signed-off-by: Tanmay Kathpalia <tanmay.kathpalia@altera.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
+2
-1
@@ -733,7 +733,8 @@ static int sdhci_init(struct mmc *mmc)
|
||||
*/
|
||||
host->force_align_buffer = true;
|
||||
#else
|
||||
if (host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) {
|
||||
if ((host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) &&
|
||||
!host->align_buffer) {
|
||||
host->align_buffer = memalign(8, 512 * 1024);
|
||||
if (!host->align_buffer) {
|
||||
log_err("Aligned buffer alloc failed\n");
|
||||
|
||||
Reference in New Issue
Block a user