diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-30 00:39:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-30 00:39:01 -0400 |
commit | dcdbe33add56cb659ebf21fb9b6577507e21d952 (patch) | |
tree | 928b048cc5a189803a7735e95ce6b449c6c39924 /arch | |
parent | 7b55eab81ecbbd44e76ac14c67479b82807c261b (diff) | |
parent | 1aeeac7ad484e1bea6fe602880893b3074adb40a (diff) |
Merge branch 'mn10300' (mn10300 fixes from David Howells)
Merge mn10300 fixes from David Howells.
* emailed patches from David Howells <dhowells@redhat.com>:
MN10300: Need pci_iomap() and __pci_ioport_map() defining
MN10300: ASB2305's PCI code needs the definition of XIRQ1
MN10300: Enable IRQs more in system call exit work path
MN10300: Fix ret_from_kernel_thread
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mn10300/include/asm/pci.h | 2 | ||||
-rw-r--r-- | arch/mn10300/kernel/entry.S | 19 | ||||
-rw-r--r-- | arch/mn10300/unit-asb2305/pci.c | 1 |
3 files changed, 9 insertions, 13 deletions
diff --git a/arch/mn10300/include/asm/pci.h b/arch/mn10300/include/asm/pci.h index 8137c25c4e15..6f31cc0f1a87 100644 --- a/arch/mn10300/include/asm/pci.h +++ b/arch/mn10300/include/asm/pci.h | |||
@@ -103,4 +103,6 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
103 | return channel ? 15 : 14; | 103 | return channel ? 15 : 14; |
104 | } | 104 | } |
105 | 105 | ||
106 | #include <asm-generic/pci_iomap.h> | ||
107 | |||
106 | #endif /* _ASM_PCI_H */ | 108 | #endif /* _ASM_PCI_H */ |
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S index 68fcab8f8f6f..222152a3f751 100644 --- a/arch/mn10300/kernel/entry.S +++ b/arch/mn10300/kernel/entry.S | |||
@@ -60,6 +60,7 @@ ENTRY(ret_from_kernel_thread) | |||
60 | mov (REG_D0,fp),d0 | 60 | mov (REG_D0,fp),d0 |
61 | mov (REG_A0,fp),a0 | 61 | mov (REG_A0,fp),a0 |
62 | calls (a0) | 62 | calls (a0) |
63 | GET_THREAD_INFO a2 # A2 must be set on return from sys_exit() | ||
63 | clr d0 | 64 | clr d0 |
64 | mov d0,(REG_D0,fp) | 65 | mov d0,(REG_D0,fp) |
65 | jmp syscall_exit | 66 | jmp syscall_exit |
@@ -107,10 +108,10 @@ syscall_exit_work: | |||
107 | and EPSW_nSL,d0 | 108 | and EPSW_nSL,d0 |
108 | beq resume_kernel # returning to supervisor mode | 109 | beq resume_kernel # returning to supervisor mode |
109 | 110 | ||
110 | btst _TIF_SYSCALL_TRACE,d2 | ||
111 | beq work_pending | ||
112 | LOCAL_IRQ_ENABLE # could let syscall_trace_exit() call | 111 | LOCAL_IRQ_ENABLE # could let syscall_trace_exit() call |
113 | # schedule() instead | 112 | # schedule() instead |
113 | btst _TIF_SYSCALL_TRACE,d2 | ||
114 | beq work_pending | ||
114 | mov fp,d0 | 115 | mov fp,d0 |
115 | call syscall_trace_exit[],0 # do_syscall_trace(regs) | 116 | call syscall_trace_exit[],0 # do_syscall_trace(regs) |
116 | jmp resume_userspace | 117 | jmp resume_userspace |
@@ -123,6 +124,7 @@ work_pending: | |||
123 | work_resched: | 124 | work_resched: |
124 | call schedule[],0 | 125 | call schedule[],0 |
125 | 126 | ||
127 | resume_userspace: | ||
126 | # make sure we don't miss an interrupt setting need_resched or | 128 | # make sure we don't miss an interrupt setting need_resched or |
127 | # sigpending between sampling and the rti | 129 | # sigpending between sampling and the rti |
128 | LOCAL_IRQ_DISABLE | 130 | LOCAL_IRQ_DISABLE |
@@ -131,6 +133,8 @@ work_resched: | |||
131 | mov (TI_flags,a2),d2 | 133 | mov (TI_flags,a2),d2 |
132 | btst _TIF_WORK_MASK,d2 | 134 | btst _TIF_WORK_MASK,d2 |
133 | beq restore_all | 135 | beq restore_all |
136 | |||
137 | LOCAL_IRQ_ENABLE | ||
134 | btst _TIF_NEED_RESCHED,d2 | 138 | btst _TIF_NEED_RESCHED,d2 |
135 | bne work_resched | 139 | bne work_resched |
136 | 140 | ||
@@ -169,17 +173,6 @@ ret_from_intr: | |||
169 | and EPSW_nSL,d0 | 173 | and EPSW_nSL,d0 |
170 | beq resume_kernel # returning to supervisor mode | 174 | beq resume_kernel # returning to supervisor mode |
171 | 175 | ||
172 | ENTRY(resume_userspace) | ||
173 | # make sure we don't miss an interrupt setting need_resched or | ||
174 | # sigpending between sampling and the rti | ||
175 | LOCAL_IRQ_DISABLE | ||
176 | |||
177 | # is there any work to be done on int/exception return? | ||
178 | mov (TI_flags,a2),d2 | ||
179 | btst _TIF_WORK_MASK,d2 | ||
180 | bne work_pending | ||
181 | jmp restore_all | ||
182 | |||
183 | #ifdef CONFIG_PREEMPT | 176 | #ifdef CONFIG_PREEMPT |
184 | ENTRY(resume_kernel) | 177 | ENTRY(resume_kernel) |
185 | LOCAL_IRQ_DISABLE | 178 | LOCAL_IRQ_DISABLE |
diff --git a/arch/mn10300/unit-asb2305/pci.c b/arch/mn10300/unit-asb2305/pci.c index 1adcf024bb9a..e37fac0461f3 100644 --- a/arch/mn10300/unit-asb2305/pci.c +++ b/arch/mn10300/unit-asb2305/pci.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
21 | #include <asm/io.h> | 21 | #include <asm/io.h> |
22 | #include <asm/irq.h> | ||
22 | #include "pci-asb2305.h" | 23 | #include "pci-asb2305.h" |
23 | 24 | ||
24 | unsigned int pci_probe = 1; | 25 | unsigned int pci_probe = 1; |