Merge branch 'for-linus' of git://git.infradead.org/users/eparis/notify
[cascardo/linux.git] / drivers / char / nvram.c
index 66d2917..166f1e7 100644 (file)
 #include <linux/spinlock.h>
 #include <linux/io.h>
 #include <linux/uaccess.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 
 #include <asm/system.h>
 
+static DEFINE_MUTEX(nvram_mutex);
 static DEFINE_SPINLOCK(nvram_state_lock);
 static int nvram_open_cnt;     /* #times opened */
 static int nvram_open_mode;    /* special open modes */
@@ -308,7 +309,7 @@ static long nvram_ioctl(struct file *file, unsigned int cmd,
                if (!capable(CAP_SYS_ADMIN))
                        return -EACCES;
 
-               lock_kernel();
+               mutex_lock(&nvram_mutex);
                spin_lock_irq(&rtc_lock);
 
                for (i = 0; i < NVRAM_BYTES; ++i)
@@ -316,7 +317,7 @@ static long nvram_ioctl(struct file *file, unsigned int cmd,
                __nvram_set_checksum();
 
                spin_unlock_irq(&rtc_lock);
-               unlock_kernel();
+               mutex_unlock(&nvram_mutex);
                return 0;
 
        case NVRAM_SETCKS:
@@ -325,11 +326,11 @@ static long nvram_ioctl(struct file *file, unsigned int cmd,
                if (!capable(CAP_SYS_ADMIN))
                        return -EACCES;
 
-               lock_kernel();
+               mutex_lock(&nvram_mutex);
                spin_lock_irq(&rtc_lock);
                __nvram_set_checksum();
                spin_unlock_irq(&rtc_lock);
-               unlock_kernel();
+               mutex_unlock(&nvram_mutex);
                return 0;
 
        default: