diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/mips/lasat | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/mips/lasat')
-rw-r--r-- | arch/mips/lasat/picvue.h | 1 | ||||
-rw-r--r-- | arch/mips/lasat/picvue_proc.c | 113 | ||||
-rw-r--r-- | arch/mips/lasat/prom.c | 4 | ||||
-rw-r--r-- | arch/mips/lasat/sysctl.c | 119 |
4 files changed, 81 insertions, 156 deletions
diff --git a/arch/mips/lasat/picvue.h b/arch/mips/lasat/picvue.h index 91df55371127..2f0757738fdb 100644 --- a/arch/mips/lasat/picvue.h +++ b/arch/mips/lasat/picvue.h | |||
@@ -42,4 +42,3 @@ void pvc_move(u8 cmd); | |||
42 | 42 | ||
43 | void pvc_clear(void); | 43 | void pvc_clear(void); |
44 | void pvc_home(void); | 44 | void pvc_home(void); |
45 | |||
diff --git a/arch/mips/lasat/picvue_proc.c b/arch/mips/lasat/picvue_proc.c index 0bb6037afba3..8e388da1926f 100644 --- a/arch/mips/lasat/picvue_proc.c +++ b/arch/mips/lasat/picvue_proc.c | |||
@@ -4,12 +4,14 @@ | |||
4 | * Brian Murphy <brian.murphy@eicon.com> | 4 | * Brian Murphy <brian.murphy@eicon.com> |
5 | * | 5 | * |
6 | */ | 6 | */ |
7 | #include <linux/bug.h> | ||
7 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
8 | #include <linux/module.h> | 9 | #include <linux/module.h> |
9 | #include <linux/init.h> | 10 | #include <linux/init.h> |
10 | #include <linux/errno.h> | 11 | #include <linux/errno.h> |
11 | 12 | ||
12 | #include <linux/proc_fs.h> | 13 | #include <linux/proc_fs.h> |
14 | #include <linux/seq_file.h> | ||
13 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
14 | 16 | ||
15 | #include <linux/timer.h> | 17 | #include <linux/timer.h> |
@@ -38,12 +40,9 @@ static void pvc_display(unsigned long data) | |||
38 | 40 | ||
39 | static DECLARE_TASKLET(pvc_display_tasklet, &pvc_display, 0); | 41 | static DECLARE_TASKLET(pvc_display_tasklet, &pvc_display, 0); |
40 | 42 | ||
41 | static int pvc_proc_read_line(char *page, char **start, | 43 | static int pvc_line_proc_show(struct seq_file *m, void *v) |
42 | off_t off, int count, | ||
43 | int *eof, void *data) | ||
44 | { | 44 | { |
45 | char *origpage = page; | 45 | int lineno = *(int *)m->private; |
46 | int lineno = *(int *)data; | ||
47 | 46 | ||
48 | if (lineno < 0 || lineno > PVC_NLINES) { | 47 | if (lineno < 0 || lineno > PVC_NLINES) { |
49 | printk(KERN_WARNING "proc_read_line: invalid lineno %d\n", lineno); | 48 | printk(KERN_WARNING "proc_read_line: invalid lineno %d\n", lineno); |
@@ -51,45 +50,66 @@ static int pvc_proc_read_line(char *page, char **start, | |||
51 | } | 50 | } |
52 | 51 | ||
53 | mutex_lock(&pvc_mutex); | 52 | mutex_lock(&pvc_mutex); |
54 | page += sprintf(page, "%s\n", pvc_lines[lineno]); | 53 | seq_printf(m, "%s\n", pvc_lines[lineno]); |
55 | mutex_unlock(&pvc_mutex); | 54 | mutex_unlock(&pvc_mutex); |
56 | 55 | ||
57 | return page - origpage; | 56 | return 0; |
58 | } | 57 | } |
59 | 58 | ||
60 | static int pvc_proc_write_line(struct file *file, const char *buffer, | 59 | static int pvc_line_proc_open(struct inode *inode, struct file *file) |
61 | unsigned long count, void *data) | ||
62 | { | 60 | { |
63 | int origcount = count; | 61 | return single_open(file, pvc_line_proc_show, PDE(inode)->data); |
64 | int lineno = *(int *)data; | 62 | } |
65 | 63 | ||
66 | if (lineno < 0 || lineno > PVC_NLINES) { | 64 | static ssize_t pvc_line_proc_write(struct file *file, const char __user *buf, |
67 | printk(KERN_WARNING "proc_write_line: invalid lineno %d\n", | 65 | size_t count, loff_t *pos) |
68 | lineno); | 66 | { |
69 | return origcount; | 67 | int lineno = *(int *)PDE(file->f_path.dentry->d_inode)->data; |
70 | } | 68 | char kbuf[PVC_LINELEN]; |
69 | size_t len; | ||
70 | |||
71 | BUG_ON(lineno < 0 || lineno > PVC_NLINES); | ||
71 | 72 | ||
72 | if (count > PVC_LINELEN) | 73 | len = min(count, sizeof(kbuf) - 1); |
73 | count = PVC_LINELEN; | 74 | if (copy_from_user(kbuf, buf, len)) |
75 | return -EFAULT; | ||
76 | kbuf[len] = '\0'; | ||
74 | 77 | ||
75 | if (buffer[count-1] == '\n') | 78 | if (len > 0 && kbuf[len - 1] == '\n') |
76 | count--; | 79 | len--; |
77 | 80 | ||
78 | mutex_lock(&pvc_mutex); | 81 | mutex_lock(&pvc_mutex); |
79 | strncpy(pvc_lines[lineno], buffer, count); | 82 | strncpy(pvc_lines[lineno], kbuf, len); |
80 | pvc_lines[lineno][count] = '\0'; | 83 | pvc_lines[lineno][len] = '\0'; |
81 | mutex_unlock(&pvc_mutex); | 84 | mutex_unlock(&pvc_mutex); |
82 | 85 | ||
83 | tasklet_schedule(&pvc_display_tasklet); | 86 | tasklet_schedule(&pvc_display_tasklet); |
84 | 87 | ||
85 | return origcount; | 88 | return count; |
86 | } | 89 | } |
87 | 90 | ||
88 | static int pvc_proc_write_scroll(struct file *file, const char *buffer, | 91 | static const struct file_operations pvc_line_proc_fops = { |
89 | unsigned long count, void *data) | 92 | .owner = THIS_MODULE, |
93 | .open = pvc_line_proc_open, | ||
94 | .read = seq_read, | ||
95 | .llseek = seq_lseek, | ||
96 | .release = single_release, | ||
97 | .write = pvc_line_proc_write, | ||
98 | }; | ||
99 | |||
100 | static ssize_t pvc_scroll_proc_write(struct file *file, const char __user *buf, | ||
101 | size_t count, loff_t *pos) | ||
90 | { | 102 | { |
91 | int origcount = count; | 103 | char kbuf[42]; |
92 | int cmd = simple_strtol(buffer, NULL, 10); | 104 | size_t len; |
105 | int cmd; | ||
106 | |||
107 | len = min(count, sizeof(kbuf) - 1); | ||
108 | if (copy_from_user(kbuf, buf, len)) | ||
109 | return -EFAULT; | ||
110 | kbuf[len] = '\0'; | ||
111 | |||
112 | cmd = simple_strtol(kbuf, NULL, 10); | ||
93 | 113 | ||
94 | mutex_lock(&pvc_mutex); | 114 | mutex_lock(&pvc_mutex); |
95 | if (scroll_interval != 0) | 115 | if (scroll_interval != 0) |
@@ -110,22 +130,31 @@ static int pvc_proc_write_scroll(struct file *file, const char *buffer, | |||
110 | } | 130 | } |
111 | mutex_unlock(&pvc_mutex); | 131 | mutex_unlock(&pvc_mutex); |
112 | 132 | ||
113 | return origcount; | 133 | return count; |
114 | } | 134 | } |
115 | 135 | ||
116 | static int pvc_proc_read_scroll(char *page, char **start, | 136 | static int pvc_scroll_proc_show(struct seq_file *m, void *v) |
117 | off_t off, int count, | ||
118 | int *eof, void *data) | ||
119 | { | 137 | { |
120 | char *origpage = page; | ||
121 | |||
122 | mutex_lock(&pvc_mutex); | 138 | mutex_lock(&pvc_mutex); |
123 | page += sprintf(page, "%d\n", scroll_dir * scroll_interval); | 139 | seq_printf(m, "%d\n", scroll_dir * scroll_interval); |
124 | mutex_unlock(&pvc_mutex); | 140 | mutex_unlock(&pvc_mutex); |
125 | 141 | ||
126 | return page - origpage; | 142 | return 0; |
127 | } | 143 | } |
128 | 144 | ||
145 | static int pvc_scroll_proc_open(struct inode *inode, struct file *file) | ||
146 | { | ||
147 | return single_open(file, pvc_scroll_proc_show, NULL); | ||
148 | } | ||
149 | |||
150 | static const struct file_operations pvc_scroll_proc_fops = { | ||
151 | .owner = THIS_MODULE, | ||
152 | .open = pvc_scroll_proc_open, | ||
153 | .read = seq_read, | ||
154 | .llseek = seq_lseek, | ||
155 | .release = single_release, | ||
156 | .write = pvc_scroll_proc_write, | ||
157 | }; | ||
129 | 158 | ||
130 | void pvc_proc_timerfunc(unsigned long data) | 159 | void pvc_proc_timerfunc(unsigned long data) |
131 | { | 160 | { |
@@ -163,22 +192,16 @@ static int __init pvc_proc_init(void) | |||
163 | pvc_linedata[i] = i; | 192 | pvc_linedata[i] = i; |
164 | } | 193 | } |
165 | for (i = 0; i < PVC_NLINES; i++) { | 194 | for (i = 0; i < PVC_NLINES; i++) { |
166 | proc_entry = create_proc_entry(pvc_linename[i], 0644, | 195 | proc_entry = proc_create_data(pvc_linename[i], 0644, pvc_display_dir, |
167 | pvc_display_dir); | 196 | &pvc_line_proc_fops, &pvc_linedata[i]); |
168 | if (proc_entry == NULL) | 197 | if (proc_entry == NULL) |
169 | goto error; | 198 | goto error; |
170 | |||
171 | proc_entry->read_proc = pvc_proc_read_line; | ||
172 | proc_entry->write_proc = pvc_proc_write_line; | ||
173 | proc_entry->data = &pvc_linedata[i]; | ||
174 | } | 199 | } |
175 | proc_entry = create_proc_entry("scroll", 0644, pvc_display_dir); | 200 | proc_entry = proc_create("scroll", 0644, pvc_display_dir, |
201 | &pvc_scroll_proc_fops); | ||
176 | if (proc_entry == NULL) | 202 | if (proc_entry == NULL) |
177 | goto error; | 203 | goto error; |
178 | 204 | ||
179 | proc_entry->write_proc = pvc_proc_write_scroll; | ||
180 | proc_entry->read_proc = pvc_proc_read_scroll; | ||
181 | |||
182 | init_timer(&timer); | 205 | init_timer(&timer); |
183 | timer.function = pvc_proc_timerfunc; | 206 | timer.function = pvc_proc_timerfunc; |
184 | 207 | ||
diff --git a/arch/mips/lasat/prom.c b/arch/mips/lasat/prom.c index 6acc6cb85f0a..20fde19a5fbf 100644 --- a/arch/mips/lasat/prom.c +++ b/arch/mips/lasat/prom.c | |||
@@ -100,8 +100,8 @@ void __init prom_init(void) | |||
100 | 100 | ||
101 | /* Get the command line */ | 101 | /* Get the command line */ |
102 | if (argc > 0) { | 102 | if (argc > 0) { |
103 | strncpy(arcs_cmdline, argv[0], CL_SIZE-1); | 103 | strncpy(arcs_cmdline, argv[0], COMMAND_LINE_SIZE-1); |
104 | arcs_cmdline[CL_SIZE-1] = '\0'; | 104 | arcs_cmdline[COMMAND_LINE_SIZE-1] = '\0'; |
105 | } | 105 | } |
106 | 106 | ||
107 | /* Set the I/O base address */ | 107 | /* Set the I/O base address */ |
diff --git a/arch/mips/lasat/sysctl.c b/arch/mips/lasat/sysctl.c index b3deed8db619..d87ffd04cb0a 100644 --- a/arch/mips/lasat/sysctl.c +++ b/arch/mips/lasat/sysctl.c | |||
@@ -37,23 +37,6 @@ | |||
37 | #include "ds1603.h" | 37 | #include "ds1603.h" |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | /* Strategy function to write EEPROM after changing string entry */ | ||
41 | int sysctl_lasatstring(ctl_table *table, | ||
42 | void *oldval, size_t *oldlenp, | ||
43 | void *newval, size_t newlen) | ||
44 | { | ||
45 | int r; | ||
46 | |||
47 | r = sysctl_string(table, oldval, oldlenp, newval, newlen); | ||
48 | if (r < 0) | ||
49 | return r; | ||
50 | |||
51 | if (newval && newlen) | ||
52 | lasat_write_eeprom_info(); | ||
53 | |||
54 | return 0; | ||
55 | } | ||
56 | |||
57 | 40 | ||
58 | /* And the same for proc */ | 41 | /* And the same for proc */ |
59 | int proc_dolasatstring(ctl_table *table, int write, | 42 | int proc_dolasatstring(ctl_table *table, int write, |
@@ -113,46 +96,6 @@ int proc_dolasatrtc(ctl_table *table, int write, | |||
113 | } | 96 | } |
114 | #endif | 97 | #endif |
115 | 98 | ||
116 | /* Sysctl for setting the IP addresses */ | ||
117 | int sysctl_lasat_intvec(ctl_table *table, | ||
118 | void *oldval, size_t *oldlenp, | ||
119 | void *newval, size_t newlen) | ||
120 | { | ||
121 | int r; | ||
122 | |||
123 | r = sysctl_intvec(table, oldval, oldlenp, newval, newlen); | ||
124 | if (r < 0) | ||
125 | return r; | ||
126 | |||
127 | if (newval && newlen) | ||
128 | lasat_write_eeprom_info(); | ||
129 | |||
130 | return 0; | ||
131 | } | ||
132 | |||
133 | #ifdef CONFIG_DS1603 | ||
134 | /* Same for RTC */ | ||
135 | int sysctl_lasat_rtc(ctl_table *table, | ||
136 | void *oldval, size_t *oldlenp, | ||
137 | void *newval, size_t newlen) | ||
138 | { | ||
139 | struct timespec ts; | ||
140 | int r; | ||
141 | |||
142 | read_persistent_clock(&ts); | ||
143 | rtctmp = ts.tv_sec; | ||
144 | if (rtctmp < 0) | ||
145 | rtctmp = 0; | ||
146 | r = sysctl_intvec(table, oldval, oldlenp, newval, newlen); | ||
147 | if (r < 0) | ||
148 | return r; | ||
149 | if (newval && newlen) | ||
150 | rtc_mips_set_mmss(rtctmp); | ||
151 | |||
152 | return r; | ||
153 | } | ||
154 | #endif | ||
155 | |||
156 | #ifdef CONFIG_INET | 99 | #ifdef CONFIG_INET |
157 | int proc_lasat_ip(ctl_table *table, int write, | 100 | int proc_lasat_ip(ctl_table *table, int write, |
158 | void *buffer, size_t *lenp, loff_t *ppos) | 101 | void *buffer, size_t *lenp, loff_t *ppos) |
@@ -214,23 +157,6 @@ int proc_lasat_ip(ctl_table *table, int write, | |||
214 | } | 157 | } |
215 | #endif | 158 | #endif |
216 | 159 | ||
217 | static int sysctl_lasat_prid(ctl_table *table, | ||
218 | void *oldval, size_t *oldlenp, | ||
219 | void *newval, size_t newlen) | ||
220 | { | ||
221 | int r; | ||
222 | |||
223 | r = sysctl_intvec(table, oldval, oldlenp, newval, newlen); | ||
224 | if (r < 0) | ||
225 | return r; | ||
226 | if (newval && newlen) { | ||
227 | lasat_board_info.li_eeprom_info.prid = *(int *)newval; | ||
228 | lasat_write_eeprom_info(); | ||
229 | lasat_init_board_info(); | ||
230 | } | ||
231 | return 0; | ||
232 | } | ||
233 | |||
234 | int proc_lasat_prid(ctl_table *table, int write, | 160 | int proc_lasat_prid(ctl_table *table, int write, |
235 | void *buffer, size_t *lenp, loff_t *ppos) | 161 | void *buffer, size_t *lenp, loff_t *ppos) |
236 | { | 162 | { |
@@ -252,115 +178,92 @@ extern int lasat_boot_to_service; | |||
252 | 178 | ||
253 | static ctl_table lasat_table[] = { | 179 | static ctl_table lasat_table[] = { |
254 | { | 180 | { |
255 | .ctl_name = CTL_UNNUMBERED, | ||
256 | .procname = "cpu-hz", | 181 | .procname = "cpu-hz", |
257 | .data = &lasat_board_info.li_cpu_hz, | 182 | .data = &lasat_board_info.li_cpu_hz, |
258 | .maxlen = sizeof(int), | 183 | .maxlen = sizeof(int), |
259 | .mode = 0444, | 184 | .mode = 0444, |
260 | .proc_handler = &proc_dointvec, | 185 | .proc_handler = proc_dointvec, |
261 | .strategy = &sysctl_intvec | ||
262 | }, | 186 | }, |
263 | { | 187 | { |
264 | .ctl_name = CTL_UNNUMBERED, | ||
265 | .procname = "bus-hz", | 188 | .procname = "bus-hz", |
266 | .data = &lasat_board_info.li_bus_hz, | 189 | .data = &lasat_board_info.li_bus_hz, |
267 | .maxlen = sizeof(int), | 190 | .maxlen = sizeof(int), |
268 | .mode = 0444, | 191 | .mode = 0444, |
269 | .proc_handler = &proc_dointvec, | 192 | .proc_handler = proc_dointvec, |
270 | .strategy = &sysctl_intvec | ||
271 | }, | 193 | }, |
272 | { | 194 | { |
273 | .ctl_name = CTL_UNNUMBERED, | ||
274 | .procname = "bmid", | 195 | .procname = "bmid", |
275 | .data = &lasat_board_info.li_bmid, | 196 | .data = &lasat_board_info.li_bmid, |
276 | .maxlen = sizeof(int), | 197 | .maxlen = sizeof(int), |
277 | .mode = 0444, | 198 | .mode = 0444, |
278 | .proc_handler = &proc_dointvec, | 199 | .proc_handler = proc_dointvec, |
279 | .strategy = &sysctl_intvec | ||
280 | }, | 200 | }, |
281 | { | 201 | { |
282 | .ctl_name = CTL_UNNUMBERED, | ||
283 | .procname = "prid", | 202 | .procname = "prid", |
284 | .data = &lasat_board_info.li_prid, | 203 | .data = &lasat_board_info.li_prid, |
285 | .maxlen = sizeof(int), | 204 | .maxlen = sizeof(int), |
286 | .mode = 0644, | 205 | .mode = 0644, |
287 | .proc_handler = &proc_lasat_prid, | 206 | .proc_handler = proc_lasat_prid, |
288 | .strategy = &sysctl_lasat_prid | ||
289 | }, | 207 | }, |
290 | #ifdef CONFIG_INET | 208 | #ifdef CONFIG_INET |
291 | { | 209 | { |
292 | .ctl_name = CTL_UNNUMBERED, | ||
293 | .procname = "ipaddr", | 210 | .procname = "ipaddr", |
294 | .data = &lasat_board_info.li_eeprom_info.ipaddr, | 211 | .data = &lasat_board_info.li_eeprom_info.ipaddr, |
295 | .maxlen = sizeof(int), | 212 | .maxlen = sizeof(int), |
296 | .mode = 0644, | 213 | .mode = 0644, |
297 | .proc_handler = &proc_lasat_ip, | 214 | .proc_handler = proc_lasat_ip, |
298 | .strategy = &sysctl_lasat_intvec | ||
299 | }, | 215 | }, |
300 | { | 216 | { |
301 | .ctl_name = CTL_UNNUMBERED, | ||
302 | .procname = "netmask", | 217 | .procname = "netmask", |
303 | .data = &lasat_board_info.li_eeprom_info.netmask, | 218 | .data = &lasat_board_info.li_eeprom_info.netmask, |
304 | .maxlen = sizeof(int), | 219 | .maxlen = sizeof(int), |
305 | .mode = 0644, | 220 | .mode = 0644, |
306 | .proc_handler = &proc_lasat_ip, | 221 | .proc_handler = proc_lasat_ip, |
307 | .strategy = &sysctl_lasat_intvec | ||
308 | }, | 222 | }, |
309 | #endif | 223 | #endif |
310 | { | 224 | { |
311 | .ctl_name = CTL_UNNUMBERED, | ||
312 | .procname = "passwd_hash", | 225 | .procname = "passwd_hash", |
313 | .data = &lasat_board_info.li_eeprom_info.passwd_hash, | 226 | .data = &lasat_board_info.li_eeprom_info.passwd_hash, |
314 | .maxlen = | 227 | .maxlen = |
315 | sizeof(lasat_board_info.li_eeprom_info.passwd_hash), | 228 | sizeof(lasat_board_info.li_eeprom_info.passwd_hash), |
316 | .mode = 0600, | 229 | .mode = 0600, |
317 | .proc_handler = &proc_dolasatstring, | 230 | .proc_handler = proc_dolasatstring, |
318 | .strategy = &sysctl_lasatstring | ||
319 | }, | 231 | }, |
320 | { | 232 | { |
321 | .ctl_name = CTL_UNNUMBERED, | ||
322 | .procname = "boot-service", | 233 | .procname = "boot-service", |
323 | .data = &lasat_boot_to_service, | 234 | .data = &lasat_boot_to_service, |
324 | .maxlen = sizeof(int), | 235 | .maxlen = sizeof(int), |
325 | .mode = 0644, | 236 | .mode = 0644, |
326 | .proc_handler = &proc_dointvec, | 237 | .proc_handler = proc_dointvec, |
327 | .strategy = &sysctl_intvec | ||
328 | }, | 238 | }, |
329 | #ifdef CONFIG_DS1603 | 239 | #ifdef CONFIG_DS1603 |
330 | { | 240 | { |
331 | .ctl_name = CTL_UNNUMBERED, | ||
332 | .procname = "rtc", | 241 | .procname = "rtc", |
333 | .data = &rtctmp, | 242 | .data = &rtctmp, |
334 | .maxlen = sizeof(int), | 243 | .maxlen = sizeof(int), |
335 | .mode = 0644, | 244 | .mode = 0644, |
336 | .proc_handler = &proc_dolasatrtc, | 245 | .proc_handler = proc_dolasatrtc, |
337 | .strategy = &sysctl_lasat_rtc | ||
338 | }, | 246 | }, |
339 | #endif | 247 | #endif |
340 | { | 248 | { |
341 | .ctl_name = CTL_UNNUMBERED, | ||
342 | .procname = "namestr", | 249 | .procname = "namestr", |
343 | .data = &lasat_board_info.li_namestr, | 250 | .data = &lasat_board_info.li_namestr, |
344 | .maxlen = sizeof(lasat_board_info.li_namestr), | 251 | .maxlen = sizeof(lasat_board_info.li_namestr), |
345 | .mode = 0444, | 252 | .mode = 0444, |
346 | .proc_handler = &proc_dostring, | 253 | .proc_handler = proc_dostring, |
347 | .strategy = &sysctl_string | ||
348 | }, | 254 | }, |
349 | { | 255 | { |
350 | .ctl_name = CTL_UNNUMBERED, | ||
351 | .procname = "typestr", | 256 | .procname = "typestr", |
352 | .data = &lasat_board_info.li_typestr, | 257 | .data = &lasat_board_info.li_typestr, |
353 | .maxlen = sizeof(lasat_board_info.li_typestr), | 258 | .maxlen = sizeof(lasat_board_info.li_typestr), |
354 | .mode = 0444, | 259 | .mode = 0444, |
355 | .proc_handler = &proc_dostring, | 260 | .proc_handler = proc_dostring, |
356 | .strategy = &sysctl_string | ||
357 | }, | 261 | }, |
358 | {} | 262 | {} |
359 | }; | 263 | }; |
360 | 264 | ||
361 | static ctl_table lasat_root_table[] = { | 265 | static ctl_table lasat_root_table[] = { |
362 | { | 266 | { |
363 | .ctl_name = CTL_UNNUMBERED, | ||
364 | .procname = "lasat", | 267 | .procname = "lasat", |
365 | .mode = 0555, | 268 | .mode = 0555, |
366 | .child = lasat_table | 269 | .child = lasat_table |