]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/staging/echo/echo.c
Staging: echo: fix kmalloc()/kfree() uses
[linux-2.6-omap-h63xx.git] / drivers / staging / echo / echo.c
index 140f3f0e060924cde1cddf1b14f335ad2e214212..a2d307865eabec6e81032700237181f49fb95231 100644 (file)
 #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 --------------------------------------------------------*/