diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-05 16:19:32 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-05 16:19:32 -0400 |
commit | 2f997759dffe5458446075a58734df39d8035e6e (patch) | |
tree | b799fbec4b57fa8e1408f3b8b43638bbcc5d7a50 /arch/hexagon/include | |
parent | 472e374161bc00d392e1755fe9915f42b11e310f (diff) | |
parent | a9a44fdf329668125042055c569656aa83d8cccb (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux-hexagon-kernel
Pull Hexagon updates from Richard Kuo:
"Mostly cleanups for compilation with allmodconfig and some other
miscellaneous fixes"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux-hexagon-kernel:
Hexagon: update CR year for elf.h
Hexagon: remove SP macro
Hexagon: set ELF_EXEC_PAGESIZE to PAGE_SIZE
Hexagon: set the e_flags in user regset view for core dumps
Hexagon: fix atomic_set
Hexagon: add screen_info for VGA_CONSOLE
hexagon: correct type on pgd copy
smp, hexagon: kill SMP single function call interrupt
arch: hexagon: include: asm: add generic macro 'mmiowb' in "io.h"
arch: hexagon: kernel: hexagon_ksyms.c: export related symbols which various modules need
arch: hexagon: kernel: reset.c: use function pointer instead of function for pm_power_off and export it
arch: hexagon: include: asm: add "vga.h" in Kbuild
arch: hexagon: include: asm: Kbuild: add generic "serial.h" in Kbuild
arch: hexagon: include: uapi: asm: setup.h add swith macro __KERNEL__
arch: hexagon: include: asm: add prefix "hvm[ci]_" for all enum members in "hexagon_vm.h"
arch: hexagon: Kconfig: add HAVE_DMA_ATTR in Kconfig and remove "linux/dma-mapping.h" from "asm/dma-mapping.h"
arch: hexagon: kernel: add export symbol function __delay()
hexagon: include: asm: kgdb: extend DBG_MAX_REG_NUM for "cs0/1"
hexagon: kernel: kgdb: include related header for pass compiling.
hexagon: kernel: remove useless variables 'dn', 'r' and 'err' in time_init_deferred() in "time.c"
Diffstat (limited to 'arch/hexagon/include')
-rw-r--r-- | arch/hexagon/include/asm/Kbuild | 2 | ||||
-rw-r--r-- | arch/hexagon/include/asm/atomic.h | 15 | ||||
-rw-r--r-- | arch/hexagon/include/asm/delay.h | 1 | ||||
-rw-r--r-- | arch/hexagon/include/asm/dma-mapping.h | 1 | ||||
-rw-r--r-- | arch/hexagon/include/asm/elf.h | 4 | ||||
-rw-r--r-- | arch/hexagon/include/asm/hexagon_vm.h | 72 | ||||
-rw-r--r-- | arch/hexagon/include/asm/io.h | 2 | ||||
-rw-r--r-- | arch/hexagon/include/asm/kgdb.h | 5 | ||||
-rw-r--r-- | arch/hexagon/include/asm/pgalloc.h | 2 | ||||
-rw-r--r-- | arch/hexagon/include/asm/smp.h | 1 | ||||
-rw-r--r-- | arch/hexagon/include/uapi/asm/registers.h | 4 | ||||
-rw-r--r-- | arch/hexagon/include/uapi/asm/setup.h | 5 |
12 files changed, 67 insertions, 47 deletions
diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index eadcc118f950..0e69796b58c7 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild | |||
@@ -41,6 +41,7 @@ generic-y += scatterlist.h | |||
41 | generic-y += sections.h | 41 | generic-y += sections.h |
42 | generic-y += segment.h | 42 | generic-y += segment.h |
43 | generic-y += sembuf.h | 43 | generic-y += sembuf.h |
44 | generic-y += serial.h | ||
44 | generic-y += shmbuf.h | 45 | generic-y += shmbuf.h |
45 | generic-y += shmparam.h | 46 | generic-y += shmparam.h |
46 | generic-y += siginfo.h | 47 | generic-y += siginfo.h |
@@ -56,4 +57,5 @@ generic-y += trace_clock.h | |||
56 | generic-y += types.h | 57 | generic-y += types.h |
57 | generic-y += ucontext.h | 58 | generic-y += ucontext.h |
58 | generic-y += unaligned.h | 59 | generic-y += unaligned.h |
60 | generic-y += vga.h | ||
59 | generic-y += xor.h | 61 | generic-y += xor.h |
diff --git a/arch/hexagon/include/asm/atomic.h b/arch/hexagon/include/asm/atomic.h index 7aae4cb2a29a..17dc63780c06 100644 --- a/arch/hexagon/include/asm/atomic.h +++ b/arch/hexagon/include/asm/atomic.h | |||
@@ -26,7 +26,20 @@ | |||
26 | #include <asm/cmpxchg.h> | 26 | #include <asm/cmpxchg.h> |
27 | 27 | ||
28 | #define ATOMIC_INIT(i) { (i) } | 28 | #define ATOMIC_INIT(i) { (i) } |
29 | #define atomic_set(v, i) ((v)->counter = (i)) | 29 | |
30 | /* Normal writes in our arch don't clear lock reservations */ | ||
31 | |||
32 | static inline void atomic_set(atomic_t *v, int new) | ||
33 | { | ||
34 | asm volatile( | ||
35 | "1: r6 = memw_locked(%0);\n" | ||
36 | " memw_locked(%0,p0) = %1;\n" | ||
37 | " if (!P0) jump 1b;\n" | ||
38 | : | ||
39 | : "r" (&v->counter), "r" (new) | ||
40 | : "memory", "p0", "r6" | ||
41 | ); | ||
42 | } | ||
30 | 43 | ||
31 | /** | 44 | /** |
32 | * atomic_read - reads a word, atomically | 45 | * atomic_read - reads a word, atomically |
diff --git a/arch/hexagon/include/asm/delay.h b/arch/hexagon/include/asm/delay.h index 53079719d667..8933b9b1a3bf 100644 --- a/arch/hexagon/include/asm/delay.h +++ b/arch/hexagon/include/asm/delay.h | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <asm/param.h> | 22 | #include <asm/param.h> |
23 | 23 | ||
24 | extern void __delay(unsigned long cycles); | ||
24 | extern void __udelay(unsigned long usecs); | 25 | extern void __udelay(unsigned long usecs); |
25 | 26 | ||
26 | #define udelay(usecs) __udelay((usecs)) | 27 | #define udelay(usecs) __udelay((usecs)) |
diff --git a/arch/hexagon/include/asm/dma-mapping.h b/arch/hexagon/include/asm/dma-mapping.h index 85e9935660cb..16965427f6b4 100644 --- a/arch/hexagon/include/asm/dma-mapping.h +++ b/arch/hexagon/include/asm/dma-mapping.h | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <linux/cache.h> | 25 | #include <linux/cache.h> |
26 | #include <linux/mm.h> | 26 | #include <linux/mm.h> |
27 | #include <linux/scatterlist.h> | 27 | #include <linux/scatterlist.h> |
28 | #include <linux/dma-mapping.h> | ||
29 | #include <linux/dma-debug.h> | 28 | #include <linux/dma-debug.h> |
30 | #include <linux/dma-attrs.h> | 29 | #include <linux/dma-attrs.h> |
31 | #include <asm/io.h> | 30 | #include <asm/io.h> |
diff --git a/arch/hexagon/include/asm/elf.h b/arch/hexagon/include/asm/elf.h index e1b933a0e121..80311e7b8ca6 100644 --- a/arch/hexagon/include/asm/elf.h +++ b/arch/hexagon/include/asm/elf.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * ELF definitions for the Hexagon architecture | 2 | * ELF definitions for the Hexagon architecture |
3 | * | 3 | * |
4 | * Copyright (c) 2010-2012, The Linux Foundation. All rights reserved. | 4 | * Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License version 2 and | 7 | * it under the terms of the GNU General Public License version 2 and |
@@ -202,7 +202,7 @@ do { \ | |||
202 | #define CORE_DUMP_USE_REGSET | 202 | #define CORE_DUMP_USE_REGSET |
203 | 203 | ||
204 | /* Hrm is this going to cause problems for changing PAGE_SIZE? */ | 204 | /* Hrm is this going to cause problems for changing PAGE_SIZE? */ |
205 | #define ELF_EXEC_PAGESIZE 4096 | 205 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
206 | 206 | ||
207 | /* | 207 | /* |
208 | * This is the location that an ET_DYN program is loaded if exec'ed. Typical | 208 | * This is the location that an ET_DYN program is loaded if exec'ed. Typical |
diff --git a/arch/hexagon/include/asm/hexagon_vm.h b/arch/hexagon/include/asm/hexagon_vm.h index 67bb6d6f3337..1f6918b428de 100644 --- a/arch/hexagon/include/asm/hexagon_vm.h +++ b/arch/hexagon/include/asm/hexagon_vm.h | |||
@@ -55,27 +55,27 @@ | |||
55 | #ifndef __ASSEMBLY__ | 55 | #ifndef __ASSEMBLY__ |
56 | 56 | ||
57 | enum VM_CACHE_OPS { | 57 | enum VM_CACHE_OPS { |
58 | ickill, | 58 | hvmc_ickill, |
59 | dckill, | 59 | hvmc_dckill, |
60 | l2kill, | 60 | hvmc_l2kill, |
61 | dccleaninva, | 61 | hvmc_dccleaninva, |
62 | icinva, | 62 | hvmc_icinva, |
63 | idsync, | 63 | hvmc_idsync, |
64 | fetch_cfg | 64 | hvmc_fetch_cfg |
65 | }; | 65 | }; |
66 | 66 | ||
67 | enum VM_INT_OPS { | 67 | enum VM_INT_OPS { |
68 | nop, | 68 | hvmi_nop, |
69 | globen, | 69 | hvmi_globen, |
70 | globdis, | 70 | hvmi_globdis, |
71 | locen, | 71 | hvmi_locen, |
72 | locdis, | 72 | hvmi_locdis, |
73 | affinity, | 73 | hvmi_affinity, |
74 | get, | 74 | hvmi_get, |
75 | peek, | 75 | hvmi_peek, |
76 | status, | 76 | hvmi_status, |
77 | post, | 77 | hvmi_post, |
78 | clear | 78 | hvmi_clear |
79 | }; | 79 | }; |
80 | 80 | ||
81 | extern void _K_VM_event_vector(void); | 81 | extern void _K_VM_event_vector(void); |
@@ -98,95 +98,95 @@ long __vmvpid(void); | |||
98 | 98 | ||
99 | static inline long __vmcache_ickill(void) | 99 | static inline long __vmcache_ickill(void) |
100 | { | 100 | { |
101 | return __vmcache(ickill, 0, 0); | 101 | return __vmcache(hvmc_ickill, 0, 0); |
102 | } | 102 | } |
103 | 103 | ||
104 | static inline long __vmcache_dckill(void) | 104 | static inline long __vmcache_dckill(void) |
105 | { | 105 | { |
106 | return __vmcache(dckill, 0, 0); | 106 | return __vmcache(hvmc_dckill, 0, 0); |
107 | } | 107 | } |
108 | 108 | ||
109 | static inline long __vmcache_l2kill(void) | 109 | static inline long __vmcache_l2kill(void) |
110 | { | 110 | { |
111 | return __vmcache(l2kill, 0, 0); | 111 | return __vmcache(hvmc_l2kill, 0, 0); |
112 | } | 112 | } |
113 | 113 | ||
114 | static inline long __vmcache_dccleaninva(unsigned long addr, unsigned long len) | 114 | static inline long __vmcache_dccleaninva(unsigned long addr, unsigned long len) |
115 | { | 115 | { |
116 | return __vmcache(dccleaninva, addr, len); | 116 | return __vmcache(hvmc_dccleaninva, addr, len); |
117 | } | 117 | } |
118 | 118 | ||
119 | static inline long __vmcache_icinva(unsigned long addr, unsigned long len) | 119 | static inline long __vmcache_icinva(unsigned long addr, unsigned long len) |
120 | { | 120 | { |
121 | return __vmcache(icinva, addr, len); | 121 | return __vmcache(hvmc_icinva, addr, len); |
122 | } | 122 | } |
123 | 123 | ||
124 | static inline long __vmcache_idsync(unsigned long addr, | 124 | static inline long __vmcache_idsync(unsigned long addr, |
125 | unsigned long len) | 125 | unsigned long len) |
126 | { | 126 | { |
127 | return __vmcache(idsync, addr, len); | 127 | return __vmcache(hvmc_idsync, addr, len); |
128 | } | 128 | } |
129 | 129 | ||
130 | static inline long __vmcache_fetch_cfg(unsigned long val) | 130 | static inline long __vmcache_fetch_cfg(unsigned long val) |
131 | { | 131 | { |
132 | return __vmcache(fetch_cfg, val, 0); | 132 | return __vmcache(hvmc_fetch_cfg, val, 0); |
133 | } | 133 | } |
134 | 134 | ||
135 | /* interrupt operations */ | 135 | /* interrupt operations */ |
136 | 136 | ||
137 | static inline long __vmintop_nop(void) | 137 | static inline long __vmintop_nop(void) |
138 | { | 138 | { |
139 | return __vmintop(nop, 0, 0, 0, 0); | 139 | return __vmintop(hvmi_nop, 0, 0, 0, 0); |
140 | } | 140 | } |
141 | 141 | ||
142 | static inline long __vmintop_globen(long i) | 142 | static inline long __vmintop_globen(long i) |
143 | { | 143 | { |
144 | return __vmintop(globen, i, 0, 0, 0); | 144 | return __vmintop(hvmi_globen, i, 0, 0, 0); |
145 | } | 145 | } |
146 | 146 | ||
147 | static inline long __vmintop_globdis(long i) | 147 | static inline long __vmintop_globdis(long i) |
148 | { | 148 | { |
149 | return __vmintop(globdis, i, 0, 0, 0); | 149 | return __vmintop(hvmi_globdis, i, 0, 0, 0); |
150 | } | 150 | } |
151 | 151 | ||
152 | static inline long __vmintop_locen(long i) | 152 | static inline long __vmintop_locen(long i) |
153 | { | 153 | { |
154 | return __vmintop(locen, i, 0, 0, 0); | 154 | return __vmintop(hvmi_locen, i, 0, 0, 0); |
155 | } | 155 | } |
156 | 156 | ||
157 | static inline long __vmintop_locdis(long i) | 157 | static inline long __vmintop_locdis(long i) |
158 | { | 158 | { |
159 | return __vmintop(locdis, i, 0, 0, 0); | 159 | return __vmintop(hvmi_locdis, i, 0, 0, 0); |
160 | } | 160 | } |
161 | 161 | ||
162 | static inline long __vmintop_affinity(long i, long cpu) | 162 | static inline long __vmintop_affinity(long i, long cpu) |
163 | { | 163 | { |
164 | return __vmintop(locdis, i, cpu, 0, 0); | 164 | return __vmintop(hvmi_affinity, i, cpu, 0, 0); |
165 | } | 165 | } |
166 | 166 | ||
167 | static inline long __vmintop_get(void) | 167 | static inline long __vmintop_get(void) |
168 | { | 168 | { |
169 | return __vmintop(get, 0, 0, 0, 0); | 169 | return __vmintop(hvmi_get, 0, 0, 0, 0); |
170 | } | 170 | } |
171 | 171 | ||
172 | static inline long __vmintop_peek(void) | 172 | static inline long __vmintop_peek(void) |
173 | { | 173 | { |
174 | return __vmintop(peek, 0, 0, 0, 0); | 174 | return __vmintop(hvmi_peek, 0, 0, 0, 0); |
175 | } | 175 | } |
176 | 176 | ||
177 | static inline long __vmintop_status(long i) | 177 | static inline long __vmintop_status(long i) |
178 | { | 178 | { |
179 | return __vmintop(status, i, 0, 0, 0); | 179 | return __vmintop(hvmi_status, i, 0, 0, 0); |
180 | } | 180 | } |
181 | 181 | ||
182 | static inline long __vmintop_post(long i) | 182 | static inline long __vmintop_post(long i) |
183 | { | 183 | { |
184 | return __vmintop(post, i, 0, 0, 0); | 184 | return __vmintop(hvmi_post, i, 0, 0, 0); |
185 | } | 185 | } |
186 | 186 | ||
187 | static inline long __vmintop_clear(long i) | 187 | static inline long __vmintop_clear(long i) |
188 | { | 188 | { |
189 | return __vmintop(clear, i, 0, 0, 0); | 189 | return __vmintop(hvmi_clear, i, 0, 0, 0); |
190 | } | 190 | } |
191 | 191 | ||
192 | #else /* Only assembly code should reference these */ | 192 | #else /* Only assembly code should reference these */ |
diff --git a/arch/hexagon/include/asm/io.h b/arch/hexagon/include/asm/io.h index 1b7698e19139..70298996e9b2 100644 --- a/arch/hexagon/include/asm/io.h +++ b/arch/hexagon/include/asm/io.h | |||
@@ -189,6 +189,8 @@ static inline void writel(u32 data, volatile void __iomem *addr) | |||
189 | #define writew_relaxed __raw_writew | 189 | #define writew_relaxed __raw_writew |
190 | #define writel_relaxed __raw_writel | 190 | #define writel_relaxed __raw_writel |
191 | 191 | ||
192 | #define mmiowb() | ||
193 | |||
192 | /* | 194 | /* |
193 | * Need an mtype somewhere in here, for cache type deals? | 195 | * Need an mtype somewhere in here, for cache type deals? |
194 | * This is probably too long for an inline. | 196 | * This is probably too long for an inline. |
diff --git a/arch/hexagon/include/asm/kgdb.h b/arch/hexagon/include/asm/kgdb.h index 32a6fb66944a..ccd3ac336b24 100644 --- a/arch/hexagon/include/asm/kgdb.h +++ b/arch/hexagon/include/asm/kgdb.h | |||
@@ -34,10 +34,11 @@ static inline void arch_kgdb_breakpoint(void) | |||
34 | * 32 gpr + sa0/1 + lc0/1 + m0/1 + gp + ugp + pred + pc = 42 total. | 34 | * 32 gpr + sa0/1 + lc0/1 + m0/1 + gp + ugp + pred + pc = 42 total. |
35 | * vm regs = psp+elr+est+badva = 4 | 35 | * vm regs = psp+elr+est+badva = 4 |
36 | * syscall+restart = 2 more | 36 | * syscall+restart = 2 more |
37 | * so 48 = 42 +4 + 2 | 37 | * also add cs0/1 = 2 |
38 | * so 48 = 42 + 4 + 2 + 2 | ||
38 | */ | 39 | */ |
39 | #define DBG_USER_REGS 42 | 40 | #define DBG_USER_REGS 42 |
40 | #define DBG_MAX_REG_NUM (DBG_USER_REGS + 6) | 41 | #define DBG_MAX_REG_NUM (DBG_USER_REGS + 8) |
41 | #define NUMREGBYTES (DBG_MAX_REG_NUM*4) | 42 | #define NUMREGBYTES (DBG_MAX_REG_NUM*4) |
42 | 43 | ||
43 | #endif /* __HEXAGON_KGDB_H__ */ | 44 | #endif /* __HEXAGON_KGDB_H__ */ |
diff --git a/arch/hexagon/include/asm/pgalloc.h b/arch/hexagon/include/asm/pgalloc.h index 4c9d382d7798..77da3b0ae3c2 100644 --- a/arch/hexagon/include/asm/pgalloc.h +++ b/arch/hexagon/include/asm/pgalloc.h | |||
@@ -45,7 +45,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) | |||
45 | * map with a copy of the kernel's persistent map. | 45 | * map with a copy of the kernel's persistent map. |
46 | */ | 46 | */ |
47 | 47 | ||
48 | memcpy(pgd, swapper_pg_dir, PTRS_PER_PGD*sizeof(pgd_t *)); | 48 | memcpy(pgd, swapper_pg_dir, PTRS_PER_PGD*sizeof(pgd_t)); |
49 | mm->context.generation = kmap_generation; | 49 | mm->context.generation = kmap_generation; |
50 | 50 | ||
51 | /* Physical version is what is passed to virtual machine on switch */ | 51 | /* Physical version is what is passed to virtual machine on switch */ |
diff --git a/arch/hexagon/include/asm/smp.h b/arch/hexagon/include/asm/smp.h index 2b9b974e0952..ca171c13891d 100644 --- a/arch/hexagon/include/asm/smp.h +++ b/arch/hexagon/include/asm/smp.h | |||
@@ -29,7 +29,6 @@ enum ipi_message_type { | |||
29 | IPI_NOP = 0, | 29 | IPI_NOP = 0, |
30 | IPI_RESCHEDULE = 1, | 30 | IPI_RESCHEDULE = 1, |
31 | IPI_CALL_FUNC, | 31 | IPI_CALL_FUNC, |
32 | IPI_CALL_FUNC_SINGLE, | ||
33 | IPI_CPU_STOP, | 32 | IPI_CPU_STOP, |
34 | IPI_TIMER, | 33 | IPI_TIMER, |
35 | }; | 34 | }; |
diff --git a/arch/hexagon/include/uapi/asm/registers.h b/arch/hexagon/include/uapi/asm/registers.h index 487d6ceca5e7..e7be31840a90 100644 --- a/arch/hexagon/include/uapi/asm/registers.h +++ b/arch/hexagon/include/uapi/asm/registers.h | |||
@@ -6,8 +6,6 @@ | |||
6 | #ifndef _ASM_REGISTERS_H | 6 | #ifndef _ASM_REGISTERS_H |
7 | #define _ASM_REGISTERS_H | 7 | #define _ASM_REGISTERS_H |
8 | 8 | ||
9 | #define SP r29 | ||
10 | |||
11 | #ifndef __ASSEMBLY__ | 9 | #ifndef __ASSEMBLY__ |
12 | 10 | ||
13 | /* See kernel/entry.S for further documentation. */ | 11 | /* See kernel/entry.S for further documentation. */ |
@@ -215,7 +213,7 @@ struct pt_regs { | |||
215 | #define pt_clr_singlestep(regs) ((regs)->hvmer.vmest &= ~(1<<HVM_VMEST_SS_SFT)) | 213 | #define pt_clr_singlestep(regs) ((regs)->hvmer.vmest &= ~(1<<HVM_VMEST_SS_SFT)) |
216 | 214 | ||
217 | #define pt_set_rte_sp(regs, sp) do {\ | 215 | #define pt_set_rte_sp(regs, sp) do {\ |
218 | pt_psp(regs) = (regs)->SP = (sp);\ | 216 | pt_psp(regs) = (regs)->r29 = (sp);\ |
219 | } while (0) | 217 | } while (0) |
220 | 218 | ||
221 | #define pt_set_kmode(regs) \ | 219 | #define pt_set_kmode(regs) \ |
diff --git a/arch/hexagon/include/uapi/asm/setup.h b/arch/hexagon/include/uapi/asm/setup.h index e48285e4af96..7e3952d6221c 100644 --- a/arch/hexagon/include/uapi/asm/setup.h +++ b/arch/hexagon/include/uapi/asm/setup.h | |||
@@ -19,7 +19,12 @@ | |||
19 | #ifndef _ASM_SETUP_H | 19 | #ifndef _ASM_SETUP_H |
20 | #define _ASM_SETUP_H | 20 | #define _ASM_SETUP_H |
21 | 21 | ||
22 | #ifdef __KERNEL__ | ||
22 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #else | ||
25 | #define __init | ||
26 | #endif | ||
27 | |||
23 | #include <asm-generic/setup.h> | 28 | #include <asm-generic/setup.h> |
24 | 29 | ||
25 | extern char external_cmdline_buffer; | 30 | extern char external_cmdline_buffer; |