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