diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-16 10:40:48 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-16 10:40:48 -0400 |
| commit | 3307f19f634dfb134b370c59a778fdb2d574c17b (patch) | |
| tree | be7d1431af7741295e729ce25d376294cc7dead3 | |
| parent | 5b1d07ed0e5b2707f786957c7a40eb2f399c84a8 (diff) | |
| parent | ed247e12fe5da4417602c3c0ce22932fb0f9cac1 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
sparc: remove some pointless conditionals before kfree()
sbus: changed ioctls to unlocked
sparc: asm/atomic.h on 32bit should include asm/system.h for xchg
sparc64: Fix smp_callin() locking.
| -rw-r--r-- | arch/sparc/include/asm/atomic_32.h | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/ldc.c | 6 | ||||
| -rw-r--r-- | arch/sparc/kernel/smp_64.c | 4 | ||||
| -rw-r--r-- | drivers/sbus/char/jsflash.c | 15 | ||||
| -rw-r--r-- | drivers/sbus/char/uctrl.c | 7 |
5 files changed, 19 insertions, 15 deletions
diff --git a/arch/sparc/include/asm/atomic_32.h b/arch/sparc/include/asm/atomic_32.h index ce465975a6a5..bb91b1248cd1 100644 --- a/arch/sparc/include/asm/atomic_32.h +++ b/arch/sparc/include/asm/atomic_32.h | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | 15 | ||
| 16 | #ifdef __KERNEL__ | 16 | #ifdef __KERNEL__ |
| 17 | 17 | ||
| 18 | #include <asm/system.h> | ||
| 19 | |||
| 18 | #define ATOMIC_INIT(i) { (i) } | 20 | #define ATOMIC_INIT(i) { (i) } |
| 19 | 21 | ||
| 20 | extern int __atomic_add_return(int, atomic_t *); | 22 | extern int __atomic_add_return(int, atomic_t *); |
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c index 6ce5d2598a09..adf5f273868a 100644 --- a/arch/sparc/kernel/ldc.c +++ b/arch/sparc/kernel/ldc.c | |||
| @@ -1183,8 +1183,7 @@ out_free_txq: | |||
| 1183 | free_queue(lp->tx_num_entries, lp->tx_base); | 1183 | free_queue(lp->tx_num_entries, lp->tx_base); |
| 1184 | 1184 | ||
| 1185 | out_free_mssbuf: | 1185 | out_free_mssbuf: |
| 1186 | if (mssbuf) | 1186 | kfree(mssbuf); |
| 1187 | kfree(mssbuf); | ||
| 1188 | 1187 | ||
| 1189 | out_free_iommu: | 1188 | out_free_iommu: |
| 1190 | ldc_iommu_release(lp); | 1189 | ldc_iommu_release(lp); |
| @@ -1217,8 +1216,7 @@ void ldc_free(struct ldc_channel *lp) | |||
| 1217 | 1216 | ||
| 1218 | hlist_del(&lp->list); | 1217 | hlist_del(&lp->list); |
| 1219 | 1218 | ||
| 1220 | if (lp->mssbuf) | 1219 | kfree(lp->mssbuf); |
| 1221 | kfree(lp->mssbuf); | ||
| 1222 | 1220 | ||
| 1223 | ldc_iommu_release(lp); | 1221 | ldc_iommu_release(lp); |
| 1224 | 1222 | ||
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index 708e12a26b05..f7642e5a94db 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c | |||
| @@ -118,9 +118,9 @@ void __cpuinit smp_callin(void) | |||
| 118 | while (!cpu_isset(cpuid, smp_commenced_mask)) | 118 | while (!cpu_isset(cpuid, smp_commenced_mask)) |
| 119 | rmb(); | 119 | rmb(); |
| 120 | 120 | ||
| 121 | ipi_call_lock(); | 121 | ipi_call_lock_irq(); |
| 122 | cpu_set(cpuid, cpu_online_map); | 122 | cpu_set(cpuid, cpu_online_map); |
| 123 | ipi_call_unlock(); | 123 | ipi_call_unlock_irq(); |
| 124 | 124 | ||
| 125 | /* idle thread is expected to have preempt disabled */ | 125 | /* idle thread is expected to have preempt disabled */ |
| 126 | preempt_disable(); | 126 | preempt_disable(); |
diff --git a/drivers/sbus/char/jsflash.c b/drivers/sbus/char/jsflash.c index e6d1fc8c54f1..a85ad05e8548 100644 --- a/drivers/sbus/char/jsflash.c +++ b/drivers/sbus/char/jsflash.c | |||
| @@ -383,18 +383,22 @@ static int jsf_ioctl_program(void __user *arg) | |||
| 383 | return 0; | 383 | return 0; |
| 384 | } | 384 | } |
| 385 | 385 | ||
| 386 | static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd, | 386 | static long jsf_ioctl(struct file *f, unsigned int cmd, unsigned long arg) |
| 387 | unsigned long arg) | ||
| 388 | { | 387 | { |
| 388 | lock_kernel(); | ||
| 389 | int error = -ENOTTY; | 389 | int error = -ENOTTY; |
| 390 | void __user *argp = (void __user *)arg; | 390 | void __user *argp = (void __user *)arg; |
| 391 | 391 | ||
| 392 | if (!capable(CAP_SYS_ADMIN)) | 392 | if (!capable(CAP_SYS_ADMIN)) { |
| 393 | unlock_kernel(); | ||
| 393 | return -EPERM; | 394 | return -EPERM; |
| 395 | } | ||
| 394 | switch (cmd) { | 396 | switch (cmd) { |
| 395 | case JSFLASH_IDENT: | 397 | case JSFLASH_IDENT: |
| 396 | if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) | 398 | if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) { |
| 399 | unlock_kernel(); | ||
| 397 | return -EFAULT; | 400 | return -EFAULT; |
| 401 | } | ||
| 398 | break; | 402 | break; |
| 399 | case JSFLASH_ERASE: | 403 | case JSFLASH_ERASE: |
| 400 | error = jsf_ioctl_erase(arg); | 404 | error = jsf_ioctl_erase(arg); |
| @@ -404,6 +408,7 @@ static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd, | |||
| 404 | break; | 408 | break; |
| 405 | } | 409 | } |
| 406 | 410 | ||
| 411 | unlock_kernel(); | ||
| 407 | return error; | 412 | return error; |
| 408 | } | 413 | } |
| 409 | 414 | ||
| @@ -439,7 +444,7 @@ static const struct file_operations jsf_fops = { | |||
| 439 | .llseek = jsf_lseek, | 444 | .llseek = jsf_lseek, |
| 440 | .read = jsf_read, | 445 | .read = jsf_read, |
| 441 | .write = jsf_write, | 446 | .write = jsf_write, |
| 442 | .ioctl = jsf_ioctl, | 447 | .unlocked_ioctl = jsf_ioctl, |
| 443 | .mmap = jsf_mmap, | 448 | .mmap = jsf_mmap, |
| 444 | .open = jsf_open, | 449 | .open = jsf_open, |
| 445 | .release = jsf_release, | 450 | .release = jsf_release, |
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c index 27993c37775d..2c56fd56ec63 100644 --- a/drivers/sbus/char/uctrl.c +++ b/drivers/sbus/char/uctrl.c | |||
| @@ -197,9 +197,8 @@ static struct uctrl_driver { | |||
| 197 | static void uctrl_get_event_status(struct uctrl_driver *); | 197 | static void uctrl_get_event_status(struct uctrl_driver *); |
| 198 | static void uctrl_get_external_status(struct uctrl_driver *); | 198 | static void uctrl_get_external_status(struct uctrl_driver *); |
| 199 | 199 | ||
| 200 | static int | 200 | static long |
| 201 | uctrl_ioctl(struct inode *inode, struct file *file, | 201 | uctrl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 202 | unsigned int cmd, unsigned long arg) | ||
| 203 | { | 202 | { |
| 204 | switch (cmd) { | 203 | switch (cmd) { |
| 205 | default: | 204 | default: |
| @@ -226,7 +225,7 @@ static irqreturn_t uctrl_interrupt(int irq, void *dev_id) | |||
| 226 | static const struct file_operations uctrl_fops = { | 225 | static const struct file_operations uctrl_fops = { |
| 227 | .owner = THIS_MODULE, | 226 | .owner = THIS_MODULE, |
| 228 | .llseek = no_llseek, | 227 | .llseek = no_llseek, |
| 229 | .ioctl = uctrl_ioctl, | 228 | .unlocked_ioctl = uctrl_ioctl, |
| 230 | .open = uctrl_open, | 229 | .open = uctrl_open, |
| 231 | }; | 230 | }; |
| 232 | 231 | ||
