[PATCH 1/4] echo: fix kmalloc()/kfree() uses

From: Pekka J Enberg
Date: Fri Oct 17 2008 - 13:55:21 EST


From: Pekka Enberg <penberg@xxxxxxxxxxxxxx>

This patch removes the malloc()/free() macro wrappers and converts call-sites
to use kcalloc() and kzalloc() where appropriate. I also fixed up out-of-memory
error handling in couple of places where it was broken.

Cc: David Rowe <david@xxxxxxxxxxx>
Cc: Steve Underwood <steveu@xxxxxxxxxxx>
Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxxxxxx>
---
drivers/staging/echo/echo.c | 36 +++++++++++++++++-------------------
drivers/staging/echo/fir.h | 14 +++++---------
2 files changed, 22 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/echo/echo.c b/drivers/staging/echo/echo.c
index 4a281b1..8c0a707 100644
--- a/drivers/staging/echo/echo.c
+++ b/drivers/staging/echo/echo.c
@@ -109,8 +109,6 @@
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
-#define malloc(a) kmalloc((a), GFP_KERNEL)
-#define free(a) kfree(a)

#include "bit_operations.h"
#include "echo.h"
@@ -238,27 +236,19 @@ echo_can_state_t *echo_can_create(int len, int adaption_mode)
{
echo_can_state_t *ec;
int i;
- int j;

- ec = kmalloc(sizeof(*ec), GFP_KERNEL);
- if (ec == NULL)
- return NULL;
- memset(ec, 0, sizeof(*ec));
+ ec = kzalloc(sizeof(*ec), GFP_KERNEL);
+ if (!ec)
+ return NULL;

ec->taps = len;
ec->log2taps = top_bit(len);
ec->curr_pos = ec->taps - 1;

- for (i = 0; i < 2; i++)
- {
- if ((ec->fir_taps16[i] = (int16_t *) malloc((ec->taps)*sizeof(int16_t))) == NULL)
- {
- for (j = 0; j < i; j++)
- kfree(ec->fir_taps16[j]);
- kfree(ec);
- return NULL;
- }
- memset(ec->fir_taps16[i], 0, (ec->taps)*sizeof(int16_t));
+ for (i = 0; i < 2; i++) {
+ ec->fir_taps16[i] = kcalloc(ec->taps, sizeof(int16_t), GFP_KERNEL);
+ if (!ec->fir_taps16[i])
+ goto error_oom;
}

fir16_create(&ec->fir_state,
@@ -275,8 +265,9 @@ echo_can_state_t *echo_can_create(int len, int adaption_mode)
ec->cng_level = 1000;
echo_can_adaption_mode(ec, adaption_mode);

- ec->snapshot = (int16_t*)malloc(ec->taps*sizeof(int16_t));
- memset(ec->snapshot, 0, sizeof(int16_t)*ec->taps);
+ ec->snapshot = kcalloc(ec->taps, sizeof(int16_t), GFP_KERNEL);
+ if (!ec->snapshot)
+ goto error_oom;

ec->cond_met = 0;
ec->Pstates = 0;
@@ -288,6 +279,13 @@ echo_can_state_t *echo_can_create(int len, int adaption_mode)
ec->Lbgn_upper_acc = ec->Lbgn_upper << 13;

return ec;
+
+error_oom:
+ for (i = 0; i < 2; i++)
+ kfree(ec->fir_taps16[i]);
+
+ kfree(ec);
+ return NULL;
}
/*- End of function --------------------------------------------------------*/

diff --git a/drivers/staging/echo/fir.h b/drivers/staging/echo/fir.h
index e1bfc49..ef87491 100644
--- a/drivers/staging/echo/fir.h
+++ b/drivers/staging/echo/fir.h
@@ -117,11 +117,9 @@ static __inline__ const int16_t *fir16_create(fir16_state_t *fir,
fir->curr_pos = taps - 1;
fir->coeffs = coeffs;
#if defined(USE_MMX) || defined(USE_SSE2) || defined(__BLACKFIN_ASM__)
- if ((fir->history = malloc(2*taps*sizeof(int16_t))))
- memset(fir->history, 0, 2*taps*sizeof(int16_t));
+ fir->history = kcalloc(2*taps, sizeof(int16_t), GFP_KERNEL);
#else
- if ((fir->history = (int16_t *) malloc(taps*sizeof(int16_t))))
- memset(fir->history, 0, taps*sizeof(int16_t));
+ fir->history = kcalloc(taps, sizeof(int16_t), GFP_KERNEL);
#endif
return fir->history;
}
@@ -139,7 +137,7 @@ static __inline__ void fir16_flush(fir16_state_t *fir)

static __inline__ void fir16_free(fir16_state_t *fir)
{
- free(fir->history);
+ kfree(fir->history);
}
/*- End of function --------------------------------------------------------*/

@@ -275,9 +273,7 @@ static __inline__ const int16_t *fir32_create(fir32_state_t *fir,
fir->taps = taps;
fir->curr_pos = taps - 1;
fir->coeffs = coeffs;
- fir->history = (int16_t *) malloc(taps*sizeof(int16_t));
- if (fir->history)
- memset(fir->history, '\0', taps*sizeof(int16_t));
+ fir->history = kcalloc(taps, sizeof(int16_t), GFP_KERNEL);
return fir->history;
}
/*- End of function --------------------------------------------------------*/
@@ -290,7 +286,7 @@ static __inline__ void fir32_flush(fir32_state_t *fir)

static __inline__ void fir32_free(fir32_state_t *fir)
{
- free(fir->history);
+ kfree(fir->history);
}
/*- End of function --------------------------------------------------------*/

--
1.5.3.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/