Use sem to protect pon initialization.

Something from user space is calling to the init the pon twice, and that
leads to a very unhappy kernel.  Only let start be called one at a time.

Change-Id: Id1c030ba8d4205aae85142f8e6ae4e95b5a837dc
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/ponOnuLnxKsMI.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/ponOnuLnxKsMI.c
index 60a9653..a9cb5fc 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/ponOnuLnxKsMI.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/ponOnuLnxKsMI.c
@@ -192,15 +192,19 @@
 **  RETURNS:     (0)
 **
 *******************************************************************************/
+DECLARE_MUTEX(ioctl_lock);
+
 int mvPonCdevIoctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
 {
 	int				ret = -EINVAL;
 	E_PonDriverMode drvMode;
 
 
+        down(&ioctl_lock);
 	switch (cmd) {
 	/* ====== MVPON_IOCTL_START ======= */
 	case MVPON_IOCTL_START:
+		printk(KERN_INFO "==== mvPonIoctl: MVPON_IOCTL_START called====\n");
 		if (ponDev.drvMode == E_PON_DRIVER_UNDEF_MODE) {
 			/* The driver only alows transition from Undefined to EPON or GPON mode */
 			ret = get_user(drvMode, (E_PonDriverMode __user *)arg);
@@ -291,7 +295,7 @@
 
 
 ioctlErr:
-
+        up(&ioctl_lock);
 	return(ret);
 }