Commit db2af149 authored by Pekka Enberg's avatar Pekka Enberg Committed by Greg Kroah-Hartman
Browse files

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: default avatarPekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f55ccbf6
Loading
Loading
Loading
Loading
+17 −19
Original line number Diff line number Diff line
@@ -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)
    ec = kzalloc(sizeof(*ec), GFP_KERNEL);
    if (!ec)
        return NULL;
    memset(ec, 0, sizeof(*ec));

    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 --------------------------------------------------------*/
+5 −9
Original line number Diff line number Diff line
@@ -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 --------------------------------------------------------*/