diff options
Diffstat (limited to 'arch/cris')
45 files changed, 113 insertions, 422 deletions
diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig index 7adac388a771..059eac6abda1 100644 --- a/arch/cris/Kconfig +++ b/arch/cris/Kconfig | |||
@@ -20,6 +20,12 @@ config RWSEM_GENERIC_SPINLOCK | |||
20 | config RWSEM_XCHGADD_ALGORITHM | 20 | config RWSEM_XCHGADD_ALGORITHM |
21 | bool | 21 | bool |
22 | 22 | ||
23 | config GENERIC_TIME | ||
24 | def_bool y | ||
25 | |||
26 | config ARCH_USES_GETTIMEOFFSET | ||
27 | def_bool y | ||
28 | |||
23 | config GENERIC_IOMAP | 29 | config GENERIC_IOMAP |
24 | bool | 30 | bool |
25 | default y | 31 | default y |
diff --git a/arch/cris/arch-v10/drivers/i2c.c b/arch/cris/arch-v10/drivers/i2c.c index 7f656ae0b21d..a8737a8eb229 100644 --- a/arch/cris/arch-v10/drivers/i2c.c +++ b/arch/cris/arch-v10/drivers/i2c.c | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
17 | #include <linux/slab.h> | ||
18 | #include <linux/smp_lock.h> | 17 | #include <linux/smp_lock.h> |
19 | #include <linux/errno.h> | 18 | #include <linux/errno.h> |
20 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
diff --git a/arch/cris/arch-v10/drivers/sync_serial.c b/arch/cris/arch-v10/drivers/sync_serial.c index 562b9a7feae7..109dcd826d17 100644 --- a/arch/cris/arch-v10/drivers/sync_serial.c +++ b/arch/cris/arch-v10/drivers/sync_serial.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
18 | #include <linux/major.h> | 18 | #include <linux/major.h> |
19 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
20 | #include <linux/slab.h> | ||
21 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
22 | #include <linux/poll.h> | 21 | #include <linux/poll.h> |
23 | #include <linux/init.h> | 22 | #include <linux/init.h> |
diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S index 2c18d08cd913..0d6420d087fd 100644 --- a/arch/cris/arch-v10/kernel/entry.S +++ b/arch/cris/arch-v10/kernel/entry.S | |||
@@ -358,7 +358,7 @@ mmu_bus_fault: | |||
358 | 1: btstq 12, $r1 ; Refill? | 358 | 1: btstq 12, $r1 ; Refill? |
359 | bpl 2f | 359 | bpl 2f |
360 | lsrq 24, $r1 ; Get PGD index (bit 24-31) | 360 | lsrq 24, $r1 ; Get PGD index (bit 24-31) |
361 | move.d [per_cpu__current_pgd], $r0 ; PGD for the current process | 361 | move.d [current_pgd], $r0 ; PGD for the current process |
362 | move.d [$r0+$r1.d], $r0 ; Get PMD | 362 | move.d [$r0+$r1.d], $r0 ; Get PMD |
363 | beq 2f | 363 | beq 2f |
364 | nop | 364 | nop |
@@ -692,7 +692,7 @@ sys_call_table: | |||
692 | .long sys_swapon | 692 | .long sys_swapon |
693 | .long sys_reboot | 693 | .long sys_reboot |
694 | .long sys_old_readdir | 694 | .long sys_old_readdir |
695 | .long old_mmap /* 90 */ | 695 | .long sys_old_mmap /* 90 */ |
696 | .long sys_munmap | 696 | .long sys_munmap |
697 | .long sys_truncate | 697 | .long sys_truncate |
698 | .long sys_ftruncate | 698 | .long sys_ftruncate |
diff --git a/arch/cris/arch-v10/kernel/irq.c b/arch/cris/arch-v10/kernel/irq.c index 5d75f77f9c73..1a61efc13982 100644 --- a/arch/cris/arch-v10/kernel/irq.c +++ b/arch/cris/arch-v10/kernel/irq.c | |||
@@ -133,7 +133,7 @@ static void end_crisv10_irq(unsigned int irq) | |||
133 | } | 133 | } |
134 | 134 | ||
135 | static struct irq_chip crisv10_irq_type = { | 135 | static struct irq_chip crisv10_irq_type = { |
136 | .typename = "CRISv10", | 136 | .name = "CRISv10", |
137 | .startup = startup_crisv10_irq, | 137 | .startup = startup_crisv10_irq, |
138 | .shutdown = shutdown_crisv10_irq, | 138 | .shutdown = shutdown_crisv10_irq, |
139 | .enable = enable_crisv10_irq, | 139 | .enable = enable_crisv10_irq, |
diff --git a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c index c4c69cf721e5..93f0f64b1326 100644 --- a/arch/cris/arch-v10/kernel/process.c +++ b/arch/cris/arch-v10/kernel/process.c | |||
@@ -11,9 +11,9 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/slab.h> | ||
14 | #include <linux/err.h> | 15 | #include <linux/err.h> |
15 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
16 | #include <linux/slab.h> | ||
17 | #include <arch/svinto.h> | 17 | #include <arch/svinto.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | 19 | ||
diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c index ee505b2eb4db..e70c804e9377 100644 --- a/arch/cris/arch-v10/kernel/ptrace.c +++ b/arch/cris/arch-v10/kernel/ptrace.c | |||
@@ -127,57 +127,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
127 | ret = 0; | 127 | ret = 0; |
128 | break; | 128 | break; |
129 | 129 | ||
130 | case PTRACE_SYSCALL: | ||
131 | case PTRACE_CONT: | ||
132 | ret = -EIO; | ||
133 | |||
134 | if (!valid_signal(data)) | ||
135 | break; | ||
136 | |||
137 | if (request == PTRACE_SYSCALL) { | ||
138 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
139 | } | ||
140 | else { | ||
141 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
142 | } | ||
143 | |||
144 | child->exit_code = data; | ||
145 | |||
146 | /* TODO: make sure any pending breakpoint is killed */ | ||
147 | wake_up_process(child); | ||
148 | ret = 0; | ||
149 | |||
150 | break; | ||
151 | |||
152 | /* Make the child exit by sending it a sigkill. */ | ||
153 | case PTRACE_KILL: | ||
154 | ret = 0; | ||
155 | |||
156 | if (child->exit_state == EXIT_ZOMBIE) | ||
157 | break; | ||
158 | |||
159 | child->exit_code = SIGKILL; | ||
160 | |||
161 | /* TODO: make sure any pending breakpoint is killed */ | ||
162 | wake_up_process(child); | ||
163 | break; | ||
164 | |||
165 | /* Set the trap flag. */ | ||
166 | case PTRACE_SINGLESTEP: | ||
167 | ret = -EIO; | ||
168 | |||
169 | if (!valid_signal(data)) | ||
170 | break; | ||
171 | |||
172 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
173 | |||
174 | /* TODO: set some clever breakpoint mechanism... */ | ||
175 | |||
176 | child->exit_code = data; | ||
177 | wake_up_process(child); | ||
178 | ret = 0; | ||
179 | break; | ||
180 | |||
181 | /* Get all GP registers from the child. */ | 130 | /* Get all GP registers from the child. */ |
182 | case PTRACE_GETREGS: { | 131 | case PTRACE_GETREGS: { |
183 | int i; | 132 | int i; |
diff --git a/arch/cris/arch-v10/lib/old_checksum.c b/arch/cris/arch-v10/lib/old_checksum.c index 1734b467efa6..8f79163f1394 100644 --- a/arch/cris/arch-v10/lib/old_checksum.c +++ b/arch/cris/arch-v10/lib/old_checksum.c | |||
@@ -77,7 +77,7 @@ __wsum csum_partial(const void *p, int len, __wsum __sum) | |||
77 | sum += *buff++; | 77 | sum += *buff++; |
78 | 78 | ||
79 | if (endMarker > buff) | 79 | if (endMarker > buff) |
80 | sum += *(const u8 *)buff; /* add extra byte seperately */ | 80 | sum += *(const u8 *)buff; /* add extra byte separately */ |
81 | 81 | ||
82 | BITOFF; | 82 | BITOFF; |
83 | return (__force __wsum)sum; | 83 | return (__force __wsum)sum; |
diff --git a/arch/cris/arch-v10/mm/fault.c b/arch/cris/arch-v10/mm/fault.c index 087a2096f221..ed60588f8467 100644 --- a/arch/cris/arch-v10/mm/fault.c +++ b/arch/cris/arch-v10/mm/fault.c | |||
@@ -80,8 +80,7 @@ handle_mmu_bus_fault(struct pt_regs *regs) | |||
80 | * do_page_fault may have flushed the TLB so we have to restore | 80 | * do_page_fault may have flushed the TLB so we have to restore |
81 | * the MMU registers. | 81 | * the MMU registers. |
82 | */ | 82 | */ |
83 | local_save_flags(flags); | 83 | local_irq_save(flags); |
84 | local_irq_disable(); | ||
85 | pmd = (pmd_t *)(pgd + pgd_index(address)); | 84 | pmd = (pmd_t *)(pgd + pgd_index(address)); |
86 | if (pmd_none(*pmd)) | 85 | if (pmd_none(*pmd)) |
87 | goto exit; | 86 | goto exit; |
diff --git a/arch/cris/arch-v10/mm/tlb.c b/arch/cris/arch-v10/mm/tlb.c index 4a496e4ffacc..21d78c599bab 100644 --- a/arch/cris/arch-v10/mm/tlb.c +++ b/arch/cris/arch-v10/mm/tlb.c | |||
@@ -134,28 +134,6 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr) | |||
134 | local_irq_restore(flags); | 134 | local_irq_restore(flags); |
135 | } | 135 | } |
136 | 136 | ||
137 | /* dump the entire TLB for debug purposes */ | ||
138 | |||
139 | #if 0 | ||
140 | void | ||
141 | dump_tlb_all(void) | ||
142 | { | ||
143 | int i; | ||
144 | unsigned long flags; | ||
145 | |||
146 | printk("TLB dump. LO is: pfn | reserved | global | valid | kernel | we |\n"); | ||
147 | |||
148 | local_save_flags(flags); | ||
149 | local_irq_disable(); | ||
150 | for(i = 0; i < NUM_TLB_ENTRIES; i++) { | ||
151 | *R_TLB_SELECT = ( IO_FIELD(R_TLB_SELECT, index, i) ); | ||
152 | printk("Entry %d: HI 0x%08lx, LO 0x%08lx\n", | ||
153 | i, *R_TLB_HI, *R_TLB_LO); | ||
154 | } | ||
155 | local_irq_restore(flags); | ||
156 | } | ||
157 | #endif | ||
158 | |||
159 | /* | 137 | /* |
160 | * Initialize the context related info for a new mm_struct | 138 | * Initialize the context related info for a new mm_struct |
161 | * instance. | 139 | * instance. |
diff --git a/arch/cris/arch-v32/drivers/cryptocop.c b/arch/cris/arch-v32/drivers/cryptocop.c index fd529a0ec758..b70fb34939d9 100644 --- a/arch/cris/arch-v32/drivers/cryptocop.c +++ b/arch/cris/arch-v32/drivers/cryptocop.c | |||
@@ -628,9 +628,9 @@ static int create_output_descriptors(struct cryptocop_operation *operation, int | |||
628 | cdesc->dma_descr->buf = (char*)virt_to_phys(operation->tfrm_op.indata[*iniov_ix].iov_base + *iniov_offset); | 628 | cdesc->dma_descr->buf = (char*)virt_to_phys(operation->tfrm_op.indata[*iniov_ix].iov_base + *iniov_offset); |
629 | cdesc->dma_descr->after = cdesc->dma_descr->buf + dlength; | 629 | cdesc->dma_descr->after = cdesc->dma_descr->buf + dlength; |
630 | 630 | ||
631 | assert(desc_len >= dlength); | ||
631 | desc_len -= dlength; | 632 | desc_len -= dlength; |
632 | *iniov_offset += dlength; | 633 | *iniov_offset += dlength; |
633 | assert(desc_len >= 0); | ||
634 | if (*iniov_offset >= operation->tfrm_op.indata[*iniov_ix].iov_len) { | 634 | if (*iniov_offset >= operation->tfrm_op.indata[*iniov_ix].iov_len) { |
635 | *iniov_offset = 0; | 635 | *iniov_offset = 0; |
636 | ++(*iniov_ix); | 636 | ++(*iniov_ix); |
diff --git a/arch/cris/arch-v32/drivers/i2c.c b/arch/cris/arch-v32/drivers/i2c.c index 179e7b804331..506826399ae7 100644 --- a/arch/cris/arch-v32/drivers/i2c.c +++ b/arch/cris/arch-v32/drivers/i2c.c | |||
@@ -27,7 +27,6 @@ | |||
27 | 27 | ||
28 | #include <linux/module.h> | 28 | #include <linux/module.h> |
29 | #include <linux/sched.h> | 29 | #include <linux/sched.h> |
30 | #include <linux/slab.h> | ||
31 | #include <linux/errno.h> | 30 | #include <linux/errno.h> |
32 | #include <linux/kernel.h> | 31 | #include <linux/kernel.h> |
33 | #include <linux/fs.h> | 32 | #include <linux/fs.h> |
diff --git a/arch/cris/arch-v32/drivers/pci/bios.c b/arch/cris/arch-v32/drivers/pci/bios.c index 77ee319193c3..bc0cfdad1cbc 100644 --- a/arch/cris/arch-v32/drivers/pci/bios.c +++ b/arch/cris/arch-v32/drivers/pci/bios.c | |||
@@ -41,18 +41,16 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | |||
41 | return 0; | 41 | return 0; |
42 | } | 42 | } |
43 | 43 | ||
44 | void | 44 | resource_size_t |
45 | pcibios_align_resource(void *data, struct resource *res, | 45 | pcibios_align_resource(void *data, const struct resource *res, |
46 | resource_size_t size, resource_size_t align) | 46 | resource_size_t size, resource_size_t align) |
47 | { | 47 | { |
48 | if (res->flags & IORESOURCE_IO) { | 48 | resource_size_t start = res->start; |
49 | resource_size_t start = res->start; | ||
50 | 49 | ||
51 | if (start & 0x300) { | 50 | if ((res->flags & IORESOURCE_IO) && (start & 0x300)) |
52 | start = (start + 0x3ff) & ~0x3ff; | 51 | start = (start + 0x3ff) & ~0x3ff; |
53 | res->start = start; | 52 | |
54 | } | 53 | return start; |
55 | } | ||
56 | } | 54 | } |
57 | 55 | ||
58 | int pcibios_enable_resources(struct pci_dev *dev, int mask) | 56 | int pcibios_enable_resources(struct pci_dev *dev, int mask) |
diff --git a/arch/cris/arch-v32/drivers/pci/dma.c b/arch/cris/arch-v32/drivers/pci/dma.c index fbe65954ee6c..ee55578d9834 100644 --- a/arch/cris/arch-v32/drivers/pci/dma.c +++ b/arch/cris/arch-v32/drivers/pci/dma.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
14 | #include <linux/string.h> | 14 | #include <linux/string.h> |
15 | #include <linux/pci.h> | 15 | #include <linux/pci.h> |
16 | #include <linux/gfp.h> | ||
16 | #include <asm/io.h> | 17 | #include <asm/io.h> |
17 | 18 | ||
18 | void *dma_alloc_coherent(struct device *dev, size_t size, | 19 | void *dma_alloc_coherent(struct device *dev, size_t size, |
diff --git a/arch/cris/arch-v32/drivers/sync_serial.c b/arch/cris/arch-v32/drivers/sync_serial.c index d2a0fbf5341f..4889f196ecd6 100644 --- a/arch/cris/arch-v32/drivers/sync_serial.c +++ b/arch/cris/arch-v32/drivers/sync_serial.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
14 | #include <linux/major.h> | 14 | #include <linux/major.h> |
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/slab.h> | ||
17 | #include <linux/smp_lock.h> | 16 | #include <linux/smp_lock.h> |
18 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
19 | #include <linux/poll.h> | 18 | #include <linux/poll.h> |
diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S index 435b9671bd4b..1f39861eac8c 100644 --- a/arch/cris/arch-v32/kernel/entry.S +++ b/arch/cris/arch-v32/kernel/entry.S | |||
@@ -615,7 +615,7 @@ sys_call_table: | |||
615 | .long sys_swapon | 615 | .long sys_swapon |
616 | .long sys_reboot | 616 | .long sys_reboot |
617 | .long sys_old_readdir | 617 | .long sys_old_readdir |
618 | .long old_mmap /* 90 */ | 618 | .long sys_old_mmap /* 90 */ |
619 | .long sys_munmap | 619 | .long sys_munmap |
620 | .long sys_truncate | 620 | .long sys_truncate |
621 | .long sys_ftruncate | 621 | .long sys_ftruncate |
diff --git a/arch/cris/arch-v32/kernel/head.S b/arch/cris/arch-v32/kernel/head.S index 3db478eb5155..76266f80a5f1 100644 --- a/arch/cris/arch-v32/kernel/head.S +++ b/arch/cris/arch-v32/kernel/head.S | |||
@@ -10,7 +10,6 @@ | |||
10 | * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so | 10 | * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so |
11 | * -traditional must not be used when assembling this file. | 11 | * -traditional must not be used when assembling this file. |
12 | */ | 12 | */ |
13 | #include <linux/autoconf.h> | ||
14 | #include <arch/memmap.h> | 13 | #include <arch/memmap.h> |
15 | #include <hwregs/reg_rdwr.h> | 14 | #include <hwregs/reg_rdwr.h> |
16 | #include <hwregs/intr_vect.h> | 15 | #include <hwregs/intr_vect.h> |
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c index 57668db25031..b6241198fb98 100644 --- a/arch/cris/arch-v32/kernel/irq.c +++ b/arch/cris/arch-v32/kernel/irq.c | |||
@@ -336,7 +336,7 @@ int set_affinity_crisv32_irq(unsigned int irq, const struct cpumask *dest) | |||
336 | } | 336 | } |
337 | 337 | ||
338 | static struct irq_chip crisv32_irq_type = { | 338 | static struct irq_chip crisv32_irq_type = { |
339 | .typename = "CRISv32", | 339 | .name = "CRISv32", |
340 | .startup = startup_crisv32_irq, | 340 | .startup = startup_crisv32_irq, |
341 | .shutdown = shutdown_crisv32_irq, | 341 | .shutdown = shutdown_crisv32_irq, |
342 | .enable = enable_crisv32_irq, | 342 | .enable = enable_crisv32_irq, |
diff --git a/arch/cris/arch-v32/kernel/pinmux.c b/arch/cris/arch-v32/kernel/pinmux.c index 6eb54ea1c976..f6f3637a4194 100644 --- a/arch/cris/arch-v32/kernel/pinmux.c +++ b/arch/cris/arch-v32/kernel/pinmux.c | |||
@@ -54,7 +54,7 @@ crisv32_pinmux_alloc(int port, int first_pin, int last_pin, enum pin_mode mode) | |||
54 | 54 | ||
55 | crisv32_pinmux_init(); | 55 | crisv32_pinmux_init(); |
56 | 56 | ||
57 | if (port > PORTS) | 57 | if (port > PORTS || port < 0) |
58 | return -EINVAL; | 58 | return -EINVAL; |
59 | 59 | ||
60 | spin_lock_irqsave(&pinmux_lock, flags); | 60 | spin_lock_irqsave(&pinmux_lock, flags); |
@@ -197,7 +197,7 @@ crisv32_pinmux_dealloc(int port, int first_pin, int last_pin) | |||
197 | 197 | ||
198 | crisv32_pinmux_init(); | 198 | crisv32_pinmux_init(); |
199 | 199 | ||
200 | if (port > PORTS) | 200 | if (port > PORTS || port < 0) |
201 | return -EINVAL; | 201 | return -EINVAL; |
202 | 202 | ||
203 | spin_lock_irqsave(&pinmux_lock, flags); | 203 | spin_lock_irqsave(&pinmux_lock, flags); |
diff --git a/arch/cris/arch-v32/kernel/process.c b/arch/cris/arch-v32/kernel/process.c index 120e7f796fea..2661a9529d70 100644 --- a/arch/cris/arch-v32/kernel/process.c +++ b/arch/cris/arch-v32/kernel/process.c | |||
@@ -9,9 +9,9 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | #include <linux/slab.h> | ||
12 | #include <linux/err.h> | 13 | #include <linux/err.h> |
13 | #include <linux/fs.h> | 14 | #include <linux/fs.h> |
14 | #include <linux/slab.h> | ||
15 | #include <hwregs/reg_rdwr.h> | 15 | #include <hwregs/reg_rdwr.h> |
16 | #include <hwregs/reg_map.h> | 16 | #include <hwregs/reg_map.h> |
17 | #include <hwregs/timer_defs.h> | 17 | #include <hwregs/timer_defs.h> |
diff --git a/arch/cris/arch-v32/kernel/ptrace.c b/arch/cris/arch-v32/kernel/ptrace.c index dd401473f5b5..f4ebd1e7d0f5 100644 --- a/arch/cris/arch-v32/kernel/ptrace.c +++ b/arch/cris/arch-v32/kernel/ptrace.c | |||
@@ -78,6 +78,35 @@ int put_reg(struct task_struct *task, unsigned int regno, unsigned long data) | |||
78 | return 0; | 78 | return 0; |
79 | } | 79 | } |
80 | 80 | ||
81 | void user_enable_single_step(struct task_struct *child) | ||
82 | { | ||
83 | unsigned long tmp; | ||
84 | |||
85 | /* | ||
86 | * Set up SPC if not set already (in which case we have no other | ||
87 | * choice but to trust it). | ||
88 | */ | ||
89 | if (!get_reg(child, PT_SPC)) { | ||
90 | /* In case we're stopped in a delay slot. */ | ||
91 | tmp = get_reg(child, PT_ERP) & ~1; | ||
92 | put_reg(child, PT_SPC, tmp); | ||
93 | } | ||
94 | tmp = get_reg(child, PT_CCS) | SBIT_USER; | ||
95 | put_reg(child, PT_CCS, tmp); | ||
96 | } | ||
97 | |||
98 | void user_disable_single_step(struct task_struct *child) | ||
99 | { | ||
100 | put_reg(child, PT_SPC, 0); | ||
101 | |||
102 | if (!get_debugreg(child->pid, PT_BP_CTRL)) { | ||
103 | unsigned long tmp; | ||
104 | /* If no h/w bp configured, disable S bit. */ | ||
105 | tmp = get_reg(child, PT_CCS) & ~SBIT_USER; | ||
106 | put_reg(child, PT_CCS, tmp); | ||
107 | } | ||
108 | } | ||
109 | |||
81 | /* | 110 | /* |
82 | * Called by kernel/ptrace.c when detaching. | 111 | * Called by kernel/ptrace.c when detaching. |
83 | * | 112 | * |
@@ -89,8 +118,7 @@ ptrace_disable(struct task_struct *child) | |||
89 | unsigned long tmp; | 118 | unsigned long tmp; |
90 | 119 | ||
91 | /* Deconfigure SPC and S-bit. */ | 120 | /* Deconfigure SPC and S-bit. */ |
92 | tmp = get_reg(child, PT_CCS) & ~SBIT_USER; | 121 | user_disable_single_step(child); |
93 | put_reg(child, PT_CCS, tmp); | ||
94 | put_reg(child, PT_SPC, 0); | 122 | put_reg(child, PT_SPC, 0); |
95 | 123 | ||
96 | /* Deconfigure any watchpoints associated with the child. */ | 124 | /* Deconfigure any watchpoints associated with the child. */ |
@@ -169,83 +197,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
169 | ret = 0; | 197 | ret = 0; |
170 | break; | 198 | break; |
171 | 199 | ||
172 | case PTRACE_SYSCALL: | ||
173 | case PTRACE_CONT: | ||
174 | ret = -EIO; | ||
175 | |||
176 | if (!valid_signal(data)) | ||
177 | break; | ||
178 | |||
179 | /* Continue means no single-step. */ | ||
180 | put_reg(child, PT_SPC, 0); | ||
181 | |||
182 | if (!get_debugreg(child->pid, PT_BP_CTRL)) { | ||
183 | unsigned long tmp; | ||
184 | /* If no h/w bp configured, disable S bit. */ | ||
185 | tmp = get_reg(child, PT_CCS) & ~SBIT_USER; | ||
186 | put_reg(child, PT_CCS, tmp); | ||
187 | } | ||
188 | |||
189 | if (request == PTRACE_SYSCALL) { | ||
190 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
191 | } | ||
192 | else { | ||
193 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
194 | } | ||
195 | |||
196 | child->exit_code = data; | ||
197 | |||
198 | /* TODO: make sure any pending breakpoint is killed */ | ||
199 | wake_up_process(child); | ||
200 | ret = 0; | ||
201 | |||
202 | break; | ||
203 | |||
204 | /* Make the child exit by sending it a sigkill. */ | ||
205 | case PTRACE_KILL: | ||
206 | ret = 0; | ||
207 | |||
208 | if (child->exit_state == EXIT_ZOMBIE) | ||
209 | break; | ||
210 | |||
211 | child->exit_code = SIGKILL; | ||
212 | |||
213 | /* Deconfigure single-step and h/w bp. */ | ||
214 | ptrace_disable(child); | ||
215 | |||
216 | /* TODO: make sure any pending breakpoint is killed */ | ||
217 | wake_up_process(child); | ||
218 | break; | ||
219 | |||
220 | /* Set the trap flag. */ | ||
221 | case PTRACE_SINGLESTEP: { | ||
222 | unsigned long tmp; | ||
223 | ret = -EIO; | ||
224 | |||
225 | /* Set up SPC if not set already (in which case we have | ||
226 | no other choice but to trust it). */ | ||
227 | if (!get_reg(child, PT_SPC)) { | ||
228 | /* In case we're stopped in a delay slot. */ | ||
229 | tmp = get_reg(child, PT_ERP) & ~1; | ||
230 | put_reg(child, PT_SPC, tmp); | ||
231 | } | ||
232 | tmp = get_reg(child, PT_CCS) | SBIT_USER; | ||
233 | put_reg(child, PT_CCS, tmp); | ||
234 | |||
235 | if (!valid_signal(data)) | ||
236 | break; | ||
237 | |||
238 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
239 | |||
240 | /* TODO: set some clever breakpoint mechanism... */ | ||
241 | |||
242 | child->exit_code = data; | ||
243 | wake_up_process(child); | ||
244 | ret = 0; | ||
245 | break; | ||
246 | |||
247 | } | ||
248 | |||
249 | /* Get all GP registers from the child. */ | 200 | /* Get all GP registers from the child. */ |
250 | case PTRACE_GETREGS: { | 201 | case PTRACE_GETREGS: { |
251 | int i; | 202 | int i; |
diff --git a/arch/cris/arch-v32/kernel/signal.c b/arch/cris/arch-v32/kernel/signal.c index 372d0ca6efbc..0b7e3f143281 100644 --- a/arch/cris/arch-v32/kernel/signal.c +++ b/arch/cris/arch-v32/kernel/signal.c | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
6 | #include <linux/mm.h> | 6 | #include <linux/mm.h> |
7 | #include <linux/slab.h> | ||
7 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
8 | #include <linux/signal.h> | 9 | #include <linux/signal.h> |
9 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
diff --git a/arch/cris/arch-v32/mach-a3/pinmux.c b/arch/cris/arch-v32/mach-a3/pinmux.c index 0a28c9bedfb7..18648ef2d874 100644 --- a/arch/cris/arch-v32/mach-a3/pinmux.c +++ b/arch/cris/arch-v32/mach-a3/pinmux.c | |||
@@ -242,7 +242,7 @@ crisv32_pinmux_dealloc(int port, int first_pin, int last_pin) | |||
242 | 242 | ||
243 | crisv32_pinmux_init(); | 243 | crisv32_pinmux_init(); |
244 | 244 | ||
245 | if (port > PORTS) | 245 | if (port > PORTS || port < 0) |
246 | return -EINVAL; | 246 | return -EINVAL; |
247 | 247 | ||
248 | spin_lock_irqsave(&pinmux_lock, flags); | 248 | spin_lock_irqsave(&pinmux_lock, flags); |
diff --git a/arch/cris/arch-v32/mach-fs/arbiter.c b/arch/cris/arch-v32/mach-fs/arbiter.c index 84d31bd7b692..82ef293c4c81 100644 --- a/arch/cris/arch-v32/mach-fs/arbiter.c +++ b/arch/cris/arch-v32/mach-fs/arbiter.c | |||
@@ -332,7 +332,7 @@ int crisv32_arbiter_unwatch(int id) | |||
332 | if (id == 0) | 332 | if (id == 0) |
333 | intr_mask.bp0 = regk_marb_no; | 333 | intr_mask.bp0 = regk_marb_no; |
334 | else if (id == 1) | 334 | else if (id == 1) |
335 | intr_mask.bp2 = regk_marb_no; | 335 | intr_mask.bp1 = regk_marb_no; |
336 | else if (id == 2) | 336 | else if (id == 2) |
337 | intr_mask.bp2 = regk_marb_no; | 337 | intr_mask.bp2 = regk_marb_no; |
338 | else if (id == 3) | 338 | else if (id == 3) |
diff --git a/arch/cris/arch-v32/mach-fs/pinmux.c b/arch/cris/arch-v32/mach-fs/pinmux.c index d722ad9ae626..38f29eec14a6 100644 --- a/arch/cris/arch-v32/mach-fs/pinmux.c +++ b/arch/cris/arch-v32/mach-fs/pinmux.c | |||
@@ -54,7 +54,7 @@ crisv32_pinmux_alloc(int port, int first_pin, int last_pin, enum pin_mode mode) | |||
54 | 54 | ||
55 | crisv32_pinmux_init(); | 55 | crisv32_pinmux_init(); |
56 | 56 | ||
57 | if (port > PORTS) | 57 | if (port > PORTS || port < 0) |
58 | return -EINVAL; | 58 | return -EINVAL; |
59 | 59 | ||
60 | spin_lock_irqsave(&pinmux_lock, flags); | 60 | spin_lock_irqsave(&pinmux_lock, flags); |
@@ -195,7 +195,7 @@ int crisv32_pinmux_dealloc(int port, int first_pin, int last_pin) | |||
195 | 195 | ||
196 | crisv32_pinmux_init(); | 196 | crisv32_pinmux_init(); |
197 | 197 | ||
198 | if (port > PORTS) | 198 | if (port > PORTS || port < 0) |
199 | return -EINVAL; | 199 | return -EINVAL; |
200 | 200 | ||
201 | spin_lock_irqsave(&pinmux_lock, flags); | 201 | spin_lock_irqsave(&pinmux_lock, flags); |
diff --git a/arch/cris/arch-v32/mm/mmu.S b/arch/cris/arch-v32/mm/mmu.S index 2238d154bde3..f125d912e140 100644 --- a/arch/cris/arch-v32/mm/mmu.S +++ b/arch/cris/arch-v32/mm/mmu.S | |||
@@ -115,7 +115,7 @@ | |||
115 | #ifdef CONFIG_SMP | 115 | #ifdef CONFIG_SMP |
116 | move $s7, $acr ; PGD | 116 | move $s7, $acr ; PGD |
117 | #else | 117 | #else |
118 | move.d per_cpu__current_pgd, $acr ; PGD | 118 | move.d current_pgd, $acr ; PGD |
119 | #endif | 119 | #endif |
120 | ; Look up PMD in PGD | 120 | ; Look up PMD in PGD |
121 | lsrq 24, $r0 ; Get PMD index into PGD (bit 24-31) | 121 | lsrq 24, $r0 ; Get PMD index into PGD (bit 24-31) |
diff --git a/arch/cris/arch-v32/mm/tlb.c b/arch/cris/arch-v32/mm/tlb.c index 6779bcb28ab0..c030d020660a 100644 --- a/arch/cris/arch-v32/mm/tlb.c +++ b/arch/cris/arch-v32/mm/tlb.c | |||
@@ -189,7 +189,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
189 | spin_unlock(&mmu_context_lock); | 189 | spin_unlock(&mmu_context_lock); |
190 | 190 | ||
191 | /* | 191 | /* |
192 | * Remember the pgd for the fault handlers. Keep a seperate | 192 | * Remember the pgd for the fault handlers. Keep a separate |
193 | * copy of it because current and active_mm might be invalid | 193 | * copy of it because current and active_mm might be invalid |
194 | * at points where * there's still a need to derefer the pgd. | 194 | * at points where * there's still a need to derefer the pgd. |
195 | */ | 195 | */ |
diff --git a/arch/cris/include/arch-v32/arch/ptrace.h b/arch/cris/include/arch-v32/arch/ptrace.h index 41f4e8662bc2..ffca8d0f2e17 100644 --- a/arch/cris/include/arch-v32/arch/ptrace.h +++ b/arch/cris/include/arch-v32/arch/ptrace.h | |||
@@ -108,6 +108,7 @@ struct switch_stack { | |||
108 | 108 | ||
109 | #ifdef __KERNEL__ | 109 | #ifdef __KERNEL__ |
110 | 110 | ||
111 | #define arch_has_single_step() (1) | ||
111 | #define user_mode(regs) (((regs)->ccs & (1 << (U_CCS_BITNR + CCS_SHIFT))) != 0) | 112 | #define user_mode(regs) (((regs)->ccs & (1 << (U_CCS_BITNR + CCS_SHIFT))) != 0) |
112 | #define instruction_pointer(regs) ((regs)->erp) | 113 | #define instruction_pointer(regs) ((regs)->erp) |
113 | extern void show_regs(struct pt_regs *); | 114 | extern void show_regs(struct pt_regs *); |
diff --git a/arch/cris/include/arch-v32/arch/spinlock.h b/arch/cris/include/arch-v32/arch/spinlock.h index 367a53ea10c5..f171a6600fbc 100644 --- a/arch/cris/include/arch-v32/arch/spinlock.h +++ b/arch/cris/include/arch-v32/arch/spinlock.h | |||
@@ -9,12 +9,12 @@ extern void cris_spin_unlock(void *l, int val); | |||
9 | extern void cris_spin_lock(void *l); | 9 | extern void cris_spin_lock(void *l); |
10 | extern int cris_spin_trylock(void *l); | 10 | extern int cris_spin_trylock(void *l); |
11 | 11 | ||
12 | static inline int __raw_spin_is_locked(raw_spinlock_t *x) | 12 | static inline int arch_spin_is_locked(arch_spinlock_t *x) |
13 | { | 13 | { |
14 | return *(volatile signed char *)(&(x)->slock) <= 0; | 14 | return *(volatile signed char *)(&(x)->slock) <= 0; |
15 | } | 15 | } |
16 | 16 | ||
17 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | 17 | static inline void arch_spin_unlock(arch_spinlock_t *lock) |
18 | { | 18 | { |
19 | __asm__ volatile ("move.d %1,%0" \ | 19 | __asm__ volatile ("move.d %1,%0" \ |
20 | : "=m" (lock->slock) \ | 20 | : "=m" (lock->slock) \ |
@@ -22,26 +22,26 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
22 | : "memory"); | 22 | : "memory"); |
23 | } | 23 | } |
24 | 24 | ||
25 | static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock) | 25 | static inline void arch_spin_unlock_wait(arch_spinlock_t *lock) |
26 | { | 26 | { |
27 | while (__raw_spin_is_locked(lock)) | 27 | while (arch_spin_is_locked(lock)) |
28 | cpu_relax(); | 28 | cpu_relax(); |
29 | } | 29 | } |
30 | 30 | ||
31 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) | 31 | static inline int arch_spin_trylock(arch_spinlock_t *lock) |
32 | { | 32 | { |
33 | return cris_spin_trylock((void *)&lock->slock); | 33 | return cris_spin_trylock((void *)&lock->slock); |
34 | } | 34 | } |
35 | 35 | ||
36 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 36 | static inline void arch_spin_lock(arch_spinlock_t *lock) |
37 | { | 37 | { |
38 | cris_spin_lock((void *)&lock->slock); | 38 | cris_spin_lock((void *)&lock->slock); |
39 | } | 39 | } |
40 | 40 | ||
41 | static inline void | 41 | static inline void |
42 | __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | 42 | arch_spin_lock_flags(arch_spinlock_t *lock, unsigned long flags) |
43 | { | 43 | { |
44 | __raw_spin_lock(lock); | 44 | arch_spin_lock(lock); |
45 | } | 45 | } |
46 | 46 | ||
47 | /* | 47 | /* |
@@ -56,76 +56,76 @@ __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | |||
56 | * | 56 | * |
57 | */ | 57 | */ |
58 | 58 | ||
59 | static inline int __raw_read_can_lock(raw_rwlock_t *x) | 59 | static inline int arch_read_can_lock(arch_rwlock_t *x) |
60 | { | 60 | { |
61 | return (int)(x)->lock > 0; | 61 | return (int)(x)->lock > 0; |
62 | } | 62 | } |
63 | 63 | ||
64 | static inline int __raw_write_can_lock(raw_rwlock_t *x) | 64 | static inline int arch_write_can_lock(arch_rwlock_t *x) |
65 | { | 65 | { |
66 | return (x)->lock == RW_LOCK_BIAS; | 66 | return (x)->lock == RW_LOCK_BIAS; |
67 | } | 67 | } |
68 | 68 | ||
69 | static inline void __raw_read_lock(raw_rwlock_t *rw) | 69 | static inline void arch_read_lock(arch_rwlock_t *rw) |
70 | { | 70 | { |
71 | __raw_spin_lock(&rw->slock); | 71 | arch_spin_lock(&rw->slock); |
72 | while (rw->lock == 0); | 72 | while (rw->lock == 0); |
73 | rw->lock--; | 73 | rw->lock--; |
74 | __raw_spin_unlock(&rw->slock); | 74 | arch_spin_unlock(&rw->slock); |
75 | } | 75 | } |
76 | 76 | ||
77 | static inline void __raw_write_lock(raw_rwlock_t *rw) | 77 | static inline void arch_write_lock(arch_rwlock_t *rw) |
78 | { | 78 | { |
79 | __raw_spin_lock(&rw->slock); | 79 | arch_spin_lock(&rw->slock); |
80 | while (rw->lock != RW_LOCK_BIAS); | 80 | while (rw->lock != RW_LOCK_BIAS); |
81 | rw->lock = 0; | 81 | rw->lock = 0; |
82 | __raw_spin_unlock(&rw->slock); | 82 | arch_spin_unlock(&rw->slock); |
83 | } | 83 | } |
84 | 84 | ||
85 | static inline void __raw_read_unlock(raw_rwlock_t *rw) | 85 | static inline void arch_read_unlock(arch_rwlock_t *rw) |
86 | { | 86 | { |
87 | __raw_spin_lock(&rw->slock); | 87 | arch_spin_lock(&rw->slock); |
88 | rw->lock++; | 88 | rw->lock++; |
89 | __raw_spin_unlock(&rw->slock); | 89 | arch_spin_unlock(&rw->slock); |
90 | } | 90 | } |
91 | 91 | ||
92 | static inline void __raw_write_unlock(raw_rwlock_t *rw) | 92 | static inline void arch_write_unlock(arch_rwlock_t *rw) |
93 | { | 93 | { |
94 | __raw_spin_lock(&rw->slock); | 94 | arch_spin_lock(&rw->slock); |
95 | while (rw->lock != RW_LOCK_BIAS); | 95 | while (rw->lock != RW_LOCK_BIAS); |
96 | rw->lock = RW_LOCK_BIAS; | 96 | rw->lock = RW_LOCK_BIAS; |
97 | __raw_spin_unlock(&rw->slock); | 97 | arch_spin_unlock(&rw->slock); |
98 | } | 98 | } |
99 | 99 | ||
100 | static inline int __raw_read_trylock(raw_rwlock_t *rw) | 100 | static inline int arch_read_trylock(arch_rwlock_t *rw) |
101 | { | 101 | { |
102 | int ret = 0; | 102 | int ret = 0; |
103 | __raw_spin_lock(&rw->slock); | 103 | arch_spin_lock(&rw->slock); |
104 | if (rw->lock != 0) { | 104 | if (rw->lock != 0) { |
105 | rw->lock--; | 105 | rw->lock--; |
106 | ret = 1; | 106 | ret = 1; |
107 | } | 107 | } |
108 | __raw_spin_unlock(&rw->slock); | 108 | arch_spin_unlock(&rw->slock); |
109 | return ret; | 109 | return ret; |
110 | } | 110 | } |
111 | 111 | ||
112 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | 112 | static inline int arch_write_trylock(arch_rwlock_t *rw) |
113 | { | 113 | { |
114 | int ret = 0; | 114 | int ret = 0; |
115 | __raw_spin_lock(&rw->slock); | 115 | arch_spin_lock(&rw->slock); |
116 | if (rw->lock == RW_LOCK_BIAS) { | 116 | if (rw->lock == RW_LOCK_BIAS) { |
117 | rw->lock = 0; | 117 | rw->lock = 0; |
118 | ret = 1; | 118 | ret = 1; |
119 | } | 119 | } |
120 | __raw_spin_unlock(&rw->slock); | 120 | arch_spin_unlock(&rw->slock); |
121 | return 1; | 121 | return 1; |
122 | } | 122 | } |
123 | 123 | ||
124 | #define _raw_read_lock_flags(lock, flags) _raw_read_lock(lock) | 124 | #define _raw_read_lock_flags(lock, flags) _raw_read_lock(lock) |
125 | #define _raw_write_lock_flags(lock, flags) _raw_write_lock(lock) | 125 | #define _raw_write_lock_flags(lock, flags) _raw_write_lock(lock) |
126 | 126 | ||
127 | #define _raw_spin_relax(lock) cpu_relax() | 127 | #define arch_spin_relax(lock) cpu_relax() |
128 | #define _raw_read_relax(lock) cpu_relax() | 128 | #define arch_read_relax(lock) cpu_relax() |
129 | #define _raw_write_relax(lock) cpu_relax() | 129 | #define arch_write_relax(lock) cpu_relax() |
130 | 130 | ||
131 | #endif /* __ASM_ARCH_SPINLOCK_H */ | 131 | #endif /* __ASM_ARCH_SPINLOCK_H */ |
diff --git a/arch/cris/include/asm/asm-offsets.h b/arch/cris/include/asm/asm-offsets.h new file mode 100644 index 000000000000..d370ee36a182 --- /dev/null +++ b/arch/cris/include/asm/asm-offsets.h | |||
@@ -0,0 +1 @@ | |||
#include <generated/asm-offsets.h> | |||
diff --git a/arch/cris/include/asm/cacheflush.h b/arch/cris/include/asm/cacheflush.h index cf60e3f69f8d..36795bca605e 100644 --- a/arch/cris/include/asm/cacheflush.h +++ b/arch/cris/include/asm/cacheflush.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define flush_cache_dup_mm(mm) do { } while (0) | 12 | #define flush_cache_dup_mm(mm) do { } while (0) |
13 | #define flush_cache_range(vma, start, end) do { } while (0) | 13 | #define flush_cache_range(vma, start, end) do { } while (0) |
14 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 14 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
15 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
15 | #define flush_dcache_page(page) do { } while (0) | 16 | #define flush_dcache_page(page) do { } while (0) |
16 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 17 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
17 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 18 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
diff --git a/arch/cris/include/asm/elf.h b/arch/cris/include/asm/elf.h index 0f51b10b9f4f..8a3d8e2b33c1 100644 --- a/arch/cris/include/asm/elf.h +++ b/arch/cris/include/asm/elf.h | |||
@@ -64,8 +64,6 @@ typedef unsigned long elf_fpregset_t; | |||
64 | #define EF_CRIS_VARIANT_COMMON_V10_V32 0x00000004 | 64 | #define EF_CRIS_VARIANT_COMMON_V10_V32 0x00000004 |
65 | /* End of excerpt from {binutils}/include/elf/cris.h. */ | 65 | /* End of excerpt from {binutils}/include/elf/cris.h. */ |
66 | 66 | ||
67 | #define USE_ELF_CORE_DUMP | ||
68 | |||
69 | #define ELF_EXEC_PAGESIZE 8192 | 67 | #define ELF_EXEC_PAGESIZE 8192 |
70 | 68 | ||
71 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | 69 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical |
diff --git a/arch/cris/include/asm/pci.h b/arch/cris/include/asm/pci.h index 730ce40fdd0f..9f1cd56da28c 100644 --- a/arch/cris/include/asm/pci.h +++ b/arch/cris/include/asm/pci.h | |||
@@ -44,14 +44,6 @@ struct pci_dev; | |||
44 | */ | 44 | */ |
45 | #define PCI_DMA_BUS_IS_PHYS (1) | 45 | #define PCI_DMA_BUS_IS_PHYS (1) |
46 | 46 | ||
47 | /* pci_unmap_{page,single} is a nop so... */ | ||
48 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
49 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
50 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
51 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
52 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
53 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
54 | |||
55 | #define HAVE_PCI_MMAP | 47 | #define HAVE_PCI_MMAP |
56 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | 48 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, |
57 | enum pci_mmap_state mmap_state, int write_combine); | 49 | enum pci_mmap_state mmap_state, int write_combine); |
diff --git a/arch/cris/include/asm/pgtable.h b/arch/cris/include/asm/pgtable.h index 1fcce00f01f4..99ea6cd1b143 100644 --- a/arch/cris/include/asm/pgtable.h +++ b/arch/cris/include/asm/pgtable.h | |||
@@ -270,7 +270,7 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; /* defined in head.S */ | |||
270 | * Actually I am not sure on what this could be used for. | 270 | * Actually I am not sure on what this could be used for. |
271 | */ | 271 | */ |
272 | static inline void update_mmu_cache(struct vm_area_struct * vma, | 272 | static inline void update_mmu_cache(struct vm_area_struct * vma, |
273 | unsigned long address, pte_t pte) | 273 | unsigned long address, pte_t *ptep) |
274 | { | 274 | { |
275 | } | 275 | } |
276 | 276 | ||
diff --git a/arch/cris/include/asm/socket.h b/arch/cris/include/asm/socket.h index 45ec49bdb7b1..1a4a61909ca8 100644 --- a/arch/cris/include/asm/socket.h +++ b/arch/cris/include/asm/socket.h | |||
@@ -62,6 +62,8 @@ | |||
62 | #define SO_PROTOCOL 38 | 62 | #define SO_PROTOCOL 38 |
63 | #define SO_DOMAIN 39 | 63 | #define SO_DOMAIN 39 |
64 | 64 | ||
65 | #define SO_RXQ_OVFL 40 | ||
66 | |||
65 | #endif /* _ASM_SOCKET_H */ | 67 | #endif /* _ASM_SOCKET_H */ |
66 | 68 | ||
67 | 69 | ||
diff --git a/arch/cris/include/asm/unistd.h b/arch/cris/include/asm/unistd.h index c17079388bb9..f6fad83b3a8c 100644 --- a/arch/cris/include/asm/unistd.h +++ b/arch/cris/include/asm/unistd.h | |||
@@ -352,6 +352,7 @@ | |||
352 | #define __ARCH_WANT_STAT64 | 352 | #define __ARCH_WANT_STAT64 |
353 | #define __ARCH_WANT_SYS_ALARM | 353 | #define __ARCH_WANT_SYS_ALARM |
354 | #define __ARCH_WANT_SYS_GETHOSTNAME | 354 | #define __ARCH_WANT_SYS_GETHOSTNAME |
355 | #define __ARCH_WANT_SYS_IPC | ||
355 | #define __ARCH_WANT_SYS_PAUSE | 356 | #define __ARCH_WANT_SYS_PAUSE |
356 | #define __ARCH_WANT_SYS_SGETMASK | 357 | #define __ARCH_WANT_SYS_SGETMASK |
357 | #define __ARCH_WANT_SYS_SIGNAL | 358 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -364,6 +365,7 @@ | |||
364 | #define __ARCH_WANT_SYS_LLSEEK | 365 | #define __ARCH_WANT_SYS_LLSEEK |
365 | #define __ARCH_WANT_SYS_NICE | 366 | #define __ARCH_WANT_SYS_NICE |
366 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 367 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
368 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
367 | #define __ARCH_WANT_SYS_OLDUMOUNT | 369 | #define __ARCH_WANT_SYS_OLDUMOUNT |
368 | #define __ARCH_WANT_SYS_SIGPENDING | 370 | #define __ARCH_WANT_SYS_SIGPENDING |
369 | #define __ARCH_WANT_SYS_SIGPROCMASK | 371 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/cris/kernel/asm-offsets.c b/arch/cris/kernel/asm-offsets.c index ddd6fbbe75de..dd7b8e983221 100644 --- a/arch/cris/kernel/asm-offsets.c +++ b/arch/cris/kernel/asm-offsets.c | |||
@@ -1,6 +1,5 @@ | |||
1 | #include <linux/sched.h> | 1 | #include <linux/sched.h> |
2 | #include <asm/thread_info.h> | 2 | #include <asm/thread_info.h> |
3 | #include <linux/autoconf.h> | ||
4 | 3 | ||
5 | /* | 4 | /* |
6 | * Generate definitions needed by assembly language modules. | 5 | * Generate definitions needed by assembly language modules. |
diff --git a/arch/cris/kernel/irq.c b/arch/cris/kernel/irq.c index 0ca7d9892cc6..469f7f9d62e0 100644 --- a/arch/cris/kernel/irq.c +++ b/arch/cris/kernel/irq.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/ioport.h> | 29 | #include <linux/ioport.h> |
30 | #include <linux/interrupt.h> | 30 | #include <linux/interrupt.h> |
31 | #include <linux/timex.h> | 31 | #include <linux/timex.h> |
32 | #include <linux/slab.h> | ||
33 | #include <linux/random.h> | 32 | #include <linux/random.h> |
34 | #include <linux/init.h> | 33 | #include <linux/init.h> |
35 | #include <linux/seq_file.h> | 34 | #include <linux/seq_file.h> |
@@ -52,7 +51,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
52 | } | 51 | } |
53 | 52 | ||
54 | if (i < NR_IRQS) { | 53 | if (i < NR_IRQS) { |
55 | spin_lock_irqsave(&irq_desc[i].lock, flags); | 54 | raw_spin_lock_irqsave(&irq_desc[i].lock, flags); |
56 | action = irq_desc[i].action; | 55 | action = irq_desc[i].action; |
57 | if (!action) | 56 | if (!action) |
58 | goto skip; | 57 | goto skip; |
@@ -63,7 +62,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
63 | for_each_online_cpu(j) | 62 | for_each_online_cpu(j) |
64 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); | 63 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); |
65 | #endif | 64 | #endif |
66 | seq_printf(p, " %14s", irq_desc[i].chip->typename); | 65 | seq_printf(p, " %14s", irq_desc[i].chip->name); |
67 | seq_printf(p, " %s", action->name); | 66 | seq_printf(p, " %s", action->name); |
68 | 67 | ||
69 | for (action=action->next; action; action = action->next) | 68 | for (action=action->next; action; action = action->next) |
@@ -71,7 +70,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
71 | 70 | ||
72 | seq_putc(p, '\n'); | 71 | seq_putc(p, '\n'); |
73 | skip: | 72 | skip: |
74 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 73 | raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); |
75 | } | 74 | } |
76 | return 0; | 75 | return 0; |
77 | } | 76 | } |
diff --git a/arch/cris/kernel/module.c b/arch/cris/kernel/module.c index abc13e368b90..bcd502f74cda 100644 --- a/arch/cris/kernel/module.c +++ b/arch/cris/kernel/module.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/string.h> | 22 | #include <linux/string.h> |
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/slab.h> | ||
24 | 25 | ||
25 | #if 0 | 26 | #if 0 |
26 | #define DEBUGP printk | 27 | #define DEBUGP printk |
diff --git a/arch/cris/kernel/profile.c b/arch/cris/kernel/profile.c index 9aa571169bcc..b917549a7d94 100644 --- a/arch/cris/kernel/profile.c +++ b/arch/cris/kernel/profile.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <linux/errno.h> | 2 | #include <linux/errno.h> |
3 | #include <linux/kernel.h> | 3 | #include <linux/kernel.h> |
4 | #include <linux/proc_fs.h> | 4 | #include <linux/proc_fs.h> |
5 | #include <linux/slab.h> | ||
5 | #include <linux/types.h> | 6 | #include <linux/types.h> |
6 | #include <asm/ptrace.h> | 7 | #include <asm/ptrace.h> |
7 | #include <asm/uaccess.h> | 8 | #include <asm/uaccess.h> |
diff --git a/arch/cris/kernel/sys_cris.c b/arch/cris/kernel/sys_cris.c index 2ad962c7e88e..7aa036ec78ff 100644 --- a/arch/cris/kernel/sys_cris.c +++ b/arch/cris/kernel/sys_cris.c | |||
@@ -26,130 +26,10 @@ | |||
26 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
27 | #include <asm/segment.h> | 27 | #include <asm/segment.h> |
28 | 28 | ||
29 | /* common code for old and new mmaps */ | ||
30 | static inline long | ||
31 | do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | ||
32 | unsigned long flags, unsigned long fd, unsigned long pgoff) | ||
33 | { | ||
34 | int error = -EBADF; | ||
35 | struct file * file = NULL; | ||
36 | |||
37 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
38 | if (!(flags & MAP_ANONYMOUS)) { | ||
39 | file = fget(fd); | ||
40 | if (!file) | ||
41 | goto out; | ||
42 | } | ||
43 | |||
44 | down_write(¤t->mm->mmap_sem); | ||
45 | error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
46 | up_write(¤t->mm->mmap_sem); | ||
47 | |||
48 | if (file) | ||
49 | fput(file); | ||
50 | out: | ||
51 | return error; | ||
52 | } | ||
53 | |||
54 | asmlinkage unsigned long old_mmap(unsigned long __user *args) | ||
55 | { | ||
56 | unsigned long buffer[6]; | ||
57 | int err = -EFAULT; | ||
58 | |||
59 | if (copy_from_user(&buffer, args, sizeof(buffer))) | ||
60 | goto out; | ||
61 | |||
62 | err = -EINVAL; | ||
63 | if (buffer[5] & ~PAGE_MASK) /* verify that offset is on page boundary */ | ||
64 | goto out; | ||
65 | |||
66 | err = do_mmap2(buffer[0], buffer[1], buffer[2], buffer[3], | ||
67 | buffer[4], buffer[5] >> PAGE_SHIFT); | ||
68 | out: | ||
69 | return err; | ||
70 | } | ||
71 | |||
72 | asmlinkage long | 29 | asmlinkage long |
73 | sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | 30 | sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, |
74 | unsigned long flags, unsigned long fd, unsigned long pgoff) | 31 | unsigned long flags, unsigned long fd, unsigned long pgoff) |
75 | { | 32 | { |
76 | return do_mmap2(addr, len, prot, flags, fd, pgoff); | 33 | /* bug(?): 8Kb pages here */ |
77 | } | 34 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
78 | |||
79 | /* | ||
80 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
81 | * | ||
82 | * This is really horribly ugly. (same as arch/i386) | ||
83 | */ | ||
84 | |||
85 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
86 | int third, void __user *ptr, long fifth) | ||
87 | { | ||
88 | int version, ret; | ||
89 | |||
90 | version = call >> 16; /* hack for backward compatibility */ | ||
91 | call &= 0xffff; | ||
92 | |||
93 | switch (call) { | ||
94 | case SEMOP: | ||
95 | return sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
96 | case SEMTIMEDOP: | ||
97 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
98 | (const struct timespec __user *)fifth); | ||
99 | |||
100 | case SEMGET: | ||
101 | return sys_semget (first, second, third); | ||
102 | case SEMCTL: { | ||
103 | union semun fourth; | ||
104 | if (!ptr) | ||
105 | return -EINVAL; | ||
106 | if (get_user(fourth.__pad, (void * __user *) ptr)) | ||
107 | return -EFAULT; | ||
108 | return sys_semctl (first, second, third, fourth); | ||
109 | } | ||
110 | |||
111 | case MSGSND: | ||
112 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
113 | second, third); | ||
114 | case MSGRCV: | ||
115 | switch (version) { | ||
116 | case 0: { | ||
117 | struct ipc_kludge tmp; | ||
118 | if (!ptr) | ||
119 | return -EINVAL; | ||
120 | |||
121 | if (copy_from_user(&tmp, | ||
122 | (struct ipc_kludge __user *) ptr, | ||
123 | sizeof (tmp))) | ||
124 | return -EFAULT; | ||
125 | return sys_msgrcv (first, tmp.msgp, second, | ||
126 | tmp.msgtyp, third); | ||
127 | } | ||
128 | default: | ||
129 | return sys_msgrcv (first, | ||
130 | (struct msgbuf __user *) ptr, | ||
131 | second, fifth, third); | ||
132 | } | ||
133 | case MSGGET: | ||
134 | return sys_msgget ((key_t) first, second); | ||
135 | case MSGCTL: | ||
136 | return sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
137 | |||
138 | case SHMAT: { | ||
139 | ulong raddr; | ||
140 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
141 | if (ret) | ||
142 | return ret; | ||
143 | return put_user (raddr, (ulong __user *) third); | ||
144 | } | ||
145 | case SHMDT: | ||
146 | return sys_shmdt ((char __user *)ptr); | ||
147 | case SHMGET: | ||
148 | return sys_shmget (first, second, third); | ||
149 | case SHMCTL: | ||
150 | return sys_shmctl (first, second, | ||
151 | (struct shmid_ds __user *) ptr); | ||
152 | default: | ||
153 | return -ENOSYS; | ||
154 | } | ||
155 | } | 35 | } |
diff --git a/arch/cris/kernel/time.c b/arch/cris/kernel/time.c index 074fe7dea96b..a05dd31f3efb 100644 --- a/arch/cris/kernel/time.c +++ b/arch/cris/kernel/time.c | |||
@@ -42,75 +42,11 @@ unsigned long loops_per_usec; | |||
42 | extern unsigned long do_slow_gettimeoffset(void); | 42 | extern unsigned long do_slow_gettimeoffset(void); |
43 | static unsigned long (*do_gettimeoffset)(void) = do_slow_gettimeoffset; | 43 | static unsigned long (*do_gettimeoffset)(void) = do_slow_gettimeoffset; |
44 | 44 | ||
45 | /* | 45 | u32 arch_gettimeoffset(void) |
46 | * This version of gettimeofday has near microsecond resolution. | ||
47 | * | ||
48 | * Note: Division is quite slow on CRIS and do_gettimeofday is called | ||
49 | * rather often. Maybe we should do some kind of approximation here | ||
50 | * (a naive approximation would be to divide by 1024). | ||
51 | */ | ||
52 | void do_gettimeofday(struct timeval *tv) | ||
53 | { | ||
54 | unsigned long flags; | ||
55 | signed long usec, sec; | ||
56 | local_irq_save(flags); | ||
57 | usec = do_gettimeoffset(); | ||
58 | |||
59 | /* | ||
60 | * If time_adjust is negative then NTP is slowing the clock | ||
61 | * so make sure not to go into next possible interval. | ||
62 | * Better to lose some accuracy than have time go backwards.. | ||
63 | */ | ||
64 | if (unlikely(time_adjust < 0) && usec > tickadj) | ||
65 | usec = tickadj; | ||
66 | |||
67 | sec = xtime.tv_sec; | ||
68 | usec += xtime.tv_nsec / 1000; | ||
69 | local_irq_restore(flags); | ||
70 | |||
71 | while (usec >= 1000000) { | ||
72 | usec -= 1000000; | ||
73 | sec++; | ||
74 | } | ||
75 | |||
76 | tv->tv_sec = sec; | ||
77 | tv->tv_usec = usec; | ||
78 | } | ||
79 | |||
80 | EXPORT_SYMBOL(do_gettimeofday); | ||
81 | |||
82 | int do_settimeofday(struct timespec *tv) | ||
83 | { | 46 | { |
84 | time_t wtm_sec, sec = tv->tv_sec; | 47 | return do_gettimeoffset() * 1000; |
85 | long wtm_nsec, nsec = tv->tv_nsec; | ||
86 | |||
87 | if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) | ||
88 | return -EINVAL; | ||
89 | |||
90 | write_seqlock_irq(&xtime_lock); | ||
91 | /* | ||
92 | * This is revolting. We need to set "xtime" correctly. However, the | ||
93 | * value in this location is the value at the most recent update of | ||
94 | * wall time. Discover what correction gettimeofday() would have | ||
95 | * made, and then undo it! | ||
96 | */ | ||
97 | nsec -= do_gettimeoffset() * NSEC_PER_USEC; | ||
98 | |||
99 | wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); | ||
100 | wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); | ||
101 | |||
102 | set_normalized_timespec(&xtime, sec, nsec); | ||
103 | set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); | ||
104 | |||
105 | ntp_clear(); | ||
106 | write_sequnlock_irq(&xtime_lock); | ||
107 | clock_was_set(); | ||
108 | return 0; | ||
109 | } | 48 | } |
110 | 49 | ||
111 | EXPORT_SYMBOL(do_settimeofday); | ||
112 | |||
113 | |||
114 | /* | 50 | /* |
115 | * BUG: This routine does not handle hour overflow properly; it just | 51 | * BUG: This routine does not handle hour overflow properly; it just |
116 | * sets the minutes. Usually you'll only notice that after reboot! | 52 | * sets the minutes. Usually you'll only notice that after reboot! |
diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S index bbfda67d2907..d49d17d2a14f 100644 --- a/arch/cris/kernel/vmlinux.lds.S +++ b/arch/cris/kernel/vmlinux.lds.S | |||
@@ -8,7 +8,6 @@ | |||
8 | * the kernel has booted. | 8 | * the kernel has booted. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/autoconf.h> | ||
12 | #include <asm-generic/vmlinux.lds.h> | 11 | #include <asm-generic/vmlinux.lds.h> |
13 | #include <asm/page.h> | 12 | #include <asm/page.h> |
14 | 13 | ||
diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c index 4a7cdd9ea1ee..380df1a73a6e 100644 --- a/arch/cris/mm/fault.c +++ b/arch/cris/mm/fault.c | |||
@@ -209,7 +209,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs, | |||
209 | /* Are we prepared to handle this kernel fault? | 209 | /* Are we prepared to handle this kernel fault? |
210 | * | 210 | * |
211 | * (The kernel has valid exception-points in the source | 211 | * (The kernel has valid exception-points in the source |
212 | * when it acesses user-memory. When it fails in one | 212 | * when it accesses user-memory. When it fails in one |
213 | * of those points, we find it in a table and do a jump | 213 | * of those points, we find it in a table and do a jump |
214 | * to some fixup code that loads an appropriate error | 214 | * to some fixup code that loads an appropriate error |
215 | * code) | 215 | * code) |
diff --git a/arch/cris/mm/init.c b/arch/cris/mm/init.c index ff68b9f516a1..df33ab89d70f 100644 --- a/arch/cris/mm/init.c +++ b/arch/cris/mm/init.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/gfp.h> | ||
11 | #include <linux/init.h> | 12 | #include <linux/init.h> |
12 | #include <linux/bootmem.h> | 13 | #include <linux/bootmem.h> |
13 | #include <asm/tlb.h> | 14 | #include <asm/tlb.h> |