diff options
author | Pekka Enberg <penberg@cs.helsinki.fi> | 2008-10-17 20:55:03 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-10-22 09:56:34 -0700 |
commit | db2af149bd0c798ce599365ee4320dd30dda852c (patch) | |
tree | ff327d79bdc026ca42d4f02edae4a35df8676db0 /drivers/staging | |
parent | f55ccbf6bc5e5e857b15f51d481aa7b1cd993ae0 (diff) | |
download | op-kernel-dev-db2af149bd0c798ce599365ee4320dd30dda852c.zip op-kernel-dev-db2af149bd0c798ce599365ee4320dd30dda852c.tar.gz |
Staging: echo: fix kmalloc()/kfree() uses
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@rowetel.com>
Cc: Steve Underwood <steveu@coppice.org>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/echo/echo.c | 36 | ||||
-rw-r--r-- | 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 140f3f0..a2d3078 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 @@ struct oslec_state *oslec_create(int len, int adaption_mode) { struct oslec_state *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 @@ struct oslec_state *oslec_create(int len, int adaption_mode) ec->cng_level = 1000; oslec_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 @@ struct oslec_state *oslec_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; } EXPORT_SYMBOL_GPL(oslec_create); /*- End of function --------------------------------------------------------*/ diff --git a/drivers/staging/echo/fir.h b/drivers/staging/echo/fir.h index 277d20e..c29e1e2 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(__bfin__) - 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 --------------------------------------------------------*/ |