diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-09 16:08:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-09 16:08:20 -0400 |
commit | d84c4124c4b6611301b402e8611b7e36de3bd351 (patch) | |
tree | d83cfaabfb901755d85074815ad948028dc7b03f /include | |
parent | 932c37c375cca25175f9b6acee4c75d7a96d985f (diff) | |
parent | a3cf4ea8729a5d448742fd5a0a003827c9f25cb6 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6:
sh: Fix stacktrace simplification fallout.
sh: SH7760 DMABRG support.
sh: clockevent/clocksource/hrtimers/nohz TMU support.
sh: Truncate MAX_ACTIVE_REGIONS for the common case.
rtc: rtc-sh: Fix rtc_dev pointer for rtc_update_irq().
sh: Convert to common die chain.
sh: Wire up utimensat syscall.
sh: landisk mv_nr_irqs definition.
sh: Fixup ndelay() xloops calculation for alternate HZ.
sh: Add 32-bit opcode feature CPU flag.
sh: Fix PC adjustments for varying opcode length.
sh: Support for SH-2A 32-bit opcodes.
sh: Kill off redundant __div64_32 symbol export.
sh: Share exception vector table for SH-3/4.
sh: Always define TRAPA_BUG_OPCODE.
sh: __GFP_REPEAT for pte allocations, too.
rtc: rtc-sh: Fix up dev_dbg() warnings.
sh: generic quicklist support.
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-sh/bug.h | 4 | ||||
-rw-r--r-- | include/asm-sh/cpu-features.h | 1 | ||||
-rw-r--r-- | include/asm-sh/dmabrg.h | 23 | ||||
-rw-r--r-- | include/asm-sh/kdebug.h | 25 | ||||
-rw-r--r-- | include/asm-sh/pgalloc.h | 44 | ||||
-rw-r--r-- | include/asm-sh/system.h | 9 | ||||
-rw-r--r-- | include/asm-sh/timer.h | 25 | ||||
-rw-r--r-- | include/asm-sh/unistd.h | 5 |
8 files changed, 72 insertions, 64 deletions
diff --git a/include/asm-sh/bug.h b/include/asm-sh/bug.h index 794c36daf06d..46f925c815ac 100644 --- a/include/asm-sh/bug.h +++ b/include/asm-sh/bug.h | |||
@@ -1,12 +1,12 @@ | |||
1 | #ifndef __ASM_SH_BUG_H | 1 | #ifndef __ASM_SH_BUG_H |
2 | #define __ASM_SH_BUG_H | 2 | #define __ASM_SH_BUG_H |
3 | 3 | ||
4 | #define TRAPA_BUG_OPCODE 0xc33e /* trapa #0x3e */ | ||
5 | |||
4 | #ifdef CONFIG_BUG | 6 | #ifdef CONFIG_BUG |
5 | #define HAVE_ARCH_BUG | 7 | #define HAVE_ARCH_BUG |
6 | #define HAVE_ARCH_WARN_ON | 8 | #define HAVE_ARCH_WARN_ON |
7 | 9 | ||
8 | #define TRAPA_BUG_OPCODE 0xc33e /* trapa #0x3e */ | ||
9 | |||
10 | /** | 10 | /** |
11 | * _EMIT_BUG_ENTRY | 11 | * _EMIT_BUG_ENTRY |
12 | * %1 - __FILE__ | 12 | * %1 - __FILE__ |
diff --git a/include/asm-sh/cpu-features.h b/include/asm-sh/cpu-features.h index 4bccd7c032f9..86308aa39731 100644 --- a/include/asm-sh/cpu-features.h +++ b/include/asm-sh/cpu-features.h | |||
@@ -20,5 +20,6 @@ | |||
20 | #define CPU_HAS_PTEA 0x0020 /* PTEA register */ | 20 | #define CPU_HAS_PTEA 0x0020 /* PTEA register */ |
21 | #define CPU_HAS_LLSC 0x0040 /* movli.l/movco.l */ | 21 | #define CPU_HAS_LLSC 0x0040 /* movli.l/movco.l */ |
22 | #define CPU_HAS_L2_CACHE 0x0080 /* Secondary cache / URAM */ | 22 | #define CPU_HAS_L2_CACHE 0x0080 /* Secondary cache / URAM */ |
23 | #define CPU_HAS_OP32 0x0100 /* 32-bit instruction support */ | ||
23 | 24 | ||
24 | #endif /* __ASM_SH_CPU_FEATURES_H */ | 25 | #endif /* __ASM_SH_CPU_FEATURES_H */ |
diff --git a/include/asm-sh/dmabrg.h b/include/asm-sh/dmabrg.h new file mode 100644 index 000000000000..c5edba216cf1 --- /dev/null +++ b/include/asm-sh/dmabrg.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * SH7760 DMABRG (USB/Audio) support | ||
3 | */ | ||
4 | |||
5 | #ifndef _DMABRG_H_ | ||
6 | #define _DMABRG_H_ | ||
7 | |||
8 | /* IRQ sources */ | ||
9 | #define DMABRGIRQ_USBDMA 0 | ||
10 | #define DMABRGIRQ_USBDMAERR 1 | ||
11 | #define DMABRGIRQ_A0TXF 2 | ||
12 | #define DMABRGIRQ_A0TXH 3 | ||
13 | #define DMABRGIRQ_A0RXF 4 | ||
14 | #define DMABRGIRQ_A0RXH 5 | ||
15 | #define DMABRGIRQ_A1TXF 6 | ||
16 | #define DMABRGIRQ_A1TXH 7 | ||
17 | #define DMABRGIRQ_A1RXF 8 | ||
18 | #define DMABRGIRQ_A1RXH 9 | ||
19 | |||
20 | extern int dmabrg_request_irq(unsigned int, void(*)(void *), void *); | ||
21 | extern void dmabrg_free_irq(unsigned int); | ||
22 | |||
23 | #endif | ||
diff --git a/include/asm-sh/kdebug.h b/include/asm-sh/kdebug.h index 493c20629747..16578b7c9da1 100644 --- a/include/asm-sh/kdebug.h +++ b/include/asm-sh/kdebug.h | |||
@@ -2,20 +2,6 @@ | |||
2 | #define __ASM_SH_KDEBUG_H | 2 | #define __ASM_SH_KDEBUG_H |
3 | 3 | ||
4 | #include <linux/notifier.h> | 4 | #include <linux/notifier.h> |
5 | #include <asm-generic/kdebug.h> | ||
6 | |||
7 | struct pt_regs; | ||
8 | |||
9 | struct die_args { | ||
10 | struct pt_regs *regs; | ||
11 | int trapnr; | ||
12 | }; | ||
13 | |||
14 | int register_die_notifier(struct notifier_block *nb); | ||
15 | int unregister_die_notifier(struct notifier_block *nb); | ||
16 | int register_page_fault_notifier(struct notifier_block *nb); | ||
17 | int unregister_page_fault_notifier(struct notifier_block *nb); | ||
18 | extern struct atomic_notifier_head shdie_chain; | ||
19 | 5 | ||
20 | /* Grossly misnamed. */ | 6 | /* Grossly misnamed. */ |
21 | enum die_val { | 7 | enum die_val { |
@@ -23,14 +9,7 @@ enum die_val { | |||
23 | DIE_PAGE_FAULT, | 9 | DIE_PAGE_FAULT, |
24 | }; | 10 | }; |
25 | 11 | ||
26 | static inline int notify_die(enum die_val val, struct pt_regs *regs, | 12 | int register_page_fault_notifier(struct notifier_block *nb); |
27 | int trap, int sig) | 13 | int unregister_page_fault_notifier(struct notifier_block *nb); |
28 | { | ||
29 | struct die_args args = { | ||
30 | .regs = regs, | ||
31 | .trapnr = trap, | ||
32 | }; | ||
33 | 14 | ||
34 | return atomic_notifier_call_chain(&shdie_chain, val, &args); | ||
35 | } | ||
36 | #endif /* __ASM_SH_KDEBUG_H */ | 15 | #endif /* __ASM_SH_KDEBUG_H */ |
diff --git a/include/asm-sh/pgalloc.h b/include/asm-sh/pgalloc.h index 888e4529e6fe..18b613c57cf5 100644 --- a/include/asm-sh/pgalloc.h +++ b/include/asm-sh/pgalloc.h | |||
@@ -1,6 +1,12 @@ | |||
1 | #ifndef __ASM_SH_PGALLOC_H | 1 | #ifndef __ASM_SH_PGALLOC_H |
2 | #define __ASM_SH_PGALLOC_H | 2 | #define __ASM_SH_PGALLOC_H |
3 | 3 | ||
4 | #include <linux/quicklist.h> | ||
5 | #include <asm/page.h> | ||
6 | |||
7 | #define QUICK_PGD 0 /* We preserve special mappings over free */ | ||
8 | #define QUICK_PT 1 /* Other page table pages that are zero on free */ | ||
9 | |||
4 | static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, | 10 | static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, |
5 | pte_t *pte) | 11 | pte_t *pte) |
6 | { | 12 | { |
@@ -13,48 +19,49 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | |||
13 | set_pmd(pmd, __pmd((unsigned long)page_address(pte))); | 19 | set_pmd(pmd, __pmd((unsigned long)page_address(pte))); |
14 | } | 20 | } |
15 | 21 | ||
22 | static inline void pgd_ctor(void *x) | ||
23 | { | ||
24 | pgd_t *pgd = x; | ||
25 | |||
26 | memcpy(pgd + USER_PTRS_PER_PGD, | ||
27 | swapper_pg_dir + USER_PTRS_PER_PGD, | ||
28 | (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); | ||
29 | } | ||
30 | |||
16 | /* | 31 | /* |
17 | * Allocate and free page tables. | 32 | * Allocate and free page tables. |
18 | */ | 33 | */ |
19 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | 34 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
20 | { | 35 | { |
21 | pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT); | 36 | return quicklist_alloc(QUICK_PGD, GFP_KERNEL | __GFP_REPEAT, pgd_ctor); |
22 | |||
23 | if (pgd) { | ||
24 | memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t)); | ||
25 | memcpy(pgd + USER_PTRS_PER_PGD, | ||
26 | swapper_pg_dir + USER_PTRS_PER_PGD, | ||
27 | (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); | ||
28 | } | ||
29 | |||
30 | return pgd; | ||
31 | } | 37 | } |
32 | 38 | ||
33 | static inline void pgd_free(pgd_t *pgd) | 39 | static inline void pgd_free(pgd_t *pgd) |
34 | { | 40 | { |
35 | free_page((unsigned long)pgd); | 41 | quicklist_free(QUICK_PGD, NULL, pgd); |
36 | } | 42 | } |
37 | 43 | ||
38 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 44 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
39 | unsigned long address) | 45 | unsigned long address) |
40 | { | 46 | { |
41 | return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); | 47 | return quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); |
42 | } | 48 | } |
43 | 49 | ||
44 | static inline struct page *pte_alloc_one(struct mm_struct *mm, | 50 | static inline struct page *pte_alloc_one(struct mm_struct *mm, |
45 | unsigned long address) | 51 | unsigned long address) |
46 | { | 52 | { |
47 | return alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); | 53 | void *pg = quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); |
54 | return pg ? virt_to_page(pg) : NULL; | ||
48 | } | 55 | } |
49 | 56 | ||
50 | static inline void pte_free_kernel(pte_t *pte) | 57 | static inline void pte_free_kernel(pte_t *pte) |
51 | { | 58 | { |
52 | free_page((unsigned long)pte); | 59 | quicklist_free(QUICK_PT, NULL, pte); |
53 | } | 60 | } |
54 | 61 | ||
55 | static inline void pte_free(struct page *pte) | 62 | static inline void pte_free(struct page *pte) |
56 | { | 63 | { |
57 | __free_page(pte); | 64 | quicklist_free_page(QUICK_PT, NULL, pte); |
58 | } | 65 | } |
59 | 66 | ||
60 | #define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) | 67 | #define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) |
@@ -66,6 +73,11 @@ static inline void pte_free(struct page *pte) | |||
66 | 73 | ||
67 | #define pmd_free(x) do { } while (0) | 74 | #define pmd_free(x) do { } while (0) |
68 | #define __pmd_free_tlb(tlb,x) do { } while (0) | 75 | #define __pmd_free_tlb(tlb,x) do { } while (0) |
69 | #define check_pgt_cache() do { } while (0) | 76 | |
77 | static inline void check_pgt_cache(void) | ||
78 | { | ||
79 | quicklist_trim(QUICK_PGD, NULL, 25, 16); | ||
80 | quicklist_trim(QUICK_PT, NULL, 25, 16); | ||
81 | } | ||
70 | 82 | ||
71 | #endif /* __ASM_SH_PGALLOC_H */ | 83 | #endif /* __ASM_SH_PGALLOC_H */ |
diff --git a/include/asm-sh/system.h b/include/asm-sh/system.h index e7e96ee0c8a5..82f3e229e621 100644 --- a/include/asm-sh/system.h +++ b/include/asm-sh/system.h | |||
@@ -255,6 +255,15 @@ static inline void *set_exception_table_evt(unsigned int evt, void *handler) | |||
255 | return set_exception_table_vec(evt >> 5, handler); | 255 | return set_exception_table_vec(evt >> 5, handler); |
256 | } | 256 | } |
257 | 257 | ||
258 | /* | ||
259 | * SH-2A has both 16 and 32-bit opcodes, do lame encoding checks. | ||
260 | */ | ||
261 | #ifdef CONFIG_CPU_SH2A | ||
262 | extern unsigned int instruction_size(unsigned int insn); | ||
263 | #else | ||
264 | #define instruction_size(insn) (2) | ||
265 | #endif | ||
266 | |||
258 | /* XXX | 267 | /* XXX |
259 | * disable hlt during certain critical i/o operations | 268 | * disable hlt during certain critical i/o operations |
260 | */ | 269 | */ |
diff --git a/include/asm-sh/timer.h b/include/asm-sh/timer.h index 17b5e76a4c31..701ba84c7049 100644 --- a/include/asm-sh/timer.h +++ b/include/asm-sh/timer.h | |||
@@ -2,12 +2,14 @@ | |||
2 | #define __ASM_SH_TIMER_H | 2 | #define __ASM_SH_TIMER_H |
3 | 3 | ||
4 | #include <linux/sysdev.h> | 4 | #include <linux/sysdev.h> |
5 | #include <linux/clocksource.h> | ||
5 | #include <asm/cpu/timer.h> | 6 | #include <asm/cpu/timer.h> |
6 | 7 | ||
7 | struct sys_timer_ops { | 8 | struct sys_timer_ops { |
8 | int (*init)(void); | 9 | int (*init)(void); |
9 | int (*start)(void); | 10 | int (*start)(void); |
10 | int (*stop)(void); | 11 | int (*stop)(void); |
12 | cycle_t (*read)(void); | ||
11 | #ifndef CONFIG_GENERIC_TIME | 13 | #ifndef CONFIG_GENERIC_TIME |
12 | unsigned long (*get_offset)(void); | 14 | unsigned long (*get_offset)(void); |
13 | #endif | 15 | #endif |
@@ -18,29 +20,8 @@ struct sys_timer { | |||
18 | 20 | ||
19 | struct sys_device dev; | 21 | struct sys_device dev; |
20 | struct sys_timer_ops *ops; | 22 | struct sys_timer_ops *ops; |
21 | |||
22 | #ifdef CONFIG_NO_IDLE_HZ | ||
23 | struct dyn_tick_timer *dyn_tick; | ||
24 | #endif | ||
25 | }; | 23 | }; |
26 | 24 | ||
27 | #ifdef CONFIG_NO_IDLE_HZ | ||
28 | #define DYN_TICK_ENABLED (1 << 1) | ||
29 | |||
30 | struct dyn_tick_timer { | ||
31 | spinlock_t lock; | ||
32 | unsigned int state; /* Current state */ | ||
33 | int (*enable)(void); /* Enables dynamic tick */ | ||
34 | int (*disable)(void); /* Disables dynamic tick */ | ||
35 | void (*reprogram)(unsigned long); /* Reprograms the timer */ | ||
36 | int (*handler)(int, void *); | ||
37 | }; | ||
38 | |||
39 | void timer_dyn_reprogram(void); | ||
40 | #else | ||
41 | #define timer_dyn_reprogram() do { } while (0) | ||
42 | #endif | ||
43 | |||
44 | #define TICK_SIZE (tick_nsec / 1000) | 25 | #define TICK_SIZE (tick_nsec / 1000) |
45 | 26 | ||
46 | extern struct sys_timer tmu_timer, cmt_timer, mtu2_timer; | 27 | extern struct sys_timer tmu_timer, cmt_timer, mtu2_timer; |
@@ -58,5 +39,7 @@ struct sys_timer *get_sys_timer(void); | |||
58 | 39 | ||
59 | /* arch/sh/kernel/time.c */ | 40 | /* arch/sh/kernel/time.c */ |
60 | void handle_timer_tick(void); | 41 | void handle_timer_tick(void); |
42 | extern unsigned long sh_hpt_frequency; | ||
43 | extern struct clocksource clocksource_sh; | ||
61 | 44 | ||
62 | #endif /* __ASM_SH_TIMER_H */ | 45 | #endif /* __ASM_SH_TIMER_H */ |
diff --git a/include/asm-sh/unistd.h b/include/asm-sh/unistd.h index 49be50a36b77..af71e379a5ee 100644 --- a/include/asm-sh/unistd.h +++ b/include/asm-sh/unistd.h | |||
@@ -85,7 +85,7 @@ | |||
85 | #define __NR_sigpending 73 | 85 | #define __NR_sigpending 73 |
86 | #define __NR_sethostname 74 | 86 | #define __NR_sethostname 74 |
87 | #define __NR_setrlimit 75 | 87 | #define __NR_setrlimit 75 |
88 | #define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ | 88 | #define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ |
89 | #define __NR_getrusage 77 | 89 | #define __NR_getrusage 77 |
90 | #define __NR_gettimeofday 78 | 90 | #define __NR_gettimeofday 78 |
91 | #define __NR_settimeofday 79 | 91 | #define __NR_settimeofday 79 |
@@ -328,8 +328,9 @@ | |||
328 | #define __NR_move_pages 317 | 328 | #define __NR_move_pages 317 |
329 | #define __NR_getcpu 318 | 329 | #define __NR_getcpu 318 |
330 | #define __NR_epoll_pwait 319 | 330 | #define __NR_epoll_pwait 319 |
331 | #define __NR_utimensat 320 | ||
331 | 332 | ||
332 | #define NR_syscalls 320 | 333 | #define NR_syscalls 321 |
333 | 334 | ||
334 | #ifdef __KERNEL__ | 335 | #ifdef __KERNEL__ |
335 | 336 | ||