diff options
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/armksyms.c | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/ecard.c | 35 | ||||
| -rw-r--r-- | arch/arm/kernel/stacktrace.c | 12 | ||||
| -rw-r--r-- | arch/arm/kernel/time.c | 2 |
4 files changed, 39 insertions, 11 deletions
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c index 4779f474f9..9179e82203 100644 --- a/arch/arm/kernel/armksyms.c +++ b/arch/arm/kernel/armksyms.c | |||
| @@ -76,6 +76,7 @@ EXPORT_SYMBOL(__const_udelay); | |||
| 76 | 76 | ||
| 77 | /* networking */ | 77 | /* networking */ |
| 78 | EXPORT_SYMBOL(csum_partial); | 78 | EXPORT_SYMBOL(csum_partial); |
| 79 | EXPORT_SYMBOL(csum_partial_copy_from_user); | ||
| 79 | EXPORT_SYMBOL(csum_partial_copy_nocheck); | 80 | EXPORT_SYMBOL(csum_partial_copy_nocheck); |
| 80 | EXPORT_SYMBOL(__csum_ipv6_magic); | 81 | EXPORT_SYMBOL(__csum_ipv6_magic); |
| 81 | 82 | ||
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c index bdbd7da992..f56d48c451 100644 --- a/arch/arm/kernel/ecard.c +++ b/arch/arm/kernel/ecard.c | |||
| @@ -41,11 +41,11 @@ | |||
| 41 | #include <linux/init.h> | 41 | #include <linux/init.h> |
| 42 | #include <linux/mutex.h> | 42 | #include <linux/mutex.h> |
| 43 | #include <linux/kthread.h> | 43 | #include <linux/kthread.h> |
| 44 | #include <linux/io.h> | ||
| 44 | 45 | ||
| 45 | #include <asm/dma.h> | 46 | #include <asm/dma.h> |
| 46 | #include <asm/ecard.h> | 47 | #include <asm/ecard.h> |
| 47 | #include <asm/hardware.h> | 48 | #include <asm/hardware.h> |
| 48 | #include <asm/io.h> | ||
| 49 | #include <asm/irq.h> | 49 | #include <asm/irq.h> |
| 50 | #include <asm/mmu_context.h> | 50 | #include <asm/mmu_context.h> |
| 51 | #include <asm/mach/irq.h> | 51 | #include <asm/mach/irq.h> |
| @@ -958,6 +958,31 @@ void ecard_release_resources(struct expansion_card *ec) | |||
| 958 | } | 958 | } |
| 959 | EXPORT_SYMBOL(ecard_release_resources); | 959 | EXPORT_SYMBOL(ecard_release_resources); |
| 960 | 960 | ||
| 961 | void ecard_setirq(struct expansion_card *ec, const struct expansion_card_ops *ops, void *irq_data) | ||
| 962 | { | ||
| 963 | ec->irq_data = irq_data; | ||
| 964 | barrier(); | ||
| 965 | ec->ops = ops; | ||
| 966 | } | ||
| 967 | EXPORT_SYMBOL(ecard_setirq); | ||
| 968 | |||
| 969 | void __iomem *ecardm_iomap(struct expansion_card *ec, unsigned int res, | ||
| 970 | unsigned long offset, unsigned long maxsize) | ||
| 971 | { | ||
| 972 | unsigned long start = ecard_resource_start(ec, res); | ||
| 973 | unsigned long end = ecard_resource_end(ec, res); | ||
| 974 | |||
| 975 | if (offset > (end - start)) | ||
| 976 | return NULL; | ||
| 977 | |||
| 978 | start += offset; | ||
| 979 | if (maxsize && end - start > maxsize) | ||
| 980 | end = start + maxsize; | ||
| 981 | |||
| 982 | return devm_ioremap(&ec->dev, start, end - start); | ||
| 983 | } | ||
| 984 | EXPORT_SYMBOL(ecardm_iomap); | ||
| 985 | |||
| 961 | /* | 986 | /* |
| 962 | * Probe for an expansion card. | 987 | * Probe for an expansion card. |
| 963 | * | 988 | * |
| @@ -1133,6 +1158,14 @@ static int ecard_drv_remove(struct device *dev) | |||
| 1133 | drv->remove(ec); | 1158 | drv->remove(ec); |
| 1134 | ecard_release(ec); | 1159 | ecard_release(ec); |
| 1135 | 1160 | ||
| 1161 | /* | ||
| 1162 | * Restore the default operations. We ensure that the | ||
| 1163 | * ops are set before we change the data. | ||
| 1164 | */ | ||
| 1165 | ec->ops = &ecard_default_ops; | ||
| 1166 | barrier(); | ||
| 1167 | ec->irq_data = NULL; | ||
| 1168 | |||
| 1136 | return 0; | 1169 | return 0; |
| 1137 | } | 1170 | } |
| 1138 | 1171 | ||
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index 77ef35efaa..398d0c0511 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c | |||
| @@ -52,21 +52,15 @@ static int save_trace(struct stackframe *frame, void *d) | |||
| 52 | return trace->nr_entries >= trace->max_entries; | 52 | return trace->nr_entries >= trace->max_entries; |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | void save_stack_trace(struct stack_trace *trace, struct task_struct *task) | 55 | void save_stack_trace(struct stack_trace *trace) |
| 56 | { | 56 | { |
| 57 | struct stack_trace_data data; | 57 | struct stack_trace_data data; |
| 58 | unsigned long fp, base; | 58 | unsigned long fp, base; |
| 59 | 59 | ||
| 60 | data.trace = trace; | 60 | data.trace = trace; |
| 61 | data.skip = trace->skip; | 61 | data.skip = trace->skip; |
| 62 | 62 | base = (unsigned long)task_stack_page(current); | |
| 63 | if (task) { | 63 | asm("mov %0, fp" : "=r" (fp)); |
| 64 | base = (unsigned long)task_stack_page(task); | ||
| 65 | fp = 0; /* FIXME */ | ||
| 66 | } else { | ||
| 67 | base = (unsigned long)task_stack_page(current); | ||
| 68 | asm("mov %0, fp" : "=r" (fp)); | ||
| 69 | } | ||
| 70 | 64 | ||
| 71 | walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data); | 65 | walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data); |
| 72 | } | 66 | } |
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index d0540e4eaf..1533d3ecd7 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
| @@ -512,7 +512,7 @@ void __init time_init(void) | |||
| 512 | 512 | ||
| 513 | #ifdef CONFIG_NO_IDLE_HZ | 513 | #ifdef CONFIG_NO_IDLE_HZ |
| 514 | if (system_timer->dyn_tick) | 514 | if (system_timer->dyn_tick) |
| 515 | system_timer->dyn_tick->lock = SPIN_LOCK_UNLOCKED; | 515 | spin_lock_init(&system_timer->dyn_tick->lock); |
| 516 | #endif | 516 | #endif |
| 517 | } | 517 | } |
| 518 | 518 | ||
