diff options
-rw-r--r-- | arch/sparc64/kernel/ioctl32.c | 3 | ||||
-rw-r--r-- | drivers/sbus/char/display7seg.c | 32 |
2 files changed, 20 insertions, 15 deletions
diff --git a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c index ec4e08c523fd..f8e9ffb125c0 100644 --- a/arch/sparc64/kernel/ioctl32.c +++ b/arch/sparc64/kernel/ioctl32.c | |||
@@ -474,9 +474,6 @@ COMPATIBLE_IOCTL(FBIOGCURMAX) | |||
474 | /* Little v, the video4linux ioctls */ | 474 | /* Little v, the video4linux ioctls */ |
475 | COMPATIBLE_IOCTL(_IOR('p', 20, int[7])) /* RTCGET */ | 475 | COMPATIBLE_IOCTL(_IOR('p', 20, int[7])) /* RTCGET */ |
476 | COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */ | 476 | COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */ |
477 | /* COMPATIBLE_IOCTL(D7SIOCRD) same value as ENVCTRL_RD_VOLTAGE_STATUS */ | ||
478 | COMPATIBLE_IOCTL(D7SIOCWR) | ||
479 | COMPATIBLE_IOCTL(D7SIOCTM) | ||
480 | /* Big A */ | 477 | /* Big A */ |
481 | #if defined(CONFIG_DRM) || defined(CONFIG_DRM_MODULE) | 478 | #if defined(CONFIG_DRM) || defined(CONFIG_DRM_MODULE) |
482 | COMPATIBLE_IOCTL(DRM_IOCTL_GET_MAGIC) | 479 | COMPATIBLE_IOCTL(DRM_IOCTL_GET_MAGIC) |
diff --git a/drivers/sbus/char/display7seg.c b/drivers/sbus/char/display7seg.c index 24ed5893b4f0..39f54213a6d5 100644 --- a/drivers/sbus/char/display7seg.c +++ b/drivers/sbus/char/display7seg.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/miscdevice.h> | 16 | #include <linux/miscdevice.h> |
17 | #include <linux/ioport.h> /* request_region */ | 17 | #include <linux/ioport.h> /* request_region */ |
18 | #include <linux/smp_lock.h> | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | #include <asm/ebus.h> /* EBus device */ | 20 | #include <asm/ebus.h> /* EBus device */ |
20 | #include <asm/oplib.h> /* OpenProm Library */ | 21 | #include <asm/oplib.h> /* OpenProm Library */ |
@@ -114,22 +115,25 @@ static int d7s_release(struct inode *inode, struct file *f) | |||
114 | return 0; | 115 | return 0; |
115 | } | 116 | } |
116 | 117 | ||
117 | static int d7s_ioctl(struct inode *inode, struct file *f, | 118 | static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
118 | unsigned int cmd, unsigned long arg) | ||
119 | { | 119 | { |
120 | __u8 regs = readb(d7s_regs); | 120 | __u8 regs = readb(d7s_regs); |
121 | __u8 ireg = 0; | 121 | __u8 ireg = 0; |
122 | int error = 0 | ||
122 | 123 | ||
123 | if (D7S_MINOR != iminor(inode)) | 124 | if (D7S_MINOR != iminor(file->f_dentry->d_inode)) |
124 | return -ENODEV; | 125 | return -ENODEV; |
125 | 126 | ||
127 | lock_kernel(); | ||
126 | switch (cmd) { | 128 | switch (cmd) { |
127 | case D7SIOCWR: | 129 | case D7SIOCWR: |
128 | /* assign device register values | 130 | /* assign device register values |
129 | * we mask-out D7S_FLIP if in sol_compat mode | 131 | * we mask-out D7S_FLIP if in sol_compat mode |
130 | */ | 132 | */ |
131 | if (get_user(ireg, (int __user *) arg)) | 133 | if (get_user(ireg, (int __user *) arg)) { |
132 | return -EFAULT; | 134 | error = -EFAULT; |
135 | break; | ||
136 | } | ||
133 | if (0 != sol_compat) { | 137 | if (0 != sol_compat) { |
134 | (regs & D7S_FLIP) ? | 138 | (regs & D7S_FLIP) ? |
135 | (ireg |= D7S_FLIP) : (ireg &= ~D7S_FLIP); | 139 | (ireg |= D7S_FLIP) : (ireg &= ~D7S_FLIP); |
@@ -144,8 +148,10 @@ static int d7s_ioctl(struct inode *inode, struct file *f, | |||
144 | * This driver will not misinform you about the state | 148 | * This driver will not misinform you about the state |
145 | * of your hardware while in sol_compat mode | 149 | * of your hardware while in sol_compat mode |
146 | */ | 150 | */ |
147 | if (put_user(regs, (int __user *) arg)) | 151 | if (put_user(regs, (int __user *) arg)) { |
148 | return -EFAULT; | 152 | error = -EFAULT; |
153 | break; | ||
154 | } | ||
149 | break; | 155 | break; |
150 | 156 | ||
151 | case D7SIOCTM: | 157 | case D7SIOCTM: |
@@ -155,15 +161,17 @@ static int d7s_ioctl(struct inode *inode, struct file *f, | |||
155 | writeb(regs, d7s_regs); | 161 | writeb(regs, d7s_regs); |
156 | break; | 162 | break; |
157 | }; | 163 | }; |
164 | lock_kernel(); | ||
158 | 165 | ||
159 | return 0; | 166 | return error; |
160 | } | 167 | } |
161 | 168 | ||
162 | static struct file_operations d7s_fops = { | 169 | static struct file_operations d7s_fops = { |
163 | .owner = THIS_MODULE, | 170 | .owner = THIS_MODULE, |
164 | .ioctl = d7s_ioctl, | 171 | .unlocked_ioctl = d7s_ioctl, |
165 | .open = d7s_open, | 172 | .compat_ioctl = d7s_ioctl, |
166 | .release = d7s_release, | 173 | .open = d7s_open, |
174 | .release = d7s_release, | ||
167 | }; | 175 | }; |
168 | 176 | ||
169 | static struct miscdevice d7s_miscdev = { D7S_MINOR, D7S_DEVNAME, &d7s_fops }; | 177 | static struct miscdevice d7s_miscdev = { D7S_MINOR, D7S_DEVNAME, &d7s_fops }; |