diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2008-07-25 10:40:14 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2008-07-25 10:40:14 -0400 |
commit | ff877ea80efa2015b6263766f78ee42c2a1b32f9 (patch) | |
tree | 85205005c611ab774702148558321c6fb92f1ccd /arch/sh | |
parent | 30821fee4f0cb3e6d241d9f7ddc37742212e3eb7 (diff) | |
parent | d37e6bf68fc1eb34a4ad21d9ae8890ed37ea80e7 (diff) |
Merge branch 'linux-next' of git://git.infradead.org/~dedekind/ubi-2.6
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/Kconfig | 1 | ||||
-rw-r--r-- | arch/sh/boards/landisk/gio.c | 10 | ||||
-rw-r--r-- | arch/sh/boards/renesas/migor/setup.c | 3 | ||||
-rw-r--r-- | arch/sh/configs/landisk_defconfig | 1 | ||||
-rw-r--r-- | arch/sh/configs/lboxre2_defconfig | 1 | ||||
-rw-r--r-- | arch/sh/configs/se7705_defconfig | 1 | ||||
-rw-r--r-- | arch/sh/configs/se7712_defconfig | 1 | ||||
-rw-r--r-- | arch/sh/configs/se7750_defconfig | 1 | ||||
-rw-r--r-- | arch/sh/drivers/dma/dma-sysfs.c | 15 | ||||
-rw-r--r-- | arch/sh/drivers/pci/pci.c | 32 | ||||
-rw-r--r-- | arch/sh/kernel/smp.c | 62 | ||||
-rw-r--r-- | arch/sh/kernel/stacktrace.c | 1 | ||||
-rw-r--r-- | arch/sh/kernel/vmlinux_32.lds.S | 1 | ||||
-rw-r--r-- | arch/sh/kernel/vmlinux_64.lds.S | 1 |
14 files changed, 36 insertions, 95 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 9a854c8e5274..3e7384f4619c 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -688,6 +688,7 @@ config CRASH_DUMP | |||
688 | config SMP | 688 | config SMP |
689 | bool "Symmetric multi-processing support" | 689 | bool "Symmetric multi-processing support" |
690 | depends on SYS_SUPPORTS_SMP | 690 | depends on SYS_SUPPORTS_SMP |
691 | select USE_GENERIC_SMP_HELPERS | ||
691 | ---help--- | 692 | ---help--- |
692 | This enables support for systems with more than one CPU. If you have | 693 | This enables support for systems with more than one CPU. If you have |
693 | a system with only one CPU, like most personal computers, say N. If | 694 | a system with only one CPU, like most personal computers, say N. If |
diff --git a/arch/sh/boards/landisk/gio.c b/arch/sh/boards/landisk/gio.c index 17025080db35..0c15b0a50b99 100644 --- a/arch/sh/boards/landisk/gio.c +++ b/arch/sh/boards/landisk/gio.c | |||
@@ -14,6 +14,7 @@ | |||
14 | */ | 14 | */ |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/smp_lock.h> | ||
17 | #include <linux/kdev_t.h> | 18 | #include <linux/kdev_t.h> |
18 | #include <linux/cdev.h> | 19 | #include <linux/cdev.h> |
19 | #include <linux/fs.h> | 20 | #include <linux/fs.h> |
@@ -32,17 +33,20 @@ static int openCnt; | |||
32 | static int gio_open(struct inode *inode, struct file *filp) | 33 | static int gio_open(struct inode *inode, struct file *filp) |
33 | { | 34 | { |
34 | int minor; | 35 | int minor; |
36 | int ret = -ENOENT; | ||
35 | 37 | ||
38 | lock_kernel(); | ||
36 | minor = MINOR(inode->i_rdev); | 39 | minor = MINOR(inode->i_rdev); |
37 | if (minor < DEVCOUNT) { | 40 | if (minor < DEVCOUNT) { |
38 | if (openCnt > 0) { | 41 | if (openCnt > 0) { |
39 | return -EALREADY; | 42 | ret = -EALREADY; |
40 | } else { | 43 | } else { |
41 | openCnt++; | 44 | openCnt++; |
42 | return 0; | 45 | ret = 0; |
43 | } | 46 | } |
44 | } | 47 | } |
45 | return -ENOENT; | 48 | unlock_kernel(); |
49 | return ret; | ||
46 | } | 50 | } |
47 | 51 | ||
48 | static int gio_close(struct inode *inode, struct file *filp) | 52 | static int gio_close(struct inode *inode, struct file *filp) |
diff --git a/arch/sh/boards/renesas/migor/setup.c b/arch/sh/boards/renesas/migor/setup.c index 01af44245b57..963c99322095 100644 --- a/arch/sh/boards/renesas/migor/setup.c +++ b/arch/sh/boards/renesas/migor/setup.c | |||
@@ -30,7 +30,6 @@ | |||
30 | 30 | ||
31 | static struct smc91x_platdata smc91x_info = { | 31 | static struct smc91x_platdata smc91x_info = { |
32 | .flags = SMC91X_USE_16BIT, | 32 | .flags = SMC91X_USE_16BIT, |
33 | .irq_flags = IRQF_TRIGGER_HIGH, | ||
34 | }; | 33 | }; |
35 | 34 | ||
36 | static struct resource smc91x_eth_resources[] = { | 35 | static struct resource smc91x_eth_resources[] = { |
@@ -42,7 +41,7 @@ static struct resource smc91x_eth_resources[] = { | |||
42 | }, | 41 | }, |
43 | [1] = { | 42 | [1] = { |
44 | .start = 32, /* IRQ0 */ | 43 | .start = 32, /* IRQ0 */ |
45 | .flags = IORESOURCE_IRQ, | 44 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, |
46 | }, | 45 | }, |
47 | }; | 46 | }; |
48 | 47 | ||
diff --git a/arch/sh/configs/landisk_defconfig b/arch/sh/configs/landisk_defconfig index f52db125432f..38f934ab50c7 100644 --- a/arch/sh/configs/landisk_defconfig +++ b/arch/sh/configs/landisk_defconfig | |||
@@ -226,7 +226,6 @@ CONFIG_CPU_HAS_PTEA=y | |||
226 | # | 226 | # |
227 | CONFIG_SH_TMU=y | 227 | CONFIG_SH_TMU=y |
228 | CONFIG_SH_TIMER_IRQ=16 | 228 | CONFIG_SH_TIMER_IRQ=16 |
229 | # CONFIG_NO_IDLE_HZ is not set | ||
230 | CONFIG_SH_PCLK_FREQ=33333333 | 229 | CONFIG_SH_PCLK_FREQ=33333333 |
231 | 230 | ||
232 | # | 231 | # |
diff --git a/arch/sh/configs/lboxre2_defconfig b/arch/sh/configs/lboxre2_defconfig index 9fa66d92a4e7..b68b6cdbb78f 100644 --- a/arch/sh/configs/lboxre2_defconfig +++ b/arch/sh/configs/lboxre2_defconfig | |||
@@ -231,7 +231,6 @@ CONFIG_CPU_HAS_PTEA=y | |||
231 | # | 231 | # |
232 | CONFIG_SH_TMU=y | 232 | CONFIG_SH_TMU=y |
233 | CONFIG_SH_TIMER_IRQ=16 | 233 | CONFIG_SH_TIMER_IRQ=16 |
234 | # CONFIG_NO_IDLE_HZ is not set | ||
235 | CONFIG_SH_PCLK_FREQ=40000000 | 234 | CONFIG_SH_PCLK_FREQ=40000000 |
236 | 235 | ||
237 | # | 236 | # |
diff --git a/arch/sh/configs/se7705_defconfig b/arch/sh/configs/se7705_defconfig index 84717d854867..490dcbc2ce33 100644 --- a/arch/sh/configs/se7705_defconfig +++ b/arch/sh/configs/se7705_defconfig | |||
@@ -239,7 +239,6 @@ CONFIG_CPU_HAS_SR_RB=y | |||
239 | # | 239 | # |
240 | CONFIG_SH_TMU=y | 240 | CONFIG_SH_TMU=y |
241 | CONFIG_SH_TIMER_IRQ=16 | 241 | CONFIG_SH_TIMER_IRQ=16 |
242 | # CONFIG_NO_IDLE_HZ is not set | ||
243 | CONFIG_SH_PCLK_FREQ=33333333 | 242 | CONFIG_SH_PCLK_FREQ=33333333 |
244 | 243 | ||
245 | # | 244 | # |
diff --git a/arch/sh/configs/se7712_defconfig b/arch/sh/configs/se7712_defconfig index 240a1cef69aa..2dd83af988f0 100644 --- a/arch/sh/configs/se7712_defconfig +++ b/arch/sh/configs/se7712_defconfig | |||
@@ -236,7 +236,6 @@ CONFIG_CPU_HAS_SR_RB=y | |||
236 | # | 236 | # |
237 | CONFIG_SH_TMU=y | 237 | CONFIG_SH_TMU=y |
238 | CONFIG_SH_TIMER_IRQ=16 | 238 | CONFIG_SH_TIMER_IRQ=16 |
239 | # CONFIG_NO_IDLE_HZ is not set | ||
240 | CONFIG_SH_PCLK_FREQ=66666666 | 239 | CONFIG_SH_PCLK_FREQ=66666666 |
241 | 240 | ||
242 | # | 241 | # |
diff --git a/arch/sh/configs/se7750_defconfig b/arch/sh/configs/se7750_defconfig index c60b6fd4fc42..167786f9a9bd 100644 --- a/arch/sh/configs/se7750_defconfig +++ b/arch/sh/configs/se7750_defconfig | |||
@@ -235,7 +235,6 @@ CONFIG_CPU_HAS_PTEA=y | |||
235 | # | 235 | # |
236 | CONFIG_SH_TMU=y | 236 | CONFIG_SH_TMU=y |
237 | CONFIG_SH_TIMER_IRQ=16 | 237 | CONFIG_SH_TIMER_IRQ=16 |
238 | # CONFIG_NO_IDLE_HZ is not set | ||
239 | CONFIG_SH_PCLK_FREQ=33333333 | 238 | CONFIG_SH_PCLK_FREQ=33333333 |
240 | 239 | ||
241 | # | 240 | # |
diff --git a/arch/sh/drivers/dma/dma-sysfs.c b/arch/sh/drivers/dma/dma-sysfs.c index 51b57c0d1a3c..347ee11351ec 100644 --- a/arch/sh/drivers/dma/dma-sysfs.c +++ b/arch/sh/drivers/dma/dma-sysfs.c | |||
@@ -23,7 +23,8 @@ static struct sysdev_class dma_sysclass = { | |||
23 | }; | 23 | }; |
24 | EXPORT_SYMBOL(dma_sysclass); | 24 | EXPORT_SYMBOL(dma_sysclass); |
25 | 25 | ||
26 | static ssize_t dma_show_devices(struct sys_device *dev, char *buf) | 26 | static ssize_t dma_show_devices(struct sys_device *dev, |
27 | struct sysdev_attribute *attr, char *buf) | ||
27 | { | 28 | { |
28 | ssize_t len = 0; | 29 | ssize_t len = 0; |
29 | int i; | 30 | int i; |
@@ -57,13 +58,15 @@ static int __init dma_sysclass_init(void) | |||
57 | } | 58 | } |
58 | postcore_initcall(dma_sysclass_init); | 59 | postcore_initcall(dma_sysclass_init); |
59 | 60 | ||
60 | static ssize_t dma_show_dev_id(struct sys_device *dev, char *buf) | 61 | static ssize_t dma_show_dev_id(struct sys_device *dev, |
62 | struct sysdev_attribute *attr, char *buf) | ||
61 | { | 63 | { |
62 | struct dma_channel *channel = to_dma_channel(dev); | 64 | struct dma_channel *channel = to_dma_channel(dev); |
63 | return sprintf(buf, "%s\n", channel->dev_id); | 65 | return sprintf(buf, "%s\n", channel->dev_id); |
64 | } | 66 | } |
65 | 67 | ||
66 | static ssize_t dma_store_dev_id(struct sys_device *dev, | 68 | static ssize_t dma_store_dev_id(struct sys_device *dev, |
69 | struct sysdev_attribute *attr, | ||
67 | const char *buf, size_t count) | 70 | const char *buf, size_t count) |
68 | { | 71 | { |
69 | struct dma_channel *channel = to_dma_channel(dev); | 72 | struct dma_channel *channel = to_dma_channel(dev); |
@@ -74,6 +77,7 @@ static ssize_t dma_store_dev_id(struct sys_device *dev, | |||
74 | static SYSDEV_ATTR(dev_id, S_IRUGO | S_IWUSR, dma_show_dev_id, dma_store_dev_id); | 77 | static SYSDEV_ATTR(dev_id, S_IRUGO | S_IWUSR, dma_show_dev_id, dma_store_dev_id); |
75 | 78 | ||
76 | static ssize_t dma_store_config(struct sys_device *dev, | 79 | static ssize_t dma_store_config(struct sys_device *dev, |
80 | struct sysdev_attribute *attr, | ||
77 | const char *buf, size_t count) | 81 | const char *buf, size_t count) |
78 | { | 82 | { |
79 | struct dma_channel *channel = to_dma_channel(dev); | 83 | struct dma_channel *channel = to_dma_channel(dev); |
@@ -87,13 +91,15 @@ static ssize_t dma_store_config(struct sys_device *dev, | |||
87 | 91 | ||
88 | static SYSDEV_ATTR(config, S_IWUSR, NULL, dma_store_config); | 92 | static SYSDEV_ATTR(config, S_IWUSR, NULL, dma_store_config); |
89 | 93 | ||
90 | static ssize_t dma_show_mode(struct sys_device *dev, char *buf) | 94 | static ssize_t dma_show_mode(struct sys_device *dev, |
95 | struct sysdev_attribute *attr, char *buf) | ||
91 | { | 96 | { |
92 | struct dma_channel *channel = to_dma_channel(dev); | 97 | struct dma_channel *channel = to_dma_channel(dev); |
93 | return sprintf(buf, "0x%08x\n", channel->mode); | 98 | return sprintf(buf, "0x%08x\n", channel->mode); |
94 | } | 99 | } |
95 | 100 | ||
96 | static ssize_t dma_store_mode(struct sys_device *dev, | 101 | static ssize_t dma_store_mode(struct sys_device *dev, |
102 | struct sysdev_attribute *attr, | ||
97 | const char *buf, size_t count) | 103 | const char *buf, size_t count) |
98 | { | 104 | { |
99 | struct dma_channel *channel = to_dma_channel(dev); | 105 | struct dma_channel *channel = to_dma_channel(dev); |
@@ -104,7 +110,8 @@ static ssize_t dma_store_mode(struct sys_device *dev, | |||
104 | static SYSDEV_ATTR(mode, S_IRUGO | S_IWUSR, dma_show_mode, dma_store_mode); | 110 | static SYSDEV_ATTR(mode, S_IRUGO | S_IWUSR, dma_show_mode, dma_store_mode); |
105 | 111 | ||
106 | #define dma_ro_attr(field, fmt) \ | 112 | #define dma_ro_attr(field, fmt) \ |
107 | static ssize_t dma_show_##field(struct sys_device *dev, char *buf) \ | 113 | static ssize_t dma_show_##field(struct sys_device *dev, \ |
114 | struct sysdev_attribute *attr, char *buf)\ | ||
108 | { \ | 115 | { \ |
109 | struct dma_channel *channel = to_dma_channel(dev); \ | 116 | struct dma_channel *channel = to_dma_channel(dev); \ |
110 | return sprintf(buf, fmt, channel->field); \ | 117 | return sprintf(buf, fmt, channel->field); \ |
diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index 08d2e7325252..f57095a2617c 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c | |||
@@ -76,38 +76,6 @@ void __devinit __weak pcibios_fixup_bus(struct pci_bus *bus) | |||
76 | pci_read_bridge_bases(bus); | 76 | pci_read_bridge_bases(bus); |
77 | } | 77 | } |
78 | 78 | ||
79 | void | ||
80 | pcibios_update_resource(struct pci_dev *dev, struct resource *root, | ||
81 | struct resource *res, int resource) | ||
82 | { | ||
83 | u32 new, check; | ||
84 | int reg; | ||
85 | |||
86 | new = res->start | (res->flags & PCI_REGION_FLAG_MASK); | ||
87 | if (resource < 6) { | ||
88 | reg = PCI_BASE_ADDRESS_0 + 4*resource; | ||
89 | } else if (resource == PCI_ROM_RESOURCE) { | ||
90 | res->flags |= IORESOURCE_ROM_ENABLE; | ||
91 | new |= PCI_ROM_ADDRESS_ENABLE; | ||
92 | reg = dev->rom_base_reg; | ||
93 | } else { | ||
94 | /* | ||
95 | * Somebody might have asked allocation of a non-standard | ||
96 | * resource | ||
97 | */ | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | pci_write_config_dword(dev, reg, new); | ||
102 | pci_read_config_dword(dev, reg, &check); | ||
103 | if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? | ||
104 | PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) { | ||
105 | printk(KERN_ERR "PCI: Error while updating region " | ||
106 | "%s/%d (%08x != %08x)\n", pci_name(dev), resource, | ||
107 | new, check); | ||
108 | } | ||
109 | } | ||
110 | |||
111 | void pcibios_align_resource(void *data, struct resource *res, | 79 | void pcibios_align_resource(void *data, struct resource *res, |
112 | resource_size_t size, resource_size_t align) | 80 | resource_size_t size, resource_size_t align) |
113 | __attribute__ ((weak)); | 81 | __attribute__ ((weak)); |
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 5d039d168f57..60c50841143e 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c | |||
@@ -36,13 +36,6 @@ EXPORT_SYMBOL(cpu_possible_map); | |||
36 | cpumask_t cpu_online_map; | 36 | cpumask_t cpu_online_map; |
37 | EXPORT_SYMBOL(cpu_online_map); | 37 | EXPORT_SYMBOL(cpu_online_map); |
38 | 38 | ||
39 | static atomic_t cpus_booted = ATOMIC_INIT(0); | ||
40 | |||
41 | /* | ||
42 | * Run specified function on a particular processor. | ||
43 | */ | ||
44 | void __smp_call_function(unsigned int cpu); | ||
45 | |||
46 | static inline void __init smp_store_cpu_info(unsigned int cpu) | 39 | static inline void __init smp_store_cpu_info(unsigned int cpu) |
47 | { | 40 | { |
48 | struct sh_cpuinfo *c = cpu_data + cpu; | 41 | struct sh_cpuinfo *c = cpu_data + cpu; |
@@ -175,45 +168,20 @@ static void stop_this_cpu(void *unused) | |||
175 | 168 | ||
176 | void smp_send_stop(void) | 169 | void smp_send_stop(void) |
177 | { | 170 | { |
178 | smp_call_function(stop_this_cpu, 0, 1, 0); | 171 | smp_call_function(stop_this_cpu, 0, 0); |
179 | } | 172 | } |
180 | 173 | ||
181 | struct smp_fn_call_struct smp_fn_call = { | 174 | void arch_send_call_function_ipi(cpumask_t mask) |
182 | .lock = __SPIN_LOCK_UNLOCKED(smp_fn_call.lock), | ||
183 | .finished = ATOMIC_INIT(0), | ||
184 | }; | ||
185 | |||
186 | /* | ||
187 | * The caller of this wants the passed function to run on every cpu. If wait | ||
188 | * is set, wait until all cpus have finished the function before returning. | ||
189 | * The lock is here to protect the call structure. | ||
190 | * You must not call this function with disabled interrupts or from a | ||
191 | * hardware interrupt handler or from a bottom half handler. | ||
192 | */ | ||
193 | int smp_call_function(void (*func)(void *info), void *info, int retry, int wait) | ||
194 | { | 175 | { |
195 | unsigned int nr_cpus = atomic_read(&cpus_booted); | 176 | int cpu; |
196 | int i; | ||
197 | |||
198 | /* Can deadlock when called with interrupts disabled */ | ||
199 | WARN_ON(irqs_disabled()); | ||
200 | |||
201 | spin_lock(&smp_fn_call.lock); | ||
202 | |||
203 | atomic_set(&smp_fn_call.finished, 0); | ||
204 | smp_fn_call.fn = func; | ||
205 | smp_fn_call.data = info; | ||
206 | |||
207 | for (i = 0; i < nr_cpus; i++) | ||
208 | if (i != smp_processor_id()) | ||
209 | plat_send_ipi(i, SMP_MSG_FUNCTION); | ||
210 | |||
211 | if (wait) | ||
212 | while (atomic_read(&smp_fn_call.finished) != (nr_cpus - 1)); | ||
213 | 177 | ||
214 | spin_unlock(&smp_fn_call.lock); | 178 | for_each_cpu_mask(cpu, mask) |
179 | plat_send_ipi(cpu, SMP_MSG_FUNCTION); | ||
180 | } | ||
215 | 181 | ||
216 | return 0; | 182 | void arch_send_call_function_single_ipi(int cpu) |
183 | { | ||
184 | plat_send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE); | ||
217 | } | 185 | } |
218 | 186 | ||
219 | /* Not really SMP stuff ... */ | 187 | /* Not really SMP stuff ... */ |
@@ -229,7 +197,7 @@ static void flush_tlb_all_ipi(void *info) | |||
229 | 197 | ||
230 | void flush_tlb_all(void) | 198 | void flush_tlb_all(void) |
231 | { | 199 | { |
232 | on_each_cpu(flush_tlb_all_ipi, 0, 1, 1); | 200 | on_each_cpu(flush_tlb_all_ipi, 0, 1); |
233 | } | 201 | } |
234 | 202 | ||
235 | static void flush_tlb_mm_ipi(void *mm) | 203 | static void flush_tlb_mm_ipi(void *mm) |
@@ -255,7 +223,7 @@ void flush_tlb_mm(struct mm_struct *mm) | |||
255 | preempt_disable(); | 223 | preempt_disable(); |
256 | 224 | ||
257 | if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) { | 225 | if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) { |
258 | smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1, 1); | 226 | smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1); |
259 | } else { | 227 | } else { |
260 | int i; | 228 | int i; |
261 | for (i = 0; i < num_online_cpus(); i++) | 229 | for (i = 0; i < num_online_cpus(); i++) |
@@ -292,7 +260,7 @@ void flush_tlb_range(struct vm_area_struct *vma, | |||
292 | fd.vma = vma; | 260 | fd.vma = vma; |
293 | fd.addr1 = start; | 261 | fd.addr1 = start; |
294 | fd.addr2 = end; | 262 | fd.addr2 = end; |
295 | smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1, 1); | 263 | smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1); |
296 | } else { | 264 | } else { |
297 | int i; | 265 | int i; |
298 | for (i = 0; i < num_online_cpus(); i++) | 266 | for (i = 0; i < num_online_cpus(); i++) |
@@ -316,7 +284,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end) | |||
316 | 284 | ||
317 | fd.addr1 = start; | 285 | fd.addr1 = start; |
318 | fd.addr2 = end; | 286 | fd.addr2 = end; |
319 | on_each_cpu(flush_tlb_kernel_range_ipi, (void *)&fd, 1, 1); | 287 | on_each_cpu(flush_tlb_kernel_range_ipi, (void *)&fd, 1); |
320 | } | 288 | } |
321 | 289 | ||
322 | static void flush_tlb_page_ipi(void *info) | 290 | static void flush_tlb_page_ipi(void *info) |
@@ -335,7 +303,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) | |||
335 | 303 | ||
336 | fd.vma = vma; | 304 | fd.vma = vma; |
337 | fd.addr1 = page; | 305 | fd.addr1 = page; |
338 | smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1, 1); | 306 | smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1); |
339 | } else { | 307 | } else { |
340 | int i; | 308 | int i; |
341 | for (i = 0; i < num_online_cpus(); i++) | 309 | for (i = 0; i < num_online_cpus(); i++) |
@@ -359,6 +327,6 @@ void flush_tlb_one(unsigned long asid, unsigned long vaddr) | |||
359 | fd.addr1 = asid; | 327 | fd.addr1 = asid; |
360 | fd.addr2 = vaddr; | 328 | fd.addr2 = vaddr; |
361 | 329 | ||
362 | smp_call_function(flush_tlb_one_ipi, (void *)&fd, 1, 1); | 330 | smp_call_function(flush_tlb_one_ipi, (void *)&fd, 1); |
363 | local_flush_tlb_one(asid, vaddr); | 331 | local_flush_tlb_one(asid, vaddr); |
364 | } | 332 | } |
diff --git a/arch/sh/kernel/stacktrace.c b/arch/sh/kernel/stacktrace.c index d41e561be20e..1b2ae35c4a76 100644 --- a/arch/sh/kernel/stacktrace.c +++ b/arch/sh/kernel/stacktrace.c | |||
@@ -34,3 +34,4 @@ void save_stack_trace(struct stack_trace *trace) | |||
34 | } | 34 | } |
35 | } | 35 | } |
36 | } | 36 | } |
37 | EXPORT_SYMBOL_GPL(save_stack_trace); | ||
diff --git a/arch/sh/kernel/vmlinux_32.lds.S b/arch/sh/kernel/vmlinux_32.lds.S index c7113786ecd4..7b4b82bd1156 100644 --- a/arch/sh/kernel/vmlinux_32.lds.S +++ b/arch/sh/kernel/vmlinux_32.lds.S | |||
@@ -44,7 +44,6 @@ SECTIONS | |||
44 | 44 | ||
45 | _etext = .; /* End of text section */ | 45 | _etext = .; /* End of text section */ |
46 | 46 | ||
47 | BUG_TABLE | ||
48 | NOTES | 47 | NOTES |
49 | RO_DATA(PAGE_SIZE) | 48 | RO_DATA(PAGE_SIZE) |
50 | 49 | ||
diff --git a/arch/sh/kernel/vmlinux_64.lds.S b/arch/sh/kernel/vmlinux_64.lds.S index d1e177009a41..33fa46451406 100644 --- a/arch/sh/kernel/vmlinux_64.lds.S +++ b/arch/sh/kernel/vmlinux_64.lds.S | |||
@@ -65,7 +65,6 @@ SECTIONS | |||
65 | 65 | ||
66 | _etext = .; /* End of text section */ | 66 | _etext = .; /* End of text section */ |
67 | 67 | ||
68 | BUG_TABLE | ||
69 | NOTES | 68 | NOTES |
70 | RO_DATA(PAGE_SIZE) | 69 | RO_DATA(PAGE_SIZE) |
71 | 70 | ||