git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'docs-next' of git://git.lwn.net/linux-2.6
[pandora-kernel.git]
/
arch
/
m68k
/
bvme6000
/
rtc.c
diff --git
a/arch/m68k/bvme6000/rtc.c
b/arch/m68k/bvme6000/rtc.c
index
b46ea17
..
cb8617b
100644
(file)
--- a/
arch/m68k/bvme6000/rtc.c
+++ b/
arch/m68k/bvme6000/rtc.c
@@
-9,7
+9,6
@@
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
-#include <linux/smp_lock.h>
#include <linux/ioport.h>
#include <linux/capability.h>
#include <linux/fcntl.h>
#include <linux/ioport.h>
#include <linux/capability.h>
#include <linux/fcntl.h>
@@
-35,10
+34,9
@@
static unsigned char days_in_mo[] =
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static unsigned char days_in_mo[] =
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-static
char rtc_status
;
+static
atomic_t rtc_status = ATOMIC_INIT(1)
;
-static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
- unsigned long arg)
+static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
unsigned char msr;
{
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
unsigned char msr;
@@
-132,29
+130,20
@@
static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
}
/*
}
/*
- * We enforce only one user at a time here with the open/close.
- * Also clear the previous interrupt data on an open, and clean
- * up things on a close.
+ * We enforce only one user at a time here with the open/close.
*/
*/
-
static int rtc_open(struct inode *inode, struct file *file)
{
static int rtc_open(struct inode *inode, struct file *file)
{
- lock_kernel();
- if(rtc_status) {
- unlock_kernel();
+ if (!atomic_dec_and_test(&rtc_status)) {
+ atomic_inc(&rtc_status);
return -EBUSY;
}
return -EBUSY;
}
-
- rtc_status = 1;
- unlock_kernel();
return 0;
}
static int rtc_release(struct inode *inode, struct file *file)
{
return 0;
}
static int rtc_release(struct inode *inode, struct file *file)
{
- lock_kernel();
- rtc_status = 0;
- unlock_kernel();
+ atomic_inc(&rtc_status);
return 0;
}
return 0;
}
@@
-163,9
+152,9
@@
static int rtc_release(struct inode *inode, struct file *file)
*/
static const struct file_operations rtc_fops = {
*/
static const struct file_operations rtc_fops = {
- .
ioctl =
rtc_ioctl,
- .open
=
rtc_open,
- .release
=
rtc_release,
+ .
unlocked_ioctl =
rtc_ioctl,
+ .open
=
rtc_open,
+ .release
=
rtc_release,
};
static struct miscdevice rtc_dev = {
};
static struct miscdevice rtc_dev = {