diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-05 18:32:18 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-05 18:32:18 -0500 |
| commit | c2ed69cdc9da49a8d2d7b4212fd225abf902ceaa (patch) | |
| tree | ae98c43f8f9e0828b64e0d8fca2d6402f424bf77 | |
| parent | ef26b1691d11e17af205a4ff9c91458d931d11db (diff) | |
| parent | 9eaa192d8988d621217a9e6071cd403fd6010496 (diff) | |
Merge branch 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86: Fix a section mismatch in arch/x86/kernel/setup.c
x86: Fixup last users of irq_chip->typename
x86: Remove BKL from apm_32
x86: Remove BKL from microcode
x86: use kernel_stack_pointer() in kprobes.c
x86: use kernel_stack_pointer() in kgdb.c
x86: use kernel_stack_pointer() in dumpstack.c
x86: use kernel_stack_pointer() in process_32.c
| -rw-r--r-- | arch/x86/kernel/apm_32.c | 14 | ||||
| -rw-r--r-- | arch/x86/kernel/dumpstack.c | 7 | ||||
| -rw-r--r-- | arch/x86/kernel/kgdb.c | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/kprobes.c | 14 | ||||
| -rw-r--r-- | arch/x86/kernel/microcode_core.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/process_32.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/setup.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/visws_quirks.c | 6 |
8 files changed, 18 insertions, 34 deletions
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c index 151ace69a5aa..b5b6b23bce53 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c | |||
| @@ -204,7 +204,6 @@ | |||
| 204 | #include <linux/module.h> | 204 | #include <linux/module.h> |
| 205 | 205 | ||
| 206 | #include <linux/poll.h> | 206 | #include <linux/poll.h> |
| 207 | #include <linux/smp_lock.h> | ||
| 208 | #include <linux/types.h> | 207 | #include <linux/types.h> |
| 209 | #include <linux/stddef.h> | 208 | #include <linux/stddef.h> |
| 210 | #include <linux/timer.h> | 209 | #include <linux/timer.h> |
| @@ -403,6 +402,7 @@ static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); | |||
| 403 | static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); | 402 | static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); |
| 404 | static struct apm_user *user_list; | 403 | static struct apm_user *user_list; |
| 405 | static DEFINE_SPINLOCK(user_list_lock); | 404 | static DEFINE_SPINLOCK(user_list_lock); |
| 405 | static DEFINE_MUTEX(apm_mutex); | ||
| 406 | 406 | ||
| 407 | /* | 407 | /* |
| 408 | * Set up a segment that references the real mode segment 0x40 | 408 | * Set up a segment that references the real mode segment 0x40 |
| @@ -1531,7 +1531,7 @@ static long do_ioctl(struct file *filp, u_int cmd, u_long arg) | |||
| 1531 | return -EPERM; | 1531 | return -EPERM; |
| 1532 | switch (cmd) { | 1532 | switch (cmd) { |
| 1533 | case APM_IOC_STANDBY: | 1533 | case APM_IOC_STANDBY: |
| 1534 | lock_kernel(); | 1534 | mutex_lock(&apm_mutex); |
| 1535 | if (as->standbys_read > 0) { | 1535 | if (as->standbys_read > 0) { |
| 1536 | as->standbys_read--; | 1536 | as->standbys_read--; |
| 1537 | as->standbys_pending--; | 1537 | as->standbys_pending--; |
| @@ -1540,10 +1540,10 @@ static long do_ioctl(struct file *filp, u_int cmd, u_long arg) | |||
| 1540 | queue_event(APM_USER_STANDBY, as); | 1540 | queue_event(APM_USER_STANDBY, as); |
| 1541 | if (standbys_pending <= 0) | 1541 | if (standbys_pending <= 0) |
| 1542 | standby(); | 1542 | standby(); |
| 1543 | unlock_kernel(); | 1543 | mutex_unlock(&apm_mutex); |
| 1544 | break; | 1544 | break; |
| 1545 | case APM_IOC_SUSPEND: | 1545 | case APM_IOC_SUSPEND: |
| 1546 | lock_kernel(); | 1546 | mutex_lock(&apm_mutex); |
| 1547 | if (as->suspends_read > 0) { | 1547 | if (as->suspends_read > 0) { |
| 1548 | as->suspends_read--; | 1548 | as->suspends_read--; |
| 1549 | as->suspends_pending--; | 1549 | as->suspends_pending--; |
| @@ -1552,13 +1552,14 @@ static long do_ioctl(struct file *filp, u_int cmd, u_long arg) | |||
| 1552 | queue_event(APM_USER_SUSPEND, as); | 1552 | queue_event(APM_USER_SUSPEND, as); |
| 1553 | if (suspends_pending <= 0) { | 1553 | if (suspends_pending <= 0) { |
| 1554 | ret = suspend(1); | 1554 | ret = suspend(1); |
| 1555 | mutex_unlock(&apm_mutex); | ||
| 1555 | } else { | 1556 | } else { |
| 1556 | as->suspend_wait = 1; | 1557 | as->suspend_wait = 1; |
| 1558 | mutex_unlock(&apm_mutex); | ||
| 1557 | wait_event_interruptible(apm_suspend_waitqueue, | 1559 | wait_event_interruptible(apm_suspend_waitqueue, |
| 1558 | as->suspend_wait == 0); | 1560 | as->suspend_wait == 0); |
| 1559 | ret = as->suspend_result; | 1561 | ret = as->suspend_result; |
| 1560 | } | 1562 | } |
| 1561 | unlock_kernel(); | ||
| 1562 | return ret; | 1563 | return ret; |
| 1563 | default: | 1564 | default: |
| 1564 | return -ENOTTY; | 1565 | return -ENOTTY; |
| @@ -1608,12 +1609,10 @@ static int do_open(struct inode *inode, struct file *filp) | |||
| 1608 | { | 1609 | { |
| 1609 | struct apm_user *as; | 1610 | struct apm_user *as; |
| 1610 | 1611 | ||
| 1611 | lock_kernel(); | ||
| 1612 | as = kmalloc(sizeof(*as), GFP_KERNEL); | 1612 | as = kmalloc(sizeof(*as), GFP_KERNEL); |
| 1613 | if (as == NULL) { | 1613 | if (as == NULL) { |
| 1614 | printk(KERN_ERR "apm: cannot allocate struct of size %d bytes\n", | 1614 | printk(KERN_ERR "apm: cannot allocate struct of size %d bytes\n", |
| 1615 | sizeof(*as)); | 1615 | sizeof(*as)); |
| 1616 | unlock_kernel(); | ||
| 1617 | return -ENOMEM; | 1616 | return -ENOMEM; |
| 1618 | } | 1617 | } |
| 1619 | as->magic = APM_BIOS_MAGIC; | 1618 | as->magic = APM_BIOS_MAGIC; |
| @@ -1635,7 +1634,6 @@ static int do_open(struct inode *inode, struct file *filp) | |||
| 1635 | user_list = as; | 1634 | user_list = as; |
| 1636 | spin_unlock(&user_list_lock); | 1635 | spin_unlock(&user_list_lock); |
| 1637 | filp->private_data = as; | 1636 | filp->private_data = as; |
| 1638 | unlock_kernel(); | ||
| 1639 | return 0; | 1637 | return 0; |
| 1640 | } | 1638 | } |
| 1641 | 1639 | ||
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index 2d8a371d4339..b8ce165dde5d 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c | |||
| @@ -268,11 +268,12 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err) | |||
| 268 | 268 | ||
| 269 | show_registers(regs); | 269 | show_registers(regs); |
| 270 | #ifdef CONFIG_X86_32 | 270 | #ifdef CONFIG_X86_32 |
| 271 | sp = (unsigned long) (®s->sp); | 271 | if (user_mode_vm(regs)) { |
| 272 | savesegment(ss, ss); | ||
| 273 | if (user_mode(regs)) { | ||
| 274 | sp = regs->sp; | 272 | sp = regs->sp; |
| 275 | ss = regs->ss & 0xffff; | 273 | ss = regs->ss & 0xffff; |
| 274 | } else { | ||
| 275 | sp = kernel_stack_pointer(regs); | ||
| 276 | savesegment(ss, ss); | ||
| 276 | } | 277 | } |
| 277 | printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip); | 278 | printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip); |
| 278 | print_symbol("%s", regs->ip); | 279 | print_symbol("%s", regs->ip); |
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index 34e86b67550c..20a5b3689463 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
| @@ -89,7 +89,6 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
| 89 | gdb_regs[GDB_SS] = __KERNEL_DS; | 89 | gdb_regs[GDB_SS] = __KERNEL_DS; |
| 90 | gdb_regs[GDB_FS] = 0xFFFF; | 90 | gdb_regs[GDB_FS] = 0xFFFF; |
| 91 | gdb_regs[GDB_GS] = 0xFFFF; | 91 | gdb_regs[GDB_GS] = 0xFFFF; |
| 92 | gdb_regs[GDB_SP] = (int)®s->sp; | ||
| 93 | #else | 92 | #else |
| 94 | gdb_regs[GDB_R8] = regs->r8; | 93 | gdb_regs[GDB_R8] = regs->r8; |
| 95 | gdb_regs[GDB_R9] = regs->r9; | 94 | gdb_regs[GDB_R9] = regs->r9; |
| @@ -102,8 +101,8 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
| 102 | gdb_regs32[GDB_PS] = regs->flags; | 101 | gdb_regs32[GDB_PS] = regs->flags; |
| 103 | gdb_regs32[GDB_CS] = regs->cs; | 102 | gdb_regs32[GDB_CS] = regs->cs; |
| 104 | gdb_regs32[GDB_SS] = regs->ss; | 103 | gdb_regs32[GDB_SS] = regs->ss; |
| 105 | gdb_regs[GDB_SP] = regs->sp; | ||
| 106 | #endif | 104 | #endif |
| 105 | gdb_regs[GDB_SP] = kernel_stack_pointer(regs); | ||
| 107 | } | 106 | } |
| 108 | 107 | ||
| 109 | /** | 108 | /** |
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c index 3fe86d706a14..1f3186ce213c 100644 --- a/arch/x86/kernel/kprobes.c +++ b/arch/x86/kernel/kprobes.c | |||
| @@ -63,19 +63,7 @@ void jprobe_return_end(void); | |||
| 63 | DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; | 63 | DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; |
| 64 | DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); | 64 | DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); |
| 65 | 65 | ||
| 66 | #ifdef CONFIG_X86_64 | 66 | #define stack_addr(regs) ((unsigned long *)kernel_stack_pointer(regs)) |
| 67 | #define stack_addr(regs) ((unsigned long *)regs->sp) | ||
| 68 | #else | ||
| 69 | /* | ||
| 70 | * "®s->sp" looks wrong, but it's correct for x86_32. x86_32 CPUs | ||
| 71 | * don't save the ss and esp registers if the CPU is already in kernel | ||
| 72 | * mode when it traps. So for kprobes, regs->sp and regs->ss are not | ||
| 73 | * the [nonexistent] saved stack pointer and ss register, but rather | ||
| 74 | * the top 8 bytes of the pre-int3 stack. So ®s->sp happens to | ||
| 75 | * point to the top of the pre-int3 stack. | ||
| 76 | */ | ||
| 77 | #define stack_addr(regs) ((unsigned long *)®s->sp) | ||
| 78 | #endif | ||
| 79 | 67 | ||
| 80 | #define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\ | 68 | #define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\ |
| 81 | (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) | \ | 69 | (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) | \ |
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c index 378e9a8f1bf8..2bcad3926edb 100644 --- a/arch/x86/kernel/microcode_core.c +++ b/arch/x86/kernel/microcode_core.c | |||
| @@ -73,7 +73,6 @@ | |||
| 73 | #include <linux/platform_device.h> | 73 | #include <linux/platform_device.h> |
| 74 | #include <linux/miscdevice.h> | 74 | #include <linux/miscdevice.h> |
| 75 | #include <linux/capability.h> | 75 | #include <linux/capability.h> |
| 76 | #include <linux/smp_lock.h> | ||
| 77 | #include <linux/kernel.h> | 76 | #include <linux/kernel.h> |
| 78 | #include <linux/module.h> | 77 | #include <linux/module.h> |
| 79 | #include <linux/mutex.h> | 78 | #include <linux/mutex.h> |
| @@ -201,7 +200,6 @@ static int do_microcode_update(const void __user *buf, size_t size) | |||
| 201 | 200 | ||
| 202 | static int microcode_open(struct inode *unused1, struct file *unused2) | 201 | static int microcode_open(struct inode *unused1, struct file *unused2) |
| 203 | { | 202 | { |
| 204 | cycle_kernel_lock(); | ||
| 205 | return capable(CAP_SYS_RAWIO) ? 0 : -EPERM; | 203 | return capable(CAP_SYS_RAWIO) ? 0 : -EPERM; |
| 206 | } | 204 | } |
| 207 | 205 | ||
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index d5bd3132ee70..540140284f60 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
| @@ -135,7 +135,7 @@ void __show_regs(struct pt_regs *regs, int all) | |||
| 135 | ss = regs->ss & 0xffff; | 135 | ss = regs->ss & 0xffff; |
| 136 | gs = get_user_gs(regs); | 136 | gs = get_user_gs(regs); |
| 137 | } else { | 137 | } else { |
| 138 | sp = (unsigned long) (®s->sp); | 138 | sp = kernel_stack_pointer(regs); |
| 139 | savesegment(ss, ss); | 139 | savesegment(ss, ss); |
| 140 | savesegment(gs, gs); | 140 | savesegment(gs, gs); |
| 141 | } | 141 | } |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index c0ca8f921c91..82e88cdda9bc 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
| @@ -248,7 +248,7 @@ EXPORT_SYMBOL(edd); | |||
| 248 | * from boot_params into a safe place. | 248 | * from boot_params into a safe place. |
| 249 | * | 249 | * |
| 250 | */ | 250 | */ |
| 251 | static inline void copy_edd(void) | 251 | static inline void __init copy_edd(void) |
| 252 | { | 252 | { |
| 253 | memcpy(edd.mbr_signature, boot_params.edd_mbr_sig_buffer, | 253 | memcpy(edd.mbr_signature, boot_params.edd_mbr_sig_buffer, |
| 254 | sizeof(edd.mbr_signature)); | 254 | sizeof(edd.mbr_signature)); |
| @@ -257,7 +257,7 @@ static inline void copy_edd(void) | |||
| 257 | edd.edd_info_nr = boot_params.eddbuf_entries; | 257 | edd.edd_info_nr = boot_params.eddbuf_entries; |
| 258 | } | 258 | } |
| 259 | #else | 259 | #else |
| 260 | static inline void copy_edd(void) | 260 | static inline void __init copy_edd(void) |
| 261 | { | 261 | { |
| 262 | } | 262 | } |
| 263 | #endif | 263 | #endif |
diff --git a/arch/x86/kernel/visws_quirks.c b/arch/x86/kernel/visws_quirks.c index cff70c86e18e..abda6f53e71e 100644 --- a/arch/x86/kernel/visws_quirks.c +++ b/arch/x86/kernel/visws_quirks.c | |||
| @@ -486,7 +486,7 @@ static void end_cobalt_irq(unsigned int irq) | |||
| 486 | } | 486 | } |
| 487 | 487 | ||
| 488 | static struct irq_chip cobalt_irq_type = { | 488 | static struct irq_chip cobalt_irq_type = { |
| 489 | .typename = "Cobalt-APIC", | 489 | .name = "Cobalt-APIC", |
| 490 | .startup = startup_cobalt_irq, | 490 | .startup = startup_cobalt_irq, |
| 491 | .shutdown = disable_cobalt_irq, | 491 | .shutdown = disable_cobalt_irq, |
| 492 | .enable = enable_cobalt_irq, | 492 | .enable = enable_cobalt_irq, |
| @@ -523,7 +523,7 @@ static void end_piix4_master_irq(unsigned int irq) | |||
| 523 | } | 523 | } |
| 524 | 524 | ||
| 525 | static struct irq_chip piix4_master_irq_type = { | 525 | static struct irq_chip piix4_master_irq_type = { |
| 526 | .typename = "PIIX4-master", | 526 | .name = "PIIX4-master", |
| 527 | .startup = startup_piix4_master_irq, | 527 | .startup = startup_piix4_master_irq, |
| 528 | .ack = ack_cobalt_irq, | 528 | .ack = ack_cobalt_irq, |
| 529 | .end = end_piix4_master_irq, | 529 | .end = end_piix4_master_irq, |
| @@ -531,7 +531,7 @@ static struct irq_chip piix4_master_irq_type = { | |||
| 531 | 531 | ||
| 532 | 532 | ||
| 533 | static struct irq_chip piix4_virtual_irq_type = { | 533 | static struct irq_chip piix4_virtual_irq_type = { |
| 534 | .typename = "PIIX4-virtual", | 534 | .name = "PIIX4-virtual", |
| 535 | .shutdown = disable_8259A_irq, | 535 | .shutdown = disable_8259A_irq, |
| 536 | .enable = enable_8259A_irq, | 536 | .enable = enable_8259A_irq, |
| 537 | .disable = disable_8259A_irq, | 537 | .disable = disable_8259A_irq, |
