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);
}