Skip to contentSkip to conversation

ASoC: wm0010: Fix resource leak

PATCH Superseded Dimitris Papastamos 2 participants 4 messages Jul 31, 2013

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ASoC: wm0010: Fix resource leak

This fixes "https://bugzilla.kernel.org/show_bug.cgi?id=60650".

---
 sound/soc/codecs/wm0010.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)
sound/soc/codecs/wm0010.c +9 -9
index f5e8356..285026c 100644
@@ -410,6 +410,13 @@ static int wm0010_firmware_load(const char *name, struct snd_soc_codec *codec)
 			rec->command, rec->length);
 		len = rec->length + 8;
 
+		xfer = kzalloc(sizeof(*xfer), GFP_KERNEL | GFP_DMA);
+		if (!xfer) {
+			dev_err(codec->dev, "Failed to allocate xfer\n");
+			ret = -ENOMEM;
+			goto abort1;
+		}
+
 		out = kzalloc(len, GFP_KERNEL);
 		if (!out) {
 			dev_err(codec->dev,
@@ -417,6 +424,7 @@ static int wm0010_firmware_load(const char *name, struct snd_soc_codec *codec)
 			ret = -ENOMEM;
 			goto abort1;
 		}
+		xfer->t.rx_buf = out;
 
 		img = kzalloc(len, GFP_KERNEL);
 		if (!img) {
@@ -425,24 +433,16 @@ static int wm0010_firmware_load(const char *name, struct snd_soc_codec *codec)
 			ret = -ENOMEM;
 			goto abort1;
 		}
+		xfer->t.tx_buf = img;
 
 		byte_swap_64((u64 *)&rec->command, img, len);
 
-		xfer = kzalloc(sizeof(*xfer), GFP_KERNEL);
-		if (!xfer) {
-			dev_err(codec->dev, "Failed to allocate xfer\n");
-			ret = -ENOMEM;
-			goto abort1;
-		}
-
 		xfer->codec = codec;
 		list_add_tail(&xfer->list, &xfer_list);
 
 		spi_message_init(&xfer->m);
 		xfer->m.complete = wm0010_boot_xfer_complete;
 		xfer->m.context = xfer;
-		xfer->t.tx_buf = img;
-		xfer->t.rx_buf = out;
 		xfer->t.len = len;
 		xfer->t.bits_per_word = 8;
 
Signature · 1 line
1.8.3.4
maintainer
#1 lore raw

sound/soc/codecs/wm0010.c static int wm0010_firmware_load(const char *name, struct snd_soc_codec *codec) · line 419

Quoted 7 lines · Dimitris Papastamos
sound/soc/codecs/wm0010.c +7 -0
+		xfer = kzalloc(sizeof(*xfer), GFP_KERNEL | GFP_DMA);
+		if (!xfer) {
+			dev_err(codec->dev, "Failed to allocate xfer\n");
+			ret = -ENOMEM;
+			goto abort1;
+		}
+

Why is this being allocated with GFP_DMA? It's an internal data structure, it's not going to be DMAed from.

Please also provide a changelog, a link to some address on the web isn't a useful description.

#2 lore raw
Quoted 12 lines · Mark Brown

sound/soc/codecs/wm0010.c static int wm0010_firmware_load(const char *name, struct snd_soc_codec *codec) · line 419

Quoted 7 lines · Dimitris Papastamos
sound/soc/codecs/wm0010.c +7 -0
+		xfer = kzalloc(sizeof(*xfer), GFP_KERNEL | GFP_DMA);
+		if (!xfer) {
+			dev_err(codec->dev, "Failed to allocate xfer\n");
+			ret = -ENOMEM;
+			goto abort1;
+		}
+

Why is this being allocated with GFP_DMA? It's an internal data structure, it's not going to be DMAed from.

Yeah I will send a separate patch to fix that and then rebase this patch on top.

Quoted 2 lines

Please also provide a changelog, a link to some address on the web isn't a useful description.

Will do.

#3 lore raw
Quoted 14 lines · Dimitris Papastamos
Quoted 12 lines · Mark Brown

sound/soc/codecs/wm0010.c static int wm0010_firmware_load(const char *name, struct snd_soc_codec *codec) · line 419

Quoted 7 lines · Dimitris Papastamos
sound/soc/codecs/wm0010.c +7 -0
+		xfer = kzalloc(sizeof(*xfer), GFP_KERNEL | GFP_DMA);
+		if (!xfer) {
+			dev_err(codec->dev, "Failed to allocate xfer\n");
+			ret = -ENOMEM;
+			goto abort1;
+		}
+

Why is this being allocated with GFP_DMA? It's an internal data structure, it's not going to be DMAed from.

Quoted 2 lines

Yeah I will send a separate patch to fix that and then rebase this patch on top.

Aw just noticed, this is basically a git am conflict that I resolved incorrectly.