[svn-commits] mattf: branch mattf/zaptel-1.4-stackcleanup r4091 - /team/mattf/zaptel-1.4-st...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Mar 26 14:12:18 CDT 2008


Author: mattf
Date: Wed Mar 26 14:12:17 2008
New Revision: 4091

URL: http://svn.digium.com/view/zaptel?view=rev&rev=4091
Log:
Initial stack reduction.  Allocate parameters on heap instead of stack.  Should save at least 160 bytes of stack space

Modified:
    team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c?view=diff&rev=4091&r1=4090&r2=4091
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c Wed Mar 26 14:12:17 2008
@@ -4505,7 +4505,7 @@
 static int ioctl_echocancel(struct zt_chan *chan, struct zt_echocanparams *ecp, void *data)
 {
 	struct echo_can_state *ec = NULL, *tec;
-	struct zt_echocanparam params[ZT_MAX_ECHOCANPARAMS];
+	struct zt_echocanparam *params;
 	int ret;
 	unsigned long flags;
 
@@ -4536,10 +4536,14 @@
 	    !chan->span->echocan_with_params)
 		return -EINVAL;
 	
+	params = kmalloc(sizeof(params[0]) * ZT_MAX_ECHOCANPARAMS, GFP_KERNEL);
+
 	/* enable mode, need the params */
 	
-	if (copy_from_user(params, (struct zt_echocanparam *) data, sizeof(params[0]) * ecp->param_count))
-		return -EFAULT;
+	if (copy_from_user(params, (struct zt_echocanparam *) data, sizeof(params[0]) * ecp->param_count)) {
+		ret = -EFAULT;
+		goto exit_with_free;
+	}
 	
 	spin_lock_irqsave(&chan->lock, flags);
 	tec = chan->ec;
@@ -4578,7 +4582,7 @@
 		}
 		
 		if ((ret = echo_can_create(ecp, params, &ec)))
-			return ret;
+			goto exit_with_free;
 		
 		spin_lock_irqsave(&chan->lock, flags);
 		chan->echocancel = ecp->tap_length;
@@ -4591,6 +4595,8 @@
 		spin_unlock_irqrestore(&chan->lock, flags);
 	}
 
+exit_with_free:
+	kfree(params);
 	return ret;
 }
 




More information about the svn-commits mailing list