]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/char/nvram.c
Merge tag 'v2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / char / nvram.c
index 66d2917b003f6361080e063323d88dca49fd623f..166f1e7aaa7ee844c4a36b8950cb9f343e0f5c82 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: