diff options
308 files changed, 2878 insertions, 3471 deletions
diff --git a/.gitignore b/.gitignore index e1d5c17c12c2..9eb4b7711499 100644 --- a/.gitignore +++ b/.gitignore | |||
@@ -20,6 +20,7 @@ | |||
20 | # Top-level generic files | 20 | # Top-level generic files |
21 | # | 21 | # |
22 | tags | 22 | tags |
23 | TAGS | ||
23 | vmlinux* | 24 | vmlinux* |
24 | System.map | 25 | System.map |
25 | Module.symvers | 26 | Module.symvers |
@@ -45,7 +45,7 @@ S: Longford, Ireland | |||
45 | S: Sydney, Australia | 45 | S: Sydney, Australia |
46 | 46 | ||
47 | N: Tigran A. Aivazian | 47 | N: Tigran A. Aivazian |
48 | E: tigran@veritas.com | 48 | E: tigran@aivazian.fsnet.co.uk |
49 | W: http://www.moses.uklinux.net/patches | 49 | W: http://www.moses.uklinux.net/patches |
50 | D: BFS filesystem | 50 | D: BFS filesystem |
51 | D: Intel IA32 CPU microcode update support | 51 | D: Intel IA32 CPU microcode update support |
diff --git a/Documentation/ABI/testing/sysfs-power b/Documentation/ABI/testing/sysfs-power index d882f8093871..dcff4d0623ad 100644 --- a/Documentation/ABI/testing/sysfs-power +++ b/Documentation/ABI/testing/sysfs-power | |||
@@ -21,7 +21,7 @@ Description: | |||
21 | these states. | 21 | these states. |
22 | 22 | ||
23 | What: /sys/power/disk | 23 | What: /sys/power/disk |
24 | Date: August 2006 | 24 | Date: September 2006 |
25 | Contact: Rafael J. Wysocki <rjw@sisk.pl> | 25 | Contact: Rafael J. Wysocki <rjw@sisk.pl> |
26 | Description: | 26 | Description: |
27 | The /sys/power/disk file controls the operating mode of the | 27 | The /sys/power/disk file controls the operating mode of the |
@@ -39,6 +39,19 @@ Description: | |||
39 | 'reboot' - the memory image will be saved by the kernel and | 39 | 'reboot' - the memory image will be saved by the kernel and |
40 | the system will be rebooted. | 40 | the system will be rebooted. |
41 | 41 | ||
42 | Additionally, /sys/power/disk can be used to turn on one of the | ||
43 | two testing modes of the suspend-to-disk mechanism: 'testproc' | ||
44 | or 'test'. If the suspend-to-disk mechanism is in the | ||
45 | 'testproc' mode, writing 'disk' to /sys/power/state will cause | ||
46 | the kernel to disable nonboot CPUs and freeze tasks, wait for 5 | ||
47 | seconds, unfreeze tasks and enable nonboot CPUs. If it is in | ||
48 | the 'test' mode, writing 'disk' to /sys/power/state will cause | ||
49 | the kernel to disable nonboot CPUs and freeze tasks, shrink | ||
50 | memory, suspend devices, wait for 5 seconds, resume devices, | ||
51 | unfreeze tasks and enable nonboot CPUs. Then, we are able to | ||
52 | look in the log messages and work out, for example, which code | ||
53 | is being slow and which device drivers are misbehaving. | ||
54 | |||
42 | The suspend-to-disk method may be chosen by writing to this | 55 | The suspend-to-disk method may be chosen by writing to this |
43 | file one of the accepted strings: | 56 | file one of the accepted strings: |
44 | 57 | ||
@@ -46,6 +59,8 @@ Description: | |||
46 | 'platform' | 59 | 'platform' |
47 | 'shutdown' | 60 | 'shutdown' |
48 | 'reboot' | 61 | 'reboot' |
62 | 'testproc' | ||
63 | 'test' | ||
49 | 64 | ||
50 | It will only change to 'firmware' or 'platform' if the system | 65 | It will only change to 'firmware' or 'platform' if the system |
51 | supports that. | 66 | supports that. |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 3bf5086574bc..db9499adbed4 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -9,7 +9,7 @@ | |||
9 | DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \ | 9 | DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \ |
10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ | 10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ |
11 | procfs-guide.xml writing_usb_driver.xml \ | 11 | procfs-guide.xml writing_usb_driver.xml \ |
12 | kernel-api.xml filesystems.xml journal-api.xml lsm.xml usb.xml \ | 12 | kernel-api.xml filesystems.xml lsm.xml usb.xml \ |
13 | gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \ | 13 | gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \ |
14 | genericirq.xml | 14 | genericirq.xml |
15 | 15 | ||
diff --git a/Documentation/DocBook/filesystems.tmpl b/Documentation/DocBook/filesystems.tmpl index 4785032fb6ea..39fa2aba7f9b 100644 --- a/Documentation/DocBook/filesystems.tmpl +++ b/Documentation/DocBook/filesystems.tmpl | |||
@@ -98,4 +98,304 @@ | |||
98 | </sect1> | 98 | </sect1> |
99 | </chapter> | 99 | </chapter> |
100 | 100 | ||
101 | <chapter id="LinuxJDBAPI"> | ||
102 | <chapterinfo> | ||
103 | <title>The Linux Journalling API</title> | ||
104 | |||
105 | <authorgroup> | ||
106 | <author> | ||
107 | <firstname>Roger</firstname> | ||
108 | <surname>Gammans</surname> | ||
109 | <affiliation> | ||
110 | <address> | ||
111 | <email>rgammans@computer-surgery.co.uk</email> | ||
112 | </address> | ||
113 | </affiliation> | ||
114 | </author> | ||
115 | </authorgroup> | ||
116 | |||
117 | <authorgroup> | ||
118 | <author> | ||
119 | <firstname>Stephen</firstname> | ||
120 | <surname>Tweedie</surname> | ||
121 | <affiliation> | ||
122 | <address> | ||
123 | <email>sct@redhat.com</email> | ||
124 | </address> | ||
125 | </affiliation> | ||
126 | </author> | ||
127 | </authorgroup> | ||
128 | |||
129 | <copyright> | ||
130 | <year>2002</year> | ||
131 | <holder>Roger Gammans</holder> | ||
132 | </copyright> | ||
133 | </chapterinfo> | ||
134 | |||
135 | <title>The Linux Journalling API</title> | ||
136 | |||
137 | <sect1> | ||
138 | <title>Overview</title> | ||
139 | <sect2> | ||
140 | <title>Details</title> | ||
141 | <para> | ||
142 | The journalling layer is easy to use. You need to | ||
143 | first of all create a journal_t data structure. There are | ||
144 | two calls to do this dependent on how you decide to allocate the physical | ||
145 | media on which the journal resides. The journal_init_inode() call | ||
146 | is for journals stored in filesystem inodes, or the journal_init_dev() | ||
147 | call can be use for journal stored on a raw device (in a continuous range | ||
148 | of blocks). A journal_t is a typedef for a struct pointer, so when | ||
149 | you are finally finished make sure you call journal_destroy() on it | ||
150 | to free up any used kernel memory. | ||
151 | </para> | ||
152 | |||
153 | <para> | ||
154 | Once you have got your journal_t object you need to 'mount' or load the journal | ||
155 | file, unless of course you haven't initialised it yet - in which case you | ||
156 | need to call journal_create(). | ||
157 | </para> | ||
158 | |||
159 | <para> | ||
160 | Most of the time however your journal file will already have been created, but | ||
161 | before you load it you must call journal_wipe() to empty the journal file. | ||
162 | Hang on, you say , what if the filesystem wasn't cleanly umount()'d . Well, it is the | ||
163 | job of the client file system to detect this and skip the call to journal_wipe(). | ||
164 | </para> | ||
165 | |||
166 | <para> | ||
167 | In either case the next call should be to journal_load() which prepares the | ||
168 | journal file for use. Note that journal_wipe(..,0) calls journal_skip_recovery() | ||
169 | for you if it detects any outstanding transactions in the journal and similarly | ||
170 | journal_load() will call journal_recover() if necessary. | ||
171 | I would advise reading fs/ext3/super.c for examples on this stage. | ||
172 | [RGG: Why is the journal_wipe() call necessary - doesn't this needlessly | ||
173 | complicate the API. Or isn't a good idea for the journal layer to hide | ||
174 | dirty mounts from the client fs] | ||
175 | </para> | ||
176 | |||
177 | <para> | ||
178 | Now you can go ahead and start modifying the underlying | ||
179 | filesystem. Almost. | ||
180 | </para> | ||
181 | |||
182 | <para> | ||
183 | |||
184 | You still need to actually journal your filesystem changes, this | ||
185 | is done by wrapping them into transactions. Additionally you | ||
186 | also need to wrap the modification of each of the buffers | ||
187 | with calls to the journal layer, so it knows what the modifications | ||
188 | you are actually making are. To do this use journal_start() which | ||
189 | returns a transaction handle. | ||
190 | </para> | ||
191 | |||
192 | <para> | ||
193 | journal_start() | ||
194 | and its counterpart journal_stop(), which indicates the end of a transaction | ||
195 | are nestable calls, so you can reenter a transaction if necessary, | ||
196 | but remember you must call journal_stop() the same number of times as | ||
197 | journal_start() before the transaction is completed (or more accurately | ||
198 | leaves the update phase). Ext3/VFS makes use of this feature to simplify | ||
199 | quota support. | ||
200 | </para> | ||
201 | |||
202 | <para> | ||
203 | Inside each transaction you need to wrap the modifications to the | ||
204 | individual buffers (blocks). Before you start to modify a buffer you | ||
205 | need to call journal_get_{create,write,undo}_access() as appropriate, | ||
206 | this allows the journalling layer to copy the unmodified data if it | ||
207 | needs to. After all the buffer may be part of a previously uncommitted | ||
208 | transaction. | ||
209 | At this point you are at last ready to modify a buffer, and once | ||
210 | you are have done so you need to call journal_dirty_{meta,}data(). | ||
211 | Or if you've asked for access to a buffer you now know is now longer | ||
212 | required to be pushed back on the device you can call journal_forget() | ||
213 | in much the same way as you might have used bforget() in the past. | ||
214 | </para> | ||
215 | |||
216 | <para> | ||
217 | A journal_flush() may be called at any time to commit and checkpoint | ||
218 | all your transactions. | ||
219 | </para> | ||
220 | |||
221 | <para> | ||
222 | Then at umount time , in your put_super() (2.4) or write_super() (2.5) | ||
223 | you can then call journal_destroy() to clean up your in-core journal object. | ||
224 | </para> | ||
225 | |||
226 | <para> | ||
227 | Unfortunately there a couple of ways the journal layer can cause a deadlock. | ||
228 | The first thing to note is that each task can only have | ||
229 | a single outstanding transaction at any one time, remember nothing | ||
230 | commits until the outermost journal_stop(). This means | ||
231 | you must complete the transaction at the end of each file/inode/address | ||
232 | etc. operation you perform, so that the journalling system isn't re-entered | ||
233 | on another journal. Since transactions can't be nested/batched | ||
234 | across differing journals, and another filesystem other than | ||
235 | yours (say ext3) may be modified in a later syscall. | ||
236 | </para> | ||
237 | |||
238 | <para> | ||
239 | The second case to bear in mind is that journal_start() can | ||
240 | block if there isn't enough space in the journal for your transaction | ||
241 | (based on the passed nblocks param) - when it blocks it merely(!) needs to | ||
242 | wait for transactions to complete and be committed from other tasks, | ||
243 | so essentially we are waiting for journal_stop(). So to avoid | ||
244 | deadlocks you must treat journal_start/stop() as if they | ||
245 | were semaphores and include them in your semaphore ordering rules to prevent | ||
246 | deadlocks. Note that journal_extend() has similar blocking behaviour to | ||
247 | journal_start() so you can deadlock here just as easily as on journal_start(). | ||
248 | </para> | ||
249 | |||
250 | <para> | ||
251 | Try to reserve the right number of blocks the first time. ;-). This will | ||
252 | be the maximum number of blocks you are going to touch in this transaction. | ||
253 | I advise having a look at at least ext3_jbd.h to see the basis on which | ||
254 | ext3 uses to make these decisions. | ||
255 | </para> | ||
256 | |||
257 | <para> | ||
258 | Another wriggle to watch out for is your on-disk block allocation strategy. | ||
259 | why? Because, if you undo a delete, you need to ensure you haven't reused any | ||
260 | of the freed blocks in a later transaction. One simple way of doing this | ||
261 | is make sure any blocks you allocate only have checkpointed transactions | ||
262 | listed against them. Ext3 does this in ext3_test_allocatable(). | ||
263 | </para> | ||
264 | |||
265 | <para> | ||
266 | Lock is also providing through journal_{un,}lock_updates(), | ||
267 | ext3 uses this when it wants a window with a clean and stable fs for a moment. | ||
268 | eg. | ||
269 | </para> | ||
270 | |||
271 | <programlisting> | ||
272 | |||
273 | journal_lock_updates() //stop new stuff happening.. | ||
274 | journal_flush() // checkpoint everything. | ||
275 | ..do stuff on stable fs | ||
276 | journal_unlock_updates() // carry on with filesystem use. | ||
277 | </programlisting> | ||
278 | |||
279 | <para> | ||
280 | The opportunities for abuse and DOS attacks with this should be obvious, | ||
281 | if you allow unprivileged userspace to trigger codepaths containing these | ||
282 | calls. | ||
283 | </para> | ||
284 | |||
285 | <para> | ||
286 | A new feature of jbd since 2.5.25 is commit callbacks with the new | ||
287 | journal_callback_set() function you can now ask the journalling layer | ||
288 | to call you back when the transaction is finally committed to disk, so that | ||
289 | you can do some of your own management. The key to this is the journal_callback | ||
290 | struct, this maintains the internal callback information but you can | ||
291 | extend it like this:- | ||
292 | </para> | ||
293 | <programlisting> | ||
294 | struct myfs_callback_s { | ||
295 | //Data structure element required by jbd.. | ||
296 | struct journal_callback for_jbd; | ||
297 | // Stuff for myfs allocated together. | ||
298 | myfs_inode* i_commited; | ||
299 | |||
300 | } | ||
301 | </programlisting> | ||
302 | |||
303 | <para> | ||
304 | this would be useful if you needed to know when data was committed to a | ||
305 | particular inode. | ||
306 | </para> | ||
307 | |||
308 | </sect2> | ||
309 | |||
310 | <sect2> | ||
311 | <title>Summary</title> | ||
312 | <para> | ||
313 | Using the journal is a matter of wrapping the different context changes, | ||
314 | being each mount, each modification (transaction) and each changed buffer | ||
315 | to tell the journalling layer about them. | ||
316 | </para> | ||
317 | |||
318 | <para> | ||
319 | Here is a some pseudo code to give you an idea of how it works, as | ||
320 | an example. | ||
321 | </para> | ||
322 | |||
323 | <programlisting> | ||
324 | journal_t* my_jnrl = journal_create(); | ||
325 | journal_init_{dev,inode}(jnrl,...) | ||
326 | if (clean) journal_wipe(); | ||
327 | journal_load(); | ||
328 | |||
329 | foreach(transaction) { /*transactions must be | ||
330 | completed before | ||
331 | a syscall returns to | ||
332 | userspace*/ | ||
333 | |||
334 | handle_t * xct=journal_start(my_jnrl); | ||
335 | foreach(bh) { | ||
336 | journal_get_{create,write,undo}_access(xact,bh); | ||
337 | if ( myfs_modify(bh) ) { /* returns true | ||
338 | if makes changes */ | ||
339 | journal_dirty_{meta,}data(xact,bh); | ||
340 | } else { | ||
341 | journal_forget(bh); | ||
342 | } | ||
343 | } | ||
344 | journal_stop(xct); | ||
345 | } | ||
346 | journal_destroy(my_jrnl); | ||
347 | </programlisting> | ||
348 | </sect2> | ||
349 | |||
350 | </sect1> | ||
351 | |||
352 | <sect1> | ||
353 | <title>Data Types</title> | ||
354 | <para> | ||
355 | The journalling layer uses typedefs to 'hide' the concrete definitions | ||
356 | of the structures used. As a client of the JBD layer you can | ||
357 | just rely on the using the pointer as a magic cookie of some sort. | ||
358 | |||
359 | Obviously the hiding is not enforced as this is 'C'. | ||
360 | </para> | ||
361 | <sect2><title>Structures</title> | ||
362 | !Iinclude/linux/jbd.h | ||
363 | </sect2> | ||
364 | </sect1> | ||
365 | |||
366 | <sect1> | ||
367 | <title>Functions</title> | ||
368 | <para> | ||
369 | The functions here are split into two groups those that | ||
370 | affect a journal as a whole, and those which are used to | ||
371 | manage transactions | ||
372 | </para> | ||
373 | <sect2><title>Journal Level</title> | ||
374 | !Efs/jbd/journal.c | ||
375 | !Ifs/jbd/recovery.c | ||
376 | </sect2> | ||
377 | <sect2><title>Transasction Level</title> | ||
378 | !Efs/jbd/transaction.c | ||
379 | </sect2> | ||
380 | </sect1> | ||
381 | <sect1> | ||
382 | <title>See also</title> | ||
383 | <para> | ||
384 | <citation> | ||
385 | <ulink url="ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/journal-design.ps.gz"> | ||
386 | Journaling the Linux ext2fs Filesystem, LinuxExpo 98, Stephen Tweedie | ||
387 | </ulink> | ||
388 | </citation> | ||
389 | </para> | ||
390 | <para> | ||
391 | <citation> | ||
392 | <ulink url="http://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html"> | ||
393 | Ext3 Journalling FileSystem, OLS 2000, Dr. Stephen Tweedie | ||
394 | </ulink> | ||
395 | </citation> | ||
396 | </para> | ||
397 | </sect1> | ||
398 | |||
399 | </chapter> | ||
400 | |||
101 | </book> | 401 | </book> |
diff --git a/Documentation/DocBook/journal-api.tmpl b/Documentation/DocBook/journal-api.tmpl deleted file mode 100644 index 2077f9a28c19..000000000000 --- a/Documentation/DocBook/journal-api.tmpl +++ /dev/null | |||
@@ -1,333 +0,0 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | ||
3 | "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | ||
4 | |||
5 | <book id="LinuxJBDAPI"> | ||
6 | <bookinfo> | ||
7 | <title>The Linux Journalling API</title> | ||
8 | <authorgroup> | ||
9 | <author> | ||
10 | <firstname>Roger</firstname> | ||
11 | <surname>Gammans</surname> | ||
12 | <affiliation> | ||
13 | <address> | ||
14 | <email>rgammans@computer-surgery.co.uk</email> | ||
15 | </address> | ||
16 | </affiliation> | ||
17 | </author> | ||
18 | </authorgroup> | ||
19 | |||
20 | <authorgroup> | ||
21 | <author> | ||
22 | <firstname>Stephen</firstname> | ||
23 | <surname>Tweedie</surname> | ||
24 | <affiliation> | ||
25 | <address> | ||
26 | <email>sct@redhat.com</email> | ||
27 | </address> | ||
28 | </affiliation> | ||
29 | </author> | ||
30 | </authorgroup> | ||
31 | |||
32 | <copyright> | ||
33 | <year>2002</year> | ||
34 | <holder>Roger Gammans</holder> | ||
35 | </copyright> | ||
36 | |||
37 | <legalnotice> | ||
38 | <para> | ||
39 | This documentation is free software; you can redistribute | ||
40 | it and/or modify it under the terms of the GNU General Public | ||
41 | License as published by the Free Software Foundation; either | ||
42 | version 2 of the License, or (at your option) any later | ||
43 | version. | ||
44 | </para> | ||
45 | |||
46 | <para> | ||
47 | This program is distributed in the hope that it will be | ||
48 | useful, but WITHOUT ANY WARRANTY; without even the implied | ||
49 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
50 | See the GNU General Public License for more details. | ||
51 | </para> | ||
52 | |||
53 | <para> | ||
54 | You should have received a copy of the GNU General Public | ||
55 | License along with this program; if not, write to the Free | ||
56 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
57 | MA 02111-1307 USA | ||
58 | </para> | ||
59 | |||
60 | <para> | ||
61 | For more details see the file COPYING in the source | ||
62 | distribution of Linux. | ||
63 | </para> | ||
64 | </legalnotice> | ||
65 | </bookinfo> | ||
66 | |||
67 | <toc></toc> | ||
68 | |||
69 | <chapter id="Overview"> | ||
70 | <title>Overview</title> | ||
71 | <sect1> | ||
72 | <title>Details</title> | ||
73 | <para> | ||
74 | The journalling layer is easy to use. You need to | ||
75 | first of all create a journal_t data structure. There are | ||
76 | two calls to do this dependent on how you decide to allocate the physical | ||
77 | media on which the journal resides. The journal_init_inode() call | ||
78 | is for journals stored in filesystem inodes, or the journal_init_dev() | ||
79 | call can be use for journal stored on a raw device (in a continuous range | ||
80 | of blocks). A journal_t is a typedef for a struct pointer, so when | ||
81 | you are finally finished make sure you call journal_destroy() on it | ||
82 | to free up any used kernel memory. | ||
83 | </para> | ||
84 | |||
85 | <para> | ||
86 | Once you have got your journal_t object you need to 'mount' or load the journal | ||
87 | file, unless of course you haven't initialised it yet - in which case you | ||
88 | need to call journal_create(). | ||
89 | </para> | ||
90 | |||
91 | <para> | ||
92 | Most of the time however your journal file will already have been created, but | ||
93 | before you load it you must call journal_wipe() to empty the journal file. | ||
94 | Hang on, you say , what if the filesystem wasn't cleanly umount()'d . Well, it is the | ||
95 | job of the client file system to detect this and skip the call to journal_wipe(). | ||
96 | </para> | ||
97 | |||
98 | <para> | ||
99 | In either case the next call should be to journal_load() which prepares the | ||
100 | journal file for use. Note that journal_wipe(..,0) calls journal_skip_recovery() | ||
101 | for you if it detects any outstanding transactions in the journal and similarly | ||
102 | journal_load() will call journal_recover() if necessary. | ||
103 | I would advise reading fs/ext3/super.c for examples on this stage. | ||
104 | [RGG: Why is the journal_wipe() call necessary - doesn't this needlessly | ||
105 | complicate the API. Or isn't a good idea for the journal layer to hide | ||
106 | dirty mounts from the client fs] | ||
107 | </para> | ||
108 | |||
109 | <para> | ||
110 | Now you can go ahead and start modifying the underlying | ||
111 | filesystem. Almost. | ||
112 | </para> | ||
113 | |||
114 | |||
115 | <para> | ||
116 | |||
117 | You still need to actually journal your filesystem changes, this | ||
118 | is done by wrapping them into transactions. Additionally you | ||
119 | also need to wrap the modification of each of the buffers | ||
120 | with calls to the journal layer, so it knows what the modifications | ||
121 | you are actually making are. To do this use journal_start() which | ||
122 | returns a transaction handle. | ||
123 | </para> | ||
124 | |||
125 | <para> | ||
126 | journal_start() | ||
127 | and its counterpart journal_stop(), which indicates the end of a transaction | ||
128 | are nestable calls, so you can reenter a transaction if necessary, | ||
129 | but remember you must call journal_stop() the same number of times as | ||
130 | journal_start() before the transaction is completed (or more accurately | ||
131 | leaves the update phase). Ext3/VFS makes use of this feature to simplify | ||
132 | quota support. | ||
133 | </para> | ||
134 | |||
135 | <para> | ||
136 | Inside each transaction you need to wrap the modifications to the | ||
137 | individual buffers (blocks). Before you start to modify a buffer you | ||
138 | need to call journal_get_{create,write,undo}_access() as appropriate, | ||
139 | this allows the journalling layer to copy the unmodified data if it | ||
140 | needs to. After all the buffer may be part of a previously uncommitted | ||
141 | transaction. | ||
142 | At this point you are at last ready to modify a buffer, and once | ||
143 | you are have done so you need to call journal_dirty_{meta,}data(). | ||
144 | Or if you've asked for access to a buffer you now know is now longer | ||
145 | required to be pushed back on the device you can call journal_forget() | ||
146 | in much the same way as you might have used bforget() in the past. | ||
147 | </para> | ||
148 | |||
149 | <para> | ||
150 | A journal_flush() may be called at any time to commit and checkpoint | ||
151 | all your transactions. | ||
152 | </para> | ||
153 | |||
154 | <para> | ||
155 | Then at umount time , in your put_super() (2.4) or write_super() (2.5) | ||
156 | you can then call journal_destroy() to clean up your in-core journal object. | ||
157 | </para> | ||
158 | |||
159 | |||
160 | <para> | ||
161 | Unfortunately there a couple of ways the journal layer can cause a deadlock. | ||
162 | The first thing to note is that each task can only have | ||
163 | a single outstanding transaction at any one time, remember nothing | ||
164 | commits until the outermost journal_stop(). This means | ||
165 | you must complete the transaction at the end of each file/inode/address | ||
166 | etc. operation you perform, so that the journalling system isn't re-entered | ||
167 | on another journal. Since transactions can't be nested/batched | ||
168 | across differing journals, and another filesystem other than | ||
169 | yours (say ext3) may be modified in a later syscall. | ||
170 | </para> | ||
171 | |||
172 | <para> | ||
173 | The second case to bear in mind is that journal_start() can | ||
174 | block if there isn't enough space in the journal for your transaction | ||
175 | (based on the passed nblocks param) - when it blocks it merely(!) needs to | ||
176 | wait for transactions to complete and be committed from other tasks, | ||
177 | so essentially we are waiting for journal_stop(). So to avoid | ||
178 | deadlocks you must treat journal_start/stop() as if they | ||
179 | were semaphores and include them in your semaphore ordering rules to prevent | ||
180 | deadlocks. Note that journal_extend() has similar blocking behaviour to | ||
181 | journal_start() so you can deadlock here just as easily as on journal_start(). | ||
182 | </para> | ||
183 | |||
184 | <para> | ||
185 | Try to reserve the right number of blocks the first time. ;-). This will | ||
186 | be the maximum number of blocks you are going to touch in this transaction. | ||
187 | I advise having a look at at least ext3_jbd.h to see the basis on which | ||
188 | ext3 uses to make these decisions. | ||
189 | </para> | ||
190 | |||
191 | <para> | ||
192 | Another wriggle to watch out for is your on-disk block allocation strategy. | ||
193 | why? Because, if you undo a delete, you need to ensure you haven't reused any | ||
194 | of the freed blocks in a later transaction. One simple way of doing this | ||
195 | is make sure any blocks you allocate only have checkpointed transactions | ||
196 | listed against them. Ext3 does this in ext3_test_allocatable(). | ||
197 | </para> | ||
198 | |||
199 | <para> | ||
200 | Lock is also providing through journal_{un,}lock_updates(), | ||
201 | ext3 uses this when it wants a window with a clean and stable fs for a moment. | ||
202 | eg. | ||
203 | </para> | ||
204 | |||
205 | <programlisting> | ||
206 | |||
207 | journal_lock_updates() //stop new stuff happening.. | ||
208 | journal_flush() // checkpoint everything. | ||
209 | ..do stuff on stable fs | ||
210 | journal_unlock_updates() // carry on with filesystem use. | ||
211 | </programlisting> | ||
212 | |||
213 | <para> | ||
214 | The opportunities for abuse and DOS attacks with this should be obvious, | ||
215 | if you allow unprivileged userspace to trigger codepaths containing these | ||
216 | calls. | ||
217 | </para> | ||
218 | |||
219 | <para> | ||
220 | A new feature of jbd since 2.5.25 is commit callbacks with the new | ||
221 | journal_callback_set() function you can now ask the journalling layer | ||
222 | to call you back when the transaction is finally committed to disk, so that | ||
223 | you can do some of your own management. The key to this is the journal_callback | ||
224 | struct, this maintains the internal callback information but you can | ||
225 | extend it like this:- | ||
226 | </para> | ||
227 | <programlisting> | ||
228 | struct myfs_callback_s { | ||
229 | //Data structure element required by jbd.. | ||
230 | struct journal_callback for_jbd; | ||
231 | // Stuff for myfs allocated together. | ||
232 | myfs_inode* i_commited; | ||
233 | |||
234 | } | ||
235 | </programlisting> | ||
236 | |||
237 | <para> | ||
238 | this would be useful if you needed to know when data was committed to a | ||
239 | particular inode. | ||
240 | </para> | ||
241 | |||
242 | </sect1> | ||
243 | |||
244 | <sect1> | ||
245 | <title>Summary</title> | ||
246 | <para> | ||
247 | Using the journal is a matter of wrapping the different context changes, | ||
248 | being each mount, each modification (transaction) and each changed buffer | ||
249 | to tell the journalling layer about them. | ||
250 | </para> | ||
251 | |||
252 | <para> | ||
253 | Here is a some pseudo code to give you an idea of how it works, as | ||
254 | an example. | ||
255 | </para> | ||
256 | |||
257 | <programlisting> | ||
258 | journal_t* my_jnrl = journal_create(); | ||
259 | journal_init_{dev,inode}(jnrl,...) | ||
260 | if (clean) journal_wipe(); | ||
261 | journal_load(); | ||
262 | |||
263 | foreach(transaction) { /*transactions must be | ||
264 | completed before | ||
265 | a syscall returns to | ||
266 | userspace*/ | ||
267 | |||
268 | handle_t * xct=journal_start(my_jnrl); | ||
269 | foreach(bh) { | ||
270 | journal_get_{create,write,undo}_access(xact,bh); | ||
271 | if ( myfs_modify(bh) ) { /* returns true | ||
272 | if makes changes */ | ||
273 | journal_dirty_{meta,}data(xact,bh); | ||
274 | } else { | ||
275 | journal_forget(bh); | ||
276 | } | ||
277 | } | ||
278 | journal_stop(xct); | ||
279 | } | ||
280 | journal_destroy(my_jrnl); | ||
281 | </programlisting> | ||
282 | </sect1> | ||
283 | |||
284 | </chapter> | ||
285 | |||
286 | <chapter id="adt"> | ||
287 | <title>Data Types</title> | ||
288 | <para> | ||
289 | The journalling layer uses typedefs to 'hide' the concrete definitions | ||
290 | of the structures used. As a client of the JBD layer you can | ||
291 | just rely on the using the pointer as a magic cookie of some sort. | ||
292 | |||
293 | Obviously the hiding is not enforced as this is 'C'. | ||
294 | </para> | ||
295 | <sect1><title>Structures</title> | ||
296 | !Iinclude/linux/jbd.h | ||
297 | </sect1> | ||
298 | </chapter> | ||
299 | |||
300 | <chapter id="calls"> | ||
301 | <title>Functions</title> | ||
302 | <para> | ||
303 | The functions here are split into two groups those that | ||
304 | affect a journal as a whole, and those which are used to | ||
305 | manage transactions | ||
306 | </para> | ||
307 | <sect1><title>Journal Level</title> | ||
308 | !Efs/jbd/journal.c | ||
309 | !Ifs/jbd/recovery.c | ||
310 | </sect1> | ||
311 | <sect1><title>Transasction Level</title> | ||
312 | !Efs/jbd/transaction.c | ||
313 | </sect1> | ||
314 | </chapter> | ||
315 | <chapter> | ||
316 | <title>See also</title> | ||
317 | <para> | ||
318 | <citation> | ||
319 | <ulink url="ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/journal-design.ps.gz"> | ||
320 | Journaling the Linux ext2fs Filesystem,LinuxExpo 98, Stephen Tweedie | ||
321 | </ulink> | ||
322 | </citation> | ||
323 | </para> | ||
324 | <para> | ||
325 | <citation> | ||
326 | <ulink url="http://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html"> | ||
327 | Ext3 Journalling FileSystem , OLS 2000, Dr. Stephen Tweedie | ||
328 | </ulink> | ||
329 | </citation> | ||
330 | </para> | ||
331 | </chapter> | ||
332 | |||
333 | </book> | ||
diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c index b11792abd6b6..bf2b0e2f87e1 100644 --- a/Documentation/accounting/getdelays.c +++ b/Documentation/accounting/getdelays.c | |||
@@ -49,7 +49,7 @@ __u64 stime, utime; | |||
49 | } | 49 | } |
50 | 50 | ||
51 | /* Maximum size of response requested or message sent */ | 51 | /* Maximum size of response requested or message sent */ |
52 | #define MAX_MSG_SIZE 256 | 52 | #define MAX_MSG_SIZE 1024 |
53 | /* Maximum number of cpus expected to be specified in a cpumask */ | 53 | /* Maximum number of cpus expected to be specified in a cpumask */ |
54 | #define MAX_CPUS 32 | 54 | #define MAX_CPUS 32 |
55 | /* Maximum length of pathname to log file */ | 55 | /* Maximum length of pathname to log file */ |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 1ac3c74646e3..d52c4aaaf17f 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -53,18 +53,6 @@ Who: Mauro Carvalho Chehab <mchehab@brturbo.com.br> | |||
53 | 53 | ||
54 | --------------------------- | 54 | --------------------------- |
55 | 55 | ||
56 | What: sys_sysctl | ||
57 | When: January 2007 | ||
58 | Why: The same information is available through /proc/sys and that is the | ||
59 | interface user space prefers to use. And there do not appear to be | ||
60 | any existing user in user space of sys_sysctl. The additional | ||
61 | maintenance overhead of keeping a set of binary names gets | ||
62 | in the way of doing a good job of maintaining this interface. | ||
63 | |||
64 | Who: Eric Biederman <ebiederm@xmission.com> | ||
65 | |||
66 | --------------------------- | ||
67 | |||
68 | What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) | 56 | What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) |
69 | When: November 2005 | 57 | When: November 2005 |
70 | Files: drivers/pcmcia/: pcmcia_ioctl.c | 58 | Files: drivers/pcmcia/: pcmcia_ioctl.c |
diff --git a/Documentation/kernel-doc-nano-HOWTO.txt b/Documentation/kernel-doc-nano-HOWTO.txt index c65233d430f0..284e7e198e93 100644 --- a/Documentation/kernel-doc-nano-HOWTO.txt +++ b/Documentation/kernel-doc-nano-HOWTO.txt | |||
@@ -17,7 +17,7 @@ are: | |||
17 | special place-holders for where the extracted documentation should | 17 | special place-holders for where the extracted documentation should |
18 | go. | 18 | go. |
19 | 19 | ||
20 | - scripts/docproc.c | 20 | - scripts/basic/docproc.c |
21 | 21 | ||
22 | This is a program for converting SGML template files into SGML | 22 | This is a program for converting SGML template files into SGML |
23 | files. When a file is referenced it is searched for symbols | 23 | files. When a file is referenced it is searched for symbols |
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt index 7f790f66ec68..7751704b6db1 100644 --- a/Documentation/memory-barriers.txt +++ b/Documentation/memory-barriers.txt | |||
@@ -1016,7 +1016,7 @@ There are some more advanced barrier functions: | |||
1016 | 1016 | ||
1017 | (*) set_mb(var, value) | 1017 | (*) set_mb(var, value) |
1018 | 1018 | ||
1019 | This assigns the value to the variable and then inserts at least a write | 1019 | This assigns the value to the variable and then inserts a full memory |
1020 | barrier after it, depending on the function. It isn't guaranteed to | 1020 | barrier after it, depending on the function. It isn't guaranteed to |
1021 | insert anything more than a compiler barrier in a UP compilation. | 1021 | insert anything more than a compiler barrier in a UP compilation. |
1022 | 1022 | ||
diff --git a/Documentation/power/interface.txt b/Documentation/power/interface.txt index a66bec222b16..74311d7e0f3c 100644 --- a/Documentation/power/interface.txt +++ b/Documentation/power/interface.txt | |||
@@ -30,6 +30,17 @@ testing). The system will support either 'firmware' or 'platform', and | |||
30 | that is known a priori. But, the user may choose 'shutdown' or | 30 | that is known a priori. But, the user may choose 'shutdown' or |
31 | 'reboot' as alternatives. | 31 | 'reboot' as alternatives. |
32 | 32 | ||
33 | Additionally, /sys/power/disk can be used to turn on one of the two testing | ||
34 | modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the | ||
35 | suspend-to-disk mechanism is in the 'testproc' mode, writing 'disk' to | ||
36 | /sys/power/state will cause the kernel to disable nonboot CPUs and freeze | ||
37 | tasks, wait for 5 seconds, unfreeze tasks and enable nonboot CPUs. If it is | ||
38 | in the 'test' mode, writing 'disk' to /sys/power/state will cause the kernel | ||
39 | to disable nonboot CPUs and freeze tasks, shrink memory, suspend devices, wait | ||
40 | for 5 seconds, resume devices, unfreeze tasks and enable nonboot CPUs. Then, | ||
41 | we are able to look in the log messages and work out, for example, which code | ||
42 | is being slow and which device drivers are misbehaving. | ||
43 | |||
33 | Reading from this file will display what the mode is currently set | 44 | Reading from this file will display what the mode is currently set |
34 | to. Writing to this file will accept one of | 45 | to. Writing to this file will accept one of |
35 | 46 | ||
@@ -37,6 +48,8 @@ to. Writing to this file will accept one of | |||
37 | 'platform' | 48 | 'platform' |
38 | 'shutdown' | 49 | 'shutdown' |
39 | 'reboot' | 50 | 'reboot' |
51 | 'testproc' | ||
52 | 'test' | ||
40 | 53 | ||
41 | It will only change to 'firmware' or 'platform' if the system supports | 54 | It will only change to 'firmware' or 'platform' if the system supports |
42 | it. | 55 | it. |
diff --git a/Documentation/usb/usb-serial.txt b/Documentation/usb/usb-serial.txt index 8dc2bacc8f1f..50436e1663ea 100644 --- a/Documentation/usb/usb-serial.txt +++ b/Documentation/usb/usb-serial.txt | |||
@@ -428,12 +428,6 @@ Options supported: | |||
428 | See http://www.uuhaus.de/linux/palmconnect.html for up-to-date | 428 | See http://www.uuhaus.de/linux/palmconnect.html for up-to-date |
429 | information on this driver. | 429 | information on this driver. |
430 | 430 | ||
431 | AIRcable USB Dongle Bluetooth driver | ||
432 | If there is the cdc_acm driver loaded in the system, you will find that the | ||
433 | cdc_acm claims the device before AIRcable can. This is simply corrected | ||
434 | by unloading both modules and then loading the aircable module before | ||
435 | cdc_acm module | ||
436 | |||
437 | Generic Serial driver | 431 | Generic Serial driver |
438 | 432 | ||
439 | If your device is not one of the above listed devices, compatible with | 433 | If your device is not one of the above listed devices, compatible with |
diff --git a/MAINTAINERS b/MAINTAINERS index d708702aba2f..8732daeae303 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -493,7 +493,7 @@ S: Maintained | |||
493 | 493 | ||
494 | BFS FILE SYSTEM | 494 | BFS FILE SYSTEM |
495 | P: Tigran A. Aivazian | 495 | P: Tigran A. Aivazian |
496 | M: tigran@veritas.com | 496 | M: tigran@aivazian.fsnet.co.uk |
497 | L: linux-kernel@vger.kernel.org | 497 | L: linux-kernel@vger.kernel.org |
498 | S: Maintained | 498 | S: Maintained |
499 | 499 | ||
@@ -1513,7 +1513,7 @@ S: Maintained | |||
1513 | 1513 | ||
1514 | INTEL IA32 MICROCODE UPDATE SUPPORT | 1514 | INTEL IA32 MICROCODE UPDATE SUPPORT |
1515 | P: Tigran Aivazian | 1515 | P: Tigran Aivazian |
1516 | M: tigran@veritas.com | 1516 | M: tigran@aivazian.fsnet.co.uk |
1517 | S: Maintained | 1517 | S: Maintained |
1518 | 1518 | ||
1519 | INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT | 1519 | INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 2 | 1 | VERSION = 2 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 19 | 3 | SUBLEVEL = 19 |
4 | EXTRAVERSION =-rc4 | 4 | EXTRAVERSION =-rc5 |
5 | NAME=Avast! A bilge rat! | 5 | NAME=Avast! A bilge rat! |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/alpha/kernel/srm_env.c b/arch/alpha/kernel/srm_env.c index 990ac61028f8..f7dd081d57ff 100644 --- a/arch/alpha/kernel/srm_env.c +++ b/arch/alpha/kernel/srm_env.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * srm_env.c - Access to SRM environment | 2 | * srm_env.c - Access to SRM environment |
3 | * variables through linux' procfs | 3 | * variables through linux' procfs |
4 | * | 4 | * |
5 | * Copyright (C) 2001-2002 Jan-Benedict Glaw <jbglaw@lug-owl.de> | 5 | * (C) 2001,2002,2006 by Jan-Benedict Glaw <jbglaw@lug-owl.de> |
6 | * | 6 | * |
7 | * This driver is at all a modified version of Erik Mouw's | 7 | * This driver is at all a modified version of Erik Mouw's |
8 | * Documentation/DocBook/procfs_example.c, so: thank | 8 | * Documentation/DocBook/procfs_example.c, so: thank |
@@ -21,7 +21,7 @@ | |||
21 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR | 21 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
22 | * PURPOSE. See the GNU General Public License for more | 22 | * PURPOSE. See the GNU General Public License for more |
23 | * details. | 23 | * details. |
24 | * | 24 | * |
25 | * You should have received a copy of the GNU General Public | 25 | * You should have received a copy of the GNU General Public |
26 | * License along with this program; if not, write to the | 26 | * License along with this program; if not, write to the |
27 | * Free Software Foundation, Inc., 59 Temple Place, | 27 | * Free Software Foundation, Inc., 59 Temple Place, |
@@ -29,33 +29,6 @@ | |||
29 | * | 29 | * |
30 | */ | 30 | */ |
31 | 31 | ||
32 | /* | ||
33 | * Changelog | ||
34 | * ~~~~~~~~~ | ||
35 | * | ||
36 | * Thu, 22 Aug 2002 15:10:43 +0200 | ||
37 | * - Update Config.help entry. I got a number of emails asking | ||
38 | * me to tell their senders if they could make use of this | ||
39 | * piece of code... So: "SRM is something like BIOS for your | ||
40 | * Alpha" | ||
41 | * - Update code formatting a bit to better conform CodingStyle | ||
42 | * rules. | ||
43 | * - So this is v0.0.5, with no changes (except formatting) | ||
44 | * | ||
45 | * Wed, 22 May 2002 00:11:21 +0200 | ||
46 | * - Fix typo on comment (SRC -> SRM) | ||
47 | * - Call this "Version 0.0.4" | ||
48 | * | ||
49 | * Tue, 9 Apr 2002 18:44:40 +0200 | ||
50 | * - Implement access by variable name and additionally | ||
51 | * by number. This is done by creating two subdirectories | ||
52 | * where one holds all names (like the old directory | ||
53 | * did) and the other holding 256 files named like "0", | ||
54 | * "1" and so on. | ||
55 | * - Call this "Version 0.0.3" | ||
56 | * | ||
57 | */ | ||
58 | |||
59 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
60 | #include <linux/module.h> | 33 | #include <linux/module.h> |
61 | #include <linux/init.h> | 34 | #include <linux/init.h> |
@@ -67,7 +40,7 @@ | |||
67 | #define BASE_DIR "srm_environment" /* Subdir in /proc/ */ | 40 | #define BASE_DIR "srm_environment" /* Subdir in /proc/ */ |
68 | #define NAMED_DIR "named_variables" /* Subdir for known variables */ | 41 | #define NAMED_DIR "named_variables" /* Subdir for known variables */ |
69 | #define NUMBERED_DIR "numbered_variables" /* Subdir for all variables */ | 42 | #define NUMBERED_DIR "numbered_variables" /* Subdir for all variables */ |
70 | #define VERSION "0.0.5" /* Module version */ | 43 | #define VERSION "0.0.6" /* Module version */ |
71 | #define NAME "srm_env" /* Module name */ | 44 | #define NAME "srm_env" /* Module name */ |
72 | 45 | ||
73 | MODULE_AUTHOR("Jan-Benedict Glaw <jbglaw@lug-owl.de>"); | 46 | MODULE_AUTHOR("Jan-Benedict Glaw <jbglaw@lug-owl.de>"); |
@@ -106,7 +79,6 @@ static srm_env_t srm_named_entries[] = { | |||
106 | static srm_env_t srm_numbered_entries[256]; | 79 | static srm_env_t srm_numbered_entries[256]; |
107 | 80 | ||
108 | 81 | ||
109 | |||
110 | static int | 82 | static int |
111 | srm_env_read(char *page, char **start, off_t off, int count, int *eof, | 83 | srm_env_read(char *page, char **start, off_t off, int count, int *eof, |
112 | void *data) | 84 | void *data) |
@@ -115,21 +87,23 @@ srm_env_read(char *page, char **start, off_t off, int count, int *eof, | |||
115 | unsigned long ret; | 87 | unsigned long ret; |
116 | srm_env_t *entry; | 88 | srm_env_t *entry; |
117 | 89 | ||
118 | if(off != 0) | 90 | if (off != 0) { |
119 | return -EFAULT; | 91 | *eof = 1; |
92 | return 0; | ||
93 | } | ||
120 | 94 | ||
121 | entry = (srm_env_t *) data; | 95 | entry = (srm_env_t *) data; |
122 | ret = callback_getenv(entry->id, page, count); | 96 | ret = callback_getenv(entry->id, page, count); |
123 | 97 | ||
124 | if((ret >> 61) == 0) | 98 | if ((ret >> 61) == 0) { |
125 | nbytes = (int) ret; | 99 | nbytes = (int) ret; |
126 | else | 100 | *eof = 1; |
101 | } else | ||
127 | nbytes = -EFAULT; | 102 | nbytes = -EFAULT; |
128 | 103 | ||
129 | return nbytes; | 104 | return nbytes; |
130 | } | 105 | } |
131 | 106 | ||
132 | |||
133 | static int | 107 | static int |
134 | srm_env_write(struct file *file, const char __user *buffer, unsigned long count, | 108 | srm_env_write(struct file *file, const char __user *buffer, unsigned long count, |
135 | void *data) | 109 | void *data) |
@@ -155,7 +129,7 @@ srm_env_write(struct file *file, const char __user *buffer, unsigned long count, | |||
155 | 129 | ||
156 | ret1 = callback_setenv(entry->id, buf, count); | 130 | ret1 = callback_setenv(entry->id, buf, count); |
157 | if ((ret1 >> 61) == 0) { | 131 | if ((ret1 >> 61) == 0) { |
158 | do | 132 | do |
159 | ret2 = callback_save_env(); | 133 | ret2 = callback_save_env(); |
160 | while((ret2 >> 61) == 1); | 134 | while((ret2 >> 61) == 1); |
161 | res = (int) ret1; | 135 | res = (int) ret1; |
@@ -172,14 +146,14 @@ srm_env_cleanup(void) | |||
172 | srm_env_t *entry; | 146 | srm_env_t *entry; |
173 | unsigned long var_num; | 147 | unsigned long var_num; |
174 | 148 | ||
175 | if(base_dir) { | 149 | if (base_dir) { |
176 | /* | 150 | /* |
177 | * Remove named entries | 151 | * Remove named entries |
178 | */ | 152 | */ |
179 | if(named_dir) { | 153 | if (named_dir) { |
180 | entry = srm_named_entries; | 154 | entry = srm_named_entries; |
181 | while(entry->name != NULL && entry->id != 0) { | 155 | while (entry->name != NULL && entry->id != 0) { |
182 | if(entry->proc_entry) { | 156 | if (entry->proc_entry) { |
183 | remove_proc_entry(entry->name, | 157 | remove_proc_entry(entry->name, |
184 | named_dir); | 158 | named_dir); |
185 | entry->proc_entry = NULL; | 159 | entry->proc_entry = NULL; |
@@ -192,11 +166,11 @@ srm_env_cleanup(void) | |||
192 | /* | 166 | /* |
193 | * Remove numbered entries | 167 | * Remove numbered entries |
194 | */ | 168 | */ |
195 | if(numbered_dir) { | 169 | if (numbered_dir) { |
196 | for(var_num = 0; var_num <= 255; var_num++) { | 170 | for (var_num = 0; var_num <= 255; var_num++) { |
197 | entry = &srm_numbered_entries[var_num]; | 171 | entry = &srm_numbered_entries[var_num]; |
198 | 172 | ||
199 | if(entry->proc_entry) { | 173 | if (entry->proc_entry) { |
200 | remove_proc_entry(entry->name, | 174 | remove_proc_entry(entry->name, |
201 | numbered_dir); | 175 | numbered_dir); |
202 | entry->proc_entry = NULL; | 176 | entry->proc_entry = NULL; |
@@ -212,7 +186,6 @@ srm_env_cleanup(void) | |||
212 | return; | 186 | return; |
213 | } | 187 | } |
214 | 188 | ||
215 | |||
216 | static int __init | 189 | static int __init |
217 | srm_env_init(void) | 190 | srm_env_init(void) |
218 | { | 191 | { |
@@ -222,7 +195,7 @@ srm_env_init(void) | |||
222 | /* | 195 | /* |
223 | * Check system | 196 | * Check system |
224 | */ | 197 | */ |
225 | if(!alpha_using_srm) { | 198 | if (!alpha_using_srm) { |
226 | printk(KERN_INFO "%s: This Alpha system doesn't " | 199 | printk(KERN_INFO "%s: This Alpha system doesn't " |
227 | "know about SRM (or you've booted " | 200 | "know about SRM (or you've booted " |
228 | "SRM->MILO->Linux, which gets " | 201 | "SRM->MILO->Linux, which gets " |
@@ -233,14 +206,14 @@ srm_env_init(void) | |||
233 | /* | 206 | /* |
234 | * Init numbers | 207 | * Init numbers |
235 | */ | 208 | */ |
236 | for(var_num = 0; var_num <= 255; var_num++) | 209 | for (var_num = 0; var_num <= 255; var_num++) |
237 | sprintf(number[var_num], "%ld", var_num); | 210 | sprintf(number[var_num], "%ld", var_num); |
238 | 211 | ||
239 | /* | 212 | /* |
240 | * Create base directory | 213 | * Create base directory |
241 | */ | 214 | */ |
242 | base_dir = proc_mkdir(BASE_DIR, NULL); | 215 | base_dir = proc_mkdir(BASE_DIR, NULL); |
243 | if(base_dir == NULL) { | 216 | if (!base_dir) { |
244 | printk(KERN_ERR "Couldn't create base dir /proc/%s\n", | 217 | printk(KERN_ERR "Couldn't create base dir /proc/%s\n", |
245 | BASE_DIR); | 218 | BASE_DIR); |
246 | goto cleanup; | 219 | goto cleanup; |
@@ -251,7 +224,7 @@ srm_env_init(void) | |||
251 | * Create per-name subdirectory | 224 | * Create per-name subdirectory |
252 | */ | 225 | */ |
253 | named_dir = proc_mkdir(NAMED_DIR, base_dir); | 226 | named_dir = proc_mkdir(NAMED_DIR, base_dir); |
254 | if(named_dir == NULL) { | 227 | if (!named_dir) { |
255 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", | 228 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", |
256 | BASE_DIR, NAMED_DIR); | 229 | BASE_DIR, NAMED_DIR); |
257 | goto cleanup; | 230 | goto cleanup; |
@@ -262,7 +235,7 @@ srm_env_init(void) | |||
262 | * Create per-number subdirectory | 235 | * Create per-number subdirectory |
263 | */ | 236 | */ |
264 | numbered_dir = proc_mkdir(NUMBERED_DIR, base_dir); | 237 | numbered_dir = proc_mkdir(NUMBERED_DIR, base_dir); |
265 | if(numbered_dir == NULL) { | 238 | if (!numbered_dir) { |
266 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", | 239 | printk(KERN_ERR "Couldn't create dir /proc/%s/%s\n", |
267 | BASE_DIR, NUMBERED_DIR); | 240 | BASE_DIR, NUMBERED_DIR); |
268 | goto cleanup; | 241 | goto cleanup; |
@@ -274,10 +247,10 @@ srm_env_init(void) | |||
274 | * Create all named nodes | 247 | * Create all named nodes |
275 | */ | 248 | */ |
276 | entry = srm_named_entries; | 249 | entry = srm_named_entries; |
277 | while(entry->name != NULL && entry->id != 0) { | 250 | while (entry->name && entry->id) { |
278 | entry->proc_entry = create_proc_entry(entry->name, | 251 | entry->proc_entry = create_proc_entry(entry->name, |
279 | 0644, named_dir); | 252 | 0644, named_dir); |
280 | if(entry->proc_entry == NULL) | 253 | if (!entry->proc_entry) |
281 | goto cleanup; | 254 | goto cleanup; |
282 | 255 | ||
283 | entry->proc_entry->data = (void *) entry; | 256 | entry->proc_entry->data = (void *) entry; |
@@ -291,13 +264,13 @@ srm_env_init(void) | |||
291 | /* | 264 | /* |
292 | * Create all numbered nodes | 265 | * Create all numbered nodes |
293 | */ | 266 | */ |
294 | for(var_num = 0; var_num <= 255; var_num++) { | 267 | for (var_num = 0; var_num <= 255; var_num++) { |
295 | entry = &srm_numbered_entries[var_num]; | 268 | entry = &srm_numbered_entries[var_num]; |
296 | entry->name = number[var_num]; | 269 | entry->name = number[var_num]; |
297 | 270 | ||
298 | entry->proc_entry = create_proc_entry(entry->name, | 271 | entry->proc_entry = create_proc_entry(entry->name, |
299 | 0644, numbered_dir); | 272 | 0644, numbered_dir); |
300 | if(entry->proc_entry == NULL) | 273 | if (!entry->proc_entry) |
301 | goto cleanup; | 274 | goto cleanup; |
302 | 275 | ||
303 | entry->id = var_num; | 276 | entry->id = var_num; |
@@ -318,7 +291,6 @@ cleanup: | |||
318 | return -ENOMEM; | 291 | return -ENOMEM; |
319 | } | 292 | } |
320 | 293 | ||
321 | |||
322 | static void __exit | 294 | static void __exit |
323 | srm_env_exit(void) | 295 | srm_env_exit(void) |
324 | { | 296 | { |
@@ -328,7 +300,5 @@ srm_env_exit(void) | |||
328 | return; | 300 | return; |
329 | } | 301 | } |
330 | 302 | ||
331 | |||
332 | module_init(srm_env_init); | 303 | module_init(srm_env_init); |
333 | module_exit(srm_env_exit); | 304 | module_exit(srm_env_exit); |
334 | |||
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index 028bdc9228fb..2e635b814c14 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c | |||
@@ -662,7 +662,8 @@ EXPORT_SYMBOL(dma_map_single); | |||
662 | EXPORT_SYMBOL(dma_unmap_single); | 662 | EXPORT_SYMBOL(dma_unmap_single); |
663 | EXPORT_SYMBOL(dma_map_sg); | 663 | EXPORT_SYMBOL(dma_map_sg); |
664 | EXPORT_SYMBOL(dma_unmap_sg); | 664 | EXPORT_SYMBOL(dma_unmap_sg); |
665 | EXPORT_SYMBOL(dma_sync_single); | 665 | EXPORT_SYMBOL(dma_sync_single_for_cpu); |
666 | EXPORT_SYMBOL(dma_sync_single_for_device); | ||
666 | EXPORT_SYMBOL(dma_sync_sg); | 667 | EXPORT_SYMBOL(dma_sync_sg); |
667 | EXPORT_SYMBOL(dmabounce_register_dev); | 668 | EXPORT_SYMBOL(dmabounce_register_dev); |
668 | EXPORT_SYMBOL(dmabounce_unregister_dev); | 669 | EXPORT_SYMBOL(dmabounce_unregister_dev); |
diff --git a/arch/arm/configs/bast_defconfig b/arch/arm/configs/bast_defconfig deleted file mode 100644 index 4a8564f386af..000000000000 --- a/arch/arm/configs/bast_defconfig +++ /dev/null | |||
@@ -1,947 +0,0 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.12-rc1-bk2 | ||
4 | # Sun Mar 27 02:24:16 2005 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_MMU=y | ||
8 | CONFIG_UID16=y | ||
9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
10 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
11 | CONFIG_GENERIC_IOMAP=y | ||
12 | |||
13 | # | ||
14 | # Code maturity level options | ||
15 | # | ||
16 | CONFIG_EXPERIMENTAL=y | ||
17 | CONFIG_CLEAN_COMPILE=y | ||
18 | CONFIG_BROKEN_ON_SMP=y | ||
19 | |||
20 | # | ||
21 | # General setup | ||
22 | # | ||
23 | CONFIG_LOCALVERSION="" | ||
24 | CONFIG_SWAP=y | ||
25 | CONFIG_SYSVIPC=y | ||
26 | # CONFIG_POSIX_MQUEUE is not set | ||
27 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
28 | CONFIG_SYSCTL=y | ||
29 | # CONFIG_AUDIT is not set | ||
30 | # CONFIG_HOTPLUG is not set | ||
31 | CONFIG_KOBJECT_UEVENT=y | ||
32 | # CONFIG_IKCONFIG is not set | ||
33 | # CONFIG_EMBEDDED is not set | ||
34 | CONFIG_KALLSYMS=y | ||
35 | # CONFIG_KALLSYMS_ALL is not set | ||
36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
37 | CONFIG_BASE_FULL=y | ||
38 | CONFIG_FUTEX=y | ||
39 | CONFIG_EPOLL=y | ||
40 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
41 | CONFIG_SHMEM=y | ||
42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
43 | CONFIG_CC_ALIGN_LABELS=0 | ||
44 | CONFIG_CC_ALIGN_LOOPS=0 | ||
45 | CONFIG_CC_ALIGN_JUMPS=0 | ||
46 | # CONFIG_TINY_SHMEM is not set | ||
47 | CONFIG_BASE_SMALL=0 | ||
48 | |||
49 | # | ||
50 | # Loadable module support | ||
51 | # | ||
52 | CONFIG_MODULES=y | ||
53 | # CONFIG_MODULE_UNLOAD is not set | ||
54 | CONFIG_OBSOLETE_MODPARM=y | ||
55 | # CONFIG_MODVERSIONS is not set | ||
56 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
57 | CONFIG_KMOD=y | ||
58 | |||
59 | # | ||
60 | # System Type | ||
61 | # | ||
62 | # CONFIG_ARCH_CLPS7500 is not set | ||
63 | # CONFIG_ARCH_CLPS711X is not set | ||
64 | # CONFIG_ARCH_CO285 is not set | ||
65 | # CONFIG_ARCH_EBSA110 is not set | ||
66 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
67 | # CONFIG_ARCH_INTEGRATOR is not set | ||
68 | # CONFIG_ARCH_IOP3XX is not set | ||
69 | # CONFIG_ARCH_IXP4XX is not set | ||
70 | # CONFIG_ARCH_IXP2000 is not set | ||
71 | # CONFIG_ARCH_L7200 is not set | ||
72 | # CONFIG_ARCH_PXA is not set | ||
73 | # CONFIG_ARCH_RPC is not set | ||
74 | # CONFIG_ARCH_SA1100 is not set | ||
75 | CONFIG_ARCH_S3C2410=y | ||
76 | # CONFIG_ARCH_SHARK is not set | ||
77 | # CONFIG_ARCH_LH7A40X is not set | ||
78 | # CONFIG_ARCH_OMAP is not set | ||
79 | # CONFIG_ARCH_VERSATILE is not set | ||
80 | # CONFIG_ARCH_IMX is not set | ||
81 | # CONFIG_ARCH_H720X is not set | ||
82 | |||
83 | # | ||
84 | # S3C24XX Implementations | ||
85 | # | ||
86 | CONFIG_ARCH_BAST=y | ||
87 | # CONFIG_ARCH_H1940 is not set | ||
88 | # CONFIG_MACH_N30 is not set | ||
89 | # CONFIG_ARCH_SMDK2410 is not set | ||
90 | # CONFIG_ARCH_S3C2440 is not set | ||
91 | CONFIG_MACH_VR1000=y | ||
92 | # CONFIG_MACH_RX3715 is not set | ||
93 | # CONFIG_MACH_OTOM is not set | ||
94 | # CONFIG_MACH_NEXCODER_2440 is not set | ||
95 | CONFIG_CPU_S3C2410=y | ||
96 | |||
97 | # | ||
98 | # S3C2410 Boot | ||
99 | # | ||
100 | # CONFIG_S3C2410_BOOT_WATCHDOG is not set | ||
101 | |||
102 | # | ||
103 | # S3C2410 Setup | ||
104 | # | ||
105 | CONFIG_S3C2410_DMA=y | ||
106 | # CONFIG_S3C2410_DMA_DEBUG is not set | ||
107 | # CONFIG_S3C2410_PM_DEBUG is not set | ||
108 | # CONFIG_S3C2410_PM_CHECK is not set | ||
109 | CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 | ||
110 | |||
111 | # | ||
112 | # Processor Type | ||
113 | # | ||
114 | CONFIG_CPU_32=y | ||
115 | CONFIG_CPU_ARM920T=y | ||
116 | CONFIG_CPU_32v4=y | ||
117 | CONFIG_CPU_ABRT_EV4T=y | ||
118 | CONFIG_CPU_CACHE_V4WT=y | ||
119 | CONFIG_CPU_CACHE_VIVT=y | ||
120 | CONFIG_CPU_COPY_V4WB=y | ||
121 | CONFIG_CPU_TLB_V4WBI=y | ||
122 | |||
123 | # | ||
124 | # Processor Features | ||
125 | # | ||
126 | # CONFIG_ARM_THUMB is not set | ||
127 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
128 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
129 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
130 | |||
131 | # | ||
132 | # Bus support | ||
133 | # | ||
134 | |||
135 | # | ||
136 | # PCCARD (PCMCIA/CardBus) support | ||
137 | # | ||
138 | # CONFIG_PCCARD is not set | ||
139 | |||
140 | # | ||
141 | # Kernel Features | ||
142 | # | ||
143 | # CONFIG_PREEMPT is not set | ||
144 | CONFIG_ALIGNMENT_TRAP=y | ||
145 | |||
146 | # | ||
147 | # Boot options | ||
148 | # | ||
149 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
150 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
151 | CONFIG_CMDLINE="root=/dev/hda1 ro init=/bin/bash console=ttySAC0" | ||
152 | # CONFIG_XIP_KERNEL is not set | ||
153 | |||
154 | # | ||
155 | # Floating point emulation | ||
156 | # | ||
157 | |||
158 | # | ||
159 | # At least one emulation must be selected | ||
160 | # | ||
161 | CONFIG_FPE_NWFPE=y | ||
162 | # CONFIG_FPE_NWFPE_XP is not set | ||
163 | # CONFIG_FPE_FASTFPE is not set | ||
164 | |||
165 | # | ||
166 | # Userspace binary formats | ||
167 | # | ||
168 | CONFIG_BINFMT_ELF=y | ||
169 | CONFIG_BINFMT_AOUT=y | ||
170 | # CONFIG_BINFMT_MISC is not set | ||
171 | # CONFIG_ARTHUR is not set | ||
172 | |||
173 | # | ||
174 | # Power management options | ||
175 | # | ||
176 | CONFIG_PM=y | ||
177 | CONFIG_APM=y | ||
178 | |||
179 | # | ||
180 | # Device Drivers | ||
181 | # | ||
182 | |||
183 | # | ||
184 | # Generic Driver Options | ||
185 | # | ||
186 | CONFIG_STANDALONE=y | ||
187 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
188 | # CONFIG_FW_LOADER is not set | ||
189 | # CONFIG_DEBUG_DRIVER is not set | ||
190 | |||
191 | # | ||
192 | # Memory Technology Devices (MTD) | ||
193 | # | ||
194 | CONFIG_MTD=y | ||
195 | # CONFIG_MTD_DEBUG is not set | ||
196 | # CONFIG_MTD_CONCAT is not set | ||
197 | CONFIG_MTD_PARTITIONS=y | ||
198 | CONFIG_MTD_REDBOOT_PARTS=y | ||
199 | CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||
200 | CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | ||
201 | # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set | ||
202 | CONFIG_MTD_CMDLINE_PARTS=y | ||
203 | # CONFIG_MTD_AFS_PARTS is not set | ||
204 | |||
205 | # | ||
206 | # User Modules And Translation Layers | ||
207 | # | ||
208 | CONFIG_MTD_CHAR=y | ||
209 | CONFIG_MTD_BLOCK=y | ||
210 | # CONFIG_FTL is not set | ||
211 | # CONFIG_NFTL is not set | ||
212 | # CONFIG_INFTL is not set | ||
213 | |||
214 | # | ||
215 | # RAM/ROM/Flash chip drivers | ||
216 | # | ||
217 | CONFIG_MTD_CFI=y | ||
218 | CONFIG_MTD_JEDECPROBE=y | ||
219 | CONFIG_MTD_GEN_PROBE=y | ||
220 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
221 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
222 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
223 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
224 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
225 | CONFIG_MTD_MAP_BANK_WIDTH_16=y | ||
226 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
227 | CONFIG_MTD_CFI_I1=y | ||
228 | CONFIG_MTD_CFI_I2=y | ||
229 | # CONFIG_MTD_CFI_I4 is not set | ||
230 | # CONFIG_MTD_CFI_I8 is not set | ||
231 | CONFIG_MTD_CFI_INTELEXT=y | ||
232 | # CONFIG_MTD_CFI_AMDSTD is not set | ||
233 | # CONFIG_MTD_CFI_STAA is not set | ||
234 | CONFIG_MTD_CFI_UTIL=y | ||
235 | # CONFIG_MTD_RAM is not set | ||
236 | # CONFIG_MTD_ROM is not set | ||
237 | # CONFIG_MTD_ABSENT is not set | ||
238 | # CONFIG_MTD_OBSOLETE_CHIPS is not set | ||
239 | # CONFIG_MTD_XIP is not set | ||
240 | |||
241 | # | ||
242 | # Mapping drivers for chip access | ||
243 | # | ||
244 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
245 | # CONFIG_MTD_PHYSMAP is not set | ||
246 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
247 | # CONFIG_MTD_EDB7312 is not set | ||
248 | # CONFIG_MTD_IMPA7 is not set | ||
249 | CONFIG_MTD_BAST=y | ||
250 | CONFIG_MTD_BAST_MAXSIZE=4 | ||
251 | |||
252 | # | ||
253 | # Self-contained MTD device drivers | ||
254 | # | ||
255 | # CONFIG_MTD_SLRAM is not set | ||
256 | # CONFIG_MTD_PHRAM is not set | ||
257 | # CONFIG_MTD_MTDRAM is not set | ||
258 | # CONFIG_MTD_BLKMTD is not set | ||
259 | # CONFIG_MTD_BLOCK2MTD is not set | ||
260 | |||
261 | # | ||
262 | # Disk-On-Chip Device Drivers | ||
263 | # | ||
264 | # CONFIG_MTD_DOC2000 is not set | ||
265 | # CONFIG_MTD_DOC2001 is not set | ||
266 | # CONFIG_MTD_DOC2001PLUS is not set | ||
267 | |||
268 | # | ||
269 | # NAND Flash Device Drivers | ||
270 | # | ||
271 | CONFIG_MTD_NAND=y | ||
272 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
273 | CONFIG_MTD_NAND_IDS=y | ||
274 | CONFIG_MTD_NAND_S3C2410=y | ||
275 | # CONFIG_MTD_NAND_S3C2410_DEBUG is not set | ||
276 | # CONFIG_MTD_NAND_S3C2410_HWECC is not set | ||
277 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
278 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
279 | |||
280 | # | ||
281 | # Parallel port support | ||
282 | # | ||
283 | CONFIG_PARPORT=y | ||
284 | # CONFIG_PARPORT_PC is not set | ||
285 | # CONFIG_PARPORT_ARC is not set | ||
286 | # CONFIG_PARPORT_GSC is not set | ||
287 | CONFIG_PARPORT_1284=y | ||
288 | |||
289 | # | ||
290 | # Plug and Play support | ||
291 | # | ||
292 | |||
293 | # | ||
294 | # Block devices | ||
295 | # | ||
296 | # CONFIG_BLK_DEV_FD is not set | ||
297 | # CONFIG_PARIDE is not set | ||
298 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
299 | CONFIG_BLK_DEV_LOOP=y | ||
300 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
301 | CONFIG_BLK_DEV_NBD=m | ||
302 | CONFIG_BLK_DEV_RAM=y | ||
303 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
304 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
305 | CONFIG_BLK_DEV_INITRD=y | ||
306 | CONFIG_INITRAMFS_SOURCE="" | ||
307 | # CONFIG_CDROM_PKTCDVD is not set | ||
308 | |||
309 | # | ||
310 | # IO Schedulers | ||
311 | # | ||
312 | CONFIG_IOSCHED_NOOP=y | ||
313 | CONFIG_IOSCHED_AS=y | ||
314 | CONFIG_IOSCHED_DEADLINE=y | ||
315 | CONFIG_IOSCHED_CFQ=y | ||
316 | # CONFIG_ATA_OVER_ETH is not set | ||
317 | |||
318 | # | ||
319 | # ATA/ATAPI/MFM/RLL support | ||
320 | # | ||
321 | CONFIG_IDE=y | ||
322 | CONFIG_BLK_DEV_IDE=y | ||
323 | |||
324 | # | ||
325 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
326 | # | ||
327 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
328 | CONFIG_BLK_DEV_IDEDISK=y | ||
329 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
330 | CONFIG_BLK_DEV_IDECD=y | ||
331 | CONFIG_BLK_DEV_IDETAPE=m | ||
332 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
333 | # CONFIG_IDE_TASK_IOCTL is not set | ||
334 | |||
335 | # | ||
336 | # IDE chipset support/bugfixes | ||
337 | # | ||
338 | CONFIG_IDE_GENERIC=y | ||
339 | # CONFIG_IDE_ARM is not set | ||
340 | CONFIG_BLK_DEV_IDE_BAST=y | ||
341 | # CONFIG_BLK_DEV_IDEDMA is not set | ||
342 | # CONFIG_IDEDMA_AUTO is not set | ||
343 | # CONFIG_BLK_DEV_HD is not set | ||
344 | |||
345 | # | ||
346 | # SCSI device support | ||
347 | # | ||
348 | # CONFIG_SCSI is not set | ||
349 | |||
350 | # | ||
351 | # Multi-device support (RAID and LVM) | ||
352 | # | ||
353 | # CONFIG_MD is not set | ||
354 | |||
355 | # | ||
356 | # Fusion MPT device support | ||
357 | # | ||
358 | |||
359 | # | ||
360 | # IEEE 1394 (FireWire) support | ||
361 | # | ||
362 | |||
363 | # | ||
364 | # I2O device support | ||
365 | # | ||
366 | |||
367 | # | ||
368 | # Networking support | ||
369 | # | ||
370 | CONFIG_NET=y | ||
371 | |||
372 | # | ||
373 | # Networking options | ||
374 | # | ||
375 | # CONFIG_PACKET is not set | ||
376 | # CONFIG_NETLINK_DEV is not set | ||
377 | CONFIG_UNIX=y | ||
378 | # CONFIG_NET_KEY is not set | ||
379 | CONFIG_INET=y | ||
380 | # CONFIG_IP_MULTICAST is not set | ||
381 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
382 | CONFIG_IP_PNP=y | ||
383 | # CONFIG_IP_PNP_DHCP is not set | ||
384 | CONFIG_IP_PNP_BOOTP=y | ||
385 | # CONFIG_IP_PNP_RARP is not set | ||
386 | # CONFIG_NET_IPIP is not set | ||
387 | # CONFIG_NET_IPGRE is not set | ||
388 | # CONFIG_ARPD is not set | ||
389 | # CONFIG_SYN_COOKIES is not set | ||
390 | # CONFIG_INET_AH is not set | ||
391 | # CONFIG_INET_ESP is not set | ||
392 | # CONFIG_INET_IPCOMP is not set | ||
393 | # CONFIG_INET_TUNNEL is not set | ||
394 | CONFIG_IP_TCPDIAG=y | ||
395 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
396 | # CONFIG_IPV6 is not set | ||
397 | # CONFIG_NETFILTER is not set | ||
398 | |||
399 | # | ||
400 | # SCTP Configuration (EXPERIMENTAL) | ||
401 | # | ||
402 | # CONFIG_IP_SCTP is not set | ||
403 | # CONFIG_ATM is not set | ||
404 | # CONFIG_BRIDGE is not set | ||
405 | # CONFIG_VLAN_8021Q is not set | ||
406 | # CONFIG_DECNET is not set | ||
407 | # CONFIG_LLC2 is not set | ||
408 | # CONFIG_IPX is not set | ||
409 | # CONFIG_ATALK is not set | ||
410 | # CONFIG_X25 is not set | ||
411 | # CONFIG_LAPB is not set | ||
412 | # CONFIG_NET_DIVERT is not set | ||
413 | # CONFIG_ECONET is not set | ||
414 | # CONFIG_WAN_ROUTER is not set | ||
415 | |||
416 | # | ||
417 | # QoS and/or fair queueing | ||
418 | # | ||
419 | # CONFIG_NET_SCHED is not set | ||
420 | # CONFIG_NET_CLS_ROUTE is not set | ||
421 | |||
422 | # | ||
423 | # Network testing | ||
424 | # | ||
425 | # CONFIG_NET_PKTGEN is not set | ||
426 | # CONFIG_NETPOLL is not set | ||
427 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
428 | # CONFIG_HAMRADIO is not set | ||
429 | # CONFIG_IRDA is not set | ||
430 | # CONFIG_BT is not set | ||
431 | CONFIG_NETDEVICES=y | ||
432 | # CONFIG_DUMMY is not set | ||
433 | # CONFIG_BONDING is not set | ||
434 | # CONFIG_EQUALIZER is not set | ||
435 | # CONFIG_TUN is not set | ||
436 | |||
437 | # | ||
438 | # Ethernet (10 or 100Mbit) | ||
439 | # | ||
440 | CONFIG_NET_ETHERNET=y | ||
441 | # CONFIG_MII is not set | ||
442 | # CONFIG_SMC91X is not set | ||
443 | |||
444 | # | ||
445 | # Ethernet (1000 Mbit) | ||
446 | # | ||
447 | |||
448 | # | ||
449 | # Ethernet (10000 Mbit) | ||
450 | # | ||
451 | |||
452 | # | ||
453 | # Token Ring devices | ||
454 | # | ||
455 | |||
456 | # | ||
457 | # Wireless LAN (non-hamradio) | ||
458 | # | ||
459 | # CONFIG_NET_RADIO is not set | ||
460 | |||
461 | # | ||
462 | # Wan interfaces | ||
463 | # | ||
464 | # CONFIG_WAN is not set | ||
465 | # CONFIG_PLIP is not set | ||
466 | # CONFIG_PPP is not set | ||
467 | # CONFIG_SLIP is not set | ||
468 | # CONFIG_SHAPER is not set | ||
469 | # CONFIG_NETCONSOLE is not set | ||
470 | |||
471 | # | ||
472 | # ISDN subsystem | ||
473 | # | ||
474 | # CONFIG_ISDN is not set | ||
475 | |||
476 | # | ||
477 | # Input device support | ||
478 | # | ||
479 | CONFIG_INPUT=y | ||
480 | |||
481 | # | ||
482 | # Userland interfaces | ||
483 | # | ||
484 | CONFIG_INPUT_MOUSEDEV=y | ||
485 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
486 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
487 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
488 | # CONFIG_INPUT_JOYDEV is not set | ||
489 | # CONFIG_INPUT_TSDEV is not set | ||
490 | # CONFIG_INPUT_EVDEV is not set | ||
491 | # CONFIG_INPUT_EVBUG is not set | ||
492 | |||
493 | # | ||
494 | # Input Device Drivers | ||
495 | # | ||
496 | CONFIG_INPUT_KEYBOARD=y | ||
497 | CONFIG_KEYBOARD_ATKBD=y | ||
498 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
499 | # CONFIG_KEYBOARD_LKKBD is not set | ||
500 | # CONFIG_KEYBOARD_XTKBD is not set | ||
501 | # CONFIG_KEYBOARD_NEWTON is not set | ||
502 | CONFIG_INPUT_MOUSE=y | ||
503 | CONFIG_MOUSE_PS2=y | ||
504 | # CONFIG_MOUSE_SERIAL is not set | ||
505 | # CONFIG_MOUSE_VSXXXAA is not set | ||
506 | # CONFIG_INPUT_JOYSTICK is not set | ||
507 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
508 | # CONFIG_INPUT_MISC is not set | ||
509 | |||
510 | # | ||
511 | # Hardware I/O ports | ||
512 | # | ||
513 | CONFIG_SERIO=y | ||
514 | CONFIG_SERIO_SERPORT=y | ||
515 | # CONFIG_SERIO_PARKBD is not set | ||
516 | CONFIG_SERIO_LIBPS2=y | ||
517 | # CONFIG_SERIO_RAW is not set | ||
518 | # CONFIG_GAMEPORT is not set | ||
519 | CONFIG_SOUND_GAMEPORT=y | ||
520 | |||
521 | # | ||
522 | # Character devices | ||
523 | # | ||
524 | CONFIG_VT=y | ||
525 | CONFIG_VT_CONSOLE=y | ||
526 | CONFIG_HW_CONSOLE=y | ||
527 | CONFIG_SERIAL_NONSTANDARD=y | ||
528 | # CONFIG_COMPUTONE is not set | ||
529 | # CONFIG_ROCKETPORT is not set | ||
530 | # CONFIG_CYCLADES is not set | ||
531 | # CONFIG_DIGIEPCA is not set | ||
532 | # CONFIG_MOXA_INTELLIO is not set | ||
533 | # CONFIG_MOXA_SMARTIO is not set | ||
534 | # CONFIG_ISI is not set | ||
535 | # CONFIG_SYNCLINKMP is not set | ||
536 | # CONFIG_N_HDLC is not set | ||
537 | # CONFIG_RISCOM8 is not set | ||
538 | # CONFIG_SPECIALIX is not set | ||
539 | # CONFIG_SX is not set | ||
540 | # CONFIG_RIO is not set | ||
541 | # CONFIG_STALDRV is not set | ||
542 | |||
543 | # | ||
544 | # Serial drivers | ||
545 | # | ||
546 | CONFIG_SERIAL_8250=y | ||
547 | CONFIG_SERIAL_8250_CONSOLE=y | ||
548 | CONFIG_SERIAL_8250_NR_UARTS=8 | ||
549 | CONFIG_SERIAL_8250_EXTENDED=y | ||
550 | CONFIG_SERIAL_8250_MANY_PORTS=y | ||
551 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
552 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
553 | # CONFIG_SERIAL_8250_MULTIPORT is not set | ||
554 | # CONFIG_SERIAL_8250_RSA is not set | ||
555 | |||
556 | # | ||
557 | # Non-8250 serial port support | ||
558 | # | ||
559 | CONFIG_SERIAL_S3C2410=y | ||
560 | CONFIG_SERIAL_S3C2410_CONSOLE=y | ||
561 | CONFIG_SERIAL_CORE=y | ||
562 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
563 | CONFIG_UNIX98_PTYS=y | ||
564 | CONFIG_LEGACY_PTYS=y | ||
565 | CONFIG_LEGACY_PTY_COUNT=256 | ||
566 | CONFIG_PRINTER=y | ||
567 | # CONFIG_LP_CONSOLE is not set | ||
568 | CONFIG_PPDEV=y | ||
569 | # CONFIG_TIPAR is not set | ||
570 | |||
571 | # | ||
572 | # IPMI | ||
573 | # | ||
574 | # CONFIG_IPMI_HANDLER is not set | ||
575 | |||
576 | # | ||
577 | # Watchdog Cards | ||
578 | # | ||
579 | CONFIG_WATCHDOG=y | ||
580 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
581 | |||
582 | # | ||
583 | # Watchdog Device Drivers | ||
584 | # | ||
585 | # CONFIG_SOFT_WATCHDOG is not set | ||
586 | CONFIG_S3C2410_WATCHDOG=y | ||
587 | # CONFIG_NVRAM is not set | ||
588 | # CONFIG_RTC is not set | ||
589 | CONFIG_S3C2410_RTC=y | ||
590 | # CONFIG_DTLK is not set | ||
591 | # CONFIG_R3964 is not set | ||
592 | |||
593 | # | ||
594 | # Ftape, the floppy tape device driver | ||
595 | # | ||
596 | # CONFIG_DRM is not set | ||
597 | # CONFIG_RAW_DRIVER is not set | ||
598 | |||
599 | # | ||
600 | # TPM devices | ||
601 | # | ||
602 | # CONFIG_TCG_TPM is not set | ||
603 | |||
604 | # | ||
605 | # I2C support | ||
606 | # | ||
607 | CONFIG_I2C=y | ||
608 | CONFIG_I2C_CHARDEV=m | ||
609 | |||
610 | # | ||
611 | # I2C Algorithms | ||
612 | # | ||
613 | CONFIG_I2C_ALGOBIT=m | ||
614 | # CONFIG_I2C_ALGOPCF is not set | ||
615 | # CONFIG_I2C_ALGOPCA is not set | ||
616 | |||
617 | # | ||
618 | # I2C Hardware Bus support | ||
619 | # | ||
620 | # CONFIG_I2C_ISA is not set | ||
621 | # CONFIG_I2C_PARPORT is not set | ||
622 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
623 | CONFIG_I2C_S3C2410=y | ||
624 | # CONFIG_I2C_STUB is not set | ||
625 | # CONFIG_I2C_PCA_ISA is not set | ||
626 | |||
627 | # | ||
628 | # Hardware Sensors Chip support | ||
629 | # | ||
630 | CONFIG_I2C_SENSOR=m | ||
631 | # CONFIG_SENSORS_ADM1021 is not set | ||
632 | # CONFIG_SENSORS_ADM1025 is not set | ||
633 | # CONFIG_SENSORS_ADM1026 is not set | ||
634 | # CONFIG_SENSORS_ADM1031 is not set | ||
635 | # CONFIG_SENSORS_ASB100 is not set | ||
636 | # CONFIG_SENSORS_DS1621 is not set | ||
637 | # CONFIG_SENSORS_FSCHER is not set | ||
638 | # CONFIG_SENSORS_FSCPOS is not set | ||
639 | # CONFIG_SENSORS_GL518SM is not set | ||
640 | # CONFIG_SENSORS_GL520SM is not set | ||
641 | # CONFIG_SENSORS_IT87 is not set | ||
642 | # CONFIG_SENSORS_LM63 is not set | ||
643 | CONFIG_SENSORS_LM75=m | ||
644 | # CONFIG_SENSORS_LM77 is not set | ||
645 | CONFIG_SENSORS_LM78=m | ||
646 | # CONFIG_SENSORS_LM80 is not set | ||
647 | # CONFIG_SENSORS_LM83 is not set | ||
648 | CONFIG_SENSORS_LM85=m | ||
649 | # CONFIG_SENSORS_LM87 is not set | ||
650 | # CONFIG_SENSORS_LM90 is not set | ||
651 | # CONFIG_SENSORS_MAX1619 is not set | ||
652 | # CONFIG_SENSORS_PC87360 is not set | ||
653 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
654 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
655 | # CONFIG_SENSORS_W83781D is not set | ||
656 | # CONFIG_SENSORS_W83L785TS is not set | ||
657 | # CONFIG_SENSORS_W83627HF is not set | ||
658 | |||
659 | # | ||
660 | # Other I2C Chip support | ||
661 | # | ||
662 | CONFIG_SENSORS_EEPROM=m | ||
663 | # CONFIG_SENSORS_PCF8574 is not set | ||
664 | # CONFIG_SENSORS_PCF8591 is not set | ||
665 | # CONFIG_SENSORS_RTC8564 is not set | ||
666 | # CONFIG_I2C_DEBUG_CORE is not set | ||
667 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
668 | # CONFIG_I2C_DEBUG_BUS is not set | ||
669 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
670 | |||
671 | # | ||
672 | # Misc devices | ||
673 | # | ||
674 | |||
675 | # | ||
676 | # Multimedia devices | ||
677 | # | ||
678 | # CONFIG_VIDEO_DEV is not set | ||
679 | |||
680 | # | ||
681 | # Digital Video Broadcasting Devices | ||
682 | # | ||
683 | # CONFIG_DVB is not set | ||
684 | |||
685 | # | ||
686 | # Graphics support | ||
687 | # | ||
688 | CONFIG_FB=y | ||
689 | # CONFIG_FB_CFB_FILLRECT is not set | ||
690 | # CONFIG_FB_CFB_COPYAREA is not set | ||
691 | # CONFIG_FB_CFB_IMAGEBLIT is not set | ||
692 | # CONFIG_FB_SOFT_CURSOR is not set | ||
693 | CONFIG_FB_MODE_HELPERS=y | ||
694 | # CONFIG_FB_TILEBLITTING is not set | ||
695 | # CONFIG_FB_VIRTUAL is not set | ||
696 | |||
697 | # | ||
698 | # Console display driver support | ||
699 | # | ||
700 | # CONFIG_VGA_CONSOLE is not set | ||
701 | CONFIG_DUMMY_CONSOLE=y | ||
702 | # CONFIG_FRAMEBUFFER_CONSOLE is not set | ||
703 | |||
704 | # | ||
705 | # Logo configuration | ||
706 | # | ||
707 | # CONFIG_LOGO is not set | ||
708 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
709 | |||
710 | # | ||
711 | # Sound | ||
712 | # | ||
713 | # CONFIG_SOUND is not set | ||
714 | |||
715 | # | ||
716 | # USB support | ||
717 | # | ||
718 | CONFIG_USB_ARCH_HAS_HCD=y | ||
719 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
720 | # CONFIG_USB is not set | ||
721 | |||
722 | # | ||
723 | # USB Gadget Support | ||
724 | # | ||
725 | # CONFIG_USB_GADGET is not set | ||
726 | |||
727 | # | ||
728 | # MMC/SD Card support | ||
729 | # | ||
730 | # CONFIG_MMC is not set | ||
731 | |||
732 | # | ||
733 | # File systems | ||
734 | # | ||
735 | CONFIG_EXT2_FS=y | ||
736 | # CONFIG_EXT2_FS_XATTR is not set | ||
737 | CONFIG_EXT3_FS=y | ||
738 | CONFIG_EXT3_FS_XATTR=y | ||
739 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
740 | # CONFIG_EXT3_FS_SECURITY is not set | ||
741 | CONFIG_JBD=y | ||
742 | # CONFIG_JBD_DEBUG is not set | ||
743 | CONFIG_FS_MBCACHE=y | ||
744 | # CONFIG_REISERFS_FS is not set | ||
745 | # CONFIG_JFS_FS is not set | ||
746 | |||
747 | # | ||
748 | # XFS support | ||
749 | # | ||
750 | # CONFIG_XFS_FS is not set | ||
751 | # CONFIG_MINIX_FS is not set | ||
752 | CONFIG_ROMFS_FS=y | ||
753 | # CONFIG_QUOTA is not set | ||
754 | CONFIG_DNOTIFY=y | ||
755 | # CONFIG_AUTOFS_FS is not set | ||
756 | # CONFIG_AUTOFS4_FS is not set | ||
757 | |||
758 | # | ||
759 | # CD-ROM/DVD Filesystems | ||
760 | # | ||
761 | # CONFIG_ISO9660_FS is not set | ||
762 | # CONFIG_UDF_FS is not set | ||
763 | |||
764 | # | ||
765 | # DOS/FAT/NT Filesystems | ||
766 | # | ||
767 | CONFIG_FAT_FS=y | ||
768 | CONFIG_MSDOS_FS=y | ||
769 | CONFIG_VFAT_FS=y | ||
770 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
771 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
772 | # CONFIG_NTFS_FS is not set | ||
773 | |||
774 | # | ||
775 | # Pseudo filesystems | ||
776 | # | ||
777 | CONFIG_PROC_FS=y | ||
778 | CONFIG_SYSFS=y | ||
779 | # CONFIG_DEVFS_FS is not set | ||
780 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
781 | # CONFIG_TMPFS is not set | ||
782 | # CONFIG_HUGETLB_PAGE is not set | ||
783 | CONFIG_RAMFS=y | ||
784 | |||
785 | # | ||
786 | # Miscellaneous filesystems | ||
787 | # | ||
788 | # CONFIG_ADFS_FS is not set | ||
789 | # CONFIG_AFFS_FS is not set | ||
790 | # CONFIG_HFS_FS is not set | ||
791 | # CONFIG_HFSPLUS_FS is not set | ||
792 | # CONFIG_BEFS_FS is not set | ||
793 | # CONFIG_BFS_FS is not set | ||
794 | # CONFIG_EFS_FS is not set | ||
795 | CONFIG_JFFS_FS=y | ||
796 | CONFIG_JFFS_FS_VERBOSE=0 | ||
797 | # CONFIG_JFFS_PROC_FS is not set | ||
798 | CONFIG_JFFS2_FS=y | ||
799 | CONFIG_JFFS2_FS_DEBUG=0 | ||
800 | # CONFIG_JFFS2_FS_NAND is not set | ||
801 | # CONFIG_JFFS2_FS_NOR_ECC is not set | ||
802 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
803 | CONFIG_JFFS2_ZLIB=y | ||
804 | CONFIG_JFFS2_RTIME=y | ||
805 | # CONFIG_JFFS2_RUBIN is not set | ||
806 | # CONFIG_CRAMFS is not set | ||
807 | # CONFIG_VXFS_FS is not set | ||
808 | # CONFIG_HPFS_FS is not set | ||
809 | # CONFIG_QNX4FS_FS is not set | ||
810 | # CONFIG_SYSV_FS is not set | ||
811 | # CONFIG_UFS_FS is not set | ||
812 | |||
813 | # | ||
814 | # Network File Systems | ||
815 | # | ||
816 | CONFIG_NFS_FS=y | ||
817 | # CONFIG_NFS_V3 is not set | ||
818 | # CONFIG_NFS_V4 is not set | ||
819 | # CONFIG_NFS_DIRECTIO is not set | ||
820 | # CONFIG_NFSD is not set | ||
821 | CONFIG_ROOT_NFS=y | ||
822 | CONFIG_LOCKD=y | ||
823 | CONFIG_SUNRPC=y | ||
824 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
825 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
826 | # CONFIG_SMB_FS is not set | ||
827 | # CONFIG_CIFS is not set | ||
828 | # CONFIG_NCP_FS is not set | ||
829 | # CONFIG_CODA_FS is not set | ||
830 | # CONFIG_AFS_FS is not set | ||
831 | |||
832 | # | ||
833 | # Partition Types | ||
834 | # | ||
835 | CONFIG_PARTITION_ADVANCED=y | ||
836 | # CONFIG_ACORN_PARTITION is not set | ||
837 | # CONFIG_OSF_PARTITION is not set | ||
838 | # CONFIG_AMIGA_PARTITION is not set | ||
839 | # CONFIG_ATARI_PARTITION is not set | ||
840 | # CONFIG_MAC_PARTITION is not set | ||
841 | CONFIG_MSDOS_PARTITION=y | ||
842 | CONFIG_BSD_DISKLABEL=y | ||
843 | # CONFIG_MINIX_SUBPARTITION is not set | ||
844 | CONFIG_SOLARIS_X86_PARTITION=y | ||
845 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
846 | # CONFIG_LDM_PARTITION is not set | ||
847 | # CONFIG_SGI_PARTITION is not set | ||
848 | # CONFIG_ULTRIX_PARTITION is not set | ||
849 | # CONFIG_SUN_PARTITION is not set | ||
850 | # CONFIG_EFI_PARTITION is not set | ||
851 | |||
852 | # | ||
853 | # Native Language Support | ||
854 | # | ||
855 | CONFIG_NLS=y | ||
856 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
857 | # CONFIG_NLS_CODEPAGE_437 is not set | ||
858 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
859 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
860 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
861 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
862 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
863 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
864 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
865 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
866 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
867 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
868 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
869 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
870 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
871 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
872 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
873 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
874 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
875 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
876 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
877 | # CONFIG_NLS_ISO8859_8 is not set | ||
878 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
879 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
880 | # CONFIG_NLS_ASCII is not set | ||
881 | # CONFIG_NLS_ISO8859_1 is not set | ||
882 | # CONFIG_NLS_ISO8859_2 is not set | ||
883 | # CONFIG_NLS_ISO8859_3 is not set | ||
884 | # CONFIG_NLS_ISO8859_4 is not set | ||
885 | # CONFIG_NLS_ISO8859_5 is not set | ||
886 | # CONFIG_NLS_ISO8859_6 is not set | ||
887 | # CONFIG_NLS_ISO8859_7 is not set | ||
888 | # CONFIG_NLS_ISO8859_9 is not set | ||
889 | # CONFIG_NLS_ISO8859_13 is not set | ||
890 | # CONFIG_NLS_ISO8859_14 is not set | ||
891 | # CONFIG_NLS_ISO8859_15 is not set | ||
892 | # CONFIG_NLS_KOI8_R is not set | ||
893 | # CONFIG_NLS_KOI8_U is not set | ||
894 | # CONFIG_NLS_UTF8 is not set | ||
895 | |||
896 | # | ||
897 | # Profiling support | ||
898 | # | ||
899 | # CONFIG_PROFILING is not set | ||
900 | |||
901 | # | ||
902 | # Kernel hacking | ||
903 | # | ||
904 | # CONFIG_PRINTK_TIME is not set | ||
905 | CONFIG_DEBUG_KERNEL=y | ||
906 | # CONFIG_MAGIC_SYSRQ is not set | ||
907 | CONFIG_LOG_BUF_SHIFT=16 | ||
908 | # CONFIG_SCHEDSTATS is not set | ||
909 | # CONFIG_DEBUG_SLAB is not set | ||
910 | # CONFIG_DEBUG_SPINLOCK is not set | ||
911 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
912 | # CONFIG_DEBUG_KOBJECT is not set | ||
913 | CONFIG_DEBUG_BUGVERBOSE=y | ||
914 | CONFIG_DEBUG_INFO=y | ||
915 | # CONFIG_DEBUG_FS is not set | ||
916 | CONFIG_FRAME_POINTER=y | ||
917 | CONFIG_DEBUG_USER=y | ||
918 | # CONFIG_DEBUG_WAITQ is not set | ||
919 | # CONFIG_DEBUG_ERRORS is not set | ||
920 | CONFIG_DEBUG_LL=y | ||
921 | # CONFIG_DEBUG_ICEDCC is not set | ||
922 | CONFIG_DEBUG_S3C2410_PORT=y | ||
923 | CONFIG_DEBUG_S3C2410_UART=0 | ||
924 | |||
925 | # | ||
926 | # Security options | ||
927 | # | ||
928 | # CONFIG_KEYS is not set | ||
929 | # CONFIG_SECURITY is not set | ||
930 | |||
931 | # | ||
932 | # Cryptographic options | ||
933 | # | ||
934 | # CONFIG_CRYPTO is not set | ||
935 | |||
936 | # | ||
937 | # Hardware crypto devices | ||
938 | # | ||
939 | |||
940 | # | ||
941 | # Library routines | ||
942 | # | ||
943 | # CONFIG_CRC_CCITT is not set | ||
944 | CONFIG_CRC32=y | ||
945 | # CONFIG_LIBCRC32C is not set | ||
946 | CONFIG_ZLIB_INFLATE=y | ||
947 | CONFIG_ZLIB_DEFLATE=y | ||
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig index a83222641045..0563c14395e1 100644 --- a/arch/arm/configs/s3c2410_defconfig +++ b/arch/arm/configs/s3c2410_defconfig | |||
@@ -1,9 +1,10 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.18 | 3 | # Linux kernel version: 2.6.19-rc4 |
4 | # Wed Sep 20 20:27:31 2006 | 4 | # Fri Nov 3 17:41:31 2006 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | # CONFIG_GENERIC_TIME is not set | ||
7 | CONFIG_MMU=y | 8 | CONFIG_MMU=y |
8 | CONFIG_GENERIC_HARDIRQS=y | 9 | CONFIG_GENERIC_HARDIRQS=y |
9 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 10 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
@@ -29,17 +30,20 @@ CONFIG_LOCALVERSION="" | |||
29 | CONFIG_LOCALVERSION_AUTO=y | 30 | CONFIG_LOCALVERSION_AUTO=y |
30 | CONFIG_SWAP=y | 31 | CONFIG_SWAP=y |
31 | CONFIG_SYSVIPC=y | 32 | CONFIG_SYSVIPC=y |
33 | # CONFIG_IPC_NS is not set | ||
32 | # CONFIG_POSIX_MQUEUE is not set | 34 | # CONFIG_POSIX_MQUEUE is not set |
33 | # CONFIG_BSD_PROCESS_ACCT is not set | 35 | # CONFIG_BSD_PROCESS_ACCT is not set |
34 | # CONFIG_TASKSTATS is not set | 36 | # CONFIG_TASKSTATS is not set |
37 | # CONFIG_UTS_NS is not set | ||
35 | # CONFIG_AUDIT is not set | 38 | # CONFIG_AUDIT is not set |
36 | # CONFIG_IKCONFIG is not set | 39 | # CONFIG_IKCONFIG is not set |
37 | # CONFIG_RELAY is not set | 40 | # CONFIG_RELAY is not set |
38 | CONFIG_INITRAMFS_SOURCE="" | 41 | CONFIG_INITRAMFS_SOURCE="" |
39 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 42 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
43 | CONFIG_SYSCTL=y | ||
40 | # CONFIG_EMBEDDED is not set | 44 | # CONFIG_EMBEDDED is not set |
41 | CONFIG_UID16=y | 45 | CONFIG_UID16=y |
42 | CONFIG_SYSCTL=y | 46 | # CONFIG_SYSCTL_SYSCALL is not set |
43 | CONFIG_KALLSYMS=y | 47 | CONFIG_KALLSYMS=y |
44 | # CONFIG_KALLSYMS_ALL is not set | 48 | # CONFIG_KALLSYMS_ALL is not set |
45 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 49 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
@@ -62,7 +66,8 @@ CONFIG_BASE_SMALL=0 | |||
62 | # Loadable module support | 66 | # Loadable module support |
63 | # | 67 | # |
64 | CONFIG_MODULES=y | 68 | CONFIG_MODULES=y |
65 | # CONFIG_MODULE_UNLOAD is not set | 69 | CONFIG_MODULE_UNLOAD=y |
70 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
66 | # CONFIG_MODVERSIONS is not set | 71 | # CONFIG_MODVERSIONS is not set |
67 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 72 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
68 | CONFIG_KMOD=y | 73 | CONFIG_KMOD=y |
@@ -70,6 +75,7 @@ CONFIG_KMOD=y | |||
70 | # | 75 | # |
71 | # Block layer | 76 | # Block layer |
72 | # | 77 | # |
78 | CONFIG_BLOCK=y | ||
73 | # CONFIG_BLK_DEV_IO_TRACE is not set | 79 | # CONFIG_BLK_DEV_IO_TRACE is not set |
74 | 80 | ||
75 | # | 81 | # |
@@ -120,6 +126,7 @@ CONFIG_ARCH_S3C2410=y | |||
120 | # | 126 | # |
121 | # S3C24XX Implementations | 127 | # S3C24XX Implementations |
122 | # | 128 | # |
129 | # CONFIG_MACH_AML_M5900 is not set | ||
123 | CONFIG_MACH_ANUBIS=y | 130 | CONFIG_MACH_ANUBIS=y |
124 | CONFIG_MACH_OSIRIS=y | 131 | CONFIG_MACH_OSIRIS=y |
125 | CONFIG_ARCH_BAST=y | 132 | CONFIG_ARCH_BAST=y |
@@ -178,6 +185,8 @@ CONFIG_CPU_CACHE_V4WT=y | |||
178 | CONFIG_CPU_CACHE_VIVT=y | 185 | CONFIG_CPU_CACHE_VIVT=y |
179 | CONFIG_CPU_COPY_V4WB=y | 186 | CONFIG_CPU_COPY_V4WB=y |
180 | CONFIG_CPU_TLB_V4WBI=y | 187 | CONFIG_CPU_TLB_V4WBI=y |
188 | CONFIG_CPU_CP15=y | ||
189 | CONFIG_CPU_CP15_MMU=y | ||
181 | 190 | ||
182 | # | 191 | # |
183 | # Processor Features | 192 | # Processor Features |
@@ -251,6 +260,7 @@ CONFIG_BINFMT_AOUT=y | |||
251 | CONFIG_PM=y | 260 | CONFIG_PM=y |
252 | CONFIG_PM_LEGACY=y | 261 | CONFIG_PM_LEGACY=y |
253 | # CONFIG_PM_DEBUG is not set | 262 | # CONFIG_PM_DEBUG is not set |
263 | # CONFIG_PM_SYSFS_DEPRECATED is not set | ||
254 | CONFIG_APM=y | 264 | CONFIG_APM=y |
255 | 265 | ||
256 | # | 266 | # |
@@ -266,6 +276,7 @@ CONFIG_NET=y | |||
266 | CONFIG_UNIX=y | 276 | CONFIG_UNIX=y |
267 | CONFIG_XFRM=y | 277 | CONFIG_XFRM=y |
268 | # CONFIG_XFRM_USER is not set | 278 | # CONFIG_XFRM_USER is not set |
279 | # CONFIG_XFRM_SUB_POLICY is not set | ||
269 | # CONFIG_NET_KEY is not set | 280 | # CONFIG_NET_KEY is not set |
270 | CONFIG_INET=y | 281 | CONFIG_INET=y |
271 | # CONFIG_IP_MULTICAST is not set | 282 | # CONFIG_IP_MULTICAST is not set |
@@ -286,10 +297,12 @@ CONFIG_IP_PNP_BOOTP=y | |||
286 | # CONFIG_INET_TUNNEL is not set | 297 | # CONFIG_INET_TUNNEL is not set |
287 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 298 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
288 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 299 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
300 | CONFIG_INET_XFRM_MODE_BEET=y | ||
289 | CONFIG_INET_DIAG=y | 301 | CONFIG_INET_DIAG=y |
290 | CONFIG_INET_TCP_DIAG=y | 302 | CONFIG_INET_TCP_DIAG=y |
291 | # CONFIG_TCP_CONG_ADVANCED is not set | 303 | # CONFIG_TCP_CONG_ADVANCED is not set |
292 | CONFIG_TCP_CONG_BIC=y | 304 | CONFIG_TCP_CONG_CUBIC=y |
305 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
293 | # CONFIG_IPV6 is not set | 306 | # CONFIG_IPV6 is not set |
294 | # CONFIG_INET6_XFRM_TUNNEL is not set | 307 | # CONFIG_INET6_XFRM_TUNNEL is not set |
295 | # CONFIG_INET6_TUNNEL is not set | 308 | # CONFIG_INET6_TUNNEL is not set |
@@ -377,6 +390,7 @@ CONFIG_MTD_BLOCK=y | |||
377 | # CONFIG_NFTL is not set | 390 | # CONFIG_NFTL is not set |
378 | # CONFIG_INFTL is not set | 391 | # CONFIG_INFTL is not set |
379 | # CONFIG_RFD_FTL is not set | 392 | # CONFIG_RFD_FTL is not set |
393 | # CONFIG_SSFDC is not set | ||
380 | 394 | ||
381 | # | 395 | # |
382 | # RAM/ROM/Flash chip drivers | 396 | # RAM/ROM/Flash chip drivers |
@@ -418,6 +432,8 @@ CONFIG_MTD_BAST_MAXSIZE=4 | |||
418 | # | 432 | # |
419 | # Self-contained MTD device drivers | 433 | # Self-contained MTD device drivers |
420 | # | 434 | # |
435 | # CONFIG_MTD_DATAFLASH is not set | ||
436 | # CONFIG_MTD_M25P80 is not set | ||
421 | # CONFIG_MTD_SLRAM is not set | 437 | # CONFIG_MTD_SLRAM is not set |
422 | # CONFIG_MTD_PHRAM is not set | 438 | # CONFIG_MTD_PHRAM is not set |
423 | # CONFIG_MTD_MTDRAM is not set | 439 | # CONFIG_MTD_MTDRAM is not set |
@@ -512,6 +528,7 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
512 | # | 528 | # |
513 | # CONFIG_RAID_ATTRS is not set | 529 | # CONFIG_RAID_ATTRS is not set |
514 | # CONFIG_SCSI is not set | 530 | # CONFIG_SCSI is not set |
531 | # CONFIG_SCSI_NETLINK is not set | ||
515 | 532 | ||
516 | # | 533 | # |
517 | # Multi-device support (RAID and LVM) | 534 | # Multi-device support (RAID and LVM) |
@@ -606,6 +623,7 @@ CONFIG_DM9000=y | |||
606 | # Input device support | 623 | # Input device support |
607 | # | 624 | # |
608 | CONFIG_INPUT=y | 625 | CONFIG_INPUT=y |
626 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
609 | 627 | ||
610 | # | 628 | # |
611 | # Userland interfaces | 629 | # Userland interfaces |
@@ -628,6 +646,7 @@ CONFIG_KEYBOARD_ATKBD=y | |||
628 | # CONFIG_KEYBOARD_LKKBD is not set | 646 | # CONFIG_KEYBOARD_LKKBD is not set |
629 | # CONFIG_KEYBOARD_XTKBD is not set | 647 | # CONFIG_KEYBOARD_XTKBD is not set |
630 | # CONFIG_KEYBOARD_NEWTON is not set | 648 | # CONFIG_KEYBOARD_NEWTON is not set |
649 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
631 | CONFIG_INPUT_MOUSE=y | 650 | CONFIG_INPUT_MOUSE=y |
632 | CONFIG_MOUSE_PS2=y | 651 | CONFIG_MOUSE_PS2=y |
633 | # CONFIG_MOUSE_SERIAL is not set | 652 | # CONFIG_MOUSE_SERIAL is not set |
@@ -734,7 +753,6 @@ CONFIG_S3C2410_WATCHDOG=y | |||
734 | # CONFIG_USBPCWATCHDOG is not set | 753 | # CONFIG_USBPCWATCHDOG is not set |
735 | CONFIG_HW_RANDOM=y | 754 | CONFIG_HW_RANDOM=y |
736 | # CONFIG_NVRAM is not set | 755 | # CONFIG_NVRAM is not set |
737 | CONFIG_S3C2410_RTC=y | ||
738 | # CONFIG_DTLK is not set | 756 | # CONFIG_DTLK is not set |
739 | # CONFIG_R3964 is not set | 757 | # CONFIG_R3964 is not set |
740 | 758 | ||
@@ -747,7 +765,6 @@ CONFIG_S3C2410_RTC=y | |||
747 | # TPM devices | 765 | # TPM devices |
748 | # | 766 | # |
749 | # CONFIG_TCG_TPM is not set | 767 | # CONFIG_TCG_TPM is not set |
750 | # CONFIG_TELCLOCK is not set | ||
751 | 768 | ||
752 | # | 769 | # |
753 | # I2C support | 770 | # I2C support |
@@ -792,12 +809,26 @@ CONFIG_SENSORS_EEPROM=m | |||
792 | # | 809 | # |
793 | # SPI support | 810 | # SPI support |
794 | # | 811 | # |
795 | # CONFIG_SPI is not set | 812 | CONFIG_SPI=y |
796 | # CONFIG_SPI_MASTER is not set | 813 | # CONFIG_SPI_DEBUG is not set |
814 | CONFIG_SPI_MASTER=y | ||
815 | |||
816 | # | ||
817 | # SPI Master Controller Drivers | ||
818 | # | ||
819 | CONFIG_SPI_BITBANG=m | ||
820 | # CONFIG_SPI_BUTTERFLY is not set | ||
821 | CONFIG_SPI_S3C24XX_GPIO=m | ||
822 | CONFIG_SPI_S3C24XX=m | ||
823 | |||
824 | # | ||
825 | # SPI Protocol Masters | ||
826 | # | ||
797 | 827 | ||
798 | # | 828 | # |
799 | # Dallas's 1-wire bus | 829 | # Dallas's 1-wire bus |
800 | # | 830 | # |
831 | # CONFIG_W1 is not set | ||
801 | 832 | ||
802 | # | 833 | # |
803 | # Hardware Monitoring support | 834 | # Hardware Monitoring support |
@@ -820,6 +851,7 @@ CONFIG_HWMON_VID=m | |||
820 | # CONFIG_SENSORS_GL520SM is not set | 851 | # CONFIG_SENSORS_GL520SM is not set |
821 | # CONFIG_SENSORS_IT87 is not set | 852 | # CONFIG_SENSORS_IT87 is not set |
822 | # CONFIG_SENSORS_LM63 is not set | 853 | # CONFIG_SENSORS_LM63 is not set |
854 | # CONFIG_SENSORS_LM70 is not set | ||
823 | CONFIG_SENSORS_LM75=m | 855 | CONFIG_SENSORS_LM75=m |
824 | # CONFIG_SENSORS_LM77 is not set | 856 | # CONFIG_SENSORS_LM77 is not set |
825 | CONFIG_SENSORS_LM78=m | 857 | CONFIG_SENSORS_LM78=m |
@@ -834,6 +866,7 @@ CONFIG_SENSORS_LM85=m | |||
834 | # CONFIG_SENSORS_SMSC47M1 is not set | 866 | # CONFIG_SENSORS_SMSC47M1 is not set |
835 | # CONFIG_SENSORS_SMSC47M192 is not set | 867 | # CONFIG_SENSORS_SMSC47M192 is not set |
836 | # CONFIG_SENSORS_SMSC47B397 is not set | 868 | # CONFIG_SENSORS_SMSC47B397 is not set |
869 | # CONFIG_SENSORS_VT1211 is not set | ||
837 | # CONFIG_SENSORS_W83781D is not set | 870 | # CONFIG_SENSORS_W83781D is not set |
838 | # CONFIG_SENSORS_W83791D is not set | 871 | # CONFIG_SENSORS_W83791D is not set |
839 | # CONFIG_SENSORS_W83792D is not set | 872 | # CONFIG_SENSORS_W83792D is not set |
@@ -845,25 +878,31 @@ CONFIG_SENSORS_LM85=m | |||
845 | # | 878 | # |
846 | # Misc devices | 879 | # Misc devices |
847 | # | 880 | # |
881 | # CONFIG_TIFM_CORE is not set | ||
848 | 882 | ||
849 | # | 883 | # |
850 | # LED devices | 884 | # LED devices |
851 | # | 885 | # |
852 | # CONFIG_NEW_LEDS is not set | 886 | CONFIG_NEW_LEDS=y |
887 | CONFIG_LEDS_CLASS=m | ||
853 | 888 | ||
854 | # | 889 | # |
855 | # LED drivers | 890 | # LED drivers |
856 | # | 891 | # |
892 | CONFIG_LEDS_S3C24XX=m | ||
857 | 893 | ||
858 | # | 894 | # |
859 | # LED Triggers | 895 | # LED Triggers |
860 | # | 896 | # |
897 | CONFIG_LEDS_TRIGGERS=y | ||
898 | CONFIG_LEDS_TRIGGER_TIMER=m | ||
899 | # CONFIG_LEDS_TRIGGER_IDE_DISK is not set | ||
900 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | ||
861 | 901 | ||
862 | # | 902 | # |
863 | # Multimedia devices | 903 | # Multimedia devices |
864 | # | 904 | # |
865 | # CONFIG_VIDEO_DEV is not set | 905 | # CONFIG_VIDEO_DEV is not set |
866 | CONFIG_VIDEO_V4L2=y | ||
867 | 906 | ||
868 | # | 907 | # |
869 | # Digital Video Broadcasting Devices | 908 | # Digital Video Broadcasting Devices |
@@ -876,6 +915,7 @@ CONFIG_VIDEO_V4L2=y | |||
876 | # | 915 | # |
877 | CONFIG_FIRMWARE_EDID=y | 916 | CONFIG_FIRMWARE_EDID=y |
878 | CONFIG_FB=y | 917 | CONFIG_FB=y |
918 | # CONFIG_FB_DDC is not set | ||
879 | CONFIG_FB_CFB_FILLRECT=y | 919 | CONFIG_FB_CFB_FILLRECT=y |
880 | CONFIG_FB_CFB_COPYAREA=y | 920 | CONFIG_FB_CFB_COPYAREA=y |
881 | CONFIG_FB_CFB_IMAGEBLIT=y | 921 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -951,7 +991,6 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y | |||
951 | # | 991 | # |
952 | # may also be needed; see USB_STORAGE Help for more information | 992 | # may also be needed; see USB_STORAGE Help for more information |
953 | # | 993 | # |
954 | # CONFIG_USB_STORAGE is not set | ||
955 | # CONFIG_USB_LIBUSUAL is not set | 994 | # CONFIG_USB_LIBUSUAL is not set |
956 | 995 | ||
957 | # | 996 | # |
@@ -1007,6 +1046,7 @@ CONFIG_USB_MON=y | |||
1007 | # | 1046 | # |
1008 | # CONFIG_USB_EMI62 is not set | 1047 | # CONFIG_USB_EMI62 is not set |
1009 | # CONFIG_USB_EMI26 is not set | 1048 | # CONFIG_USB_EMI26 is not set |
1049 | # CONFIG_USB_ADUTUX is not set | ||
1010 | # CONFIG_USB_AUERSWALD is not set | 1050 | # CONFIG_USB_AUERSWALD is not set |
1011 | # CONFIG_USB_RIO500 is not set | 1051 | # CONFIG_USB_RIO500 is not set |
1012 | # CONFIG_USB_LEGOTOWER is not set | 1052 | # CONFIG_USB_LEGOTOWER is not set |
@@ -1014,11 +1054,12 @@ CONFIG_USB_MON=y | |||
1014 | # CONFIG_USB_LED is not set | 1054 | # CONFIG_USB_LED is not set |
1015 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1055 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
1016 | # CONFIG_USB_CYTHERM is not set | 1056 | # CONFIG_USB_CYTHERM is not set |
1017 | # CONFIG_USB_PHIDGETKIT is not set | 1057 | # CONFIG_USB_PHIDGET is not set |
1018 | # CONFIG_USB_PHIDGETSERVO is not set | ||
1019 | # CONFIG_USB_IDMOUSE is not set | 1058 | # CONFIG_USB_IDMOUSE is not set |
1059 | # CONFIG_USB_FTDI_ELAN is not set | ||
1020 | # CONFIG_USB_APPLEDISPLAY is not set | 1060 | # CONFIG_USB_APPLEDISPLAY is not set |
1021 | # CONFIG_USB_LD is not set | 1061 | # CONFIG_USB_LD is not set |
1062 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1022 | # CONFIG_USB_TEST is not set | 1063 | # CONFIG_USB_TEST is not set |
1023 | 1064 | ||
1024 | # | 1065 | # |
@@ -1039,7 +1080,37 @@ CONFIG_USB_MON=y | |||
1039 | # Real Time Clock | 1080 | # Real Time Clock |
1040 | # | 1081 | # |
1041 | CONFIG_RTC_LIB=y | 1082 | CONFIG_RTC_LIB=y |
1042 | # CONFIG_RTC_CLASS is not set | 1083 | CONFIG_RTC_CLASS=y |
1084 | CONFIG_RTC_HCTOSYS=y | ||
1085 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
1086 | # CONFIG_RTC_DEBUG is not set | ||
1087 | |||
1088 | # | ||
1089 | # RTC interfaces | ||
1090 | # | ||
1091 | CONFIG_RTC_INTF_SYSFS=y | ||
1092 | CONFIG_RTC_INTF_PROC=y | ||
1093 | CONFIG_RTC_INTF_DEV=y | ||
1094 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
1095 | |||
1096 | # | ||
1097 | # RTC drivers | ||
1098 | # | ||
1099 | # CONFIG_RTC_DRV_X1205 is not set | ||
1100 | # CONFIG_RTC_DRV_DS1307 is not set | ||
1101 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1102 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1103 | # CONFIG_RTC_DRV_DS1672 is not set | ||
1104 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1105 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
1106 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1107 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
1108 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
1109 | CONFIG_RTC_DRV_S3C=y | ||
1110 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1111 | # CONFIG_RTC_DRV_TEST is not set | ||
1112 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
1113 | # CONFIG_RTC_DRV_V3020 is not set | ||
1043 | 1114 | ||
1044 | # | 1115 | # |
1045 | # File systems | 1116 | # File systems |
@@ -1051,6 +1122,7 @@ CONFIG_EXT3_FS=y | |||
1051 | CONFIG_EXT3_FS_XATTR=y | 1122 | CONFIG_EXT3_FS_XATTR=y |
1052 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1123 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
1053 | # CONFIG_EXT3_FS_SECURITY is not set | 1124 | # CONFIG_EXT3_FS_SECURITY is not set |
1125 | # CONFIG_EXT4DEV_FS is not set | ||
1054 | CONFIG_JBD=y | 1126 | CONFIG_JBD=y |
1055 | # CONFIG_JBD_DEBUG is not set | 1127 | # CONFIG_JBD_DEBUG is not set |
1056 | CONFIG_FS_MBCACHE=y | 1128 | CONFIG_FS_MBCACHE=y |
@@ -1058,6 +1130,7 @@ CONFIG_FS_MBCACHE=y | |||
1058 | # CONFIG_JFS_FS is not set | 1130 | # CONFIG_JFS_FS is not set |
1059 | # CONFIG_FS_POSIX_ACL is not set | 1131 | # CONFIG_FS_POSIX_ACL is not set |
1060 | # CONFIG_XFS_FS is not set | 1132 | # CONFIG_XFS_FS is not set |
1133 | # CONFIG_GFS2_FS is not set | ||
1061 | # CONFIG_OCFS2_FS is not set | 1134 | # CONFIG_OCFS2_FS is not set |
1062 | # CONFIG_MINIX_FS is not set | 1135 | # CONFIG_MINIX_FS is not set |
1063 | CONFIG_ROMFS_FS=y | 1136 | CONFIG_ROMFS_FS=y |
@@ -1089,6 +1162,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
1089 | # Pseudo filesystems | 1162 | # Pseudo filesystems |
1090 | # | 1163 | # |
1091 | CONFIG_PROC_FS=y | 1164 | CONFIG_PROC_FS=y |
1165 | CONFIG_PROC_SYSCTL=y | ||
1092 | CONFIG_SYSFS=y | 1166 | CONFIG_SYSFS=y |
1093 | # CONFIG_TMPFS is not set | 1167 | # CONFIG_TMPFS is not set |
1094 | # CONFIG_HUGETLB_PAGE is not set | 1168 | # CONFIG_HUGETLB_PAGE is not set |
@@ -1219,6 +1293,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
1219 | # Kernel hacking | 1293 | # Kernel hacking |
1220 | # | 1294 | # |
1221 | # CONFIG_PRINTK_TIME is not set | 1295 | # CONFIG_PRINTK_TIME is not set |
1296 | CONFIG_ENABLE_MUST_CHECK=y | ||
1222 | CONFIG_MAGIC_SYSRQ=y | 1297 | CONFIG_MAGIC_SYSRQ=y |
1223 | # CONFIG_UNUSED_SYMBOLS is not set | 1298 | # CONFIG_UNUSED_SYMBOLS is not set |
1224 | CONFIG_DEBUG_KERNEL=y | 1299 | CONFIG_DEBUG_KERNEL=y |
@@ -1238,9 +1313,10 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
1238 | CONFIG_DEBUG_INFO=y | 1313 | CONFIG_DEBUG_INFO=y |
1239 | # CONFIG_DEBUG_FS is not set | 1314 | # CONFIG_DEBUG_FS is not set |
1240 | # CONFIG_DEBUG_VM is not set | 1315 | # CONFIG_DEBUG_VM is not set |
1316 | # CONFIG_DEBUG_LIST is not set | ||
1241 | CONFIG_FRAME_POINTER=y | 1317 | CONFIG_FRAME_POINTER=y |
1242 | # CONFIG_UNWIND_INFO is not set | ||
1243 | CONFIG_FORCED_INLINING=y | 1318 | CONFIG_FORCED_INLINING=y |
1319 | # CONFIG_HEADERS_CHECK is not set | ||
1244 | # CONFIG_RCU_TORTURE_TEST is not set | 1320 | # CONFIG_RCU_TORTURE_TEST is not set |
1245 | CONFIG_DEBUG_USER=y | 1321 | CONFIG_DEBUG_USER=y |
1246 | # CONFIG_DEBUG_WAITQ is not set | 1322 | # CONFIG_DEBUG_WAITQ is not set |
@@ -1262,10 +1338,6 @@ CONFIG_DEBUG_S3C2410_UART=0 | |||
1262 | # CONFIG_CRYPTO is not set | 1338 | # CONFIG_CRYPTO is not set |
1263 | 1339 | ||
1264 | # | 1340 | # |
1265 | # Hardware crypto devices | ||
1266 | # | ||
1267 | |||
1268 | # | ||
1269 | # Library routines | 1341 | # Library routines |
1270 | # | 1342 | # |
1271 | # CONFIG_CRC_CCITT is not set | 1343 | # CONFIG_CRC_CCITT is not set |
diff --git a/arch/arm/configs/smdk2410_defconfig b/arch/arm/configs/smdk2410_defconfig deleted file mode 100644 index 4d123d33c7df..000000000000 --- a/arch/arm/configs/smdk2410_defconfig +++ /dev/null | |||
@@ -1,735 +0,0 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.12-rc1-bk2 | ||
4 | # Sun Mar 27 22:42:40 2005 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_MMU=y | ||
8 | CONFIG_UID16=y | ||
9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
10 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
11 | CONFIG_GENERIC_IOMAP=y | ||
12 | |||
13 | # | ||
14 | # Code maturity level options | ||
15 | # | ||
16 | CONFIG_EXPERIMENTAL=y | ||
17 | CONFIG_CLEAN_COMPILE=y | ||
18 | CONFIG_BROKEN_ON_SMP=y | ||
19 | |||
20 | # | ||
21 | # General setup | ||
22 | # | ||
23 | CONFIG_LOCALVERSION="" | ||
24 | CONFIG_SWAP=y | ||
25 | CONFIG_SYSVIPC=y | ||
26 | # CONFIG_POSIX_MQUEUE is not set | ||
27 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
28 | CONFIG_SYSCTL=y | ||
29 | # CONFIG_AUDIT is not set | ||
30 | # CONFIG_HOTPLUG is not set | ||
31 | CONFIG_KOBJECT_UEVENT=y | ||
32 | # CONFIG_IKCONFIG is not set | ||
33 | # CONFIG_EMBEDDED is not set | ||
34 | CONFIG_KALLSYMS=y | ||
35 | # CONFIG_KALLSYMS_ALL is not set | ||
36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
37 | CONFIG_BASE_FULL=y | ||
38 | CONFIG_FUTEX=y | ||
39 | CONFIG_EPOLL=y | ||
40 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
41 | CONFIG_SHMEM=y | ||
42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
43 | CONFIG_CC_ALIGN_LABELS=0 | ||
44 | CONFIG_CC_ALIGN_LOOPS=0 | ||
45 | CONFIG_CC_ALIGN_JUMPS=0 | ||
46 | # CONFIG_TINY_SHMEM is not set | ||
47 | CONFIG_BASE_SMALL=0 | ||
48 | |||
49 | # | ||
50 | # Loadable module support | ||
51 | # | ||
52 | # CONFIG_MODULES is not set | ||
53 | |||
54 | # | ||
55 | # System Type | ||
56 | # | ||
57 | # CONFIG_ARCH_CLPS7500 is not set | ||
58 | # CONFIG_ARCH_CLPS711X is not set | ||
59 | # CONFIG_ARCH_CO285 is not set | ||
60 | # CONFIG_ARCH_EBSA110 is not set | ||
61 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
62 | # CONFIG_ARCH_INTEGRATOR is not set | ||
63 | # CONFIG_ARCH_IOP3XX is not set | ||
64 | # CONFIG_ARCH_IXP4XX is not set | ||
65 | # CONFIG_ARCH_IXP2000 is not set | ||
66 | # CONFIG_ARCH_L7200 is not set | ||
67 | # CONFIG_ARCH_PXA is not set | ||
68 | # CONFIG_ARCH_RPC is not set | ||
69 | # CONFIG_ARCH_SA1100 is not set | ||
70 | CONFIG_ARCH_S3C2410=y | ||
71 | # CONFIG_ARCH_SHARK is not set | ||
72 | # CONFIG_ARCH_LH7A40X is not set | ||
73 | # CONFIG_ARCH_OMAP is not set | ||
74 | # CONFIG_ARCH_VERSATILE is not set | ||
75 | # CONFIG_ARCH_IMX is not set | ||
76 | # CONFIG_ARCH_H720X is not set | ||
77 | |||
78 | # | ||
79 | # S3C24XX Implementations | ||
80 | # | ||
81 | # CONFIG_ARCH_BAST is not set | ||
82 | # CONFIG_ARCH_H1940 is not set | ||
83 | # CONFIG_MACH_N30 is not set | ||
84 | CONFIG_ARCH_SMDK2410=y | ||
85 | # CONFIG_ARCH_S3C2440 is not set | ||
86 | # CONFIG_MACH_VR1000 is not set | ||
87 | # CONFIG_MACH_RX3715 is not set | ||
88 | # CONFIG_MACH_OTOM is not set | ||
89 | # CONFIG_MACH_NEXCODER_2440 is not set | ||
90 | CONFIG_CPU_S3C2410=y | ||
91 | |||
92 | # | ||
93 | # S3C2410 Boot | ||
94 | # | ||
95 | |||
96 | # | ||
97 | # S3C2410 Setup | ||
98 | # | ||
99 | # CONFIG_S3C2410_DMA is not set | ||
100 | CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 | ||
101 | |||
102 | # | ||
103 | # Processor Type | ||
104 | # | ||
105 | CONFIG_CPU_32=y | ||
106 | CONFIG_CPU_ARM920T=y | ||
107 | CONFIG_CPU_32v4=y | ||
108 | CONFIG_CPU_ABRT_EV4T=y | ||
109 | CONFIG_CPU_CACHE_V4WT=y | ||
110 | CONFIG_CPU_CACHE_VIVT=y | ||
111 | CONFIG_CPU_COPY_V4WB=y | ||
112 | CONFIG_CPU_TLB_V4WBI=y | ||
113 | |||
114 | # | ||
115 | # Processor Features | ||
116 | # | ||
117 | CONFIG_ARM_THUMB=y | ||
118 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
119 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
120 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
121 | |||
122 | # | ||
123 | # Bus support | ||
124 | # | ||
125 | |||
126 | # | ||
127 | # PCCARD (PCMCIA/CardBus) support | ||
128 | # | ||
129 | # CONFIG_PCCARD is not set | ||
130 | |||
131 | # | ||
132 | # Kernel Features | ||
133 | # | ||
134 | # CONFIG_PREEMPT is not set | ||
135 | CONFIG_ALIGNMENT_TRAP=y | ||
136 | |||
137 | # | ||
138 | # Boot options | ||
139 | # | ||
140 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
141 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
142 | CONFIG_CMDLINE="root=1f04 mem=32M" | ||
143 | # CONFIG_XIP_KERNEL is not set | ||
144 | |||
145 | # | ||
146 | # Floating point emulation | ||
147 | # | ||
148 | |||
149 | # | ||
150 | # At least one emulation must be selected | ||
151 | # | ||
152 | # CONFIG_FPE_NWFPE is not set | ||
153 | # CONFIG_FPE_FASTFPE is not set | ||
154 | |||
155 | # | ||
156 | # Userspace binary formats | ||
157 | # | ||
158 | CONFIG_BINFMT_ELF=y | ||
159 | CONFIG_BINFMT_AOUT=y | ||
160 | # CONFIG_BINFMT_MISC is not set | ||
161 | # CONFIG_ARTHUR is not set | ||
162 | |||
163 | # | ||
164 | # Power management options | ||
165 | # | ||
166 | # CONFIG_PM is not set | ||
167 | |||
168 | # | ||
169 | # Device Drivers | ||
170 | # | ||
171 | |||
172 | # | ||
173 | # Generic Driver Options | ||
174 | # | ||
175 | CONFIG_STANDALONE=y | ||
176 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
177 | # CONFIG_FW_LOADER is not set | ||
178 | # CONFIG_DEBUG_DRIVER is not set | ||
179 | |||
180 | # | ||
181 | # Memory Technology Devices (MTD) | ||
182 | # | ||
183 | CONFIG_MTD=y | ||
184 | # CONFIG_MTD_DEBUG is not set | ||
185 | # CONFIG_MTD_CONCAT is not set | ||
186 | # CONFIG_MTD_PARTITIONS is not set | ||
187 | |||
188 | # | ||
189 | # User Modules And Translation Layers | ||
190 | # | ||
191 | CONFIG_MTD_CHAR=y | ||
192 | CONFIG_MTD_BLOCK=y | ||
193 | # CONFIG_FTL is not set | ||
194 | # CONFIG_NFTL is not set | ||
195 | # CONFIG_INFTL is not set | ||
196 | |||
197 | # | ||
198 | # RAM/ROM/Flash chip drivers | ||
199 | # | ||
200 | CONFIG_MTD_CFI=y | ||
201 | # CONFIG_MTD_JEDECPROBE is not set | ||
202 | CONFIG_MTD_GEN_PROBE=y | ||
203 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
204 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
205 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
206 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
207 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
208 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
209 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
210 | CONFIG_MTD_CFI_I1=y | ||
211 | CONFIG_MTD_CFI_I2=y | ||
212 | # CONFIG_MTD_CFI_I4 is not set | ||
213 | # CONFIG_MTD_CFI_I8 is not set | ||
214 | CONFIG_MTD_CFI_INTELEXT=y | ||
215 | # CONFIG_MTD_CFI_AMDSTD is not set | ||
216 | # CONFIG_MTD_CFI_STAA is not set | ||
217 | CONFIG_MTD_CFI_UTIL=y | ||
218 | # CONFIG_MTD_RAM is not set | ||
219 | # CONFIG_MTD_ROM is not set | ||
220 | # CONFIG_MTD_ABSENT is not set | ||
221 | # CONFIG_MTD_XIP is not set | ||
222 | |||
223 | # | ||
224 | # Mapping drivers for chip access | ||
225 | # | ||
226 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
227 | # CONFIG_MTD_PHYSMAP is not set | ||
228 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
229 | # CONFIG_MTD_EDB7312 is not set | ||
230 | |||
231 | # | ||
232 | # Self-contained MTD device drivers | ||
233 | # | ||
234 | # CONFIG_MTD_SLRAM is not set | ||
235 | # CONFIG_MTD_PHRAM is not set | ||
236 | # CONFIG_MTD_MTDRAM is not set | ||
237 | # CONFIG_MTD_BLKMTD is not set | ||
238 | # CONFIG_MTD_BLOCK2MTD is not set | ||
239 | |||
240 | # | ||
241 | # Disk-On-Chip Device Drivers | ||
242 | # | ||
243 | # CONFIG_MTD_DOC2000 is not set | ||
244 | # CONFIG_MTD_DOC2001 is not set | ||
245 | # CONFIG_MTD_DOC2001PLUS is not set | ||
246 | |||
247 | # | ||
248 | # NAND Flash Device Drivers | ||
249 | # | ||
250 | # CONFIG_MTD_NAND is not set | ||
251 | |||
252 | # | ||
253 | # Parallel port support | ||
254 | # | ||
255 | # CONFIG_PARPORT is not set | ||
256 | |||
257 | # | ||
258 | # Plug and Play support | ||
259 | # | ||
260 | |||
261 | # | ||
262 | # Block devices | ||
263 | # | ||
264 | # CONFIG_BLK_DEV_FD is not set | ||
265 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
266 | # CONFIG_BLK_DEV_LOOP is not set | ||
267 | # CONFIG_BLK_DEV_NBD is not set | ||
268 | CONFIG_BLK_DEV_RAM=y | ||
269 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
270 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
271 | # CONFIG_BLK_DEV_INITRD is not set | ||
272 | CONFIG_INITRAMFS_SOURCE="" | ||
273 | # CONFIG_CDROM_PKTCDVD is not set | ||
274 | |||
275 | # | ||
276 | # IO Schedulers | ||
277 | # | ||
278 | CONFIG_IOSCHED_NOOP=y | ||
279 | CONFIG_IOSCHED_AS=y | ||
280 | CONFIG_IOSCHED_DEADLINE=y | ||
281 | CONFIG_IOSCHED_CFQ=y | ||
282 | # CONFIG_ATA_OVER_ETH is not set | ||
283 | |||
284 | # | ||
285 | # ATA/ATAPI/MFM/RLL support | ||
286 | # | ||
287 | # CONFIG_IDE is not set | ||
288 | |||
289 | # | ||
290 | # SCSI device support | ||
291 | # | ||
292 | # CONFIG_SCSI is not set | ||
293 | |||
294 | # | ||
295 | # Multi-device support (RAID and LVM) | ||
296 | # | ||
297 | # CONFIG_MD is not set | ||
298 | |||
299 | # | ||
300 | # Fusion MPT device support | ||
301 | # | ||
302 | |||
303 | # | ||
304 | # IEEE 1394 (FireWire) support | ||
305 | # | ||
306 | |||
307 | # | ||
308 | # I2O device support | ||
309 | # | ||
310 | |||
311 | # | ||
312 | # Networking support | ||
313 | # | ||
314 | CONFIG_NET=y | ||
315 | |||
316 | # | ||
317 | # Networking options | ||
318 | # | ||
319 | # CONFIG_PACKET is not set | ||
320 | # CONFIG_NETLINK_DEV is not set | ||
321 | CONFIG_UNIX=y | ||
322 | # CONFIG_NET_KEY is not set | ||
323 | CONFIG_INET=y | ||
324 | # CONFIG_IP_MULTICAST is not set | ||
325 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
326 | CONFIG_IP_PNP=y | ||
327 | # CONFIG_IP_PNP_DHCP is not set | ||
328 | CONFIG_IP_PNP_BOOTP=y | ||
329 | # CONFIG_IP_PNP_RARP is not set | ||
330 | # CONFIG_NET_IPIP is not set | ||
331 | # CONFIG_NET_IPGRE is not set | ||
332 | # CONFIG_ARPD is not set | ||
333 | # CONFIG_SYN_COOKIES is not set | ||
334 | # CONFIG_INET_AH is not set | ||
335 | # CONFIG_INET_ESP is not set | ||
336 | # CONFIG_INET_IPCOMP is not set | ||
337 | # CONFIG_INET_TUNNEL is not set | ||
338 | # CONFIG_IP_TCPDIAG is not set | ||
339 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
340 | # CONFIG_IPV6 is not set | ||
341 | # CONFIG_NETFILTER is not set | ||
342 | |||
343 | # | ||
344 | # SCTP Configuration (EXPERIMENTAL) | ||
345 | # | ||
346 | # CONFIG_IP_SCTP is not set | ||
347 | # CONFIG_ATM is not set | ||
348 | # CONFIG_BRIDGE is not set | ||
349 | # CONFIG_VLAN_8021Q is not set | ||
350 | # CONFIG_DECNET is not set | ||
351 | # CONFIG_LLC2 is not set | ||
352 | # CONFIG_IPX is not set | ||
353 | # CONFIG_ATALK is not set | ||
354 | # CONFIG_X25 is not set | ||
355 | # CONFIG_LAPB is not set | ||
356 | # CONFIG_NET_DIVERT is not set | ||
357 | # CONFIG_ECONET is not set | ||
358 | # CONFIG_WAN_ROUTER is not set | ||
359 | |||
360 | # | ||
361 | # QoS and/or fair queueing | ||
362 | # | ||
363 | # CONFIG_NET_SCHED is not set | ||
364 | # CONFIG_NET_CLS_ROUTE is not set | ||
365 | |||
366 | # | ||
367 | # Network testing | ||
368 | # | ||
369 | # CONFIG_NET_PKTGEN is not set | ||
370 | # CONFIG_NETPOLL is not set | ||
371 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
372 | # CONFIG_HAMRADIO is not set | ||
373 | # CONFIG_IRDA is not set | ||
374 | # CONFIG_BT is not set | ||
375 | CONFIG_NETDEVICES=y | ||
376 | # CONFIG_DUMMY is not set | ||
377 | # CONFIG_BONDING is not set | ||
378 | # CONFIG_EQUALIZER is not set | ||
379 | # CONFIG_TUN is not set | ||
380 | |||
381 | # | ||
382 | # Ethernet (10 or 100Mbit) | ||
383 | # | ||
384 | CONFIG_NET_ETHERNET=y | ||
385 | # CONFIG_MII is not set | ||
386 | # CONFIG_SMC91X is not set | ||
387 | |||
388 | # | ||
389 | # Ethernet (1000 Mbit) | ||
390 | # | ||
391 | |||
392 | # | ||
393 | # Ethernet (10000 Mbit) | ||
394 | # | ||
395 | |||
396 | # | ||
397 | # Token Ring devices | ||
398 | # | ||
399 | |||
400 | # | ||
401 | # Wireless LAN (non-hamradio) | ||
402 | # | ||
403 | # CONFIG_NET_RADIO is not set | ||
404 | |||
405 | # | ||
406 | # Wan interfaces | ||
407 | # | ||
408 | # CONFIG_WAN is not set | ||
409 | # CONFIG_PPP is not set | ||
410 | # CONFIG_SLIP is not set | ||
411 | # CONFIG_SHAPER is not set | ||
412 | # CONFIG_NETCONSOLE is not set | ||
413 | |||
414 | # | ||
415 | # ISDN subsystem | ||
416 | # | ||
417 | # CONFIG_ISDN is not set | ||
418 | |||
419 | # | ||
420 | # Input device support | ||
421 | # | ||
422 | CONFIG_INPUT=y | ||
423 | |||
424 | # | ||
425 | # Userland interfaces | ||
426 | # | ||
427 | CONFIG_INPUT_MOUSEDEV=y | ||
428 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
429 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
430 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
431 | # CONFIG_INPUT_JOYDEV is not set | ||
432 | # CONFIG_INPUT_TSDEV is not set | ||
433 | # CONFIG_INPUT_EVDEV is not set | ||
434 | # CONFIG_INPUT_EVBUG is not set | ||
435 | |||
436 | # | ||
437 | # Input Device Drivers | ||
438 | # | ||
439 | CONFIG_INPUT_KEYBOARD=y | ||
440 | CONFIG_KEYBOARD_ATKBD=y | ||
441 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
442 | # CONFIG_KEYBOARD_LKKBD is not set | ||
443 | # CONFIG_KEYBOARD_XTKBD is not set | ||
444 | # CONFIG_KEYBOARD_NEWTON is not set | ||
445 | CONFIG_INPUT_MOUSE=y | ||
446 | CONFIG_MOUSE_PS2=y | ||
447 | # CONFIG_MOUSE_SERIAL is not set | ||
448 | # CONFIG_MOUSE_VSXXXAA is not set | ||
449 | # CONFIG_INPUT_JOYSTICK is not set | ||
450 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
451 | # CONFIG_INPUT_MISC is not set | ||
452 | |||
453 | # | ||
454 | # Hardware I/O ports | ||
455 | # | ||
456 | CONFIG_SERIO=y | ||
457 | CONFIG_SERIO_SERPORT=y | ||
458 | CONFIG_SERIO_LIBPS2=y | ||
459 | # CONFIG_SERIO_RAW is not set | ||
460 | # CONFIG_GAMEPORT is not set | ||
461 | CONFIG_SOUND_GAMEPORT=y | ||
462 | |||
463 | # | ||
464 | # Character devices | ||
465 | # | ||
466 | CONFIG_VT=y | ||
467 | CONFIG_VT_CONSOLE=y | ||
468 | CONFIG_HW_CONSOLE=y | ||
469 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
470 | |||
471 | # | ||
472 | # Serial drivers | ||
473 | # | ||
474 | # CONFIG_SERIAL_8250 is not set | ||
475 | |||
476 | # | ||
477 | # Non-8250 serial port support | ||
478 | # | ||
479 | CONFIG_SERIAL_S3C2410=y | ||
480 | CONFIG_SERIAL_S3C2410_CONSOLE=y | ||
481 | CONFIG_SERIAL_CORE=y | ||
482 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
483 | CONFIG_UNIX98_PTYS=y | ||
484 | CONFIG_LEGACY_PTYS=y | ||
485 | CONFIG_LEGACY_PTY_COUNT=256 | ||
486 | |||
487 | # | ||
488 | # IPMI | ||
489 | # | ||
490 | # CONFIG_IPMI_HANDLER is not set | ||
491 | |||
492 | # | ||
493 | # Watchdog Cards | ||
494 | # | ||
495 | # CONFIG_WATCHDOG is not set | ||
496 | # CONFIG_NVRAM is not set | ||
497 | # CONFIG_RTC is not set | ||
498 | # CONFIG_S3C2410_RTC is not set | ||
499 | # CONFIG_DTLK is not set | ||
500 | # CONFIG_R3964 is not set | ||
501 | |||
502 | # | ||
503 | # Ftape, the floppy tape device driver | ||
504 | # | ||
505 | # CONFIG_DRM is not set | ||
506 | # CONFIG_RAW_DRIVER is not set | ||
507 | |||
508 | # | ||
509 | # TPM devices | ||
510 | # | ||
511 | # CONFIG_TCG_TPM is not set | ||
512 | |||
513 | # | ||
514 | # I2C support | ||
515 | # | ||
516 | # CONFIG_I2C is not set | ||
517 | |||
518 | # | ||
519 | # Misc devices | ||
520 | # | ||
521 | |||
522 | # | ||
523 | # Multimedia devices | ||
524 | # | ||
525 | # CONFIG_VIDEO_DEV is not set | ||
526 | |||
527 | # | ||
528 | # Digital Video Broadcasting Devices | ||
529 | # | ||
530 | # CONFIG_DVB is not set | ||
531 | |||
532 | # | ||
533 | # Graphics support | ||
534 | # | ||
535 | CONFIG_FB=y | ||
536 | CONFIG_FB_CFB_FILLRECT=y | ||
537 | CONFIG_FB_CFB_COPYAREA=y | ||
538 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
539 | CONFIG_FB_SOFT_CURSOR=y | ||
540 | # CONFIG_FB_MODE_HELPERS is not set | ||
541 | # CONFIG_FB_TILEBLITTING is not set | ||
542 | CONFIG_FB_VIRTUAL=y | ||
543 | |||
544 | # | ||
545 | # Console display driver support | ||
546 | # | ||
547 | # CONFIG_VGA_CONSOLE is not set | ||
548 | CONFIG_DUMMY_CONSOLE=y | ||
549 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
550 | # CONFIG_FONTS is not set | ||
551 | CONFIG_FONT_8x8=y | ||
552 | CONFIG_FONT_8x16=y | ||
553 | |||
554 | # | ||
555 | # Logo configuration | ||
556 | # | ||
557 | # CONFIG_LOGO is not set | ||
558 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
559 | |||
560 | # | ||
561 | # Sound | ||
562 | # | ||
563 | # CONFIG_SOUND is not set | ||
564 | |||
565 | # | ||
566 | # USB support | ||
567 | # | ||
568 | CONFIG_USB_ARCH_HAS_HCD=y | ||
569 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
570 | # CONFIG_USB is not set | ||
571 | |||
572 | # | ||
573 | # USB Gadget Support | ||
574 | # | ||
575 | # CONFIG_USB_GADGET is not set | ||
576 | |||
577 | # | ||
578 | # MMC/SD Card support | ||
579 | # | ||
580 | # CONFIG_MMC is not set | ||
581 | |||
582 | # | ||
583 | # File systems | ||
584 | # | ||
585 | CONFIG_EXT2_FS=y | ||
586 | # CONFIG_EXT2_FS_XATTR is not set | ||
587 | # CONFIG_EXT3_FS is not set | ||
588 | # CONFIG_JBD is not set | ||
589 | # CONFIG_REISERFS_FS is not set | ||
590 | # CONFIG_JFS_FS is not set | ||
591 | |||
592 | # | ||
593 | # XFS support | ||
594 | # | ||
595 | # CONFIG_XFS_FS is not set | ||
596 | # CONFIG_MINIX_FS is not set | ||
597 | CONFIG_ROMFS_FS=y | ||
598 | # CONFIG_QUOTA is not set | ||
599 | CONFIG_DNOTIFY=y | ||
600 | # CONFIG_AUTOFS_FS is not set | ||
601 | # CONFIG_AUTOFS4_FS is not set | ||
602 | |||
603 | # | ||
604 | # CD-ROM/DVD Filesystems | ||
605 | # | ||
606 | # CONFIG_ISO9660_FS is not set | ||
607 | # CONFIG_UDF_FS is not set | ||
608 | |||
609 | # | ||
610 | # DOS/FAT/NT Filesystems | ||
611 | # | ||
612 | # CONFIG_MSDOS_FS is not set | ||
613 | # CONFIG_VFAT_FS is not set | ||
614 | # CONFIG_NTFS_FS is not set | ||
615 | |||
616 | # | ||
617 | # Pseudo filesystems | ||
618 | # | ||
619 | CONFIG_PROC_FS=y | ||
620 | CONFIG_SYSFS=y | ||
621 | # CONFIG_DEVFS_FS is not set | ||
622 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
623 | # CONFIG_TMPFS is not set | ||
624 | # CONFIG_HUGETLB_PAGE is not set | ||
625 | CONFIG_RAMFS=y | ||
626 | |||
627 | # | ||
628 | # Miscellaneous filesystems | ||
629 | # | ||
630 | # CONFIG_ADFS_FS is not set | ||
631 | # CONFIG_AFFS_FS is not set | ||
632 | # CONFIG_HFS_FS is not set | ||
633 | # CONFIG_HFSPLUS_FS is not set | ||
634 | # CONFIG_BEFS_FS is not set | ||
635 | # CONFIG_BFS_FS is not set | ||
636 | # CONFIG_EFS_FS is not set | ||
637 | # CONFIG_JFFS_FS is not set | ||
638 | # CONFIG_JFFS2_FS is not set | ||
639 | # CONFIG_CRAMFS is not set | ||
640 | # CONFIG_VXFS_FS is not set | ||
641 | # CONFIG_HPFS_FS is not set | ||
642 | # CONFIG_QNX4FS_FS is not set | ||
643 | # CONFIG_SYSV_FS is not set | ||
644 | # CONFIG_UFS_FS is not set | ||
645 | |||
646 | # | ||
647 | # Network File Systems | ||
648 | # | ||
649 | CONFIG_NFS_FS=y | ||
650 | # CONFIG_NFS_V3 is not set | ||
651 | # CONFIG_NFS_V4 is not set | ||
652 | # CONFIG_NFS_DIRECTIO is not set | ||
653 | # CONFIG_NFSD is not set | ||
654 | CONFIG_ROOT_NFS=y | ||
655 | CONFIG_LOCKD=y | ||
656 | CONFIG_SUNRPC=y | ||
657 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
658 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
659 | # CONFIG_SMB_FS is not set | ||
660 | # CONFIG_CIFS is not set | ||
661 | # CONFIG_NCP_FS is not set | ||
662 | # CONFIG_CODA_FS is not set | ||
663 | # CONFIG_AFS_FS is not set | ||
664 | |||
665 | # | ||
666 | # Partition Types | ||
667 | # | ||
668 | CONFIG_PARTITION_ADVANCED=y | ||
669 | # CONFIG_ACORN_PARTITION is not set | ||
670 | # CONFIG_OSF_PARTITION is not set | ||
671 | # CONFIG_AMIGA_PARTITION is not set | ||
672 | # CONFIG_ATARI_PARTITION is not set | ||
673 | # CONFIG_MAC_PARTITION is not set | ||
674 | # CONFIG_MSDOS_PARTITION is not set | ||
675 | # CONFIG_LDM_PARTITION is not set | ||
676 | # CONFIG_SGI_PARTITION is not set | ||
677 | # CONFIG_ULTRIX_PARTITION is not set | ||
678 | # CONFIG_SUN_PARTITION is not set | ||
679 | # CONFIG_EFI_PARTITION is not set | ||
680 | |||
681 | # | ||
682 | # Native Language Support | ||
683 | # | ||
684 | # CONFIG_NLS is not set | ||
685 | |||
686 | # | ||
687 | # Profiling support | ||
688 | # | ||
689 | # CONFIG_PROFILING is not set | ||
690 | |||
691 | # | ||
692 | # Kernel hacking | ||
693 | # | ||
694 | # CONFIG_PRINTK_TIME is not set | ||
695 | CONFIG_DEBUG_KERNEL=y | ||
696 | # CONFIG_MAGIC_SYSRQ is not set | ||
697 | CONFIG_LOG_BUF_SHIFT=14 | ||
698 | # CONFIG_SCHEDSTATS is not set | ||
699 | # CONFIG_DEBUG_SLAB is not set | ||
700 | # CONFIG_DEBUG_SPINLOCK is not set | ||
701 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
702 | # CONFIG_DEBUG_KOBJECT is not set | ||
703 | CONFIG_DEBUG_BUGVERBOSE=y | ||
704 | # CONFIG_DEBUG_INFO is not set | ||
705 | # CONFIG_DEBUG_FS is not set | ||
706 | CONFIG_FRAME_POINTER=y | ||
707 | CONFIG_DEBUG_USER=y | ||
708 | # CONFIG_DEBUG_WAITQ is not set | ||
709 | # CONFIG_DEBUG_ERRORS is not set | ||
710 | CONFIG_DEBUG_LL=y | ||
711 | # CONFIG_DEBUG_ICEDCC is not set | ||
712 | CONFIG_DEBUG_S3C2410_PORT=y | ||
713 | CONFIG_DEBUG_S3C2410_UART=0 | ||
714 | |||
715 | # | ||
716 | # Security options | ||
717 | # | ||
718 | # CONFIG_KEYS is not set | ||
719 | # CONFIG_SECURITY is not set | ||
720 | |||
721 | # | ||
722 | # Cryptographic options | ||
723 | # | ||
724 | # CONFIG_CRYPTO is not set | ||
725 | |||
726 | # | ||
727 | # Hardware crypto devices | ||
728 | # | ||
729 | |||
730 | # | ||
731 | # Library routines | ||
732 | # | ||
733 | # CONFIG_CRC_CCITT is not set | ||
734 | CONFIG_CRC32=y | ||
735 | CONFIG_LIBCRC32C=y | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 6bbd93dd186a..29efc9f82057 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -357,6 +357,9 @@ static void __init setup_processor(void) | |||
357 | #ifndef CONFIG_VFP | 357 | #ifndef CONFIG_VFP |
358 | elf_hwcap &= ~HWCAP_VFP; | 358 | elf_hwcap &= ~HWCAP_VFP; |
359 | #endif | 359 | #endif |
360 | #ifndef CONFIG_IWMMXT | ||
361 | elf_hwcap &= ~HWCAP_IWMMXT; | ||
362 | #endif | ||
360 | 363 | ||
361 | cpu_proc_init(); | 364 | cpu_proc_init(); |
362 | } | 365 | } |
@@ -854,6 +857,7 @@ static const char *hwcap_str[] = { | |||
854 | "vfp", | 857 | "vfp", |
855 | "edsp", | 858 | "edsp", |
856 | "java", | 859 | "java", |
860 | "iwmmxt", | ||
857 | NULL | 861 | NULL |
858 | }; | 862 | }; |
859 | 863 | ||
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index 0c5a6091a93c..6ff5e3ff6cb5 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -220,10 +220,10 @@ EXPORT_SYMBOL(leds_event); | |||
220 | #ifdef CONFIG_LEDS_TIMER | 220 | #ifdef CONFIG_LEDS_TIMER |
221 | static inline void do_leds(void) | 221 | static inline void do_leds(void) |
222 | { | 222 | { |
223 | static unsigned int count = 50; | 223 | static unsigned int count = HZ/2; |
224 | 224 | ||
225 | if (--count == 0) { | 225 | if (--count == 0) { |
226 | count = 50; | 226 | count = HZ/2; |
227 | leds_event(led_timer); | 227 | leds_event(led_timer); |
228 | } | 228 | } |
229 | } | 229 | } |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index c7513f6eb50c..fbe288a8da65 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -86,7 +86,8 @@ enum ixp4xx_irq_type { | |||
86 | IXP4XX_IRQ_LEVEL, IXP4XX_IRQ_EDGE | 86 | IXP4XX_IRQ_LEVEL, IXP4XX_IRQ_EDGE |
87 | }; | 87 | }; |
88 | 88 | ||
89 | static void ixp4xx_config_irq(unsigned irq, enum ixp4xx_irq_type type); | 89 | /* Each bit represents an IRQ: 1: edge-triggered, 0: level triggered */ |
90 | static unsigned long long ixp4xx_irq_edge = 0; | ||
90 | 91 | ||
91 | /* | 92 | /* |
92 | * IRQ -> GPIO mapping table | 93 | * IRQ -> GPIO mapping table |
@@ -135,7 +136,11 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) | |||
135 | default: | 136 | default: |
136 | return -EINVAL; | 137 | return -EINVAL; |
137 | } | 138 | } |
138 | ixp4xx_config_irq(irq, irq_type); | 139 | |
140 | if (irq_type == IXP4XX_IRQ_EDGE) | ||
141 | ixp4xx_irq_edge |= (1 << irq); | ||
142 | else | ||
143 | ixp4xx_irq_edge &= ~(1 << irq); | ||
139 | 144 | ||
140 | if (line >= 8) { /* pins 8-15 */ | 145 | if (line >= 8) { /* pins 8-15 */ |
141 | line -= 8; | 146 | line -= 8; |
@@ -167,14 +172,6 @@ static void ixp4xx_irq_mask(unsigned int irq) | |||
167 | *IXP4XX_ICMR &= ~(1 << irq); | 172 | *IXP4XX_ICMR &= ~(1 << irq); |
168 | } | 173 | } |
169 | 174 | ||
170 | static void ixp4xx_irq_unmask(unsigned int irq) | ||
171 | { | ||
172 | if (cpu_is_ixp46x() && irq >= 32) | ||
173 | *IXP4XX_ICMR2 |= (1 << (irq - 32)); | ||
174 | else | ||
175 | *IXP4XX_ICMR |= (1 << irq); | ||
176 | } | ||
177 | |||
178 | static void ixp4xx_irq_ack(unsigned int irq) | 175 | static void ixp4xx_irq_ack(unsigned int irq) |
179 | { | 176 | { |
180 | int line = (irq < 32) ? irq2gpio[irq] : -1; | 177 | int line = (irq < 32) ? irq2gpio[irq] : -1; |
@@ -187,41 +184,25 @@ static void ixp4xx_irq_ack(unsigned int irq) | |||
187 | * Level triggered interrupts on GPIO lines can only be cleared when the | 184 | * Level triggered interrupts on GPIO lines can only be cleared when the |
188 | * interrupt condition disappears. | 185 | * interrupt condition disappears. |
189 | */ | 186 | */ |
190 | static void ixp4xx_irq_level_unmask(unsigned int irq) | 187 | static void ixp4xx_irq_unmask(unsigned int irq) |
191 | { | 188 | { |
192 | ixp4xx_irq_ack(irq); | 189 | if (!(ixp4xx_irq_edge & (1 << irq))) |
193 | ixp4xx_irq_unmask(irq); | 190 | ixp4xx_irq_ack(irq); |
194 | } | ||
195 | 191 | ||
196 | static struct irqchip ixp4xx_irq_level_chip = { | 192 | if (cpu_is_ixp46x() && irq >= 32) |
197 | .ack = ixp4xx_irq_mask, | 193 | *IXP4XX_ICMR2 |= (1 << (irq - 32)); |
198 | .mask = ixp4xx_irq_mask, | 194 | else |
199 | .unmask = ixp4xx_irq_level_unmask, | 195 | *IXP4XX_ICMR |= (1 << irq); |
200 | .set_type = ixp4xx_set_irq_type, | 196 | } |
201 | }; | ||
202 | 197 | ||
203 | static struct irqchip ixp4xx_irq_edge_chip = { | 198 | static struct irqchip ixp4xx_irq_chip = { |
199 | .name = "IXP4xx", | ||
204 | .ack = ixp4xx_irq_ack, | 200 | .ack = ixp4xx_irq_ack, |
205 | .mask = ixp4xx_irq_mask, | 201 | .mask = ixp4xx_irq_mask, |
206 | .unmask = ixp4xx_irq_unmask, | 202 | .unmask = ixp4xx_irq_unmask, |
207 | .set_type = ixp4xx_set_irq_type, | 203 | .set_type = ixp4xx_set_irq_type, |
208 | }; | 204 | }; |
209 | 205 | ||
210 | static void ixp4xx_config_irq(unsigned irq, enum ixp4xx_irq_type type) | ||
211 | { | ||
212 | switch (type) { | ||
213 | case IXP4XX_IRQ_LEVEL: | ||
214 | set_irq_chip(irq, &ixp4xx_irq_level_chip); | ||
215 | set_irq_handler(irq, do_level_IRQ); | ||
216 | break; | ||
217 | case IXP4XX_IRQ_EDGE: | ||
218 | set_irq_chip(irq, &ixp4xx_irq_edge_chip); | ||
219 | set_irq_handler(irq, do_edge_IRQ); | ||
220 | break; | ||
221 | } | ||
222 | set_irq_flags(irq, IRQF_VALID); | ||
223 | } | ||
224 | |||
225 | void __init ixp4xx_init_irq(void) | 206 | void __init ixp4xx_init_irq(void) |
226 | { | 207 | { |
227 | int i = 0; | 208 | int i = 0; |
@@ -241,8 +222,11 @@ void __init ixp4xx_init_irq(void) | |||
241 | } | 222 | } |
242 | 223 | ||
243 | /* Default to all level triggered */ | 224 | /* Default to all level triggered */ |
244 | for(i = 0; i < NR_IRQS; i++) | 225 | for(i = 0; i < NR_IRQS; i++) { |
245 | ixp4xx_config_irq(i, IXP4XX_IRQ_LEVEL); | 226 | set_irq_chip(i, &ixp4xx_irq_chip); |
227 | set_irq_handler(i, do_level_IRQ); | ||
228 | set_irq_flags(i, IRQF_VALID); | ||
229 | } | ||
246 | } | 230 | } |
247 | 231 | ||
248 | 232 | ||
diff --git a/arch/arm/mach-s3c2410/gpio.c b/arch/arm/mach-s3c2410/gpio.c index db6393c99860..ba346546150b 100644 --- a/arch/arm/mach-s3c2410/gpio.c +++ b/arch/arm/mach-s3c2410/gpio.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * Copyright (c) 2004-2005 Simtec Electronics | 3 | * Copyright (c) 2004-2005 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 5 | * |
6 | * S3C2410 GPIO support | 6 | * S3C24XX GPIO support |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -163,3 +163,22 @@ unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change) | |||
163 | } | 163 | } |
164 | 164 | ||
165 | EXPORT_SYMBOL(s3c2410_modify_misccr); | 165 | EXPORT_SYMBOL(s3c2410_modify_misccr); |
166 | |||
167 | int s3c2410_gpio_getirq(unsigned int pin) | ||
168 | { | ||
169 | if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15) | ||
170 | return -1; /* not valid interrupts */ | ||
171 | |||
172 | if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7) | ||
173 | return -1; /* not valid pin */ | ||
174 | |||
175 | if (pin < S3C2410_GPF4) | ||
176 | return (pin - S3C2410_GPF0) + IRQ_EINT0; | ||
177 | |||
178 | if (pin < S3C2410_GPG0) | ||
179 | return (pin - S3C2410_GPF4) + IRQ_EINT4; | ||
180 | |||
181 | return (pin - S3C2410_GPG0) + IRQ_EINT8; | ||
182 | } | ||
183 | |||
184 | EXPORT_SYMBOL(s3c2410_gpio_getirq); | ||
diff --git a/arch/arm/mach-s3c2410/s3c2410-gpio.c b/arch/arm/mach-s3c2410/s3c2410-gpio.c index a2098f692d83..ec3a276cc3cf 100644 --- a/arch/arm/mach-s3c2410/s3c2410-gpio.c +++ b/arch/arm/mach-s3c2410/s3c2410-gpio.c | |||
@@ -69,22 +69,3 @@ int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, | |||
69 | } | 69 | } |
70 | 70 | ||
71 | EXPORT_SYMBOL(s3c2410_gpio_irqfilter); | 71 | EXPORT_SYMBOL(s3c2410_gpio_irqfilter); |
72 | |||
73 | int s3c2410_gpio_getirq(unsigned int pin) | ||
74 | { | ||
75 | if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15) | ||
76 | return -1; /* not valid interrupts */ | ||
77 | |||
78 | if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7) | ||
79 | return -1; /* not valid pin */ | ||
80 | |||
81 | if (pin < S3C2410_GPF4) | ||
82 | return (pin - S3C2410_GPF0) + IRQ_EINT0; | ||
83 | |||
84 | if (pin < S3C2410_GPG0) | ||
85 | return (pin - S3C2410_GPF4) + IRQ_EINT4; | ||
86 | |||
87 | return (pin - S3C2410_GPG0) + IRQ_EINT8; | ||
88 | } | ||
89 | |||
90 | EXPORT_SYMBOL(s3c2410_gpio_getirq); | ||
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 22217fe2650b..b5814b4b6f35 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
@@ -32,40 +32,51 @@ extern unsigned long phys_initrd_start; | |||
32 | extern unsigned long phys_initrd_size; | 32 | extern unsigned long phys_initrd_size; |
33 | 33 | ||
34 | /* | 34 | /* |
35 | * The sole use of this is to pass memory configuration | 35 | * This is used to pass memory configuration data from paging_init |
36 | * data from paging_init to mem_init. | 36 | * to mem_init, and by show_mem() to skip holes in the memory map. |
37 | */ | 37 | */ |
38 | static struct meminfo meminfo __initdata = { 0, }; | 38 | static struct meminfo meminfo = { 0, }; |
39 | |||
40 | #define for_each_nodebank(iter,mi,no) \ | ||
41 | for (iter = 0; iter < mi->nr_banks; iter++) \ | ||
42 | if (mi->bank[iter].node == no) | ||
39 | 43 | ||
40 | void show_mem(void) | 44 | void show_mem(void) |
41 | { | 45 | { |
42 | int free = 0, total = 0, reserved = 0; | 46 | int free = 0, total = 0, reserved = 0; |
43 | int shared = 0, cached = 0, slab = 0, node; | 47 | int shared = 0, cached = 0, slab = 0, node, i; |
48 | struct meminfo * mi = &meminfo; | ||
44 | 49 | ||
45 | printk("Mem-info:\n"); | 50 | printk("Mem-info:\n"); |
46 | show_free_areas(); | 51 | show_free_areas(); |
47 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 52 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
48 | 53 | ||
49 | for_each_online_node(node) { | 54 | for_each_online_node(node) { |
50 | struct page *page, *end; | 55 | for_each_nodebank (i,mi,node) { |
51 | 56 | unsigned int pfn1, pfn2; | |
52 | page = NODE_MEM_MAP(node); | 57 | struct page *page, *end; |
53 | end = page + NODE_DATA(node)->node_spanned_pages; | 58 | |
54 | 59 | pfn1 = mi->bank[i].start >> PAGE_SHIFT; | |
55 | do { | 60 | pfn2 = (mi->bank[i].size + mi->bank[i].start) >> PAGE_SHIFT; |
56 | total++; | 61 | |
57 | if (PageReserved(page)) | 62 | page = NODE_MEM_MAP(node) + pfn1; |
58 | reserved++; | 63 | end = NODE_MEM_MAP(node) + pfn2; |
59 | else if (PageSwapCache(page)) | 64 | |
60 | cached++; | 65 | do { |
61 | else if (PageSlab(page)) | 66 | total++; |
62 | slab++; | 67 | if (PageReserved(page)) |
63 | else if (!page_count(page)) | 68 | reserved++; |
64 | free++; | 69 | else if (PageSwapCache(page)) |
65 | else | 70 | cached++; |
66 | shared += page_count(page) - 1; | 71 | else if (PageSlab(page)) |
67 | page++; | 72 | slab++; |
68 | } while (page < end); | 73 | else if (!page_count(page)) |
74 | free++; | ||
75 | else | ||
76 | shared += page_count(page) - 1; | ||
77 | page++; | ||
78 | } while (page < end); | ||
79 | } | ||
69 | } | 80 | } |
70 | 81 | ||
71 | printk("%d pages of RAM\n", total); | 82 | printk("%d pages of RAM\n", total); |
@@ -76,10 +87,6 @@ void show_mem(void) | |||
76 | printk("%d pages swap cached\n", cached); | 87 | printk("%d pages swap cached\n", cached); |
77 | } | 88 | } |
78 | 89 | ||
79 | #define for_each_nodebank(iter,mi,no) \ | ||
80 | for (iter = 0; iter < mi->nr_banks; iter++) \ | ||
81 | if (mi->bank[iter].node == no) | ||
82 | |||
83 | /* | 90 | /* |
84 | * FIXME: We really want to avoid allocating the bootmap bitmap | 91 | * FIXME: We really want to avoid allocating the bootmap bitmap |
85 | * over the top of the initrd. Hopefully, this is located towards | 92 | * over the top of the initrd. Hopefully, this is located towards |
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S index e8b377d637f6..2749c1f88d7d 100644 --- a/arch/arm/mm/proc-xscale.S +++ b/arch/arm/mm/proc-xscale.S | |||
@@ -909,7 +909,7 @@ __pxa270_proc_info: | |||
909 | b __xscale_setup | 909 | b __xscale_setup |
910 | .long cpu_arch_name | 910 | .long cpu_arch_name |
911 | .long cpu_elf_name | 911 | .long cpu_elf_name |
912 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP | 912 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_IWMMXT |
913 | .long cpu_pxa270_name | 913 | .long cpu_pxa270_name |
914 | .long xscale_processor_functions | 914 | .long xscale_processor_functions |
915 | .long v4wbi_tlb_fns | 915 | .long v4wbi_tlb_fns |
diff --git a/arch/avr32/boards/atstk1000/setup.c b/arch/avr32/boards/atstk1000/setup.c index 191ab85de9a3..272c011802a7 100644 --- a/arch/avr32/boards/atstk1000/setup.c +++ b/arch/avr32/boards/atstk1000/setup.c | |||
@@ -21,15 +21,6 @@ struct tag *bootloader_tags __initdata; | |||
21 | 21 | ||
22 | struct lcdc_platform_data __initdata atstk1000_fb0_data; | 22 | struct lcdc_platform_data __initdata atstk1000_fb0_data; |
23 | 23 | ||
24 | asmlinkage void __init board_early_init(void) | ||
25 | { | ||
26 | extern void sdram_init(void); | ||
27 | |||
28 | #ifdef CONFIG_LOADER_STANDALONE | ||
29 | sdram_init(); | ||
30 | #endif | ||
31 | } | ||
32 | |||
33 | void __init board_setup_fbmem(unsigned long fbmem_start, | 24 | void __init board_setup_fbmem(unsigned long fbmem_start, |
34 | unsigned long fbmem_size) | 25 | unsigned long fbmem_size) |
35 | { | 26 | { |
diff --git a/arch/avr32/kernel/head.S b/arch/avr32/kernel/head.S index 773b7ad87be9..6163bd0acb95 100644 --- a/arch/avr32/kernel/head.S +++ b/arch/avr32/kernel/head.S | |||
@@ -30,9 +30,6 @@ kernel_entry: | |||
30 | mov r7, 0 | 30 | mov r7, 0 |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | /* Set up the PIO, SDRAM controller, early printk, etc. */ | ||
34 | rcall board_early_init | ||
35 | |||
36 | /* Start the show */ | 33 | /* Start the show */ |
37 | lddpc pc, kernel_start_addr | 34 | lddpc pc, kernel_start_addr |
38 | 35 | ||
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S index 7589a9b426cb..890286a1e62b 100644 --- a/arch/avr32/kernel/syscall-stubs.S +++ b/arch/avr32/kernel/syscall-stubs.S | |||
@@ -100,3 +100,12 @@ __sys_splice: | |||
100 | rcall sys_splice | 100 | rcall sys_splice |
101 | sub sp, -4 | 101 | sub sp, -4 |
102 | popm pc | 102 | popm pc |
103 | |||
104 | .global __sys_epoll_pwait | ||
105 | .type __sys_epoll_pwait,@function | ||
106 | __sys_epoll_pwait: | ||
107 | pushm lr | ||
108 | st.w --sp, ARG6 | ||
109 | rcall sys_epoll_pwait | ||
110 | sub sp, -4 | ||
111 | popm pc | ||
diff --git a/arch/avr32/kernel/syscall_table.S b/arch/avr32/kernel/syscall_table.S index 63b206965d05..db8f8b55ffdf 100644 --- a/arch/avr32/kernel/syscall_table.S +++ b/arch/avr32/kernel/syscall_table.S | |||
@@ -286,4 +286,5 @@ sys_call_table: | |||
286 | .long sys_sync_file_range | 286 | .long sys_sync_file_range |
287 | .long sys_tee | 287 | .long sys_tee |
288 | .long sys_vmsplice | 288 | .long sys_vmsplice |
289 | .long __sys_epoll_pwait /* 265 */ | ||
289 | .long sys_ni_syscall /* r8 is saturated at nr_syscalls */ | 290 | .long sys_ni_syscall /* r8 is saturated at nr_syscalls */ |
diff --git a/arch/avr32/lib/findbit.S b/arch/avr32/lib/findbit.S index 2b4856f4bf7c..c6b91dee857c 100644 --- a/arch/avr32/lib/findbit.S +++ b/arch/avr32/lib/findbit.S | |||
@@ -136,6 +136,7 @@ ENTRY(generic_find_next_zero_le_bit) | |||
136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ | 136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ |
137 | ldswp.w r8, r12[0] | 137 | ldswp.w r8, r12[0] |
138 | sub r12, -4 | 138 | sub r12, -4 |
139 | com r8 | ||
139 | lsr r8, r8, r10 | 140 | lsr r8, r8, r10 |
140 | brne .L_found | 141 | brne .L_found |
141 | 142 | ||
@@ -146,7 +147,7 @@ ENTRY(generic_find_next_zero_le_bit) | |||
146 | 147 | ||
147 | /* Main loop. offset must be word-aligned */ | 148 | /* Main loop. offset must be word-aligned */ |
148 | 1: ldswp.w r8, r12[0] | 149 | 1: ldswp.w r8, r12[0] |
149 | cp.w r8, 0 | 150 | com r8 |
150 | brne .L_found | 151 | brne .L_found |
151 | sub r12, -4 | 152 | sub r12, -4 |
152 | sub r9, 32 | 153 | sub r9, 32 |
diff --git a/arch/avr32/lib/io-readsb.S b/arch/avr32/lib/io-readsb.S index b319d5e71749..2be5da7ed26b 100644 --- a/arch/avr32/lib/io-readsb.S +++ b/arch/avr32/lib/io-readsb.S | |||
@@ -45,3 +45,5 @@ __raw_readsb: | |||
45 | sub r10, 1 | 45 | sub r10, 1 |
46 | st.b r11++, r8 | 46 | st.b r11++, r8 |
47 | brne 3b | 47 | brne 3b |
48 | |||
49 | retal r12 | ||
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index ab974ff97073..22e4c466e5a3 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -70,7 +70,7 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return | |||
70 | 70 | ||
71 | #define PREFIX "ACPI: " | 71 | #define PREFIX "ACPI: " |
72 | 72 | ||
73 | int acpi_noirq __initdata; /* skip ACPI IRQ initialization */ | 73 | int acpi_noirq; /* skip ACPI IRQ initialization */ |
74 | int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ | 74 | int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ |
75 | int acpi_ht __initdata = 1; /* enable HT */ | 75 | int acpi_ht __initdata = 1; /* enable HT */ |
76 | 76 | ||
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index 507983c513c3..ad84bc2802a6 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
@@ -2624,18 +2624,16 @@ void arch_teardown_msi_irq(unsigned int irq) | |||
2624 | 2624 | ||
2625 | static void target_ht_irq(unsigned int irq, unsigned int dest) | 2625 | static void target_ht_irq(unsigned int irq, unsigned int dest) |
2626 | { | 2626 | { |
2627 | u32 low, high; | 2627 | struct ht_irq_msg msg; |
2628 | low = read_ht_irq_low(irq); | 2628 | fetch_ht_irq_msg(irq, &msg); |
2629 | high = read_ht_irq_high(irq); | ||
2630 | 2629 | ||
2631 | low &= ~(HT_IRQ_LOW_DEST_ID_MASK); | 2630 | msg.address_lo &= ~(HT_IRQ_LOW_DEST_ID_MASK); |
2632 | high &= ~(HT_IRQ_HIGH_DEST_ID_MASK); | 2631 | msg.address_hi &= ~(HT_IRQ_HIGH_DEST_ID_MASK); |
2633 | 2632 | ||
2634 | low |= HT_IRQ_LOW_DEST_ID(dest); | 2633 | msg.address_lo |= HT_IRQ_LOW_DEST_ID(dest); |
2635 | high |= HT_IRQ_HIGH_DEST_ID(dest); | 2634 | msg.address_hi |= HT_IRQ_HIGH_DEST_ID(dest); |
2636 | 2635 | ||
2637 | write_ht_irq_low(irq, low); | 2636 | write_ht_irq_msg(irq, &msg); |
2638 | write_ht_irq_high(irq, high); | ||
2639 | } | 2637 | } |
2640 | 2638 | ||
2641 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | 2639 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) |
@@ -2673,7 +2671,7 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
2673 | 2671 | ||
2674 | vector = assign_irq_vector(irq); | 2672 | vector = assign_irq_vector(irq); |
2675 | if (vector >= 0) { | 2673 | if (vector >= 0) { |
2676 | u32 low, high; | 2674 | struct ht_irq_msg msg; |
2677 | unsigned dest; | 2675 | unsigned dest; |
2678 | cpumask_t tmp; | 2676 | cpumask_t tmp; |
2679 | 2677 | ||
@@ -2681,9 +2679,10 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
2681 | cpu_set(vector >> 8, tmp); | 2679 | cpu_set(vector >> 8, tmp); |
2682 | dest = cpu_mask_to_apicid(tmp); | 2680 | dest = cpu_mask_to_apicid(tmp); |
2683 | 2681 | ||
2684 | high = HT_IRQ_HIGH_DEST_ID(dest); | 2682 | msg.address_hi = HT_IRQ_HIGH_DEST_ID(dest); |
2685 | 2683 | ||
2686 | low = HT_IRQ_LOW_BASE | | 2684 | msg.address_lo = |
2685 | HT_IRQ_LOW_BASE | | ||
2687 | HT_IRQ_LOW_DEST_ID(dest) | | 2686 | HT_IRQ_LOW_DEST_ID(dest) | |
2688 | HT_IRQ_LOW_VECTOR(vector) | | 2687 | HT_IRQ_LOW_VECTOR(vector) | |
2689 | ((INT_DEST_MODE == 0) ? | 2688 | ((INT_DEST_MODE == 0) ? |
@@ -2695,8 +2694,7 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
2695 | HT_IRQ_LOW_MT_ARBITRATED) | | 2694 | HT_IRQ_LOW_MT_ARBITRATED) | |
2696 | HT_IRQ_LOW_IRQ_MASKED; | 2695 | HT_IRQ_LOW_IRQ_MASKED; |
2697 | 2696 | ||
2698 | write_ht_irq_low(irq, low); | 2697 | write_ht_irq_msg(irq, &msg); |
2699 | write_ht_irq_high(irq, high); | ||
2700 | 2698 | ||
2701 | set_irq_chip_and_handler_name(irq, &ht_irq_chip, | 2699 | set_irq_chip_and_handler_name(irq, &ht_irq_chip, |
2702 | handle_edge_irq, "edge"); | 2700 | handle_edge_irq, "edge"); |
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c index d98e44b16fe2..fc79e1e859c4 100644 --- a/arch/i386/kernel/kprobes.c +++ b/arch/i386/kernel/kprobes.c | |||
@@ -361,8 +361,11 @@ no_kprobe: | |||
361 | asm volatile ( ".global kretprobe_trampoline\n" | 361 | asm volatile ( ".global kretprobe_trampoline\n" |
362 | "kretprobe_trampoline: \n" | 362 | "kretprobe_trampoline: \n" |
363 | " pushf\n" | 363 | " pushf\n" |
364 | /* skip cs, eip, orig_eax, es, ds */ | 364 | /* skip cs, eip, orig_eax */ |
365 | " subl $20, %esp\n" | 365 | " subl $12, %esp\n" |
366 | " pushl %gs\n" | ||
367 | " pushl %ds\n" | ||
368 | " pushl %es\n" | ||
366 | " pushl %eax\n" | 369 | " pushl %eax\n" |
367 | " pushl %ebp\n" | 370 | " pushl %ebp\n" |
368 | " pushl %edi\n" | 371 | " pushl %edi\n" |
@@ -373,10 +376,10 @@ no_kprobe: | |||
373 | " movl %esp, %eax\n" | 376 | " movl %esp, %eax\n" |
374 | " call trampoline_handler\n" | 377 | " call trampoline_handler\n" |
375 | /* move eflags to cs */ | 378 | /* move eflags to cs */ |
376 | " movl 48(%esp), %edx\n" | 379 | " movl 52(%esp), %edx\n" |
377 | " movl %edx, 44(%esp)\n" | 380 | " movl %edx, 48(%esp)\n" |
378 | /* save true return address on eflags */ | 381 | /* save true return address on eflags */ |
379 | " movl %eax, 48(%esp)\n" | 382 | " movl %eax, 52(%esp)\n" |
380 | " popl %ebx\n" | 383 | " popl %ebx\n" |
381 | " popl %ecx\n" | 384 | " popl %ecx\n" |
382 | " popl %edx\n" | 385 | " popl %edx\n" |
@@ -384,8 +387,8 @@ no_kprobe: | |||
384 | " popl %edi\n" | 387 | " popl %edi\n" |
385 | " popl %ebp\n" | 388 | " popl %ebp\n" |
386 | " popl %eax\n" | 389 | " popl %eax\n" |
387 | /* skip eip, orig_eax, es, ds */ | 390 | /* skip eip, orig_eax, es, ds, gs */ |
388 | " addl $16, %esp\n" | 391 | " addl $20, %esp\n" |
389 | " popf\n" | 392 | " popf\n" |
390 | " ret\n"); | 393 | " ret\n"); |
391 | } | 394 | } |
@@ -404,6 +407,10 @@ fastcall void *__kprobes trampoline_handler(struct pt_regs *regs) | |||
404 | INIT_HLIST_HEAD(&empty_rp); | 407 | INIT_HLIST_HEAD(&empty_rp); |
405 | spin_lock_irqsave(&kretprobe_lock, flags); | 408 | spin_lock_irqsave(&kretprobe_lock, flags); |
406 | head = kretprobe_inst_table_head(current); | 409 | head = kretprobe_inst_table_head(current); |
410 | /* fixup registers */ | ||
411 | regs->xcs = __KERNEL_CS; | ||
412 | regs->eip = trampoline_address; | ||
413 | regs->orig_eax = 0xffffffff; | ||
407 | 414 | ||
408 | /* | 415 | /* |
409 | * It is possible to have multiple instances associated with a given | 416 | * It is possible to have multiple instances associated with a given |
@@ -425,6 +432,7 @@ fastcall void *__kprobes trampoline_handler(struct pt_regs *regs) | |||
425 | 432 | ||
426 | if (ri->rp && ri->rp->handler){ | 433 | if (ri->rp && ri->rp->handler){ |
427 | __get_cpu_var(current_kprobe) = &ri->rp->kp; | 434 | __get_cpu_var(current_kprobe) = &ri->rp->kp; |
435 | get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE; | ||
428 | ri->rp->handler(ri, regs); | 436 | ri->rp->handler(ri, regs); |
429 | __get_cpu_var(current_kprobe) = NULL; | 437 | __get_cpu_var(current_kprobe) = NULL; |
430 | } | 438 | } |
diff --git a/arch/i386/kernel/microcode.c b/arch/i386/kernel/microcode.c index c4d0291b519f..23f5984d0654 100644 --- a/arch/i386/kernel/microcode.c +++ b/arch/i386/kernel/microcode.c | |||
@@ -577,7 +577,7 @@ static void microcode_init_cpu(int cpu) | |||
577 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); | 577 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); |
578 | mutex_lock(µcode_mutex); | 578 | mutex_lock(µcode_mutex); |
579 | collect_cpu_info(cpu); | 579 | collect_cpu_info(cpu); |
580 | if (uci->valid) | 580 | if (uci->valid && system_state == SYSTEM_RUNNING) |
581 | cpu_request_microcode(cpu); | 581 | cpu_request_microcode(cpu); |
582 | mutex_unlock(µcode_mutex); | 582 | mutex_unlock(µcode_mutex); |
583 | set_cpus_allowed(current, old); | 583 | set_cpus_allowed(current, old); |
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S index adc1f232afee..c6f84a0322ba 100644 --- a/arch/i386/kernel/vmlinux.lds.S +++ b/arch/i386/kernel/vmlinux.lds.S | |||
@@ -51,6 +51,7 @@ SECTIONS | |||
51 | __tracedata_end = .; | 51 | __tracedata_end = .; |
52 | 52 | ||
53 | /* writeable */ | 53 | /* writeable */ |
54 | . = ALIGN(4096); | ||
54 | .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */ | 55 | .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */ |
55 | *(.data) | 56 | *(.data) |
56 | CONSTRUCTORS | 57 | CONSTRUCTORS |
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c index 6d5ace845e44..cdfcf971098b 100644 --- a/arch/i386/pci/common.c +++ b/arch/i386/pci/common.c | |||
@@ -343,7 +343,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||
343 | 343 | ||
344 | void pcibios_disable_device (struct pci_dev *dev) | 344 | void pcibios_disable_device (struct pci_dev *dev) |
345 | { | 345 | { |
346 | pcibios_disable_resources(dev); | ||
347 | if (pcibios_disable_irq) | 346 | if (pcibios_disable_irq) |
348 | pcibios_disable_irq(dev); | 347 | pcibios_disable_irq(dev); |
349 | } | 348 | } |
diff --git a/arch/i386/pci/i386.c b/arch/i386/pci/i386.c index 10154a2cac68..98580292f0d4 100644 --- a/arch/i386/pci/i386.c +++ b/arch/i386/pci/i386.c | |||
@@ -242,15 +242,6 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask) | |||
242 | return 0; | 242 | return 0; |
243 | } | 243 | } |
244 | 244 | ||
245 | void pcibios_disable_resources(struct pci_dev *dev) | ||
246 | { | ||
247 | u16 cmd; | ||
248 | |||
249 | pci_read_config_word(dev, PCI_COMMAND, &cmd); | ||
250 | cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY); | ||
251 | pci_write_config_word(dev, PCI_COMMAND, cmd); | ||
252 | } | ||
253 | |||
254 | /* | 245 | /* |
255 | * If we set up a device for bus mastering, we need to check the latency | 246 | * If we set up a device for bus mastering, we need to check the latency |
256 | * timer as certain crappy BIOSes forget to set it properly. | 247 | * timer as certain crappy BIOSes forget to set it properly. |
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c index d0c3da3aa2aa..c6b6d9bbc453 100644 --- a/arch/i386/pci/mmconfig.c +++ b/arch/i386/pci/mmconfig.c | |||
@@ -154,38 +154,6 @@ static struct pci_raw_ops pci_mmcfg = { | |||
154 | .write = pci_mmcfg_write, | 154 | .write = pci_mmcfg_write, |
155 | }; | 155 | }; |
156 | 156 | ||
157 | |||
158 | static __init void pci_mmcfg_insert_resources(void) | ||
159 | { | ||
160 | #define PCI_MMCFG_RESOURCE_NAME_LEN 19 | ||
161 | int i; | ||
162 | struct resource *res; | ||
163 | char *names; | ||
164 | unsigned num_buses; | ||
165 | |||
166 | res = kcalloc(PCI_MMCFG_RESOURCE_NAME_LEN + sizeof(*res), | ||
167 | pci_mmcfg_config_num, GFP_KERNEL); | ||
168 | |||
169 | if (!res) { | ||
170 | printk(KERN_ERR "PCI: Unable to allocate MMCONFIG resources\n"); | ||
171 | return; | ||
172 | } | ||
173 | |||
174 | names = (void *)&res[pci_mmcfg_config_num]; | ||
175 | for (i = 0; i < pci_mmcfg_config_num; i++, res++) { | ||
176 | num_buses = pci_mmcfg_config[i].end_bus_number - | ||
177 | pci_mmcfg_config[i].start_bus_number + 1; | ||
178 | res->name = names; | ||
179 | snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN, "PCI MMCONFIG %u", | ||
180 | pci_mmcfg_config[i].pci_segment_group_number); | ||
181 | res->start = pci_mmcfg_config[i].base_address; | ||
182 | res->end = res->start + (num_buses << 20) - 1; | ||
183 | res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; | ||
184 | insert_resource(&iomem_resource, res); | ||
185 | names += PCI_MMCFG_RESOURCE_NAME_LEN; | ||
186 | } | ||
187 | } | ||
188 | |||
189 | /* K8 systems have some devices (typically in the builtin northbridge) | 157 | /* K8 systems have some devices (typically in the builtin northbridge) |
190 | that are only accessible using type1 | 158 | that are only accessible using type1 |
191 | Normally this can be expressed in the MCFG by not listing them | 159 | Normally this can be expressed in the MCFG by not listing them |
@@ -222,8 +190,6 @@ static __init void unreachable_devices(void) | |||
222 | } | 190 | } |
223 | } | 191 | } |
224 | 192 | ||
225 | |||
226 | |||
227 | void __init pci_mmcfg_init(int type) | 193 | void __init pci_mmcfg_init(int type) |
228 | { | 194 | { |
229 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) | 195 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) |
@@ -251,5 +217,4 @@ void __init pci_mmcfg_init(int type) | |||
251 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; | 217 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; |
252 | 218 | ||
253 | unreachable_devices(); | 219 | unreachable_devices(); |
254 | pci_mmcfg_insert_resources(); | ||
255 | } | 220 | } |
diff --git a/arch/i386/pci/pci.h b/arch/i386/pci/pci.h index ad065cebd7b9..a0a25180b61a 100644 --- a/arch/i386/pci/pci.h +++ b/arch/i386/pci/pci.h | |||
@@ -43,7 +43,6 @@ extern unsigned int pcibios_max_latency; | |||
43 | 43 | ||
44 | void pcibios_resource_survey(void); | 44 | void pcibios_resource_survey(void); |
45 | int pcibios_enable_resources(struct pci_dev *, int); | 45 | int pcibios_enable_resources(struct pci_dev *, int); |
46 | void pcibios_disable_resources(struct pci_dev *); | ||
47 | 46 | ||
48 | /* pci-pc.c */ | 47 | /* pci-pc.c */ |
49 | 48 | ||
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 70f7eb9fed35..683b12c6f76c 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -341,6 +341,7 @@ config NUMA | |||
341 | bool "NUMA support" | 341 | bool "NUMA support" |
342 | depends on !IA64_HP_SIM && !FLATMEM | 342 | depends on !IA64_HP_SIM && !FLATMEM |
343 | default y if IA64_SGI_SN2 | 343 | default y if IA64_SGI_SN2 |
344 | select ACPI_NUMA if ACPI | ||
344 | help | 345 | help |
345 | Say Y to compile the kernel to support NUMA (Non-Uniform Memory | 346 | Say Y to compile the kernel to support NUMA (Non-Uniform Memory |
346 | Access). This option is for configuring high-end multiprocessor | 347 | Access). This option is for configuring high-end multiprocessor |
@@ -483,6 +484,15 @@ source "net/Kconfig" | |||
483 | 484 | ||
484 | source "drivers/Kconfig" | 485 | source "drivers/Kconfig" |
485 | 486 | ||
487 | config MSPEC | ||
488 | tristate "Memory special operations driver" | ||
489 | depends on IA64 | ||
490 | select IA64_UNCACHED_ALLOCATOR | ||
491 | help | ||
492 | If you have an ia64 and you want to enable memory special | ||
493 | operations support (formerly known as fetchop), say Y here, | ||
494 | otherwise say N. | ||
495 | |||
486 | source "fs/Kconfig" | 496 | source "fs/Kconfig" |
487 | 497 | ||
488 | source "lib/Kconfig" | 498 | source "lib/Kconfig" |
diff --git a/arch/mips/gt64120/common/time.c b/arch/mips/gt64120/common/time.c index c83ae6acd601..c47eeb768192 100644 --- a/arch/mips/gt64120/common/time.c +++ b/arch/mips/gt64120/common/time.c | |||
@@ -64,14 +64,14 @@ static irqreturn_t gt64120_irq(int irq, void *dev_id) | |||
64 | * as *irq (=irq0 in ../kernel/time.c). We will do our own timer interrupt | 64 | * as *irq (=irq0 in ../kernel/time.c). We will do our own timer interrupt |
65 | * handling. | 65 | * handling. |
66 | */ | 66 | */ |
67 | void gt64120_time_init(void) | 67 | void __init plat_timer_setup(struct irqaction *irq) |
68 | { | 68 | { |
69 | static struct irqaction timer; | 69 | static struct irqaction timer; |
70 | 70 | ||
71 | /* Disable timer first */ | 71 | /* Disable timer first */ |
72 | GT_WRITE(GT_TC_CONTROL_OFS, 0); | 72 | GT_WRITE(GT_TC_CONTROL_OFS, 0); |
73 | /* Load timer value for 100 Hz */ | 73 | /* Load timer value for 100 Hz */ |
74 | GT_WRITE(GT_TC3_OFS, Sys_clock / 100); | 74 | GT_WRITE(GT_TC3_OFS, Sys_clock / HZ); |
75 | 75 | ||
76 | /* | 76 | /* |
77 | * Create the IRQ structure entry for the timer. Since we're too early | 77 | * Create the IRQ structure entry for the timer. Since we're too early |
diff --git a/arch/mips/gt64120/ev64120/setup.c b/arch/mips/gt64120/ev64120/setup.c index 91c2d3f41617..99c8d42212e2 100644 --- a/arch/mips/gt64120/ev64120/setup.c +++ b/arch/mips/gt64120/ev64120/setup.c | |||
@@ -68,7 +68,6 @@ unsigned long __init prom_free_prom_memory(void) | |||
68 | * Initializes basic routines and structures pointers, memory size (as | 68 | * Initializes basic routines and structures pointers, memory size (as |
69 | * given by the bios and saves the command line. | 69 | * given by the bios and saves the command line. |
70 | */ | 70 | */ |
71 | extern void gt64120_time_init(void); | ||
72 | 71 | ||
73 | void __init plat_mem_setup(void) | 72 | void __init plat_mem_setup(void) |
74 | { | 73 | { |
@@ -76,7 +75,6 @@ void __init plat_mem_setup(void) | |||
76 | _machine_halt = galileo_machine_halt; | 75 | _machine_halt = galileo_machine_halt; |
77 | pm_power_off = galileo_machine_power_off; | 76 | pm_power_off = galileo_machine_power_off; |
78 | 77 | ||
79 | board_time_init = gt64120_time_init; | ||
80 | set_io_port_base(KSEG1); | 78 | set_io_port_base(KSEG1); |
81 | } | 79 | } |
82 | 80 | ||
diff --git a/arch/mips/gt64120/momenco_ocelot/setup.c b/arch/mips/gt64120/momenco_ocelot/setup.c index 0e5bbee2d5b7..94f94ebbda6c 100644 --- a/arch/mips/gt64120/momenco_ocelot/setup.c +++ b/arch/mips/gt64120/momenco_ocelot/setup.c | |||
@@ -70,7 +70,6 @@ extern void momenco_ocelot_restart(char *command); | |||
70 | extern void momenco_ocelot_halt(void); | 70 | extern void momenco_ocelot_halt(void); |
71 | extern void momenco_ocelot_power_off(void); | 71 | extern void momenco_ocelot_power_off(void); |
72 | 72 | ||
73 | extern void gt64120_time_init(void); | ||
74 | extern void momenco_ocelot_irq_setup(void); | 73 | extern void momenco_ocelot_irq_setup(void); |
75 | 74 | ||
76 | static char reset_reason; | 75 | static char reset_reason; |
@@ -156,8 +155,6 @@ void __init plat_mem_setup(void) | |||
156 | void (*l3func)(unsigned long)=KSEG1ADDR(&setup_l3cache); | 155 | void (*l3func)(unsigned long)=KSEG1ADDR(&setup_l3cache); |
157 | unsigned int tmpword; | 156 | unsigned int tmpword; |
158 | 157 | ||
159 | board_time_init = gt64120_time_init; | ||
160 | |||
161 | _machine_restart = momenco_ocelot_restart; | 158 | _machine_restart = momenco_ocelot_restart; |
162 | _machine_halt = momenco_ocelot_halt; | 159 | _machine_halt = momenco_ocelot_halt; |
163 | pm_power_off = momenco_ocelot_power_off; | 160 | pm_power_off = momenco_ocelot_power_off; |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index dd24434392b6..9b0e49d63d7b 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
@@ -26,6 +26,48 @@ | |||
26 | #include <asm/system.h> | 26 | #include <asm/system.h> |
27 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
28 | 28 | ||
29 | static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; | ||
30 | |||
31 | int __devinit allocate_irqno(void) | ||
32 | { | ||
33 | int irq; | ||
34 | |||
35 | again: | ||
36 | irq = find_first_zero_bit(irq_map, NR_IRQS); | ||
37 | |||
38 | if (irq >= NR_IRQS) | ||
39 | return -ENOSPC; | ||
40 | |||
41 | if (test_and_set_bit(irq, irq_map)) | ||
42 | goto again; | ||
43 | |||
44 | return irq; | ||
45 | } | ||
46 | |||
47 | EXPORT_SYMBOL_GPL(allocate_irqno); | ||
48 | |||
49 | /* | ||
50 | * Allocate the 16 legacy interrupts for i8259 devices. This happens early | ||
51 | * in the kernel initialization so treating allocation failure as BUG() is | ||
52 | * ok. | ||
53 | */ | ||
54 | void __init alloc_legacy_irqno(void) | ||
55 | { | ||
56 | int i; | ||
57 | |||
58 | for (i = 0; i <= 16; i++) | ||
59 | BUG_ON(test_and_set_bit(i, irq_map)); | ||
60 | } | ||
61 | |||
62 | void __devinit free_irqno(unsigned int irq) | ||
63 | { | ||
64 | smp_mb__before_clear_bit(); | ||
65 | clear_bit(irq, irq_map); | ||
66 | smp_mb__after_clear_bit(); | ||
67 | } | ||
68 | |||
69 | EXPORT_SYMBOL_GPL(free_irqno); | ||
70 | |||
29 | /* | 71 | /* |
30 | * 'what should we do if we get a hw irq event on an illegal vector'. | 72 | * 'what should we do if we get a hw irq event on an illegal vector'. |
31 | * each architecture has to answer this themselves. | 73 | * each architecture has to answer this themselves. |
diff --git a/arch/mips/mm/c-sb1.c b/arch/mips/mm/c-sb1.c index ea49a775bf28..d0ddb4a768a5 100644 --- a/arch/mips/mm/c-sb1.c +++ b/arch/mips/mm/c-sb1.c | |||
@@ -505,5 +505,5 @@ void sb1_cache_init(void) | |||
505 | : | 505 | : |
506 | : "memory"); | 506 | : "memory"); |
507 | 507 | ||
508 | flush_cache_all(); | 508 | local_sb1___flush_cache_all(); |
509 | } | 509 | } |
diff --git a/arch/mips/momentum/ocelot_3/Makefile b/arch/mips/momentum/ocelot_3/Makefile index 8bcea64dd27b..d5a090a85a15 100644 --- a/arch/mips/momentum/ocelot_3/Makefile +++ b/arch/mips/momentum/ocelot_3/Makefile | |||
@@ -5,4 +5,4 @@ | |||
5 | # removes any old dependencies. DON'T put your own dependencies here | 5 | # removes any old dependencies. DON'T put your own dependencies here |
6 | # unless it's something special (ie not a .c file). | 6 | # unless it's something special (ie not a .c file). |
7 | # | 7 | # |
8 | obj-y += irq.o prom.o reset.o setup.o | 8 | obj-y += irq.o platform.o prom.o reset.o setup.o |
diff --git a/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h b/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h index 227e429fe720..5710a9029f1c 100644 --- a/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h +++ b/arch/mips/momentum/ocelot_3/ocelot_3_fpga.h | |||
@@ -51,7 +51,9 @@ | |||
51 | 51 | ||
52 | extern unsigned long ocelot_fpga_base; | 52 | extern unsigned long ocelot_fpga_base; |
53 | 53 | ||
54 | #define OCELOT_FPGA_WRITE(x, y) writeb(x, ocelot_fpga_base + OCELOT_3_REG_##y) | 54 | #define __FPGA_REG_TO_ADDR(reg) \ |
55 | #define OCELOT_FPGA_READ(x) readb(ocelot_fpga_base + OCELOT_3_REG_##x) | 55 | ((void *) ocelot_fpga_base + OCELOT_3_REG_##reg) |
56 | #define OCELOT_FPGA_WRITE(x, reg) writeb(x, __FPGA_REG_TO_ADDR(reg)) | ||
57 | #define OCELOT_FPGA_READ(reg) readb(__FPGA_REG_TO_ADDR(reg)) | ||
56 | 58 | ||
57 | #endif | 59 | #endif |
diff --git a/arch/mips/momentum/ocelot_3/platform.c b/arch/mips/momentum/ocelot_3/platform.c new file mode 100644 index 000000000000..eefe5841fbb2 --- /dev/null +++ b/arch/mips/momentum/ocelot_3/platform.c | |||
@@ -0,0 +1,235 @@ | |||
1 | #include <linux/delay.h> | ||
2 | #include <linux/if_ether.h> | ||
3 | #include <linux/ioport.h> | ||
4 | #include <linux/mv643xx.h> | ||
5 | #include <linux/platform_device.h> | ||
6 | |||
7 | #include "ocelot_3_fpga.h" | ||
8 | |||
9 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) | ||
10 | |||
11 | static struct resource mv643xx_eth_shared_resources[] = { | ||
12 | [0] = { | ||
13 | .name = "ethernet shared base", | ||
14 | .start = 0xf1000000 + MV643XX_ETH_SHARED_REGS, | ||
15 | .end = 0xf1000000 + MV643XX_ETH_SHARED_REGS + | ||
16 | MV643XX_ETH_SHARED_REGS_SIZE - 1, | ||
17 | .flags = IORESOURCE_MEM, | ||
18 | }, | ||
19 | }; | ||
20 | |||
21 | static struct platform_device mv643xx_eth_shared_device = { | ||
22 | .name = MV643XX_ETH_SHARED_NAME, | ||
23 | .id = 0, | ||
24 | .num_resources = ARRAY_SIZE(mv643xx_eth_shared_resources), | ||
25 | .resource = mv643xx_eth_shared_resources, | ||
26 | }; | ||
27 | |||
28 | #define MV_SRAM_BASE 0xfe000000UL | ||
29 | #define MV_SRAM_SIZE (256 * 1024) | ||
30 | |||
31 | #define MV_SRAM_RXRING_SIZE (MV_SRAM_SIZE / 4) | ||
32 | #define MV_SRAM_TXRING_SIZE (MV_SRAM_SIZE / 4) | ||
33 | |||
34 | #define MV_SRAM_BASE_ETH0 MV_SRAM_BASE | ||
35 | #define MV_SRAM_BASE_ETH1 (MV_SRAM_BASE + (MV_SRAM_SIZE / 2)) | ||
36 | |||
37 | #define MV64x60_IRQ_ETH_0 48 | ||
38 | #define MV64x60_IRQ_ETH_1 49 | ||
39 | #define MV64x60_IRQ_ETH_2 50 | ||
40 | |||
41 | #ifdef CONFIG_MV643XX_ETH_0 | ||
42 | |||
43 | static struct resource mv64x60_eth0_resources[] = { | ||
44 | [0] = { | ||
45 | .name = "eth0 irq", | ||
46 | .start = MV64x60_IRQ_ETH_0, | ||
47 | .end = MV64x60_IRQ_ETH_0, | ||
48 | .flags = IORESOURCE_IRQ, | ||
49 | }, | ||
50 | }; | ||
51 | |||
52 | static char eth0_mac_addr[ETH_ALEN]; | ||
53 | |||
54 | static struct mv643xx_eth_platform_data eth0_pd = { | ||
55 | .mac_addr = eth0_mac_addr, | ||
56 | |||
57 | .tx_sram_addr = MV_SRAM_BASE_ETH0, | ||
58 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
59 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
60 | |||
61 | .rx_sram_addr = MV_SRAM_BASE_ETH0 + MV_SRAM_TXRING_SIZE, | ||
62 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
63 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
64 | }; | ||
65 | |||
66 | static struct platform_device eth0_device = { | ||
67 | .name = MV643XX_ETH_NAME, | ||
68 | .id = 0, | ||
69 | .num_resources = ARRAY_SIZE(mv64x60_eth0_resources), | ||
70 | .resource = mv64x60_eth0_resources, | ||
71 | .dev = { | ||
72 | .platform_data = ð0_pd, | ||
73 | }, | ||
74 | }; | ||
75 | #endif /* CONFIG_MV643XX_ETH_0 */ | ||
76 | |||
77 | #ifdef CONFIG_MV643XX_ETH_1 | ||
78 | |||
79 | static struct resource mv64x60_eth1_resources[] = { | ||
80 | [0] = { | ||
81 | .name = "eth1 irq", | ||
82 | .start = MV64x60_IRQ_ETH_1, | ||
83 | .end = MV64x60_IRQ_ETH_1, | ||
84 | .flags = IORESOURCE_IRQ, | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | static char eth1_mac_addr[ETH_ALEN]; | ||
89 | |||
90 | static struct mv643xx_eth_platform_data eth1_pd = { | ||
91 | .mac_addr = eth1_mac_addr, | ||
92 | |||
93 | .tx_sram_addr = MV_SRAM_BASE_ETH1, | ||
94 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
95 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
96 | |||
97 | .rx_sram_addr = MV_SRAM_BASE_ETH1 + MV_SRAM_TXRING_SIZE, | ||
98 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
99 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
100 | }; | ||
101 | |||
102 | static struct platform_device eth1_device = { | ||
103 | .name = MV643XX_ETH_NAME, | ||
104 | .id = 1, | ||
105 | .num_resources = ARRAY_SIZE(mv64x60_eth1_resources), | ||
106 | .resource = mv64x60_eth1_resources, | ||
107 | .dev = { | ||
108 | .platform_data = ð1_pd, | ||
109 | }, | ||
110 | }; | ||
111 | #endif /* CONFIG_MV643XX_ETH_1 */ | ||
112 | |||
113 | #ifdef CONFIG_MV643XX_ETH_2 | ||
114 | |||
115 | static struct resource mv64x60_eth2_resources[] = { | ||
116 | [0] = { | ||
117 | .name = "eth2 irq", | ||
118 | .start = MV64x60_IRQ_ETH_2, | ||
119 | .end = MV64x60_IRQ_ETH_2, | ||
120 | .flags = IORESOURCE_IRQ, | ||
121 | }, | ||
122 | }; | ||
123 | |||
124 | static char eth2_mac_addr[ETH_ALEN]; | ||
125 | |||
126 | static struct mv643xx_eth_platform_data eth2_pd = { | ||
127 | .mac_addr = eth2_mac_addr, | ||
128 | }; | ||
129 | |||
130 | static struct platform_device eth2_device = { | ||
131 | .name = MV643XX_ETH_NAME, | ||
132 | .id = 1, | ||
133 | .num_resources = ARRAY_SIZE(mv64x60_eth2_resources), | ||
134 | .resource = mv64x60_eth2_resources, | ||
135 | .dev = { | ||
136 | .platform_data = ð2_pd, | ||
137 | }, | ||
138 | }; | ||
139 | #endif /* CONFIG_MV643XX_ETH_2 */ | ||
140 | |||
141 | static struct platform_device *mv643xx_eth_pd_devs[] __initdata = { | ||
142 | &mv643xx_eth_shared_device, | ||
143 | #ifdef CONFIG_MV643XX_ETH_0 | ||
144 | ð0_device, | ||
145 | #endif | ||
146 | #ifdef CONFIG_MV643XX_ETH_1 | ||
147 | ð1_device, | ||
148 | #endif | ||
149 | #ifdef CONFIG_MV643XX_ETH_2 | ||
150 | ð2_device, | ||
151 | #endif | ||
152 | }; | ||
153 | |||
154 | static u8 __init exchange_bit(u8 val, u8 cs) | ||
155 | { | ||
156 | /* place the data */ | ||
157 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
158 | udelay(1); | ||
159 | |||
160 | /* turn the clock on */ | ||
161 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
162 | udelay(1); | ||
163 | |||
164 | /* turn the clock off and read-strobe */ | ||
165 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
166 | |||
167 | /* return the data */ | ||
168 | return (OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1; | ||
169 | } | ||
170 | |||
171 | static void __init get_mac(char dest[6]) | ||
172 | { | ||
173 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
174 | int i,j; | ||
175 | |||
176 | for (i = 0; i < 12; i++) | ||
177 | exchange_bit(read_opcode[i], 1); | ||
178 | |||
179 | for (j = 0; j < 6; j++) { | ||
180 | dest[j] = 0; | ||
181 | for (i = 0; i < 8; i++) { | ||
182 | dest[j] <<= 1; | ||
183 | dest[j] |= exchange_bit(0, 1); | ||
184 | } | ||
185 | } | ||
186 | |||
187 | /* turn off CS */ | ||
188 | exchange_bit(0,0); | ||
189 | } | ||
190 | |||
191 | /* | ||
192 | * Copy and increment ethernet MAC address by a small value. | ||
193 | * | ||
194 | * This is useful for systems where the only one MAC address is stored in | ||
195 | * non-volatile memory for multiple ports. | ||
196 | */ | ||
197 | static inline void eth_mac_add(unsigned char *dst, unsigned char *src, | ||
198 | unsigned int add) | ||
199 | { | ||
200 | int i; | ||
201 | |||
202 | BUG_ON(add >= 256); | ||
203 | |||
204 | for (i = ETH_ALEN; i >= 0; i--) { | ||
205 | dst[i] = src[i] + add; | ||
206 | add = dst[i] < src[i]; /* compute carry */ | ||
207 | } | ||
208 | |||
209 | WARN_ON(add); | ||
210 | } | ||
211 | |||
212 | static int __init mv643xx_eth_add_pds(void) | ||
213 | { | ||
214 | unsigned char mac[ETH_ALEN]; | ||
215 | int ret; | ||
216 | |||
217 | get_mac(mac); | ||
218 | #ifdef CONFIG_MV643XX_ETH_0 | ||
219 | eth_mac_add(eth1_mac_addr, mac, 0); | ||
220 | #endif | ||
221 | #ifdef CONFIG_MV643XX_ETH_1 | ||
222 | eth_mac_add(eth1_mac_addr, mac, 1); | ||
223 | #endif | ||
224 | #ifdef CONFIG_MV643XX_ETH_2 | ||
225 | eth_mac_add(eth2_mac_addr, mac, 2); | ||
226 | #endif | ||
227 | ret = platform_add_devices(mv643xx_eth_pd_devs, | ||
228 | ARRAY_SIZE(mv643xx_eth_pd_devs)); | ||
229 | |||
230 | return ret; | ||
231 | } | ||
232 | |||
233 | device_initcall(mv643xx_eth_add_pds); | ||
234 | |||
235 | #endif /* defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) */ | ||
diff --git a/arch/mips/momentum/ocelot_3/prom.c b/arch/mips/momentum/ocelot_3/prom.c index 296d945bc248..6ce9b7fdb824 100644 --- a/arch/mips/momentum/ocelot_3/prom.c +++ b/arch/mips/momentum/ocelot_3/prom.c | |||
@@ -34,64 +34,11 @@ struct callvectors* debug_vectors; | |||
34 | extern unsigned long marvell_base; | 34 | extern unsigned long marvell_base; |
35 | extern unsigned long cpu_clock; | 35 | extern unsigned long cpu_clock; |
36 | 36 | ||
37 | #ifdef CONFIG_MV643XX_ETH | ||
38 | extern unsigned char prom_mac_addr_base[6]; | ||
39 | #endif | ||
40 | |||
41 | const char *get_system_type(void) | 37 | const char *get_system_type(void) |
42 | { | 38 | { |
43 | return "Momentum Ocelot-3"; | 39 | return "Momentum Ocelot-3"; |
44 | } | 40 | } |
45 | 41 | ||
46 | #ifdef CONFIG_MV643XX_ETH | ||
47 | void burn_clocks(void) | ||
48 | { | ||
49 | int i; | ||
50 | |||
51 | /* this loop should burn at least 1us -- this should be plenty */ | ||
52 | for (i = 0; i < 0x10000; i++) | ||
53 | ; | ||
54 | } | ||
55 | |||
56 | u8 exchange_bit(u8 val, u8 cs) | ||
57 | { | ||
58 | /* place the data */ | ||
59 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
60 | burn_clocks(); | ||
61 | |||
62 | /* turn the clock on */ | ||
63 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
64 | burn_clocks(); | ||
65 | |||
66 | /* turn the clock off and read-strobe */ | ||
67 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
68 | |||
69 | /* return the data */ | ||
70 | return ((OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1); | ||
71 | } | ||
72 | |||
73 | void get_mac(char dest[6]) | ||
74 | { | ||
75 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
76 | int i,j; | ||
77 | |||
78 | for (i = 0; i < 12; i++) | ||
79 | exchange_bit(read_opcode[i], 1); | ||
80 | |||
81 | for (j = 0; j < 6; j++) { | ||
82 | dest[j] = 0; | ||
83 | for (i = 0; i < 8; i++) { | ||
84 | dest[j] <<= 1; | ||
85 | dest[j] |= exchange_bit(0, 1); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | /* turn off CS */ | ||
90 | exchange_bit(0,0); | ||
91 | } | ||
92 | #endif | ||
93 | |||
94 | |||
95 | #ifdef CONFIG_64BIT | 42 | #ifdef CONFIG_64BIT |
96 | 43 | ||
97 | unsigned long signext(unsigned long addr) | 44 | unsigned long signext(unsigned long addr) |
@@ -228,11 +175,6 @@ void __init prom_init(void) | |||
228 | mips_machgroup = MACH_GROUP_MOMENCO; | 175 | mips_machgroup = MACH_GROUP_MOMENCO; |
229 | mips_machtype = MACH_MOMENCO_OCELOT_3; | 176 | mips_machtype = MACH_MOMENCO_OCELOT_3; |
230 | 177 | ||
231 | #ifdef CONFIG_MV643XX_ETH | ||
232 | /* get the base MAC address for on-board ethernet ports */ | ||
233 | get_mac(prom_mac_addr_base); | ||
234 | #endif | ||
235 | |||
236 | #ifndef CONFIG_64BIT | 178 | #ifndef CONFIG_64BIT |
237 | debug_vectors->printf("Booting Linux kernel...\n"); | 179 | debug_vectors->printf("Booting Linux kernel...\n"); |
238 | #endif | 180 | #endif |
diff --git a/arch/mips/momentum/ocelot_3/setup.c b/arch/mips/momentum/ocelot_3/setup.c index 7d74f8c54129..ff0829f81116 100644 --- a/arch/mips/momentum/ocelot_3/setup.c +++ b/arch/mips/momentum/ocelot_3/setup.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * BRIEF MODULE DESCRIPTION | 4 | * BRIEF MODULE DESCRIPTION |
5 | * Momentum Computer Ocelot-3 board dependent boot routines | 5 | * Momentum Computer Ocelot-3 board dependent boot routines |
6 | * | 6 | * |
7 | * Copyright (C) 1996, 1997, 01, 05 Ralf Baechle | 7 | * Copyright (C) 1996, 1997, 01, 05 - 06 Ralf Baechle |
8 | * Copyright (C) 2000 RidgeRun, Inc. | 8 | * Copyright (C) 2000 RidgeRun, Inc. |
9 | * Copyright (C) 2001 Red Hat, Inc. | 9 | * Copyright (C) 2001 Red Hat, Inc. |
10 | * Copyright (C) 2002 Momentum Computer | 10 | * Copyright (C) 2002 Momentum Computer |
diff --git a/arch/mips/momentum/ocelot_c/Makefile b/arch/mips/momentum/ocelot_c/Makefile index 94802b4db472..d69161aa1675 100644 --- a/arch/mips/momentum/ocelot_c/Makefile +++ b/arch/mips/momentum/ocelot_c/Makefile | |||
@@ -2,7 +2,7 @@ | |||
2 | # Makefile for Momentum Computer's Ocelot-C and -CS boards. | 2 | # Makefile for Momentum Computer's Ocelot-C and -CS boards. |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y += cpci-irq.o irq.o prom.o reset.o \ | 5 | obj-y += cpci-irq.o irq.o platform.o prom.o reset.o \ |
6 | setup.o uart-irq.o | 6 | setup.o uart-irq.o |
7 | 7 | ||
8 | obj-$(CONFIG_KGDB) += dbg_io.o | 8 | obj-$(CONFIG_KGDB) += dbg_io.o |
diff --git a/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h b/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h index 7228cd19e5ea..f0f5581dcb50 100644 --- a/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h +++ b/arch/mips/momentum/ocelot_c/ocelot_c_fpga.h | |||
@@ -53,7 +53,9 @@ | |||
53 | #define OCELOT_C_REG_INTSET 0xe | 53 | #define OCELOT_C_REG_INTSET 0xe |
54 | #define OCELOT_C_REG_INTCLR 0xf | 54 | #define OCELOT_C_REG_INTCLR 0xf |
55 | 55 | ||
56 | #define OCELOT_FPGA_WRITE(x, y) writeb(x, OCELOT_C_CS0_ADDR + OCELOT_C_REG_##y) | 56 | #define __FPGA_REG_TO_ADDR(reg) \ |
57 | #define OCELOT_FPGA_READ(x) readb(OCELOT_C_CS0_ADDR + OCELOT_C_REG_##x) | 57 | ((void *) OCELOT_C_CS0_ADDR + OCELOT_C_REG_##reg) |
58 | #define OCELOT_FPGA_WRITE(x, reg) writeb(x, __FPGA_REG_TO_ADDR(reg)) | ||
59 | #define OCELOT_FPGA_READ(reg) readb(__FPGA_REG_TO_ADDR(reg)) | ||
58 | 60 | ||
59 | #endif | 61 | #endif |
diff --git a/arch/mips/momentum/ocelot_c/platform.c b/arch/mips/momentum/ocelot_c/platform.c new file mode 100644 index 000000000000..6c495b2f1560 --- /dev/null +++ b/arch/mips/momentum/ocelot_c/platform.c | |||
@@ -0,0 +1,201 @@ | |||
1 | #include <linux/delay.h> | ||
2 | #include <linux/if_ether.h> | ||
3 | #include <linux/ioport.h> | ||
4 | #include <linux/mv643xx.h> | ||
5 | #include <linux/platform_device.h> | ||
6 | |||
7 | #include "ocelot_c_fpga.h" | ||
8 | |||
9 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) | ||
10 | |||
11 | static struct resource mv643xx_eth_shared_resources[] = { | ||
12 | [0] = { | ||
13 | .name = "ethernet shared base", | ||
14 | .start = 0xf1000000 + MV643XX_ETH_SHARED_REGS, | ||
15 | .end = 0xf1000000 + MV643XX_ETH_SHARED_REGS + | ||
16 | MV643XX_ETH_SHARED_REGS_SIZE - 1, | ||
17 | .flags = IORESOURCE_MEM, | ||
18 | }, | ||
19 | }; | ||
20 | |||
21 | static struct platform_device mv643xx_eth_shared_device = { | ||
22 | .name = MV643XX_ETH_SHARED_NAME, | ||
23 | .id = 0, | ||
24 | .num_resources = ARRAY_SIZE(mv643xx_eth_shared_resources), | ||
25 | .resource = mv643xx_eth_shared_resources, | ||
26 | }; | ||
27 | |||
28 | #define MV_SRAM_BASE 0xfe000000UL | ||
29 | #define MV_SRAM_SIZE (256 * 1024) | ||
30 | |||
31 | #define MV_SRAM_RXRING_SIZE (MV_SRAM_SIZE / 4) | ||
32 | #define MV_SRAM_TXRING_SIZE (MV_SRAM_SIZE / 4) | ||
33 | |||
34 | #define MV_SRAM_BASE_ETH0 MV_SRAM_BASE | ||
35 | #define MV_SRAM_BASE_ETH1 (MV_SRAM_BASE + (MV_SRAM_SIZE / 2)) | ||
36 | |||
37 | #define MV64x60_IRQ_ETH_0 48 | ||
38 | #define MV64x60_IRQ_ETH_1 49 | ||
39 | |||
40 | #ifdef CONFIG_MV643XX_ETH_0 | ||
41 | |||
42 | static struct resource mv64x60_eth0_resources[] = { | ||
43 | [0] = { | ||
44 | .name = "eth0 irq", | ||
45 | .start = MV64x60_IRQ_ETH_0, | ||
46 | .end = MV64x60_IRQ_ETH_0, | ||
47 | .flags = IORESOURCE_IRQ, | ||
48 | }, | ||
49 | }; | ||
50 | |||
51 | static char eth0_mac_addr[ETH_ALEN]; | ||
52 | |||
53 | static struct mv643xx_eth_platform_data eth0_pd = { | ||
54 | .mac_addr = eth0_mac_addr, | ||
55 | |||
56 | .tx_sram_addr = MV_SRAM_BASE_ETH0, | ||
57 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
58 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
59 | |||
60 | .rx_sram_addr = MV_SRAM_BASE_ETH0 + MV_SRAM_TXRING_SIZE, | ||
61 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
62 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
63 | }; | ||
64 | |||
65 | static struct platform_device eth0_device = { | ||
66 | .name = MV643XX_ETH_NAME, | ||
67 | .id = 0, | ||
68 | .num_resources = ARRAY_SIZE(mv64x60_eth0_resources), | ||
69 | .resource = mv64x60_eth0_resources, | ||
70 | .dev = { | ||
71 | .platform_data = ð0_pd, | ||
72 | }, | ||
73 | }; | ||
74 | #endif /* CONFIG_MV643XX_ETH_0 */ | ||
75 | |||
76 | #ifdef CONFIG_MV643XX_ETH_1 | ||
77 | |||
78 | static struct resource mv64x60_eth1_resources[] = { | ||
79 | [0] = { | ||
80 | .name = "eth1 irq", | ||
81 | .start = MV64x60_IRQ_ETH_1, | ||
82 | .end = MV64x60_IRQ_ETH_1, | ||
83 | .flags = IORESOURCE_IRQ, | ||
84 | }, | ||
85 | }; | ||
86 | |||
87 | static char eth1_mac_addr[ETH_ALEN]; | ||
88 | |||
89 | static struct mv643xx_eth_platform_data eth1_pd = { | ||
90 | .mac_addr = eth1_mac_addr, | ||
91 | |||
92 | .tx_sram_addr = MV_SRAM_BASE_ETH1, | ||
93 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
94 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
95 | |||
96 | .rx_sram_addr = MV_SRAM_BASE_ETH1 + MV_SRAM_TXRING_SIZE, | ||
97 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
98 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
99 | }; | ||
100 | |||
101 | static struct platform_device eth1_device = { | ||
102 | .name = MV643XX_ETH_NAME, | ||
103 | .id = 1, | ||
104 | .num_resources = ARRAY_SIZE(mv64x60_eth1_resources), | ||
105 | .resource = mv64x60_eth1_resources, | ||
106 | .dev = { | ||
107 | .platform_data = ð1_pd, | ||
108 | }, | ||
109 | }; | ||
110 | #endif /* CONFIG_MV643XX_ETH_1 */ | ||
111 | |||
112 | static struct platform_device *mv643xx_eth_pd_devs[] __initdata = { | ||
113 | &mv643xx_eth_shared_device, | ||
114 | #ifdef CONFIG_MV643XX_ETH_0 | ||
115 | ð0_device, | ||
116 | #endif | ||
117 | #ifdef CONFIG_MV643XX_ETH_1 | ||
118 | ð1_device, | ||
119 | #endif | ||
120 | /* The third port is not wired up on the Ocelot C */ | ||
121 | }; | ||
122 | |||
123 | static u8 __init exchange_bit(u8 val, u8 cs) | ||
124 | { | ||
125 | /* place the data */ | ||
126 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
127 | udelay(1); | ||
128 | |||
129 | /* turn the clock on */ | ||
130 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
131 | udelay(1); | ||
132 | |||
133 | /* turn the clock off and read-strobe */ | ||
134 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
135 | |||
136 | /* return the data */ | ||
137 | return (OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1; | ||
138 | } | ||
139 | |||
140 | static void __init get_mac(char dest[6]) | ||
141 | { | ||
142 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
143 | int i,j; | ||
144 | |||
145 | for (i = 0; i < 12; i++) | ||
146 | exchange_bit(read_opcode[i], 1); | ||
147 | |||
148 | for (j = 0; j < 6; j++) { | ||
149 | dest[j] = 0; | ||
150 | for (i = 0; i < 8; i++) { | ||
151 | dest[j] <<= 1; | ||
152 | dest[j] |= exchange_bit(0, 1); | ||
153 | } | ||
154 | } | ||
155 | |||
156 | /* turn off CS */ | ||
157 | exchange_bit(0,0); | ||
158 | } | ||
159 | |||
160 | /* | ||
161 | * Copy and increment ethernet MAC address by a small value. | ||
162 | * | ||
163 | * This is useful for systems where the only one MAC address is stored in | ||
164 | * non-volatile memory for multiple ports. | ||
165 | */ | ||
166 | static inline void eth_mac_add(unsigned char *dst, unsigned char *src, | ||
167 | unsigned int add) | ||
168 | { | ||
169 | int i; | ||
170 | |||
171 | BUG_ON(add >= 256); | ||
172 | |||
173 | for (i = ETH_ALEN; i >= 0; i--) { | ||
174 | dst[i] = src[i] + add; | ||
175 | add = dst[i] < src[i]; /* compute carry */ | ||
176 | } | ||
177 | |||
178 | WARN_ON(add); | ||
179 | } | ||
180 | |||
181 | static int __init mv643xx_eth_add_pds(void) | ||
182 | { | ||
183 | unsigned char mac[ETH_ALEN]; | ||
184 | int ret; | ||
185 | |||
186 | get_mac(mac); | ||
187 | #ifdef CONFIG_MV643XX_ETH_0 | ||
188 | eth_mac_add(eth1_mac_addr, mac, 0); | ||
189 | #endif | ||
190 | #ifdef CONFIG_MV643XX_ETH_1 | ||
191 | eth_mac_add(eth1_mac_addr, mac, 1); | ||
192 | #endif | ||
193 | ret = platform_add_devices(mv643xx_eth_pd_devs, | ||
194 | ARRAY_SIZE(mv643xx_eth_pd_devs)); | ||
195 | |||
196 | return ret; | ||
197 | } | ||
198 | |||
199 | device_initcall(mv643xx_eth_add_pds); | ||
200 | |||
201 | #endif /* defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) */ | ||
diff --git a/arch/mips/momentum/ocelot_c/prom.c b/arch/mips/momentum/ocelot_c/prom.c index 4c50a147f429..d0b77e101d74 100644 --- a/arch/mips/momentum/ocelot_c/prom.c +++ b/arch/mips/momentum/ocelot_c/prom.c | |||
@@ -29,11 +29,7 @@ | |||
29 | struct callvectors* debug_vectors; | 29 | struct callvectors* debug_vectors; |
30 | 30 | ||
31 | extern unsigned long marvell_base; | 31 | extern unsigned long marvell_base; |
32 | extern unsigned long cpu_clock; | 32 | extern unsigned int cpu_clock; |
33 | |||
34 | #ifdef CONFIG_MV643XX_ETH | ||
35 | extern unsigned char prom_mac_addr_base[6]; | ||
36 | #endif | ||
37 | 33 | ||
38 | const char *get_system_type(void) | 34 | const char *get_system_type(void) |
39 | { | 35 | { |
@@ -44,55 +40,6 @@ const char *get_system_type(void) | |||
44 | #endif | 40 | #endif |
45 | } | 41 | } |
46 | 42 | ||
47 | #ifdef CONFIG_MV643XX_ETH | ||
48 | static void burn_clocks(void) | ||
49 | { | ||
50 | int i; | ||
51 | |||
52 | /* this loop should burn at least 1us -- this should be plenty */ | ||
53 | for (i = 0; i < 0x10000; i++) | ||
54 | ; | ||
55 | } | ||
56 | |||
57 | static u8 exchange_bit(u8 val, u8 cs) | ||
58 | { | ||
59 | /* place the data */ | ||
60 | OCELOT_FPGA_WRITE((val << 2) | cs, EEPROM_MODE); | ||
61 | burn_clocks(); | ||
62 | |||
63 | /* turn the clock on */ | ||
64 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x2, EEPROM_MODE); | ||
65 | burn_clocks(); | ||
66 | |||
67 | /* turn the clock off and read-strobe */ | ||
68 | OCELOT_FPGA_WRITE((val << 2) | cs | 0x10, EEPROM_MODE); | ||
69 | |||
70 | /* return the data */ | ||
71 | return ((OCELOT_FPGA_READ(EEPROM_MODE) >> 3) & 0x1); | ||
72 | } | ||
73 | |||
74 | void get_mac(char dest[6]) | ||
75 | { | ||
76 | u8 read_opcode[12] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | ||
77 | int i,j; | ||
78 | |||
79 | for (i = 0; i < 12; i++) | ||
80 | exchange_bit(read_opcode[i], 1); | ||
81 | |||
82 | for (j = 0; j < 6; j++) { | ||
83 | dest[j] = 0; | ||
84 | for (i = 0; i < 8; i++) { | ||
85 | dest[j] <<= 1; | ||
86 | dest[j] |= exchange_bit(0, 1); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | /* turn off CS */ | ||
91 | exchange_bit(0,0); | ||
92 | } | ||
93 | #endif | ||
94 | |||
95 | |||
96 | #ifdef CONFIG_64BIT | 43 | #ifdef CONFIG_64BIT |
97 | 44 | ||
98 | unsigned long signext(unsigned long addr) | 45 | unsigned long signext(unsigned long addr) |
@@ -226,11 +173,6 @@ void __init prom_init(void) | |||
226 | mips_machgroup = MACH_GROUP_MOMENCO; | 173 | mips_machgroup = MACH_GROUP_MOMENCO; |
227 | mips_machtype = MACH_MOMENCO_OCELOT_C; | 174 | mips_machtype = MACH_MOMENCO_OCELOT_C; |
228 | 175 | ||
229 | #ifdef CONFIG_MV643XX_ETH | ||
230 | /* get the base MAC address for on-board ethernet ports */ | ||
231 | get_mac(prom_mac_addr_base); | ||
232 | #endif | ||
233 | |||
234 | #ifndef CONFIG_64BIT | 176 | #ifndef CONFIG_64BIT |
235 | debug_vectors->printf("Booting Linux kernel...\n"); | 177 | debug_vectors->printf("Booting Linux kernel...\n"); |
236 | #endif | 178 | #endif |
diff --git a/arch/mips/momentum/ocelot_c/setup.c b/arch/mips/momentum/ocelot_c/setup.c index 9c0c462af650..0b6b2338cfb4 100644 --- a/arch/mips/momentum/ocelot_c/setup.c +++ b/arch/mips/momentum/ocelot_c/setup.c | |||
@@ -69,8 +69,7 @@ | |||
69 | #include "ocelot_c_fpga.h" | 69 | #include "ocelot_c_fpga.h" |
70 | 70 | ||
71 | unsigned long marvell_base; | 71 | unsigned long marvell_base; |
72 | extern unsigned long mv64340_sram_base; | 72 | unsigned int cpu_clock; |
73 | unsigned long cpu_clock; | ||
74 | 73 | ||
75 | /* These functions are used for rebooting or halting the machine*/ | 74 | /* These functions are used for rebooting or halting the machine*/ |
76 | extern void momenco_ocelot_restart(char *command); | 75 | extern void momenco_ocelot_restart(char *command); |
@@ -119,7 +118,6 @@ void PMON_v2_setup(void) | |||
119 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfffffffffe000000, PM_16M); | 118 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfffffffffe000000, PM_16M); |
120 | 119 | ||
121 | marvell_base = 0xfffffffff4000000; | 120 | marvell_base = 0xfffffffff4000000; |
122 | mv64340_sram_base = 0xfffffffffe000000; | ||
123 | #else | 121 | #else |
124 | /* marvell and extra space */ | 122 | /* marvell and extra space */ |
125 | add_wired_entry(ENTRYLO(0xf4000000), ENTRYLO(0xf4010000), 0xf4000000, PM_64K); | 123 | add_wired_entry(ENTRYLO(0xf4000000), ENTRYLO(0xf4010000), 0xf4000000, PM_64K); |
@@ -129,7 +127,6 @@ void PMON_v2_setup(void) | |||
129 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfe000000, PM_16M); | 127 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfe000000, PM_16M); |
130 | 128 | ||
131 | marvell_base = 0xf4000000; | 129 | marvell_base = 0xf4000000; |
132 | mv64340_sram_base = 0xfe000000; | ||
133 | #endif | 130 | #endif |
134 | } | 131 | } |
135 | 132 | ||
@@ -346,22 +343,20 @@ void __init plat_mem_setup(void) | |||
346 | } | 343 | } |
347 | } | 344 | } |
348 | 345 | ||
349 | #ifndef CONFIG_64BIT | 346 | /* |
350 | /* This needs to be one of the first initcalls, because no I/O port access | 347 | * This needs to be one of the first initcalls, because no I/O port access |
351 | can work before this */ | 348 | * can work before this |
349 | */ | ||
352 | static int io_base_ioremap(void) | 350 | static int io_base_ioremap(void) |
353 | { | 351 | { |
354 | /* we're mapping PCI accesses from 0xc0000000 to 0xf0000000 */ | 352 | void __iomem * io_remap_range = ioremap(0xc0000000UL, 0x10000); |
355 | void *io_remap_range = ioremap(0xc0000000, 0x30000000); | ||
356 | 353 | ||
357 | if (!io_remap_range) { | 354 | if (!io_remap_range) |
358 | panic("Could not ioremap I/O port range"); | 355 | panic("Could not ioremap I/O port range"); |
359 | } | 356 | |
360 | printk("io_remap_range set at 0x%08x\n", (uint32_t)io_remap_range); | 357 | set_io_port_base((unsigned long) io_remap_range); |
361 | set_io_port_base(io_remap_range - 0xc0000000); | ||
362 | 358 | ||
363 | return 0; | 359 | return 0; |
364 | } | 360 | } |
365 | 361 | ||
366 | module_init(io_base_ioremap); | 362 | module_init(io_base_ioremap); |
367 | #endif | ||
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index 3cf0dd4ba548..70cb55b89df6 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile | |||
@@ -26,7 +26,7 @@ obj-$(CONFIG_DDB5477) += fixup-ddb5477.o pci-ddb5477.o ops-ddb5477.o | |||
26 | obj-$(CONFIG_LASAT) += pci-lasat.o | 26 | obj-$(CONFIG_LASAT) += pci-lasat.o |
27 | obj-$(CONFIG_MIPS_ATLAS) += fixup-atlas.o | 27 | obj-$(CONFIG_MIPS_ATLAS) += fixup-atlas.o |
28 | obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o | 28 | obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o |
29 | obj-$(CONFIG_MIPS_EV64120) += fixup-ev64120.o | 29 | obj-$(CONFIG_MIPS_EV64120) += pci-ev64120.o |
30 | obj-$(CONFIG_SOC_AU1500) += fixup-au1000.o ops-au1000.o | 30 | obj-$(CONFIG_SOC_AU1500) += fixup-au1000.o ops-au1000.o |
31 | obj-$(CONFIG_SOC_AU1550) += fixup-au1000.o ops-au1000.o | 31 | obj-$(CONFIG_SOC_AU1550) += fixup-au1000.o ops-au1000.o |
32 | obj-$(CONFIG_SOC_PNX8550) += fixup-pnx8550.o ops-pnx8550.o | 32 | obj-$(CONFIG_SOC_PNX8550) += fixup-pnx8550.o ops-pnx8550.o |
diff --git a/arch/mips/pci/fixup-ev64120.c b/arch/mips/pci/fixup-ev64120.c deleted file mode 100644 index 8dbb90d63f0a..000000000000 --- a/arch/mips/pci/fixup-ev64120.c +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | #include <linux/pci.h> | ||
2 | #include <linux/init.h> | ||
3 | |||
4 | int pci_range_ck(unsigned char bus, unsigned char dev) | ||
5 | { | ||
6 | if (((bus == 0) || (bus == 1)) && (dev >= 6) && (dev <= 8)) | ||
7 | return 0; | ||
8 | |||
9 | return -1; | ||
10 | } | ||
11 | |||
12 | /* | ||
13 | * After detecting all agents over the PCI , this function is called | ||
14 | * in order to give an interrupt number for each PCI device starting | ||
15 | * from IRQ 20. It does also enables master for each device. | ||
16 | */ | ||
17 | void __devinit pcibios_fixup_bus(struct pci_bus *bus) | ||
18 | { | ||
19 | unsigned int irq = 20; | ||
20 | struct pci_bus *current_bus = bus; | ||
21 | struct pci_dev *dev; | ||
22 | struct list_head *devices_link; | ||
23 | |||
24 | list_for_each(devices_link, &(current_bus->devices)) { | ||
25 | dev = pci_dev_b(devices_link); | ||
26 | if (dev != NULL) { | ||
27 | dev->irq = irq++; | ||
28 | |||
29 | /* Assign an interrupt number for the device */ | ||
30 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); | ||
31 | pcibios_set_master(dev); | ||
32 | } | ||
33 | } | ||
34 | } | ||
diff --git a/arch/mips/pci/pci-ev64120.c b/arch/mips/pci/pci-ev64120.c new file mode 100644 index 000000000000..9cd859ef1842 --- /dev/null +++ b/arch/mips/pci/pci-ev64120.c | |||
@@ -0,0 +1,21 @@ | |||
1 | #include <linux/pci.h> | ||
2 | |||
3 | int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
4 | { | ||
5 | int irq; | ||
6 | |||
7 | if (!pin) | ||
8 | return 0; | ||
9 | |||
10 | irq = allocate_irqno(); | ||
11 | if (irq < 0) | ||
12 | return 0; | ||
13 | |||
14 | return irq; | ||
15 | } | ||
16 | |||
17 | /* Do platform specific device initialization at pci_enable_device() time */ | ||
18 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
19 | { | ||
20 | return 0; | ||
21 | } | ||
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c index f01ba1f90770..270ecd3e6b4a 100644 --- a/arch/mips/sgi-ip27/ip27-irq.c +++ b/arch/mips/sgi-ip27/ip27-irq.c | |||
@@ -354,29 +354,6 @@ static struct irq_chip bridge_irq_type = { | |||
354 | .end = end_bridge_irq, | 354 | .end = end_bridge_irq, |
355 | }; | 355 | }; |
356 | 356 | ||
357 | static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; | ||
358 | |||
359 | int allocate_irqno(void) | ||
360 | { | ||
361 | int irq; | ||
362 | |||
363 | again: | ||
364 | irq = find_first_zero_bit(irq_map, NR_IRQS); | ||
365 | |||
366 | if (irq >= NR_IRQS) | ||
367 | return -ENOSPC; | ||
368 | |||
369 | if (test_and_set_bit(irq, irq_map)) | ||
370 | goto again; | ||
371 | |||
372 | return irq; | ||
373 | } | ||
374 | |||
375 | void free_irqno(unsigned int irq) | ||
376 | { | ||
377 | clear_bit(irq, irq_map); | ||
378 | } | ||
379 | |||
380 | void __devinit register_bridge_irq(unsigned int irq) | 357 | void __devinit register_bridge_irq(unsigned int irq) |
381 | { | 358 | { |
382 | irq_desc[irq].status = IRQ_DISABLED; | 359 | irq_desc[irq].status = IRQ_DISABLED; |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index c965705f3427..5e82a268e3c9 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
@@ -214,8 +214,6 @@ static struct irqaction rt_irqaction = { | |||
214 | .name = "timer" | 214 | .name = "timer" |
215 | }; | 215 | }; |
216 | 216 | ||
217 | extern int allocate_irqno(void); | ||
218 | |||
219 | void __init plat_timer_setup(struct irqaction *irq) | 217 | void __init plat_timer_setup(struct irqaction *irq) |
220 | { | 218 | { |
221 | int irqno = allocate_irqno(); | 219 | int irqno = allocate_irqno(); |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 2bd9b7fb0f6c..0673dbedb241 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -740,7 +740,7 @@ config ARCH_SPARSEMEM_ENABLE | |||
740 | 740 | ||
741 | config ARCH_SPARSEMEM_DEFAULT | 741 | config ARCH_SPARSEMEM_DEFAULT |
742 | def_bool y | 742 | def_bool y |
743 | depends on SMP && PPC_PSERIES | 743 | depends on (SMP && PPC_PSERIES) || PPC_CELL |
744 | 744 | ||
745 | config ARCH_POPULATES_NODE_MAP | 745 | config ARCH_POPULATES_NODE_MAP |
746 | def_bool y | 746 | def_bool y |
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper index eab7318729e9..b5fb1fee76f8 100755 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper | |||
@@ -179,11 +179,11 @@ if [ -z "$cacheit" ]; then | |||
179 | fi | 179 | fi |
180 | 180 | ||
181 | if [ -n "$initrd" ]; then | 181 | if [ -n "$initrd" ]; then |
182 | addsec $tmp "$initrd" initrd | 182 | addsec $tmp "$initrd" $isection |
183 | fi | 183 | fi |
184 | 184 | ||
185 | if [ -n "$dtb" ]; then | 185 | if [ -n "$dtb" ]; then |
186 | addsec $tmp "$dtb" dtb | 186 | addsec $tmp "$dtb" .kernel:dtb |
187 | fi | 187 | fi |
188 | 188 | ||
189 | if [ "$platform" != "miboot" ]; then | 189 | if [ "$platform" != "miboot" ]; then |
diff --git a/arch/powerpc/boot/zImage.lds.S b/arch/powerpc/boot/zImage.lds.S index 4b6bb3ffe3dc..4be3c6414b04 100644 --- a/arch/powerpc/boot/zImage.lds.S +++ b/arch/powerpc/boot/zImage.lds.S | |||
@@ -21,6 +21,11 @@ SECTIONS | |||
21 | __got2_end = .; | 21 | __got2_end = .; |
22 | } | 22 | } |
23 | 23 | ||
24 | . = ALIGN(8); | ||
25 | _dtb_start = .; | ||
26 | .kernel:dtb : { *(.kernel:dtb) } | ||
27 | _dtb_end = .; | ||
28 | |||
24 | . = ALIGN(4096); | 29 | . = ALIGN(4096); |
25 | _vmlinux_start = .; | 30 | _vmlinux_start = .; |
26 | .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } | 31 | .kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 1442b63a75da..6f6fc977cb39 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
@@ -72,6 +72,10 @@ | |||
72 | #define VALIDATE_BUF_SIZE 4096 | 72 | #define VALIDATE_BUF_SIZE 4096 |
73 | #define RTAS_MSG_MAXLEN 64 | 73 | #define RTAS_MSG_MAXLEN 64 |
74 | 74 | ||
75 | /* Quirk - RTAS requires 4k list length and block size */ | ||
76 | #define RTAS_BLKLIST_LENGTH 4096 | ||
77 | #define RTAS_BLK_SIZE 4096 | ||
78 | |||
75 | struct flash_block { | 79 | struct flash_block { |
76 | char *data; | 80 | char *data; |
77 | unsigned long length; | 81 | unsigned long length; |
@@ -83,7 +87,7 @@ struct flash_block { | |||
83 | * into a version/length and translate the pointers | 87 | * into a version/length and translate the pointers |
84 | * to absolute. | 88 | * to absolute. |
85 | */ | 89 | */ |
86 | #define FLASH_BLOCKS_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct flash_block)) | 90 | #define FLASH_BLOCKS_PER_NODE ((RTAS_BLKLIST_LENGTH - 16) / sizeof(struct flash_block)) |
87 | struct flash_block_list { | 91 | struct flash_block_list { |
88 | unsigned long num_blocks; | 92 | unsigned long num_blocks; |
89 | struct flash_block_list *next; | 93 | struct flash_block_list *next; |
@@ -96,6 +100,9 @@ struct flash_block_list_header { /* just the header of flash_block_list */ | |||
96 | 100 | ||
97 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; | 101 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; |
98 | 102 | ||
103 | /* Use slab cache to guarantee 4k alignment */ | ||
104 | static kmem_cache_t *flash_block_cache = NULL; | ||
105 | |||
99 | #define FLASH_BLOCK_LIST_VERSION (1UL) | 106 | #define FLASH_BLOCK_LIST_VERSION (1UL) |
100 | 107 | ||
101 | /* Local copy of the flash block list. | 108 | /* Local copy of the flash block list. |
@@ -153,7 +160,7 @@ static int flash_list_valid(struct flash_block_list *flist) | |||
153 | return FLASH_IMG_NULL_DATA; | 160 | return FLASH_IMG_NULL_DATA; |
154 | } | 161 | } |
155 | block_size = f->blocks[i].length; | 162 | block_size = f->blocks[i].length; |
156 | if (block_size <= 0 || block_size > PAGE_SIZE) { | 163 | if (block_size <= 0 || block_size > RTAS_BLK_SIZE) { |
157 | return FLASH_IMG_BAD_LEN; | 164 | return FLASH_IMG_BAD_LEN; |
158 | } | 165 | } |
159 | image_size += block_size; | 166 | image_size += block_size; |
@@ -177,9 +184,9 @@ static void free_flash_list(struct flash_block_list *f) | |||
177 | 184 | ||
178 | while (f) { | 185 | while (f) { |
179 | for (i = 0; i < f->num_blocks; i++) | 186 | for (i = 0; i < f->num_blocks; i++) |
180 | free_page((unsigned long)(f->blocks[i].data)); | 187 | kmem_cache_free(flash_block_cache, f->blocks[i].data); |
181 | next = f->next; | 188 | next = f->next; |
182 | free_page((unsigned long)f); | 189 | kmem_cache_free(flash_block_cache, f); |
183 | f = next; | 190 | f = next; |
184 | } | 191 | } |
185 | } | 192 | } |
@@ -278,6 +285,12 @@ static ssize_t rtas_flash_read(struct file *file, char __user *buf, | |||
278 | return msglen; | 285 | return msglen; |
279 | } | 286 | } |
280 | 287 | ||
288 | /* constructor for flash_block_cache */ | ||
289 | void rtas_block_ctor(void *ptr, kmem_cache_t *cache, unsigned long flags) | ||
290 | { | ||
291 | memset(ptr, 0, RTAS_BLK_SIZE); | ||
292 | } | ||
293 | |||
281 | /* We could be much more efficient here. But to keep this function | 294 | /* We could be much more efficient here. But to keep this function |
282 | * simple we allocate a page to the block list no matter how small the | 295 | * simple we allocate a page to the block list no matter how small the |
283 | * count is. If the system is low on memory it will be just as well | 296 | * count is. If the system is low on memory it will be just as well |
@@ -302,7 +315,7 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer, | |||
302 | * proc file | 315 | * proc file |
303 | */ | 316 | */ |
304 | if (uf->flist == NULL) { | 317 | if (uf->flist == NULL) { |
305 | uf->flist = (struct flash_block_list *) get_zeroed_page(GFP_KERNEL); | 318 | uf->flist = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
306 | if (!uf->flist) | 319 | if (!uf->flist) |
307 | return -ENOMEM; | 320 | return -ENOMEM; |
308 | } | 321 | } |
@@ -313,21 +326,21 @@ static ssize_t rtas_flash_write(struct file *file, const char __user *buffer, | |||
313 | next_free = fl->num_blocks; | 326 | next_free = fl->num_blocks; |
314 | if (next_free == FLASH_BLOCKS_PER_NODE) { | 327 | if (next_free == FLASH_BLOCKS_PER_NODE) { |
315 | /* Need to allocate another block_list */ | 328 | /* Need to allocate another block_list */ |
316 | fl->next = (struct flash_block_list *)get_zeroed_page(GFP_KERNEL); | 329 | fl->next = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
317 | if (!fl->next) | 330 | if (!fl->next) |
318 | return -ENOMEM; | 331 | return -ENOMEM; |
319 | fl = fl->next; | 332 | fl = fl->next; |
320 | next_free = 0; | 333 | next_free = 0; |
321 | } | 334 | } |
322 | 335 | ||
323 | if (count > PAGE_SIZE) | 336 | if (count > RTAS_BLK_SIZE) |
324 | count = PAGE_SIZE; | 337 | count = RTAS_BLK_SIZE; |
325 | p = (char *)get_zeroed_page(GFP_KERNEL); | 338 | p = kmem_cache_alloc(flash_block_cache, GFP_KERNEL); |
326 | if (!p) | 339 | if (!p) |
327 | return -ENOMEM; | 340 | return -ENOMEM; |
328 | 341 | ||
329 | if(copy_from_user(p, buffer, count)) { | 342 | if(copy_from_user(p, buffer, count)) { |
330 | free_page((unsigned long)p); | 343 | kmem_cache_free(flash_block_cache, p); |
331 | return -EFAULT; | 344 | return -EFAULT; |
332 | } | 345 | } |
333 | fl->blocks[next_free].data = p; | 346 | fl->blocks[next_free].data = p; |
@@ -791,6 +804,16 @@ int __init rtas_flash_init(void) | |||
791 | goto cleanup; | 804 | goto cleanup; |
792 | 805 | ||
793 | rtas_flash_term_hook = rtas_flash_firmware; | 806 | rtas_flash_term_hook = rtas_flash_firmware; |
807 | |||
808 | flash_block_cache = kmem_cache_create("rtas_flash_cache", | ||
809 | RTAS_BLK_SIZE, RTAS_BLK_SIZE, 0, | ||
810 | rtas_block_ctor, NULL); | ||
811 | if (!flash_block_cache) { | ||
812 | printk(KERN_ERR "%s: failed to create block cache\n", | ||
813 | __FUNCTION__); | ||
814 | rc = -ENOMEM; | ||
815 | goto cleanup; | ||
816 | } | ||
794 | return 0; | 817 | return 0; |
795 | 818 | ||
796 | cleanup: | 819 | cleanup: |
@@ -805,6 +828,10 @@ cleanup: | |||
805 | void __exit rtas_flash_cleanup(void) | 828 | void __exit rtas_flash_cleanup(void) |
806 | { | 829 | { |
807 | rtas_flash_term_hook = NULL; | 830 | rtas_flash_term_hook = NULL; |
831 | |||
832 | if (flash_block_cache) | ||
833 | kmem_cache_destroy(flash_block_cache); | ||
834 | |||
808 | remove_flash_pde(firmware_flash_pde); | 835 | remove_flash_pde(firmware_flash_pde); |
809 | remove_flash_pde(firmware_update_pde); | 836 | remove_flash_pde(firmware_update_pde); |
810 | remove_flash_pde(validate_pde); | 837 | remove_flash_pde(validate_pde); |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index d0fb959e3ef1..7aa809d5a244 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -655,14 +655,19 @@ static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) | |||
655 | 655 | ||
656 | for (i=0; i < 3; i++) { | 656 | for (i=0; i < 3; i++) { |
657 | ret = of_irq_map_one(np, i, &oirq); | 657 | ret = of_irq_map_one(np, i, &oirq); |
658 | if (ret) | 658 | if (ret) { |
659 | pr_debug("spu_new: failed to get irq %d\n", i); | ||
659 | goto err; | 660 | goto err; |
660 | 661 | } | |
661 | ret = -EINVAL; | 662 | ret = -EINVAL; |
663 | pr_debug(" irq %d no 0x%x on %s\n", i, oirq.specifier[0], | ||
664 | oirq.controller->full_name); | ||
662 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, | 665 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, |
663 | oirq.specifier, oirq.size); | 666 | oirq.specifier, oirq.size); |
664 | if (spu->irqs[i] == NO_IRQ) | 667 | if (spu->irqs[i] == NO_IRQ) { |
668 | pr_debug("spu_new: failed to map it !\n"); | ||
665 | goto err; | 669 | goto err; |
670 | } | ||
666 | } | 671 | } |
667 | return 0; | 672 | return 0; |
668 | 673 | ||
@@ -681,7 +686,7 @@ static int spu_map_resource(struct device_node *node, int nr, | |||
681 | struct resource resource = { }; | 686 | struct resource resource = { }; |
682 | int ret; | 687 | int ret; |
683 | 688 | ||
684 | ret = of_address_to_resource(node, 0, &resource); | 689 | ret = of_address_to_resource(node, nr, &resource); |
685 | if (ret) | 690 | if (ret) |
686 | goto out; | 691 | goto out; |
687 | 692 | ||
@@ -704,22 +709,42 @@ static int __init spu_map_device(struct spu *spu, struct device_node *node) | |||
704 | 709 | ||
705 | ret = spu_map_resource(node, 0, (void __iomem**)&spu->local_store, | 710 | ret = spu_map_resource(node, 0, (void __iomem**)&spu->local_store, |
706 | &spu->local_store_phys); | 711 | &spu->local_store_phys); |
707 | if (ret) | 712 | if (ret) { |
713 | pr_debug("spu_new: failed to map %s resource 0\n", | ||
714 | node->full_name); | ||
708 | goto out; | 715 | goto out; |
716 | } | ||
709 | ret = spu_map_resource(node, 1, (void __iomem**)&spu->problem, | 717 | ret = spu_map_resource(node, 1, (void __iomem**)&spu->problem, |
710 | &spu->problem_phys); | 718 | &spu->problem_phys); |
711 | if (ret) | 719 | if (ret) { |
720 | pr_debug("spu_new: failed to map %s resource 1\n", | ||
721 | node->full_name); | ||
712 | goto out_unmap; | 722 | goto out_unmap; |
723 | } | ||
713 | ret = spu_map_resource(node, 2, (void __iomem**)&spu->priv2, | 724 | ret = spu_map_resource(node, 2, (void __iomem**)&spu->priv2, |
714 | NULL); | 725 | NULL); |
715 | if (ret) | 726 | if (ret) { |
727 | pr_debug("spu_new: failed to map %s resource 2\n", | ||
728 | node->full_name); | ||
716 | goto out_unmap; | 729 | goto out_unmap; |
730 | } | ||
717 | 731 | ||
718 | if (!firmware_has_feature(FW_FEATURE_LPAR)) | 732 | if (!firmware_has_feature(FW_FEATURE_LPAR)) |
719 | ret = spu_map_resource(node, 3, (void __iomem**)&spu->priv1, | 733 | ret = spu_map_resource(node, 3, (void __iomem**)&spu->priv1, |
720 | NULL); | 734 | NULL); |
721 | if (ret) | 735 | if (ret) { |
736 | pr_debug("spu_new: failed to map %s resource 3\n", | ||
737 | node->full_name); | ||
722 | goto out_unmap; | 738 | goto out_unmap; |
739 | } | ||
740 | pr_debug("spu_new: %s maps:\n", node->full_name); | ||
741 | pr_debug(" local store : 0x%016lx -> 0x%p\n", | ||
742 | spu->local_store_phys, spu->local_store); | ||
743 | pr_debug(" problem state : 0x%016lx -> 0x%p\n", | ||
744 | spu->problem_phys, spu->problem); | ||
745 | pr_debug(" priv2 : 0x%p\n", spu->priv2); | ||
746 | pr_debug(" priv1 : 0x%p\n", spu->priv1); | ||
747 | |||
723 | return 0; | 748 | return 0; |
724 | 749 | ||
725 | out_unmap: | 750 | out_unmap: |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 608193cfe43f..245b81bc7157 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -236,9 +236,6 @@ config WARN_STACK_SIZE | |||
236 | This allows you to specify the maximum frame size a function may | 236 | This allows you to specify the maximum frame size a function may |
237 | have without the compiler complaining about it. | 237 | have without the compiler complaining about it. |
238 | 238 | ||
239 | config ARCH_POPULATES_NODE_MAP | ||
240 | def_bool y | ||
241 | |||
242 | source "mm/Kconfig" | 239 | source "mm/Kconfig" |
243 | 240 | ||
244 | comment "I/O subsystem configuration" | 241 | comment "I/O subsystem configuration" |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index c313e9a9304f..7cd51e73e274 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -119,7 +119,6 @@ CONFIG_PACK_STACK=y | |||
119 | CONFIG_CHECK_STACK=y | 119 | CONFIG_CHECK_STACK=y |
120 | CONFIG_STACK_GUARD=256 | 120 | CONFIG_STACK_GUARD=256 |
121 | # CONFIG_WARN_STACK is not set | 121 | # CONFIG_WARN_STACK is not set |
122 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
123 | CONFIG_SELECT_MEMORY_MODEL=y | 122 | CONFIG_SELECT_MEMORY_MODEL=y |
124 | CONFIG_FLATMEM_MANUAL=y | 123 | CONFIG_FLATMEM_MANUAL=y |
125 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 124 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index 49f2b68e32b1..2aa13e8e000a 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -70,6 +70,7 @@ struct { | |||
70 | #define CHUNK_READ_WRITE 0 | 70 | #define CHUNK_READ_WRITE 0 |
71 | #define CHUNK_READ_ONLY 1 | 71 | #define CHUNK_READ_ONLY 1 |
72 | volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ | 72 | volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ |
73 | unsigned long __initdata zholes_size[MAX_NR_ZONES]; | ||
73 | static unsigned long __initdata memory_end; | 74 | static unsigned long __initdata memory_end; |
74 | 75 | ||
75 | /* | 76 | /* |
@@ -357,6 +358,21 @@ void machine_power_off(void) | |||
357 | */ | 358 | */ |
358 | void (*pm_power_off)(void) = machine_power_off; | 359 | void (*pm_power_off)(void) = machine_power_off; |
359 | 360 | ||
361 | static void __init | ||
362 | add_memory_hole(unsigned long start, unsigned long end) | ||
363 | { | ||
364 | unsigned long dma_pfn = MAX_DMA_ADDRESS >> PAGE_SHIFT; | ||
365 | |||
366 | if (end <= dma_pfn) | ||
367 | zholes_size[ZONE_DMA] += end - start + 1; | ||
368 | else if (start > dma_pfn) | ||
369 | zholes_size[ZONE_NORMAL] += end - start + 1; | ||
370 | else { | ||
371 | zholes_size[ZONE_DMA] += dma_pfn - start + 1; | ||
372 | zholes_size[ZONE_NORMAL] += end - dma_pfn; | ||
373 | } | ||
374 | } | ||
375 | |||
360 | static int __init early_parse_mem(char *p) | 376 | static int __init early_parse_mem(char *p) |
361 | { | 377 | { |
362 | memory_end = memparse(p, &p); | 378 | memory_end = memparse(p, &p); |
@@ -434,7 +450,7 @@ setup_lowcore(void) | |||
434 | lc->extended_save_area_addr = (__u32) | 450 | lc->extended_save_area_addr = (__u32) |
435 | __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0); | 451 | __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0); |
436 | /* enable extended save area */ | 452 | /* enable extended save area */ |
437 | ctl_set_bit(14, 29); | 453 | __ctl_set_bit(14, 29); |
438 | } | 454 | } |
439 | #endif | 455 | #endif |
440 | set_prefix((u32)(unsigned long) lc); | 456 | set_prefix((u32)(unsigned long) lc); |
@@ -478,6 +494,7 @@ setup_memory(void) | |||
478 | { | 494 | { |
479 | unsigned long bootmap_size; | 495 | unsigned long bootmap_size; |
480 | unsigned long start_pfn, end_pfn, init_pfn; | 496 | unsigned long start_pfn, end_pfn, init_pfn; |
497 | unsigned long last_rw_end; | ||
481 | int i; | 498 | int i; |
482 | 499 | ||
483 | /* | 500 | /* |
@@ -533,27 +550,39 @@ setup_memory(void) | |||
533 | /* | 550 | /* |
534 | * Register RAM areas with the bootmem allocator. | 551 | * Register RAM areas with the bootmem allocator. |
535 | */ | 552 | */ |
553 | last_rw_end = start_pfn; | ||
536 | 554 | ||
537 | for (i = 0; i < MEMORY_CHUNKS && memory_chunk[i].size > 0; i++) { | 555 | for (i = 0; i < MEMORY_CHUNKS && memory_chunk[i].size > 0; i++) { |
538 | unsigned long start_chunk, end_chunk, pfn; | 556 | unsigned long start_chunk, end_chunk; |
539 | 557 | ||
540 | if (memory_chunk[i].type != CHUNK_READ_WRITE) | 558 | if (memory_chunk[i].type != CHUNK_READ_WRITE) |
541 | continue; | 559 | continue; |
542 | start_chunk = PFN_DOWN(memory_chunk[i].addr); | 560 | start_chunk = (memory_chunk[i].addr + PAGE_SIZE - 1); |
543 | end_chunk = start_chunk + PFN_DOWN(memory_chunk[i].size) - 1; | 561 | start_chunk >>= PAGE_SHIFT; |
544 | end_chunk = min(end_chunk, end_pfn); | 562 | end_chunk = (memory_chunk[i].addr + memory_chunk[i].size); |
545 | if (start_chunk >= end_chunk) | 563 | end_chunk >>= PAGE_SHIFT; |
546 | continue; | 564 | if (start_chunk < start_pfn) |
547 | add_active_range(0, start_chunk, end_chunk); | 565 | start_chunk = start_pfn; |
548 | pfn = max(start_chunk, start_pfn); | 566 | if (end_chunk > end_pfn) |
549 | for (; pfn <= end_chunk; pfn++) | 567 | end_chunk = end_pfn; |
550 | page_set_storage_key(PFN_PHYS(pfn), PAGE_DEFAULT_KEY); | 568 | if (start_chunk < end_chunk) { |
569 | /* Initialize storage key for RAM pages */ | ||
570 | for (init_pfn = start_chunk ; init_pfn < end_chunk; | ||
571 | init_pfn++) | ||
572 | page_set_storage_key(init_pfn << PAGE_SHIFT, | ||
573 | PAGE_DEFAULT_KEY); | ||
574 | free_bootmem(start_chunk << PAGE_SHIFT, | ||
575 | (end_chunk - start_chunk) << PAGE_SHIFT); | ||
576 | if (last_rw_end < start_chunk) | ||
577 | add_memory_hole(last_rw_end, start_chunk - 1); | ||
578 | last_rw_end = end_chunk; | ||
579 | } | ||
551 | } | 580 | } |
552 | 581 | ||
553 | psw_set_key(PAGE_DEFAULT_KEY); | 582 | psw_set_key(PAGE_DEFAULT_KEY); |
554 | 583 | ||
555 | free_bootmem_with_active_regions(0, max_pfn); | 584 | if (last_rw_end < end_pfn - 1) |
556 | reserve_bootmem(0, PFN_PHYS(start_pfn)); | 585 | add_memory_hole(last_rw_end, end_pfn - 1); |
557 | 586 | ||
558 | /* | 587 | /* |
559 | * Reserve the bootmem bitmap itself as well. We do this in two | 588 | * Reserve the bootmem bitmap itself as well. We do this in two |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index d99891718709..e1881c31b1cb 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
@@ -84,6 +84,7 @@ void show_mem(void) | |||
84 | printk("%d pages swap cached\n",cached); | 84 | printk("%d pages swap cached\n",cached); |
85 | } | 85 | } |
86 | 86 | ||
87 | extern unsigned long __initdata zholes_size[]; | ||
87 | /* | 88 | /* |
88 | * paging_init() sets up the page tables | 89 | * paging_init() sets up the page tables |
89 | */ | 90 | */ |
@@ -100,15 +101,16 @@ void __init paging_init(void) | |||
100 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | _KERNSEG_TABLE; | 101 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | _KERNSEG_TABLE; |
101 | static const int ssm_mask = 0x04000000L; | 102 | static const int ssm_mask = 0x04000000L; |
102 | unsigned long ro_start_pfn, ro_end_pfn; | 103 | unsigned long ro_start_pfn, ro_end_pfn; |
103 | unsigned long max_zone_pfns[MAX_NR_ZONES]; | 104 | unsigned long zones_size[MAX_NR_ZONES]; |
104 | 105 | ||
105 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); | 106 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); |
106 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); | 107 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); |
107 | 108 | ||
108 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | 109 | memset(zones_size, 0, sizeof(zones_size)); |
109 | max_zone_pfns[ZONE_DMA] = max_low_pfn; | 110 | zones_size[ZONE_DMA] = max_low_pfn; |
110 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; | 111 | free_area_init_node(0, &contig_page_data, zones_size, |
111 | free_area_init_nodes(max_zone_pfns); | 112 | __pa(PAGE_OFFSET) >> PAGE_SHIFT, |
113 | zholes_size); | ||
112 | 114 | ||
113 | /* unmap whole virtual address space */ | 115 | /* unmap whole virtual address space */ |
114 | 116 | ||
@@ -168,16 +170,26 @@ void __init paging_init(void) | |||
168 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | | 170 | unsigned long pgdir_k = (__pa(swapper_pg_dir) & PAGE_MASK) | |
169 | _KERN_REGION_TABLE; | 171 | _KERN_REGION_TABLE; |
170 | static const int ssm_mask = 0x04000000L; | 172 | static const int ssm_mask = 0x04000000L; |
173 | unsigned long zones_size[MAX_NR_ZONES]; | ||
174 | unsigned long dma_pfn, high_pfn; | ||
171 | unsigned long ro_start_pfn, ro_end_pfn; | 175 | unsigned long ro_start_pfn, ro_end_pfn; |
172 | unsigned long max_zone_pfns[MAX_NR_ZONES]; | ||
173 | 176 | ||
177 | memset(zones_size, 0, sizeof(zones_size)); | ||
178 | dma_pfn = MAX_DMA_ADDRESS >> PAGE_SHIFT; | ||
179 | high_pfn = max_low_pfn; | ||
174 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); | 180 | ro_start_pfn = PFN_DOWN((unsigned long)&__start_rodata); |
175 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); | 181 | ro_end_pfn = PFN_UP((unsigned long)&__end_rodata); |
176 | 182 | ||
177 | memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); | 183 | if (dma_pfn > high_pfn) |
178 | max_zone_pfns[ZONE_DMA] = PFN_DOWN(MAX_DMA_ADDRESS); | 184 | zones_size[ZONE_DMA] = high_pfn; |
179 | max_zone_pfns[ZONE_NORMAL] = max_low_pfn; | 185 | else { |
180 | free_area_init_nodes(max_zone_pfns); | 186 | zones_size[ZONE_DMA] = dma_pfn; |
187 | zones_size[ZONE_NORMAL] = high_pfn - dma_pfn; | ||
188 | } | ||
189 | |||
190 | /* Initialize mem_map[]. */ | ||
191 | free_area_init_node(0, &contig_page_data, zones_size, | ||
192 | __pa(PAGE_OFFSET) >> PAGE_SHIFT, zholes_size); | ||
181 | 193 | ||
182 | /* | 194 | /* |
183 | * map whole physical memory to virtual memory (identity mapping) | 195 | * map whole physical memory to virtual memory (identity mapping) |
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index a4edff4c3be3..831f540251f8 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
@@ -32,13 +32,12 @@ | |||
32 | #include <asm/mxcc.h> | 32 | #include <asm/mxcc.h> |
33 | #include <asm/thread_info.h> | 33 | #include <asm/thread_info.h> |
34 | #include <asm/param.h> | 34 | #include <asm/param.h> |
35 | #include <asm/unistd.h> | ||
35 | 36 | ||
36 | #include <asm/asmmacro.h> | 37 | #include <asm/asmmacro.h> |
37 | 38 | ||
38 | #define curptr g6 | 39 | #define curptr g6 |
39 | 40 | ||
40 | #define NR_SYSCALLS 300 /* Each OS is different... */ | ||
41 | |||
42 | /* These are just handy. */ | 41 | /* These are just handy. */ |
43 | #define _SV save %sp, -STACKFRAME_SZ, %sp | 42 | #define _SV save %sp, -STACKFRAME_SZ, %sp |
44 | #define _RS restore | 43 | #define _RS restore |
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index 10df38eeae08..ea75ca569052 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S | |||
@@ -78,7 +78,7 @@ sys_call_table: | |||
78 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 78 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
79 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 79 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
80 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 80 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
81 | /*300*/ .long sys_set_robust_list, sys_get_robust_list | 81 | /*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages |
82 | 82 | ||
83 | #ifdef CONFIG_SUNOS_EMUL | 83 | #ifdef CONFIG_SUNOS_EMUL |
84 | /* Now the SunOS syscall table. */ | 84 | /* Now the SunOS syscall table. */ |
@@ -190,6 +190,7 @@ sunos_sys_table: | |||
190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys | 190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys |
191 | .long sunos_nosys, sunos_nosys, sunos_nosys | 191 | .long sunos_nosys, sunos_nosys, sunos_nosys |
192 | .long sunos_nosys, sunos_nosys, sunos_nosys | 192 | .long sunos_nosys, sunos_nosys, sunos_nosys |
193 | .long sunos_nosys, sunos_nosys, sunos_nosys | 193 | .long sunos_nosys |
194 | /*300*/ .long sunos_nosys, sunos_nosys, sunos_nosys | ||
194 | 195 | ||
195 | #endif | 196 | #endif |
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index 0aaa35fc5a9c..6f28bec0a9bf 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
@@ -22,11 +22,10 @@ | |||
22 | #include <asm/auxio.h> | 22 | #include <asm/auxio.h> |
23 | #include <asm/sfafsr.h> | 23 | #include <asm/sfafsr.h> |
24 | #include <asm/pil.h> | 24 | #include <asm/pil.h> |
25 | #include <asm/unistd.h> | ||
25 | 26 | ||
26 | #define curptr g6 | 27 | #define curptr g6 |
27 | 28 | ||
28 | #define NR_SYSCALLS 300 /* Each OS is different... */ | ||
29 | |||
30 | .text | 29 | .text |
31 | .align 32 | 30 | .align 32 |
32 | 31 | ||
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index 419a63fca172..9a8026797ac0 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
@@ -79,7 +79,7 @@ sys_call_table32: | |||
79 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 | 79 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 |
80 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 80 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
81 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare | 81 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare |
82 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list | 82 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages |
83 | 83 | ||
84 | #endif /* CONFIG_COMPAT */ | 84 | #endif /* CONFIG_COMPAT */ |
85 | 85 | ||
@@ -149,7 +149,7 @@ sys_call_table: | |||
149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
150 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 150 | /*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
152 | /*300*/ .word sys_set_robust_list, sys_get_robust_list | 152 | /*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages |
153 | 153 | ||
154 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ | 154 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ |
155 | defined(CONFIG_SOLARIS_EMUL_MODULE) | 155 | defined(CONFIG_SOLARIS_EMUL_MODULE) |
@@ -262,5 +262,7 @@ sunos_sys_table: | |||
262 | /*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys | 262 | /*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys |
263 | .word sunos_nosys, sunos_nosys, sunos_nosys | 263 | .word sunos_nosys, sunos_nosys, sunos_nosys |
264 | .word sunos_nosys, sunos_nosys, sunos_nosys | 264 | .word sunos_nosys, sunos_nosys, sunos_nosys |
265 | .word sunos_nosys, sunos_nosys, sunos_nosys | 265 | .word sunos_nosys |
266 | /*300*/ .word sunos_nosys, sunos_nosys, sunos_nosys | ||
267 | |||
266 | #endif | 268 | #endif |
diff --git a/arch/um/include/sysdep-i386/barrier.h b/arch/um/include/sysdep-i386/barrier.h new file mode 100644 index 000000000000..b58d52c5b2f4 --- /dev/null +++ b/arch/um/include/sysdep-i386/barrier.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __SYSDEP_I386_BARRIER_H | ||
2 | #define __SYSDEP_I386_BARRIER_H | ||
3 | |||
4 | /* Copied from include/asm-i386 for use by userspace. i386 has the option | ||
5 | * of using mfence, but I'm just using this, which works everywhere, for now. | ||
6 | */ | ||
7 | #define mb() asm volatile("lock; addl $0,0(%esp)") | ||
8 | |||
9 | #endif | ||
diff --git a/arch/um/include/sysdep-x86_64/barrier.h b/arch/um/include/sysdep-x86_64/barrier.h new file mode 100644 index 000000000000..7b610befdc8f --- /dev/null +++ b/arch/um/include/sysdep-x86_64/barrier.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __SYSDEP_X86_64_BARRIER_H | ||
2 | #define __SYSDEP_X86_64_BARRIER_H | ||
3 | |||
4 | /* Copied from include/asm-x86_64 for use by userspace. */ | ||
5 | #define mb() asm volatile("mfence":::"memory") | ||
6 | |||
7 | #endif | ||
diff --git a/arch/um/os-Linux/process.c b/arch/um/os-Linux/process.c index 51f0893640a6..c692a192957a 100644 --- a/arch/um/os-Linux/process.c +++ b/arch/um/os-Linux/process.c | |||
@@ -7,7 +7,6 @@ | |||
7 | #include <stdio.h> | 7 | #include <stdio.h> |
8 | #include <errno.h> | 8 | #include <errno.h> |
9 | #include <signal.h> | 9 | #include <signal.h> |
10 | #include <linux/unistd.h> | ||
11 | #include <sys/mman.h> | 10 | #include <sys/mman.h> |
12 | #include <sys/wait.h> | 11 | #include <sys/wait.h> |
13 | #include <sys/mman.h> | 12 | #include <sys/mman.h> |
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index 6b81739279d1..b897e8592d77 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "user.h" | 15 | #include "user.h" |
16 | #include "signal_kern.h" | 16 | #include "signal_kern.h" |
17 | #include "sysdep/sigcontext.h" | 17 | #include "sysdep/sigcontext.h" |
18 | #include "sysdep/barrier.h" | ||
18 | #include "sigcontext.h" | 19 | #include "sigcontext.h" |
19 | #include "mode.h" | 20 | #include "mode.h" |
20 | #include "os.h" | 21 | #include "os.h" |
@@ -34,8 +35,12 @@ | |||
34 | #define SIGALRM_BIT 2 | 35 | #define SIGALRM_BIT 2 |
35 | #define SIGALRM_MASK (1 << SIGALRM_BIT) | 36 | #define SIGALRM_MASK (1 << SIGALRM_BIT) |
36 | 37 | ||
37 | static int signals_enabled = 1; | 38 | /* These are used by both the signal handlers and |
38 | static int pending = 0; | 39 | * block/unblock_signals. I don't want modifications cached in a |
40 | * register - they must go straight to memory. | ||
41 | */ | ||
42 | static volatile int signals_enabled = 1; | ||
43 | static volatile int pending = 0; | ||
39 | 44 | ||
40 | void sig_handler(int sig, struct sigcontext *sc) | 45 | void sig_handler(int sig, struct sigcontext *sc) |
41 | { | 46 | { |
@@ -152,6 +157,12 @@ int change_sig(int signal, int on) | |||
152 | void block_signals(void) | 157 | void block_signals(void) |
153 | { | 158 | { |
154 | signals_enabled = 0; | 159 | signals_enabled = 0; |
160 | /* This must return with signals disabled, so this barrier | ||
161 | * ensures that writes are flushed out before the return. | ||
162 | * This might matter if gcc figures out how to inline this and | ||
163 | * decides to shuffle this code into the caller. | ||
164 | */ | ||
165 | mb(); | ||
155 | } | 166 | } |
156 | 167 | ||
157 | void unblock_signals(void) | 168 | void unblock_signals(void) |
@@ -171,9 +182,23 @@ void unblock_signals(void) | |||
171 | */ | 182 | */ |
172 | signals_enabled = 1; | 183 | signals_enabled = 1; |
173 | 184 | ||
185 | /* Setting signals_enabled and reading pending must | ||
186 | * happen in this order. | ||
187 | */ | ||
188 | mb(); | ||
189 | |||
174 | save_pending = pending; | 190 | save_pending = pending; |
175 | if(save_pending == 0) | 191 | if(save_pending == 0){ |
192 | /* This must return with signals enabled, so | ||
193 | * this barrier ensures that writes are | ||
194 | * flushed out before the return. This might | ||
195 | * matter if gcc figures out how to inline | ||
196 | * this (unlikely, given its size) and decides | ||
197 | * to shuffle this code into the caller. | ||
198 | */ | ||
199 | mb(); | ||
176 | return; | 200 | return; |
201 | } | ||
177 | 202 | ||
178 | pending = 0; | 203 | pending = 0; |
179 | 204 | ||
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c index cb9ab54146cc..9b34fe65949a 100644 --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <sys/mman.h> | 14 | #include <sys/mman.h> |
15 | #include <sys/user.h> | 15 | #include <sys/user.h> |
16 | #include <sys/time.h> | 16 | #include <sys/time.h> |
17 | #include <asm/unistd.h> | 17 | #include <sys/syscall.h> |
18 | #include <asm/types.h> | 18 | #include <asm/types.h> |
19 | #include "user.h" | 19 | #include "user.h" |
20 | #include "sysdep/ptrace.h" | 20 | #include "sysdep/ptrace.h" |
diff --git a/arch/um/os-Linux/tls.c b/arch/um/os-Linux/tls.c index 9f7999f27c77..16215b990804 100644 --- a/arch/um/os-Linux/tls.c +++ b/arch/um/os-Linux/tls.c | |||
@@ -1,7 +1,7 @@ | |||
1 | #include <errno.h> | 1 | #include <errno.h> |
2 | #include <unistd.h> | ||
2 | #include <sys/ptrace.h> | 3 | #include <sys/ptrace.h> |
3 | #include <sys/syscall.h> | 4 | #include <sys/syscall.h> |
4 | #include <unistd.h> | ||
5 | #include <asm/ldt.h> | 5 | #include <asm/ldt.h> |
6 | #include "sysdep/tls.h" | 6 | #include "sysdep/tls.h" |
7 | #include "uml-config.h" | 7 | #include "uml-config.h" |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index fe429e5d6b29..41bfc49301ad 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -88,6 +88,52 @@ static struct irq_pin_list { | |||
88 | short apic, pin, next; | 88 | short apic, pin, next; |
89 | } irq_2_pin[PIN_MAP_SIZE]; | 89 | } irq_2_pin[PIN_MAP_SIZE]; |
90 | 90 | ||
91 | struct io_apic { | ||
92 | unsigned int index; | ||
93 | unsigned int unused[3]; | ||
94 | unsigned int data; | ||
95 | }; | ||
96 | |||
97 | static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx) | ||
98 | { | ||
99 | return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx) | ||
100 | + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK); | ||
101 | } | ||
102 | |||
103 | static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg) | ||
104 | { | ||
105 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
106 | writel(reg, &io_apic->index); | ||
107 | return readl(&io_apic->data); | ||
108 | } | ||
109 | |||
110 | static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value) | ||
111 | { | ||
112 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
113 | writel(reg, &io_apic->index); | ||
114 | writel(value, &io_apic->data); | ||
115 | } | ||
116 | |||
117 | /* | ||
118 | * Re-write a value: to be used for read-modify-write | ||
119 | * cycles where the read already set up the index register. | ||
120 | */ | ||
121 | static inline void io_apic_modify(unsigned int apic, unsigned int value) | ||
122 | { | ||
123 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
124 | writel(value, &io_apic->data); | ||
125 | } | ||
126 | |||
127 | /* | ||
128 | * Synchronize the IO-APIC and the CPU by doing | ||
129 | * a dummy read from the IO-APIC | ||
130 | */ | ||
131 | static inline void io_apic_sync(unsigned int apic) | ||
132 | { | ||
133 | struct io_apic __iomem *io_apic = io_apic_base(apic); | ||
134 | readl(&io_apic->data); | ||
135 | } | ||
136 | |||
91 | #define __DO_ACTION(R, ACTION, FINAL) \ | 137 | #define __DO_ACTION(R, ACTION, FINAL) \ |
92 | \ | 138 | \ |
93 | { \ | 139 | { \ |
@@ -126,12 +172,34 @@ static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) | |||
126 | return eu.entry; | 172 | return eu.entry; |
127 | } | 173 | } |
128 | 174 | ||
175 | /* | ||
176 | * When we write a new IO APIC routing entry, we need to write the high | ||
177 | * word first! If the mask bit in the low word is clear, we will enable | ||
178 | * the interrupt, and we need to make sure the entry is fully populated | ||
179 | * before that happens. | ||
180 | */ | ||
129 | static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) | 181 | static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) |
130 | { | 182 | { |
131 | unsigned long flags; | 183 | unsigned long flags; |
132 | union entry_union eu; | 184 | union entry_union eu; |
133 | eu.entry = e; | 185 | eu.entry = e; |
134 | spin_lock_irqsave(&ioapic_lock, flags); | 186 | spin_lock_irqsave(&ioapic_lock, flags); |
187 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | ||
188 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | ||
189 | spin_unlock_irqrestore(&ioapic_lock, flags); | ||
190 | } | ||
191 | |||
192 | /* | ||
193 | * When we mask an IO APIC routing entry, we need to write the low | ||
194 | * word first, in order to set the mask bit before we change the | ||
195 | * high bits! | ||
196 | */ | ||
197 | static void ioapic_mask_entry(int apic, int pin) | ||
198 | { | ||
199 | unsigned long flags; | ||
200 | union entry_union eu = { .entry.mask = 1 }; | ||
201 | |||
202 | spin_lock_irqsave(&ioapic_lock, flags); | ||
135 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | 203 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); |
136 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | 204 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); |
137 | spin_unlock_irqrestore(&ioapic_lock, flags); | 205 | spin_unlock_irqrestore(&ioapic_lock, flags); |
@@ -256,9 +324,7 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) | |||
256 | /* | 324 | /* |
257 | * Disable it in the IO-APIC irq-routing table: | 325 | * Disable it in the IO-APIC irq-routing table: |
258 | */ | 326 | */ |
259 | memset(&entry, 0, sizeof(entry)); | 327 | ioapic_mask_entry(apic, pin); |
260 | entry.mask = 1; | ||
261 | ioapic_write_entry(apic, pin, entry); | ||
262 | } | 328 | } |
263 | 329 | ||
264 | static void clear_IO_APIC (void) | 330 | static void clear_IO_APIC (void) |
@@ -1889,18 +1955,16 @@ void arch_teardown_msi_irq(unsigned int irq) | |||
1889 | 1955 | ||
1890 | static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector) | 1956 | static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector) |
1891 | { | 1957 | { |
1892 | u32 low, high; | 1958 | struct ht_irq_msg msg; |
1893 | low = read_ht_irq_low(irq); | 1959 | fetch_ht_irq_msg(irq, &msg); |
1894 | high = read_ht_irq_high(irq); | ||
1895 | 1960 | ||
1896 | low &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK); | 1961 | msg.address_lo &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK); |
1897 | high &= ~(HT_IRQ_HIGH_DEST_ID_MASK); | 1962 | msg.address_hi &= ~(HT_IRQ_HIGH_DEST_ID_MASK); |
1898 | 1963 | ||
1899 | low |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest); | 1964 | msg.address_lo |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest); |
1900 | high |= HT_IRQ_HIGH_DEST_ID(dest); | 1965 | msg.address_hi |= HT_IRQ_HIGH_DEST_ID(dest); |
1901 | 1966 | ||
1902 | write_ht_irq_low(irq, low); | 1967 | write_ht_irq_msg(irq, &msg); |
1903 | write_ht_irq_high(irq, high); | ||
1904 | } | 1968 | } |
1905 | 1969 | ||
1906 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | 1970 | static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) |
@@ -1921,7 +1985,7 @@ static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask) | |||
1921 | 1985 | ||
1922 | dest = cpu_mask_to_apicid(tmp); | 1986 | dest = cpu_mask_to_apicid(tmp); |
1923 | 1987 | ||
1924 | target_ht_irq(irq, dest, vector & 0xff); | 1988 | target_ht_irq(irq, dest, vector); |
1925 | set_native_irq_info(irq, mask); | 1989 | set_native_irq_info(irq, mask); |
1926 | } | 1990 | } |
1927 | #endif | 1991 | #endif |
@@ -1944,14 +2008,15 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
1944 | 2008 | ||
1945 | vector = assign_irq_vector(irq, TARGET_CPUS, &tmp); | 2009 | vector = assign_irq_vector(irq, TARGET_CPUS, &tmp); |
1946 | if (vector >= 0) { | 2010 | if (vector >= 0) { |
1947 | u32 low, high; | 2011 | struct ht_irq_msg msg; |
1948 | unsigned dest; | 2012 | unsigned dest; |
1949 | 2013 | ||
1950 | dest = cpu_mask_to_apicid(tmp); | 2014 | dest = cpu_mask_to_apicid(tmp); |
1951 | 2015 | ||
1952 | high = HT_IRQ_HIGH_DEST_ID(dest); | 2016 | msg.address_hi = HT_IRQ_HIGH_DEST_ID(dest); |
1953 | 2017 | ||
1954 | low = HT_IRQ_LOW_BASE | | 2018 | msg.address_lo = |
2019 | HT_IRQ_LOW_BASE | | ||
1955 | HT_IRQ_LOW_DEST_ID(dest) | | 2020 | HT_IRQ_LOW_DEST_ID(dest) | |
1956 | HT_IRQ_LOW_VECTOR(vector) | | 2021 | HT_IRQ_LOW_VECTOR(vector) | |
1957 | ((INT_DEST_MODE == 0) ? | 2022 | ((INT_DEST_MODE == 0) ? |
@@ -1960,10 +2025,10 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
1960 | HT_IRQ_LOW_RQEOI_EDGE | | 2025 | HT_IRQ_LOW_RQEOI_EDGE | |
1961 | ((INT_DELIVERY_MODE != dest_LowestPrio) ? | 2026 | ((INT_DELIVERY_MODE != dest_LowestPrio) ? |
1962 | HT_IRQ_LOW_MT_FIXED : | 2027 | HT_IRQ_LOW_MT_FIXED : |
1963 | HT_IRQ_LOW_MT_ARBITRATED); | 2028 | HT_IRQ_LOW_MT_ARBITRATED) | |
2029 | HT_IRQ_LOW_IRQ_MASKED; | ||
1964 | 2030 | ||
1965 | write_ht_irq_low(irq, low); | 2031 | write_ht_irq_msg(irq, &msg); |
1966 | write_ht_irq_high(irq, high); | ||
1967 | 2032 | ||
1968 | set_irq_chip_and_handler_name(irq, &ht_irq_chip, | 2033 | set_irq_chip_and_handler_name(irq, &ht_irq_chip, |
1969 | handle_edge_irq, "edge"); | 2034 | handle_edge_irq, "edge"); |
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index c7b1dac8bee9..9eaee6640535 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
@@ -3075,11 +3075,12 @@ end_io: | |||
3075 | if (maxsector) { | 3075 | if (maxsector) { |
3076 | sector_t sector = bio->bi_sector; | 3076 | sector_t sector = bio->bi_sector; |
3077 | 3077 | ||
3078 | if (maxsector < nr_sectors || maxsector - nr_sectors < sector) { | 3078 | if (maxsector < nr_sectors || |
3079 | maxsector - nr_sectors < sector) { | ||
3079 | /* | 3080 | /* |
3080 | * This may well happen - partitions are not checked | 3081 | * This may well happen - partitions are not |
3081 | * to make sure they are within the size of the | 3082 | * checked to make sure they are within the size |
3082 | * whole device. | 3083 | * of the whole device. |
3083 | */ | 3084 | */ |
3084 | handle_bad_sector(bio); | 3085 | handle_bad_sector(bio); |
3085 | goto end_io; | 3086 | goto end_io; |
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index 2dc326421a24..a19338e6215d 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c | |||
@@ -246,10 +246,10 @@ static int sg_io(struct file *file, request_queue_t *q, | |||
246 | switch (hdr->dxfer_direction) { | 246 | switch (hdr->dxfer_direction) { |
247 | default: | 247 | default: |
248 | return -EINVAL; | 248 | return -EINVAL; |
249 | case SG_DXFER_TO_FROM_DEV: | ||
250 | case SG_DXFER_TO_DEV: | 249 | case SG_DXFER_TO_DEV: |
251 | writing = 1; | 250 | writing = 1; |
252 | break; | 251 | break; |
252 | case SG_DXFER_TO_FROM_DEV: | ||
253 | case SG_DXFER_FROM_DEV: | 253 | case SG_DXFER_FROM_DEV: |
254 | break; | 254 | break; |
255 | } | 255 | } |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 988f8bbd14ff..234197e57e9e 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -334,6 +334,14 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
334 | { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci }, /* MCP65 */ | 334 | { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci }, /* MCP65 */ |
335 | { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci }, /* MCP65 */ | 335 | { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci }, /* MCP65 */ |
336 | { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci }, /* MCP65 */ | 336 | { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci }, /* MCP65 */ |
337 | { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci }, /* MCP67 */ | ||
338 | { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci }, /* MCP67 */ | ||
339 | { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci }, /* MCP67 */ | ||
340 | { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci }, /* MCP67 */ | ||
341 | { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci }, /* MCP67 */ | ||
342 | { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci }, /* MCP67 */ | ||
343 | { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci }, /* MCP67 */ | ||
344 | { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci }, /* MCP67 */ | ||
337 | 345 | ||
338 | /* SiS */ | 346 | /* SiS */ |
339 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 347 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ |
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c index 29234c897118..5c47a9e0e0ca 100644 --- a/drivers/ata/pata_amd.c +++ b/drivers/ata/pata_amd.c | |||
@@ -677,6 +677,8 @@ static const struct pci_device_id amd[] = { | |||
677 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE), 8 }, | 677 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE), 8 }, |
678 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE), 8 }, | 678 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE), 8 }, |
679 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE), 8 }, | 679 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE), 8 }, |
680 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE), 8 }, | ||
681 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE), 8 }, | ||
680 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 9 }, | 682 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 9 }, |
681 | 683 | ||
682 | { }, | 684 | { }, |
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index f4455a1efe2d..1c7f19aecc25 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c | |||
@@ -230,7 +230,7 @@ static int vt6420_prereset(struct ata_port *ap) | |||
230 | int online; | 230 | int online; |
231 | 231 | ||
232 | /* don't do any SCR stuff if we're not loading */ | 232 | /* don't do any SCR stuff if we're not loading */ |
233 | if (!ATA_PFLAG_LOADING) | 233 | if (!(ap->pflags & ATA_PFLAG_LOADING)) |
234 | goto skip_scr; | 234 | goto skip_scr; |
235 | 235 | ||
236 | /* Resume phy. This is the old resume sequence from | 236 | /* Resume phy. This is the old resume sequence from |
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 39a9f8cc6412..2af12fc45115 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig | |||
@@ -409,14 +409,6 @@ config SGI_MBCS | |||
409 | If you have an SGI Altix with an attached SABrick | 409 | If you have an SGI Altix with an attached SABrick |
410 | say Y or M here, otherwise say N. | 410 | say Y or M here, otherwise say N. |
411 | 411 | ||
412 | config MSPEC | ||
413 | tristate "Memory special operations driver" | ||
414 | depends on IA64 | ||
415 | help | ||
416 | If you have an ia64 and you want to enable memory special | ||
417 | operations support (formerly known as fetchop), say Y here, | ||
418 | otherwise say N. | ||
419 | |||
420 | source "drivers/serial/Kconfig" | 412 | source "drivers/serial/Kconfig" |
421 | 413 | ||
422 | config UNIX98_PTYS | 414 | config UNIX98_PTYS |
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index 34a4fd13fa81..a41b8df24073 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c | |||
@@ -376,13 +376,23 @@ static void free_recv_msg_list(struct list_head *q) | |||
376 | } | 376 | } |
377 | } | 377 | } |
378 | 378 | ||
379 | static void free_smi_msg_list(struct list_head *q) | ||
380 | { | ||
381 | struct ipmi_smi_msg *msg, *msg2; | ||
382 | |||
383 | list_for_each_entry_safe(msg, msg2, q, link) { | ||
384 | list_del(&msg->link); | ||
385 | ipmi_free_smi_msg(msg); | ||
386 | } | ||
387 | } | ||
388 | |||
379 | static void clean_up_interface_data(ipmi_smi_t intf) | 389 | static void clean_up_interface_data(ipmi_smi_t intf) |
380 | { | 390 | { |
381 | int i; | 391 | int i; |
382 | struct cmd_rcvr *rcvr, *rcvr2; | 392 | struct cmd_rcvr *rcvr, *rcvr2; |
383 | struct list_head list; | 393 | struct list_head list; |
384 | 394 | ||
385 | free_recv_msg_list(&intf->waiting_msgs); | 395 | free_smi_msg_list(&intf->waiting_msgs); |
386 | free_recv_msg_list(&intf->waiting_events); | 396 | free_recv_msg_list(&intf->waiting_events); |
387 | 397 | ||
388 | /* Wholesale remove all the entries from the list in the | 398 | /* Wholesale remove all the entries from the list in the |
@@ -1844,7 +1854,7 @@ static ssize_t provides_dev_sdrs_show(struct device *dev, | |||
1844 | struct bmc_device *bmc = dev_get_drvdata(dev); | 1854 | struct bmc_device *bmc = dev_get_drvdata(dev); |
1845 | 1855 | ||
1846 | return snprintf(buf, 10, "%u\n", | 1856 | return snprintf(buf, 10, "%u\n", |
1847 | bmc->id.device_revision && 0x80 >> 7); | 1857 | (bmc->id.device_revision & 0x80) >> 7); |
1848 | } | 1858 | } |
1849 | 1859 | ||
1850 | static ssize_t revision_show(struct device *dev, struct device_attribute *attr, | 1860 | static ssize_t revision_show(struct device *dev, struct device_attribute *attr, |
@@ -1853,7 +1863,7 @@ static ssize_t revision_show(struct device *dev, struct device_attribute *attr, | |||
1853 | struct bmc_device *bmc = dev_get_drvdata(dev); | 1863 | struct bmc_device *bmc = dev_get_drvdata(dev); |
1854 | 1864 | ||
1855 | return snprintf(buf, 20, "%u\n", | 1865 | return snprintf(buf, 20, "%u\n", |
1856 | bmc->id.device_revision && 0x0F); | 1866 | bmc->id.device_revision & 0x0F); |
1857 | } | 1867 | } |
1858 | 1868 | ||
1859 | static ssize_t firmware_rev_show(struct device *dev, | 1869 | static ssize_t firmware_rev_show(struct device *dev, |
@@ -3232,7 +3242,9 @@ void ipmi_smi_msg_received(ipmi_smi_t intf, | |||
3232 | report the error immediately. */ | 3242 | report the error immediately. */ |
3233 | if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0) | 3243 | if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0) |
3234 | && (msg->rsp[2] != IPMI_NODE_BUSY_ERR) | 3244 | && (msg->rsp[2] != IPMI_NODE_BUSY_ERR) |
3235 | && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR)) | 3245 | && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR) |
3246 | && (msg->rsp[2] != IPMI_BUS_ERR) | ||
3247 | && (msg->rsp[2] != IPMI_NAK_ON_WRITE_ERR)) | ||
3236 | { | 3248 | { |
3237 | int chan = msg->rsp[3] & 0xf; | 3249 | int chan = msg->rsp[3] & 0xf; |
3238 | 3250 | ||
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index e5cfb1fa47d1..abc5149e30e8 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
@@ -1211,7 +1211,7 @@ static void intf_mem_outb(struct si_sm_io *io, unsigned int offset, | |||
1211 | static unsigned char intf_mem_inw(struct si_sm_io *io, unsigned int offset) | 1211 | static unsigned char intf_mem_inw(struct si_sm_io *io, unsigned int offset) |
1212 | { | 1212 | { |
1213 | return (readw((io->addr)+(offset * io->regspacing)) >> io->regshift) | 1213 | return (readw((io->addr)+(offset * io->regspacing)) >> io->regshift) |
1214 | && 0xff; | 1214 | & 0xff; |
1215 | } | 1215 | } |
1216 | 1216 | ||
1217 | static void intf_mem_outw(struct si_sm_io *io, unsigned int offset, | 1217 | static void intf_mem_outw(struct si_sm_io *io, unsigned int offset, |
@@ -1223,7 +1223,7 @@ static void intf_mem_outw(struct si_sm_io *io, unsigned int offset, | |||
1223 | static unsigned char intf_mem_inl(struct si_sm_io *io, unsigned int offset) | 1223 | static unsigned char intf_mem_inl(struct si_sm_io *io, unsigned int offset) |
1224 | { | 1224 | { |
1225 | return (readl((io->addr)+(offset * io->regspacing)) >> io->regshift) | 1225 | return (readl((io->addr)+(offset * io->regspacing)) >> io->regshift) |
1226 | && 0xff; | 1226 | & 0xff; |
1227 | } | 1227 | } |
1228 | 1228 | ||
1229 | static void intf_mem_outl(struct si_sm_io *io, unsigned int offset, | 1229 | static void intf_mem_outl(struct si_sm_io *io, unsigned int offset, |
@@ -1236,7 +1236,7 @@ static void intf_mem_outl(struct si_sm_io *io, unsigned int offset, | |||
1236 | static unsigned char mem_inq(struct si_sm_io *io, unsigned int offset) | 1236 | static unsigned char mem_inq(struct si_sm_io *io, unsigned int offset) |
1237 | { | 1237 | { |
1238 | return (readq((io->addr)+(offset * io->regspacing)) >> io->regshift) | 1238 | return (readq((io->addr)+(offset * io->regspacing)) >> io->regshift) |
1239 | && 0xff; | 1239 | & 0xff; |
1240 | } | 1240 | } |
1241 | 1241 | ||
1242 | static void mem_outq(struct si_sm_io *io, unsigned int offset, | 1242 | static void mem_outq(struct si_sm_io *io, unsigned int offset, |
@@ -1867,7 +1867,7 @@ static int ipmi_pci_resume(struct pci_dev *pdev) | |||
1867 | 1867 | ||
1868 | static struct pci_device_id ipmi_pci_devices[] = { | 1868 | static struct pci_device_id ipmi_pci_devices[] = { |
1869 | { PCI_DEVICE(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID) }, | 1869 | { PCI_DEVICE(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID) }, |
1870 | { PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE) } | 1870 | { PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE_MASK) } |
1871 | }; | 1871 | }; |
1872 | MODULE_DEVICE_TABLE(pci, ipmi_pci_devices); | 1872 | MODULE_DEVICE_TABLE(pci, ipmi_pci_devices); |
1873 | 1873 | ||
diff --git a/drivers/char/mspec.c b/drivers/char/mspec.c index 5c0dec39cf6c..235e89226112 100644 --- a/drivers/char/mspec.c +++ b/drivers/char/mspec.c | |||
@@ -72,7 +72,11 @@ enum { | |||
72 | MSPEC_UNCACHED | 72 | MSPEC_UNCACHED |
73 | }; | 73 | }; |
74 | 74 | ||
75 | #ifdef CONFIG_SGI_SN | ||
75 | static int is_sn2; | 76 | static int is_sn2; |
77 | #else | ||
78 | #define is_sn2 0 | ||
79 | #endif | ||
76 | 80 | ||
77 | /* | 81 | /* |
78 | * One of these structures is allocated when an mspec region is mmaped. The | 82 | * One of these structures is allocated when an mspec region is mmaped. The |
@@ -211,7 +215,7 @@ mspec_nopfn(struct vm_area_struct *vma, unsigned long address) | |||
211 | if (vdata->type == MSPEC_FETCHOP) | 215 | if (vdata->type == MSPEC_FETCHOP) |
212 | paddr = TO_AMO(maddr); | 216 | paddr = TO_AMO(maddr); |
213 | else | 217 | else |
214 | paddr = __pa(TO_CAC(maddr)); | 218 | paddr = maddr & ~__IA64_UNCACHED_OFFSET; |
215 | 219 | ||
216 | pfn = paddr >> PAGE_SHIFT; | 220 | pfn = paddr >> PAGE_SHIFT; |
217 | 221 | ||
@@ -335,6 +339,7 @@ mspec_init(void) | |||
335 | * The fetchop device only works on SN2 hardware, uncached and cached | 339 | * The fetchop device only works on SN2 hardware, uncached and cached |
336 | * memory drivers should both be valid on all ia64 hardware | 340 | * memory drivers should both be valid on all ia64 hardware |
337 | */ | 341 | */ |
342 | #ifdef CONFIG_SGI_SN | ||
338 | if (ia64_platform_is("sn2")) { | 343 | if (ia64_platform_is("sn2")) { |
339 | is_sn2 = 1; | 344 | is_sn2 = 1; |
340 | if (is_shub2()) { | 345 | if (is_shub2()) { |
@@ -363,6 +368,7 @@ mspec_init(void) | |||
363 | goto free_scratch_pages; | 368 | goto free_scratch_pages; |
364 | } | 369 | } |
365 | } | 370 | } |
371 | #endif | ||
366 | ret = misc_register(&cached_miscdev); | 372 | ret = misc_register(&cached_miscdev); |
367 | if (ret) { | 373 | if (ret) { |
368 | printk(KERN_ERR "%s: failed to register device %i\n", | 374 | printk(KERN_ERR "%s: failed to register device %i\n", |
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 4bde30bb3be7..75e9e38330ff 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -230,34 +230,43 @@ static struct kobj_type ktype_memctrl = { | |||
230 | */ | 230 | */ |
231 | static int edac_sysfs_memctrl_setup(void) | 231 | static int edac_sysfs_memctrl_setup(void) |
232 | { | 232 | { |
233 | int err=0; | 233 | int err = 0; |
234 | 234 | ||
235 | debugf1("%s()\n", __func__); | 235 | debugf1("%s()\n", __func__); |
236 | 236 | ||
237 | /* create the /sys/devices/system/edac directory */ | 237 | /* create the /sys/devices/system/edac directory */ |
238 | err = sysdev_class_register(&edac_class); | 238 | err = sysdev_class_register(&edac_class); |
239 | 239 | ||
240 | if (!err) { | 240 | if (err) { |
241 | /* Init the MC's kobject */ | 241 | debugf1("%s() error=%d\n", __func__, err); |
242 | memset(&edac_memctrl_kobj, 0, sizeof (edac_memctrl_kobj)); | 242 | return err; |
243 | edac_memctrl_kobj.parent = &edac_class.kset.kobj; | 243 | } |
244 | edac_memctrl_kobj.ktype = &ktype_memctrl; | ||
245 | 244 | ||
246 | /* generate sysfs "..../edac/mc" */ | 245 | /* Init the MC's kobject */ |
247 | err = kobject_set_name(&edac_memctrl_kobj,"mc"); | 246 | memset(&edac_memctrl_kobj, 0, sizeof (edac_memctrl_kobj)); |
247 | edac_memctrl_kobj.parent = &edac_class.kset.kobj; | ||
248 | edac_memctrl_kobj.ktype = &ktype_memctrl; | ||
248 | 249 | ||
249 | if (!err) { | 250 | /* generate sysfs "..../edac/mc" */ |
250 | /* FIXME: maybe new sysdev_create_subdir() */ | 251 | err = kobject_set_name(&edac_memctrl_kobj,"mc"); |
251 | err = kobject_register(&edac_memctrl_kobj); | ||
252 | 252 | ||
253 | if (err) | 253 | if (err) |
254 | debugf1("Failed to register '.../edac/mc'\n"); | 254 | goto fail; |
255 | else | 255 | |
256 | debugf1("Registered '.../edac/mc' kobject\n"); | 256 | /* FIXME: maybe new sysdev_create_subdir() */ |
257 | } | 257 | err = kobject_register(&edac_memctrl_kobj); |
258 | } else | 258 | |
259 | debugf1("%s() error=%d\n", __func__, err); | 259 | if (err) { |
260 | debugf1("Failed to register '.../edac/mc'\n"); | ||
261 | goto fail; | ||
262 | } | ||
260 | 263 | ||
264 | debugf1("Registered '.../edac/mc' kobject\n"); | ||
265 | |||
266 | return 0; | ||
267 | |||
268 | fail: | ||
269 | sysdev_class_unregister(&edac_class); | ||
261 | return err; | 270 | return err; |
262 | } | 271 | } |
263 | 272 | ||
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index bddfebdf91d8..88214943d00a 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -724,7 +724,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret) | |||
724 | * if we have an error, pass back CHECK_CONDITION as the | 724 | * if we have an error, pass back CHECK_CONDITION as the |
725 | * scsi status byte | 725 | * scsi status byte |
726 | */ | 726 | */ |
727 | if (!rq->errors) | 727 | if (blk_pc_request(rq) && !rq->errors) |
728 | rq->errors = SAM_STAT_CHECK_CONDITION; | 728 | rq->errors = SAM_STAT_CHECK_CONDITION; |
729 | 729 | ||
730 | /* Check for tray open. */ | 730 | /* Check for tray open. */ |
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 2b0ea8b6608d..753fe0e21456 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
@@ -75,6 +75,7 @@ static struct amd_ide_chip { | |||
75 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, 0x50, AMD_UDMA_133 }, | 75 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, 0x50, AMD_UDMA_133 }, |
76 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, 0x50, AMD_UDMA_133 }, | 76 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, 0x50, AMD_UDMA_133 }, |
77 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, 0x50, AMD_UDMA_133 }, | 77 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, 0x50, AMD_UDMA_133 }, |
78 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE, 0x50, AMD_UDMA_133 }, | ||
78 | { PCI_DEVICE_ID_AMD_CS5536_IDE, 0x40, AMD_UDMA_100 }, | 79 | { PCI_DEVICE_ID_AMD_CS5536_IDE, 0x40, AMD_UDMA_100 }, |
79 | { 0 } | 80 | { 0 } |
80 | }; | 81 | }; |
@@ -491,7 +492,8 @@ static ide_pci_device_t amd74xx_chipsets[] __devinitdata = { | |||
491 | /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55"), | 492 | /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55"), |
492 | /* 17 */ DECLARE_NV_DEV("NFORCE-MCP61"), | 493 | /* 17 */ DECLARE_NV_DEV("NFORCE-MCP61"), |
493 | /* 18 */ DECLARE_NV_DEV("NFORCE-MCP65"), | 494 | /* 18 */ DECLARE_NV_DEV("NFORCE-MCP65"), |
494 | /* 19 */ DECLARE_AMD_DEV("AMD5536"), | 495 | /* 19 */ DECLARE_NV_DEV("NFORCE-MCP67"), |
496 | /* 20 */ DECLARE_AMD_DEV("AMD5536"), | ||
495 | }; | 497 | }; |
496 | 498 | ||
497 | static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id) | 499 | static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id) |
@@ -530,7 +532,8 @@ static struct pci_device_id amd74xx_pci_tbl[] = { | |||
530 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, | 532 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, |
531 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, | 533 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, |
532 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 }, | 534 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 }, |
533 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19 }, | 535 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19 }, |
536 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20 }, | ||
534 | { 0, }, | 537 | { 0, }, |
535 | }; | 538 | }; |
536 | MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); | 539 | MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); |
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index b4ffaa7bcbb7..09a13c1fc46a 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c | |||
@@ -304,7 +304,7 @@ static int __devinit ipath_init_one(struct pci_dev *pdev, | |||
304 | } | 304 | } |
305 | addr = pci_resource_start(pdev, 0); | 305 | addr = pci_resource_start(pdev, 0); |
306 | len = pci_resource_len(pdev, 0); | 306 | len = pci_resource_len(pdev, 0); |
307 | ipath_cdbg(VERBOSE, "regbase (0) %llx len %d irq %x, vend %x/%x " | 307 | ipath_cdbg(VERBOSE, "regbase (0) %llx len %d pdev->irq %d, vend %x/%x " |
308 | "driver_data %lx\n", addr, len, pdev->irq, ent->vendor, | 308 | "driver_data %lx\n", addr, len, pdev->irq, ent->vendor, |
309 | ent->device, ent->driver_data); | 309 | ent->device, ent->driver_data); |
310 | 310 | ||
@@ -467,15 +467,15 @@ static int __devinit ipath_init_one(struct pci_dev *pdev, | |||
467 | * check 0 irq after we return from chip-specific bus setup, since | 467 | * check 0 irq after we return from chip-specific bus setup, since |
468 | * that can affect this due to setup | 468 | * that can affect this due to setup |
469 | */ | 469 | */ |
470 | if (!pdev->irq) | 470 | if (!dd->ipath_irq) |
471 | ipath_dev_err(dd, "irq is 0, BIOS error? Interrupts won't " | 471 | ipath_dev_err(dd, "irq is 0, BIOS error? Interrupts won't " |
472 | "work\n"); | 472 | "work\n"); |
473 | else { | 473 | else { |
474 | ret = request_irq(pdev->irq, ipath_intr, IRQF_SHARED, | 474 | ret = request_irq(dd->ipath_irq, ipath_intr, IRQF_SHARED, |
475 | IPATH_DRV_NAME, dd); | 475 | IPATH_DRV_NAME, dd); |
476 | if (ret) { | 476 | if (ret) { |
477 | ipath_dev_err(dd, "Couldn't setup irq handler, " | 477 | ipath_dev_err(dd, "Couldn't setup irq handler, " |
478 | "irq=%u: %d\n", pdev->irq, ret); | 478 | "irq=%d: %d\n", dd->ipath_irq, ret); |
479 | goto bail_iounmap; | 479 | goto bail_iounmap; |
480 | } | 480 | } |
481 | } | 481 | } |
@@ -637,11 +637,10 @@ static void __devexit ipath_remove_one(struct pci_dev *pdev) | |||
637 | * free up port 0 (kernel) rcvhdr, egr bufs, and eventually tid bufs | 637 | * free up port 0 (kernel) rcvhdr, egr bufs, and eventually tid bufs |
638 | * for all versions of the driver, if they were allocated | 638 | * for all versions of the driver, if they were allocated |
639 | */ | 639 | */ |
640 | if (pdev->irq) { | 640 | if (dd->ipath_irq) { |
641 | ipath_cdbg(VERBOSE, | 641 | ipath_cdbg(VERBOSE, "unit %u free irq %d\n", |
642 | "unit %u free_irq of irq %x\n", | 642 | dd->ipath_unit, dd->ipath_irq); |
643 | dd->ipath_unit, pdev->irq); | 643 | dd->ipath_f_free_irq(dd); |
644 | free_irq(pdev->irq, dd); | ||
645 | } else | 644 | } else |
646 | ipath_dbg("irq is 0, not doing free_irq " | 645 | ipath_dbg("irq is 0, not doing free_irq " |
647 | "for unit %u\n", dd->ipath_unit); | 646 | "for unit %u\n", dd->ipath_unit); |
diff --git a/drivers/infiniband/hw/ipath/ipath_iba6110.c b/drivers/infiniband/hw/ipath/ipath_iba6110.c index 9e4e8d4c6e20..e57c7a351cb5 100644 --- a/drivers/infiniband/hw/ipath/ipath_iba6110.c +++ b/drivers/infiniband/hw/ipath/ipath_iba6110.c | |||
@@ -38,6 +38,7 @@ | |||
38 | 38 | ||
39 | #include <linux/pci.h> | 39 | #include <linux/pci.h> |
40 | #include <linux/delay.h> | 40 | #include <linux/delay.h> |
41 | #include <linux/htirq.h> | ||
41 | 42 | ||
42 | #include "ipath_kernel.h" | 43 | #include "ipath_kernel.h" |
43 | #include "ipath_registers.h" | 44 | #include "ipath_registers.h" |
@@ -913,49 +914,40 @@ static void slave_or_pri_blk(struct ipath_devdata *dd, struct pci_dev *pdev, | |||
913 | } | 914 | } |
914 | } | 915 | } |
915 | 916 | ||
916 | static int set_int_handler(struct ipath_devdata *dd, struct pci_dev *pdev, | 917 | static int ipath_ht_intconfig(struct ipath_devdata *dd) |
917 | int pos) | ||
918 | { | 918 | { |
919 | u32 int_handler_addr_lower; | 919 | int ret; |
920 | u32 int_handler_addr_upper; | ||
921 | u64 ihandler; | ||
922 | u32 intvec; | ||
923 | 920 | ||
924 | /* use indirection register to get the intr handler */ | 921 | if (dd->ipath_intconfig) { |
925 | pci_write_config_byte(pdev, pos + HT_INTR_REG_INDEX, 0x10); | 922 | ipath_write_kreg(dd, dd->ipath_kregs->kr_interruptconfig, |
926 | pci_read_config_dword(pdev, pos + 4, &int_handler_addr_lower); | 923 | dd->ipath_intconfig); /* interrupt address */ |
927 | pci_write_config_byte(pdev, pos + HT_INTR_REG_INDEX, 0x11); | 924 | ret = 0; |
928 | pci_read_config_dword(pdev, pos + 4, &int_handler_addr_upper); | 925 | } else { |
926 | ipath_dev_err(dd, "No interrupts enabled, couldn't setup " | ||
927 | "interrupt address\n"); | ||
928 | ret = -EINVAL; | ||
929 | } | ||
929 | 930 | ||
930 | ihandler = (u64) int_handler_addr_lower | | 931 | return ret; |
931 | ((u64) int_handler_addr_upper << 32); | 932 | } |
933 | |||
934 | static void ipath_ht_irq_update(struct pci_dev *dev, int irq, | ||
935 | struct ht_irq_msg *msg) | ||
936 | { | ||
937 | struct ipath_devdata *dd = pci_get_drvdata(dev); | ||
938 | u64 prev_intconfig = dd->ipath_intconfig; | ||
939 | |||
940 | dd->ipath_intconfig = msg->address_lo; | ||
941 | dd->ipath_intconfig |= ((u64) msg->address_hi) << 32; | ||
932 | 942 | ||
933 | /* | 943 | /* |
934 | * kernels with CONFIG_PCI_MSI set the vector in the irq field of | 944 | * If the previous value of dd->ipath_intconfig is zero, we're |
935 | * struct pci_device, so we use that to program the internal | 945 | * getting configured for the first time, and must not program the |
936 | * interrupt register (not config space) with that value. The BIOS | 946 | * intconfig register here (it will be programmed later, when the |
937 | * must still have done the basic MSI setup. | 947 | * hardware is ready). Otherwise, we should. |
938 | */ | ||
939 | intvec = pdev->irq; | ||
940 | /* | ||
941 | * clear any vector bits there; normally not set but we'll overload | ||
942 | * this for some debug purposes (setting the HTC debug register | ||
943 | * value from software, rather than GPIOs), so it might be set on a | ||
944 | * driver reload. | ||
945 | */ | 948 | */ |
946 | ihandler &= ~0xff0000; | 949 | if (prev_intconfig) |
947 | /* x86 vector goes in intrinfo[23:16] */ | 950 | ipath_ht_intconfig(dd); |
948 | ihandler |= intvec << 16; | ||
949 | ipath_cdbg(VERBOSE, "ihandler lower %x, upper %x, intvec %x, " | ||
950 | "interruptconfig %llx\n", int_handler_addr_lower, | ||
951 | int_handler_addr_upper, intvec, | ||
952 | (unsigned long long) ihandler); | ||
953 | |||
954 | /* can't program yet, so save for interrupt setup */ | ||
955 | dd->ipath_intconfig = ihandler; | ||
956 | /* keep going, so we find link control stuff also */ | ||
957 | |||
958 | return ihandler != 0; | ||
959 | } | 951 | } |
960 | 952 | ||
961 | /** | 953 | /** |
@@ -971,12 +963,19 @@ static int set_int_handler(struct ipath_devdata *dd, struct pci_dev *pdev, | |||
971 | static int ipath_setup_ht_config(struct ipath_devdata *dd, | 963 | static int ipath_setup_ht_config(struct ipath_devdata *dd, |
972 | struct pci_dev *pdev) | 964 | struct pci_dev *pdev) |
973 | { | 965 | { |
974 | int pos, ret = 0; | 966 | int pos, ret; |
975 | int ihandler = 0; | 967 | |
968 | ret = __ht_create_irq(pdev, 0, ipath_ht_irq_update); | ||
969 | if (ret < 0) { | ||
970 | ipath_dev_err(dd, "Couldn't create interrupt handler: " | ||
971 | "err %d\n", ret); | ||
972 | goto bail; | ||
973 | } | ||
974 | dd->ipath_irq = ret; | ||
975 | ret = 0; | ||
976 | 976 | ||
977 | /* | 977 | /* |
978 | * Read the capability info to find the interrupt info, and also | 978 | * Handle clearing CRC errors in linkctrl register if necessary. We |
979 | * handle clearing CRC errors in linkctrl register if necessary. We | ||
980 | * do this early, before we ever enable errors or hardware errors, | 979 | * do this early, before we ever enable errors or hardware errors, |
981 | * mostly to avoid causing the chip to enter freeze mode. | 980 | * mostly to avoid causing the chip to enter freeze mode. |
982 | */ | 981 | */ |
@@ -1000,17 +999,9 @@ static int ipath_setup_ht_config(struct ipath_devdata *dd, | |||
1000 | } | 999 | } |
1001 | if (!(cap_type & 0xE0)) | 1000 | if (!(cap_type & 0xE0)) |
1002 | slave_or_pri_blk(dd, pdev, pos, cap_type); | 1001 | slave_or_pri_blk(dd, pdev, pos, cap_type); |
1003 | else if (cap_type == HT_INTR_DISC_CONFIG) | ||
1004 | ihandler = set_int_handler(dd, pdev, pos); | ||
1005 | } while ((pos = pci_find_next_capability(pdev, pos, | 1002 | } while ((pos = pci_find_next_capability(pdev, pos, |
1006 | PCI_CAP_ID_HT))); | 1003 | PCI_CAP_ID_HT))); |
1007 | 1004 | ||
1008 | if (!ihandler) { | ||
1009 | ipath_dev_err(dd, "Couldn't find interrupt handler in " | ||
1010 | "config space\n"); | ||
1011 | ret = -ENODEV; | ||
1012 | } | ||
1013 | |||
1014 | bail: | 1005 | bail: |
1015 | return ret; | 1006 | return ret; |
1016 | } | 1007 | } |
@@ -1360,25 +1351,6 @@ static void ipath_ht_quiet_serdes(struct ipath_devdata *dd) | |||
1360 | ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig0, val); | 1351 | ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig0, val); |
1361 | } | 1352 | } |
1362 | 1353 | ||
1363 | static int ipath_ht_intconfig(struct ipath_devdata *dd) | ||
1364 | { | ||
1365 | int ret; | ||
1366 | |||
1367 | if (!dd->ipath_intconfig) { | ||
1368 | ipath_dev_err(dd, "No interrupts enabled, couldn't setup " | ||
1369 | "interrupt address\n"); | ||
1370 | ret = 1; | ||
1371 | goto bail; | ||
1372 | } | ||
1373 | |||
1374 | ipath_write_kreg(dd, dd->ipath_kregs->kr_interruptconfig, | ||
1375 | dd->ipath_intconfig); /* interrupt address */ | ||
1376 | ret = 0; | ||
1377 | |||
1378 | bail: | ||
1379 | return ret; | ||
1380 | } | ||
1381 | |||
1382 | /** | 1354 | /** |
1383 | * ipath_pe_put_tid - write a TID in chip | 1355 | * ipath_pe_put_tid - write a TID in chip |
1384 | * @dd: the infinipath device | 1356 | * @dd: the infinipath device |
@@ -1575,6 +1547,14 @@ static int ipath_ht_get_base_info(struct ipath_portdata *pd, void *kbase) | |||
1575 | return 0; | 1547 | return 0; |
1576 | } | 1548 | } |
1577 | 1549 | ||
1550 | static void ipath_ht_free_irq(struct ipath_devdata *dd) | ||
1551 | { | ||
1552 | free_irq(dd->ipath_irq, dd); | ||
1553 | ht_destroy_irq(dd->ipath_irq); | ||
1554 | dd->ipath_irq = 0; | ||
1555 | dd->ipath_intconfig = 0; | ||
1556 | } | ||
1557 | |||
1578 | /** | 1558 | /** |
1579 | * ipath_init_iba6110_funcs - set up the chip-specific function pointers | 1559 | * ipath_init_iba6110_funcs - set up the chip-specific function pointers |
1580 | * @dd: the infinipath device | 1560 | * @dd: the infinipath device |
@@ -1598,6 +1578,7 @@ void ipath_init_iba6110_funcs(struct ipath_devdata *dd) | |||
1598 | dd->ipath_f_cleanup = ipath_setup_ht_cleanup; | 1578 | dd->ipath_f_cleanup = ipath_setup_ht_cleanup; |
1599 | dd->ipath_f_setextled = ipath_setup_ht_setextled; | 1579 | dd->ipath_f_setextled = ipath_setup_ht_setextled; |
1600 | dd->ipath_f_get_base_info = ipath_ht_get_base_info; | 1580 | dd->ipath_f_get_base_info = ipath_ht_get_base_info; |
1581 | dd->ipath_f_free_irq = ipath_ht_free_irq; | ||
1601 | 1582 | ||
1602 | /* | 1583 | /* |
1603 | * initialize chip-specific variables | 1584 | * initialize chip-specific variables |
diff --git a/drivers/infiniband/hw/ipath/ipath_iba6120.c b/drivers/infiniband/hw/ipath/ipath_iba6120.c index a72ab9de386a..6af89683f710 100644 --- a/drivers/infiniband/hw/ipath/ipath_iba6120.c +++ b/drivers/infiniband/hw/ipath/ipath_iba6120.c | |||
@@ -851,6 +851,7 @@ static int ipath_setup_pe_config(struct ipath_devdata *dd, | |||
851 | int pos, ret; | 851 | int pos, ret; |
852 | 852 | ||
853 | dd->ipath_msi_lo = 0; /* used as a flag during reset processing */ | 853 | dd->ipath_msi_lo = 0; /* used as a flag during reset processing */ |
854 | dd->ipath_irq = pdev->irq; | ||
854 | ret = pci_enable_msi(dd->pcidev); | 855 | ret = pci_enable_msi(dd->pcidev); |
855 | if (ret) | 856 | if (ret) |
856 | ipath_dev_err(dd, "pci_enable_msi failed: %d, " | 857 | ipath_dev_err(dd, "pci_enable_msi failed: %d, " |
@@ -1323,6 +1324,12 @@ done: | |||
1323 | return 0; | 1324 | return 0; |
1324 | } | 1325 | } |
1325 | 1326 | ||
1327 | static void ipath_pe_free_irq(struct ipath_devdata *dd) | ||
1328 | { | ||
1329 | free_irq(dd->ipath_irq, dd); | ||
1330 | dd->ipath_irq = 0; | ||
1331 | } | ||
1332 | |||
1326 | /** | 1333 | /** |
1327 | * ipath_init_iba6120_funcs - set up the chip-specific function pointers | 1334 | * ipath_init_iba6120_funcs - set up the chip-specific function pointers |
1328 | * @dd: the infinipath device | 1335 | * @dd: the infinipath device |
@@ -1349,6 +1356,7 @@ void ipath_init_iba6120_funcs(struct ipath_devdata *dd) | |||
1349 | dd->ipath_f_cleanup = ipath_setup_pe_cleanup; | 1356 | dd->ipath_f_cleanup = ipath_setup_pe_cleanup; |
1350 | dd->ipath_f_setextled = ipath_setup_pe_setextled; | 1357 | dd->ipath_f_setextled = ipath_setup_pe_setextled; |
1351 | dd->ipath_f_get_base_info = ipath_pe_get_base_info; | 1358 | dd->ipath_f_get_base_info = ipath_pe_get_base_info; |
1359 | dd->ipath_f_free_irq = ipath_pe_free_irq; | ||
1352 | 1360 | ||
1353 | /* initialize chip-specific variables */ | 1361 | /* initialize chip-specific variables */ |
1354 | dd->ipath_f_tidtemplate = ipath_pe_tidtemplate; | 1362 | dd->ipath_f_tidtemplate = ipath_pe_tidtemplate; |
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c index d9079ee12030..5652a550d442 100644 --- a/drivers/infiniband/hw/ipath/ipath_intr.c +++ b/drivers/infiniband/hw/ipath/ipath_intr.c | |||
@@ -710,14 +710,14 @@ static void ipath_bad_intr(struct ipath_devdata *dd, u32 * unexpectp) | |||
710 | * linuxbios development work, and it may happen in | 710 | * linuxbios development work, and it may happen in |
711 | * the future again. | 711 | * the future again. |
712 | */ | 712 | */ |
713 | if (dd->pcidev && dd->pcidev->irq) { | 713 | if (dd->pcidev && dd->ipath_irq) { |
714 | ipath_dev_err(dd, "Now %u unexpected " | 714 | ipath_dev_err(dd, "Now %u unexpected " |
715 | "interrupts, unregistering " | 715 | "interrupts, unregistering " |
716 | "interrupt handler\n", | 716 | "interrupt handler\n", |
717 | *unexpectp); | 717 | *unexpectp); |
718 | ipath_dbg("free_irq of irq %x\n", | 718 | ipath_dbg("free_irq of irq %d\n", |
719 | dd->pcidev->irq); | 719 | dd->ipath_irq); |
720 | free_irq(dd->pcidev->irq, dd); | 720 | dd->ipath_f_free_irq(dd); |
721 | } | 721 | } |
722 | } | 722 | } |
723 | if (ipath_read_kreg32(dd, dd->ipath_kregs->kr_intmask)) { | 723 | if (ipath_read_kreg32(dd, dd->ipath_kregs->kr_intmask)) { |
@@ -753,7 +753,7 @@ static void ipath_bad_regread(struct ipath_devdata *dd) | |||
753 | if (allbits == 2) { | 753 | if (allbits == 2) { |
754 | ipath_dev_err(dd, "Still bad interrupt status, " | 754 | ipath_dev_err(dd, "Still bad interrupt status, " |
755 | "unregistering interrupt\n"); | 755 | "unregistering interrupt\n"); |
756 | free_irq(dd->pcidev->irq, dd); | 756 | dd->ipath_f_free_irq(dd); |
757 | } else if (allbits > 2) { | 757 | } else if (allbits > 2) { |
758 | if ((allbits % 10000) == 0) | 758 | if ((allbits % 10000) == 0) |
759 | printk("."); | 759 | printk("."); |
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h index 06d5020a2f60..986b2125b8f5 100644 --- a/drivers/infiniband/hw/ipath/ipath_kernel.h +++ b/drivers/infiniband/hw/ipath/ipath_kernel.h | |||
@@ -213,6 +213,8 @@ struct ipath_devdata { | |||
213 | void (*ipath_f_setextled)(struct ipath_devdata *, u64, u64); | 213 | void (*ipath_f_setextled)(struct ipath_devdata *, u64, u64); |
214 | /* fill out chip-specific fields */ | 214 | /* fill out chip-specific fields */ |
215 | int (*ipath_f_get_base_info)(struct ipath_portdata *, void *); | 215 | int (*ipath_f_get_base_info)(struct ipath_portdata *, void *); |
216 | /* free irq */ | ||
217 | void (*ipath_f_free_irq)(struct ipath_devdata *); | ||
216 | struct ipath_ibdev *verbs_dev; | 218 | struct ipath_ibdev *verbs_dev; |
217 | struct timer_list verbs_timer; | 219 | struct timer_list verbs_timer; |
218 | /* total dwords sent (summed from counter) */ | 220 | /* total dwords sent (summed from counter) */ |
@@ -328,6 +330,8 @@ struct ipath_devdata { | |||
328 | /* so we can rewrite it after a chip reset */ | 330 | /* so we can rewrite it after a chip reset */ |
329 | u32 ipath_pcibar1; | 331 | u32 ipath_pcibar1; |
330 | 332 | ||
333 | /* interrupt number */ | ||
334 | int ipath_irq; | ||
331 | /* HT/PCI Vendor ID (here for NodeInfo) */ | 335 | /* HT/PCI Vendor ID (here for NodeInfo) */ |
332 | u16 ipath_vendorid; | 336 | u16 ipath_vendorid; |
333 | /* HT/PCI Device ID (here for NodeInfo) */ | 337 | /* HT/PCI Device ID (here for NodeInfo) */ |
diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index d8d256dadddf..5800beeebb85 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c | |||
@@ -616,7 +616,7 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
616 | } else if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) | 616 | } else if ((bcs->skb = dev_alloc_skb(SBUFSIZE + HW_HDR_LEN)) != NULL) |
617 | skb_reserve(bcs->skb, HW_HDR_LEN); | 617 | skb_reserve(bcs->skb, HW_HDR_LEN); |
618 | else { | 618 | else { |
619 | gig_dbg(DEBUG_INIT, "could not allocate skb\n"); | 619 | warn("could not allocate skb\n"); |
620 | bcs->inputstate |= INS_skip_frame; | 620 | bcs->inputstate |= INS_skip_frame; |
621 | } | 621 | } |
622 | 622 | ||
diff --git a/drivers/isdn/hysdn/hysdn_sched.c b/drivers/isdn/hysdn/hysdn_sched.c index 1fadf0133e9b..18758772b744 100644 --- a/drivers/isdn/hysdn/hysdn_sched.c +++ b/drivers/isdn/hysdn/hysdn_sched.c | |||
@@ -155,21 +155,17 @@ hysdn_tx_cfgline(hysdn_card *card, unsigned char *line, unsigned short chan) | |||
155 | if (card->debug_flags & LOG_SCHED_ASYN) | 155 | if (card->debug_flags & LOG_SCHED_ASYN) |
156 | hysdn_addlog(card, "async tx-cfg chan=%d len=%d", chan, strlen(line) + 1); | 156 | hysdn_addlog(card, "async tx-cfg chan=%d len=%d", chan, strlen(line) + 1); |
157 | 157 | ||
158 | spin_lock_irqsave(&card->hysdn_lock, flags); | ||
159 | while (card->async_busy) { | 158 | while (card->async_busy) { |
160 | sti(); | ||
161 | 159 | ||
162 | if (card->debug_flags & LOG_SCHED_ASYN) | 160 | if (card->debug_flags & LOG_SCHED_ASYN) |
163 | hysdn_addlog(card, "async tx-cfg delayed"); | 161 | hysdn_addlog(card, "async tx-cfg delayed"); |
164 | 162 | ||
165 | msleep_interruptible(20); /* Timeout 20ms */ | 163 | msleep_interruptible(20); /* Timeout 20ms */ |
166 | if (!--cnt) { | 164 | if (!--cnt) |
167 | spin_unlock_irqrestore(&card->hysdn_lock, flags); | ||
168 | return (-ERR_ASYNC_TIME); /* timed out */ | 165 | return (-ERR_ASYNC_TIME); /* timed out */ |
169 | } | ||
170 | cli(); | ||
171 | } /* wait for buffer to become free */ | 166 | } /* wait for buffer to become free */ |
172 | 167 | ||
168 | spin_lock_irqsave(&card->hysdn_lock, flags); | ||
173 | strcpy(card->async_data, line); | 169 | strcpy(card->async_data, line); |
174 | card->async_len = strlen(line) + 1; | 170 | card->async_len = strlen(line) + 1; |
175 | card->async_channel = chan; | 171 | card->async_channel = chan; |
@@ -177,30 +173,23 @@ hysdn_tx_cfgline(hysdn_card *card, unsigned char *line, unsigned short chan) | |||
177 | 173 | ||
178 | /* now queue the task */ | 174 | /* now queue the task */ |
179 | schedule_work(&card->irq_queue); | 175 | schedule_work(&card->irq_queue); |
180 | sti(); | 176 | spin_unlock_irqrestore(&card->hysdn_lock, flags); |
181 | 177 | ||
182 | if (card->debug_flags & LOG_SCHED_ASYN) | 178 | if (card->debug_flags & LOG_SCHED_ASYN) |
183 | hysdn_addlog(card, "async tx-cfg data queued"); | 179 | hysdn_addlog(card, "async tx-cfg data queued"); |
184 | 180 | ||
185 | cnt++; /* short delay */ | 181 | cnt++; /* short delay */ |
186 | cli(); | ||
187 | 182 | ||
188 | while (card->async_busy) { | 183 | while (card->async_busy) { |
189 | sti(); | ||
190 | 184 | ||
191 | if (card->debug_flags & LOG_SCHED_ASYN) | 185 | if (card->debug_flags & LOG_SCHED_ASYN) |
192 | hysdn_addlog(card, "async tx-cfg waiting for tx-ready"); | 186 | hysdn_addlog(card, "async tx-cfg waiting for tx-ready"); |
193 | 187 | ||
194 | msleep_interruptible(20); /* Timeout 20ms */ | 188 | msleep_interruptible(20); /* Timeout 20ms */ |
195 | if (!--cnt) { | 189 | if (!--cnt) |
196 | spin_unlock_irqrestore(&card->hysdn_lock, flags); | ||
197 | return (-ERR_ASYNC_TIME); /* timed out */ | 190 | return (-ERR_ASYNC_TIME); /* timed out */ |
198 | } | ||
199 | cli(); | ||
200 | } /* wait for buffer to become free again */ | 191 | } /* wait for buffer to become free again */ |
201 | 192 | ||
202 | spin_unlock_irqrestore(&card->hysdn_lock, flags); | ||
203 | |||
204 | if (card->debug_flags & LOG_SCHED_ASYN) | 193 | if (card->debug_flags & LOG_SCHED_ASYN) |
205 | hysdn_addlog(card, "async tx-cfg data send"); | 194 | hysdn_addlog(card, "async tx-cfg data send"); |
206 | 195 | ||
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index d13bb15a8a02..4510ad8f971c 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c | |||
@@ -606,9 +606,14 @@ static struct hash_cell *__find_device_hash_cell(struct dm_ioctl *param) | |||
606 | return __get_name_cell(param->name); | 606 | return __get_name_cell(param->name); |
607 | 607 | ||
608 | md = dm_get_md(huge_decode_dev(param->dev)); | 608 | md = dm_get_md(huge_decode_dev(param->dev)); |
609 | if (md) | 609 | if (!md) |
610 | mdptr = dm_get_mdptr(md); | 610 | goto out; |
611 | 611 | ||
612 | mdptr = dm_get_mdptr(md); | ||
613 | if (!mdptr) | ||
614 | dm_put(md); | ||
615 | |||
616 | out: | ||
612 | return mdptr; | 617 | return mdptr; |
613 | } | 618 | } |
614 | 619 | ||
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index 659224cb7c53..48a653b3f518 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | static struct workqueue_struct *_kmirrord_wq; | 25 | static struct workqueue_struct *_kmirrord_wq; |
26 | static struct work_struct _kmirrord_work; | 26 | static struct work_struct _kmirrord_work; |
27 | static DECLARE_WAIT_QUEUE_HEAD(_kmirrord_recovery_stopped); | ||
27 | 28 | ||
28 | static inline void wake(void) | 29 | static inline void wake(void) |
29 | { | 30 | { |
@@ -83,6 +84,7 @@ struct region_hash { | |||
83 | struct list_head *buckets; | 84 | struct list_head *buckets; |
84 | 85 | ||
85 | spinlock_t region_lock; | 86 | spinlock_t region_lock; |
87 | atomic_t recovery_in_flight; | ||
86 | struct semaphore recovery_count; | 88 | struct semaphore recovery_count; |
87 | struct list_head clean_regions; | 89 | struct list_head clean_regions; |
88 | struct list_head quiesced_regions; | 90 | struct list_head quiesced_regions; |
@@ -191,6 +193,7 @@ static int rh_init(struct region_hash *rh, struct mirror_set *ms, | |||
191 | 193 | ||
192 | spin_lock_init(&rh->region_lock); | 194 | spin_lock_init(&rh->region_lock); |
193 | sema_init(&rh->recovery_count, 0); | 195 | sema_init(&rh->recovery_count, 0); |
196 | atomic_set(&rh->recovery_in_flight, 0); | ||
194 | INIT_LIST_HEAD(&rh->clean_regions); | 197 | INIT_LIST_HEAD(&rh->clean_regions); |
195 | INIT_LIST_HEAD(&rh->quiesced_regions); | 198 | INIT_LIST_HEAD(&rh->quiesced_regions); |
196 | INIT_LIST_HEAD(&rh->recovered_regions); | 199 | INIT_LIST_HEAD(&rh->recovered_regions); |
@@ -382,6 +385,8 @@ static void rh_update_states(struct region_hash *rh) | |||
382 | rh->log->type->clear_region(rh->log, reg->key); | 385 | rh->log->type->clear_region(rh->log, reg->key); |
383 | rh->log->type->complete_resync_work(rh->log, reg->key, 1); | 386 | rh->log->type->complete_resync_work(rh->log, reg->key, 1); |
384 | dispatch_bios(rh->ms, ®->delayed_bios); | 387 | dispatch_bios(rh->ms, ®->delayed_bios); |
388 | if (atomic_dec_and_test(&rh->recovery_in_flight)) | ||
389 | wake_up_all(&_kmirrord_recovery_stopped); | ||
385 | up(&rh->recovery_count); | 390 | up(&rh->recovery_count); |
386 | mempool_free(reg, rh->region_pool); | 391 | mempool_free(reg, rh->region_pool); |
387 | } | 392 | } |
@@ -502,11 +507,21 @@ static int __rh_recovery_prepare(struct region_hash *rh) | |||
502 | 507 | ||
503 | static void rh_recovery_prepare(struct region_hash *rh) | 508 | static void rh_recovery_prepare(struct region_hash *rh) |
504 | { | 509 | { |
505 | while (!down_trylock(&rh->recovery_count)) | 510 | /* Extra reference to avoid race with rh_stop_recovery */ |
511 | atomic_inc(&rh->recovery_in_flight); | ||
512 | |||
513 | while (!down_trylock(&rh->recovery_count)) { | ||
514 | atomic_inc(&rh->recovery_in_flight); | ||
506 | if (__rh_recovery_prepare(rh) <= 0) { | 515 | if (__rh_recovery_prepare(rh) <= 0) { |
516 | atomic_dec(&rh->recovery_in_flight); | ||
507 | up(&rh->recovery_count); | 517 | up(&rh->recovery_count); |
508 | break; | 518 | break; |
509 | } | 519 | } |
520 | } | ||
521 | |||
522 | /* Drop the extra reference */ | ||
523 | if (atomic_dec_and_test(&rh->recovery_in_flight)) | ||
524 | wake_up_all(&_kmirrord_recovery_stopped); | ||
510 | } | 525 | } |
511 | 526 | ||
512 | /* | 527 | /* |
@@ -1177,6 +1192,11 @@ static void mirror_postsuspend(struct dm_target *ti) | |||
1177 | struct dirty_log *log = ms->rh.log; | 1192 | struct dirty_log *log = ms->rh.log; |
1178 | 1193 | ||
1179 | rh_stop_recovery(&ms->rh); | 1194 | rh_stop_recovery(&ms->rh); |
1195 | |||
1196 | /* Wait for all I/O we generated to complete */ | ||
1197 | wait_event(_kmirrord_recovery_stopped, | ||
1198 | !atomic_read(&ms->rh.recovery_in_flight)); | ||
1199 | |||
1180 | if (log->type->suspend && log->type->suspend(log)) | 1200 | if (log->type->suspend && log->type->suspend(log)) |
1181 | /* FIXME: need better error handling */ | 1201 | /* FIXME: need better error handling */ |
1182 | DMWARN("log suspend failed"); | 1202 | DMWARN("log suspend failed"); |
diff --git a/drivers/md/dm-round-robin.c b/drivers/md/dm-round-robin.c index c5a16c550122..6f9fcd4db9b5 100644 --- a/drivers/md/dm-round-robin.c +++ b/drivers/md/dm-round-robin.c | |||
@@ -136,7 +136,7 @@ static int rr_add_path(struct path_selector *ps, struct path *path, | |||
136 | 136 | ||
137 | path->pscontext = pi; | 137 | path->pscontext = pi; |
138 | 138 | ||
139 | list_add(&pi->list, &s->valid_paths); | 139 | list_add_tail(&pi->list, &s->valid_paths); |
140 | 140 | ||
141 | return 0; | 141 | return 0; |
142 | } | 142 | } |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index b5764a86c8b5..fc4f743f3b53 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -1285,7 +1285,7 @@ int dm_suspend(struct mapped_device *md, int do_lockfs) | |||
1285 | down(&md->suspend_lock); | 1285 | down(&md->suspend_lock); |
1286 | 1286 | ||
1287 | if (dm_suspended(md)) | 1287 | if (dm_suspended(md)) |
1288 | goto out; | 1288 | goto out_unlock; |
1289 | 1289 | ||
1290 | map = dm_get_table(md); | 1290 | map = dm_get_table(md); |
1291 | 1291 | ||
@@ -1361,6 +1361,8 @@ out: | |||
1361 | } | 1361 | } |
1362 | 1362 | ||
1363 | dm_table_put(map); | 1363 | dm_table_put(map); |
1364 | |||
1365 | out_unlock: | ||
1364 | up(&md->suspend_lock); | 1366 | up(&md->suspend_lock); |
1365 | return r; | 1367 | return r; |
1366 | } | 1368 | } |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 50ab4a936e30..8cbf9c9df1c3 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3200,6 +3200,7 @@ static int do_md_run(mddev_t * mddev) | |||
3200 | 3200 | ||
3201 | mddev->changed = 1; | 3201 | mddev->changed = 1; |
3202 | md_new_event(mddev); | 3202 | md_new_event(mddev); |
3203 | kobject_uevent(&mddev->gendisk->kobj, KOBJ_CHANGE); | ||
3203 | return 0; | 3204 | return 0; |
3204 | } | 3205 | } |
3205 | 3206 | ||
@@ -4485,6 +4486,7 @@ static int md_thread(void * arg) | |||
4485 | * many dirty RAID5 blocks. | 4486 | * many dirty RAID5 blocks. |
4486 | */ | 4487 | */ |
4487 | 4488 | ||
4489 | current->flags |= PF_NOFREEZE; | ||
4488 | allow_signal(SIGKILL); | 4490 | allow_signal(SIGKILL); |
4489 | while (!kthread_should_stop()) { | 4491 | while (!kthread_should_stop()) { |
4490 | 4492 | ||
@@ -4501,7 +4503,6 @@ static int md_thread(void * arg) | |||
4501 | test_bit(THREAD_WAKEUP, &thread->flags) | 4503 | test_bit(THREAD_WAKEUP, &thread->flags) |
4502 | || kthread_should_stop(), | 4504 | || kthread_should_stop(), |
4503 | thread->timeout); | 4505 | thread->timeout); |
4504 | try_to_freeze(); | ||
4505 | 4506 | ||
4506 | clear_bit(THREAD_WAKEUP, &thread->flags); | 4507 | clear_bit(THREAD_WAKEUP, &thread->flags); |
4507 | 4508 | ||
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index e14f45780720..69c3e201fa3b 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -3659,7 +3659,7 @@ static void end_reshape(raid5_conf_t *conf) | |||
3659 | bdev = bdget_disk(conf->mddev->gendisk, 0); | 3659 | bdev = bdget_disk(conf->mddev->gendisk, 0); |
3660 | if (bdev) { | 3660 | if (bdev) { |
3661 | mutex_lock(&bdev->bd_inode->i_mutex); | 3661 | mutex_lock(&bdev->bd_inode->i_mutex); |
3662 | i_size_write(bdev->bd_inode, conf->mddev->array_size << 10); | 3662 | i_size_write(bdev->bd_inode, (loff_t)conf->mddev->array_size << 10); |
3663 | mutex_unlock(&bdev->bd_inode->i_mutex); | 3663 | mutex_unlock(&bdev->bd_inode->i_mutex); |
3664 | bdput(bdev); | 3664 | bdput(bdev); |
3665 | } | 3665 | } |
diff --git a/drivers/media/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c index d9953f7a8b6b..5297a365c928 100644 --- a/drivers/media/common/saa7146_i2c.c +++ b/drivers/media/common/saa7146_i2c.c | |||
@@ -217,11 +217,9 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
217 | } | 217 | } |
218 | /* wait until we get a transfer done or error */ | 218 | /* wait until we get a transfer done or error */ |
219 | timeout = jiffies + HZ/100 + 1; /* 10ms */ | 219 | timeout = jiffies + HZ/100 + 1; /* 10ms */ |
220 | /* first read usually delivers bogus results... */ | ||
221 | saa7146_i2c_status(dev); | ||
220 | while(1) { | 222 | while(1) { |
221 | /** | ||
222 | * first read usually delivers bogus results... | ||
223 | */ | ||
224 | saa7146_i2c_status(dev); | ||
225 | status = saa7146_i2c_status(dev); | 223 | status = saa7146_i2c_status(dev); |
226 | if ((status & 0x3) != 1) | 224 | if ((status & 0x3) != 1) |
227 | break; | 225 | break; |
@@ -232,10 +230,10 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
232 | DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n")); | 230 | DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n")); |
233 | return -EIO; | 231 | return -EIO; |
234 | } | 232 | } |
235 | if ((++trial < 20) && short_delay) | 233 | if (++trial < 50 && short_delay) |
236 | udelay(10); | 234 | udelay(10); |
237 | else | 235 | else |
238 | msleep(1); | 236 | msleep(1); |
239 | } | 237 | } |
240 | } | 238 | } |
241 | 239 | ||
diff --git a/drivers/media/dvb/b2c2/flexcop-usb.c b/drivers/media/dvb/b2c2/flexcop-usb.c index 2853ea1bdaf1..87fb75f0d1cf 100644 --- a/drivers/media/dvb/b2c2/flexcop-usb.c +++ b/drivers/media/dvb/b2c2/flexcop-usb.c | |||
@@ -246,7 +246,7 @@ static int flexcop_usb_i2c_req(struct flexcop_usb *fc_usb, | |||
246 | wIndex = (chipaddr << 8 ) | addr; | 246 | wIndex = (chipaddr << 8 ) | addr; |
247 | 247 | ||
248 | deb_i2c("i2c %2d: %02x %02x %02x %02x %02x %02x\n",func,request_type,req, | 248 | deb_i2c("i2c %2d: %02x %02x %02x %02x %02x %02x\n",func,request_type,req, |
249 | ((wValue && 0xff) << 8),wValue >> 8,((wIndex && 0xff) << 8),wIndex >> 8); | 249 | wValue & 0xff, wValue >> 8, wIndex & 0xff, wIndex >> 8); |
250 | 250 | ||
251 | len = usb_control_msg(fc_usb->udev,pipe, | 251 | len = usb_control_msg(fc_usb->udev,pipe, |
252 | req, | 252 | req, |
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig index 2cc5caa26a0a..a263b3f3c21d 100644 --- a/drivers/media/dvb/dvb-usb/Kconfig +++ b/drivers/media/dvb/dvb-usb/Kconfig | |||
@@ -26,7 +26,7 @@ config DVB_USB_A800 | |||
26 | tristate "AVerMedia AverTV DVB-T USB 2.0 (A800)" | 26 | tristate "AVerMedia AverTV DVB-T USB 2.0 (A800)" |
27 | depends on DVB_USB | 27 | depends on DVB_USB |
28 | select DVB_DIB3000MC | 28 | select DVB_DIB3000MC |
29 | select DVB_TUNER_MT2060 | 29 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
30 | help | 30 | help |
31 | Say Y here to support the AVerMedia AverTV DVB-T USB 2.0 (A800) receiver. | 31 | Say Y here to support the AVerMedia AverTV DVB-T USB 2.0 (A800) receiver. |
32 | 32 | ||
@@ -34,7 +34,7 @@ config DVB_USB_DIBUSB_MB | |||
34 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-B) (see help for device list)" | 34 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-B) (see help for device list)" |
35 | depends on DVB_USB | 35 | depends on DVB_USB |
36 | select DVB_DIB3000MB | 36 | select DVB_DIB3000MB |
37 | select DVB_TUNER_MT2060 | 37 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
38 | help | 38 | help |
39 | Support for USB 1.1 and 2.0 DVB-T receivers based on reference designs made by | 39 | Support for USB 1.1 and 2.0 DVB-T receivers based on reference designs made by |
40 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator. | 40 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator. |
@@ -55,7 +55,7 @@ config DVB_USB_DIBUSB_MC | |||
55 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)" | 55 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)" |
56 | depends on DVB_USB | 56 | depends on DVB_USB |
57 | select DVB_DIB3000MC | 57 | select DVB_DIB3000MC |
58 | select DVB_TUNER_MT2060 | 58 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
59 | help | 59 | help |
60 | Support for USB2.0 DVB-T receivers based on reference designs made by | 60 | Support for USB2.0 DVB-T receivers based on reference designs made by |
61 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator. | 61 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator. |
@@ -70,7 +70,7 @@ config DVB_USB_DIB0700 | |||
70 | tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" | 70 | tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" |
71 | depends on DVB_USB | 71 | depends on DVB_USB |
72 | select DVB_DIB3000MC | 72 | select DVB_DIB3000MC |
73 | select DVB_TUNER_MT2060 | 73 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
74 | help | 74 | help |
75 | Support for USB2.0/1.1 DVB receivers based on the DiB0700 USB bridge. The | 75 | Support for USB2.0/1.1 DVB receivers based on the DiB0700 USB bridge. The |
76 | USB bridge is also present in devices having the DiB7700 DVB-T-USB | 76 | USB bridge is also present in devices having the DiB7700 DVB-T-USB |
@@ -87,7 +87,7 @@ config DVB_USB_UMT_010 | |||
87 | tristate "HanfTek UMT-010 DVB-T USB2.0 support" | 87 | tristate "HanfTek UMT-010 DVB-T USB2.0 support" |
88 | depends on DVB_USB | 88 | depends on DVB_USB |
89 | select DVB_DIB3000MC | 89 | select DVB_DIB3000MC |
90 | select DVB_TUNER_MT2060 | 90 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
91 | help | 91 | help |
92 | Say Y here to support the HanfTek UMT-010 USB2.0 stick-sized DVB-T receiver. | 92 | Say Y here to support the HanfTek UMT-010 USB2.0 stick-sized DVB-T receiver. |
93 | 93 | ||
@@ -153,7 +153,7 @@ config DVB_USB_NOVA_T_USB2 | |||
153 | tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support" | 153 | tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support" |
154 | depends on DVB_USB | 154 | depends on DVB_USB |
155 | select DVB_DIB3000MC | 155 | select DVB_DIB3000MC |
156 | select DVB_TUNER_MT2060 | 156 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
157 | help | 157 | help |
158 | Say Y here to support the Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 receiver. | 158 | Say Y here to support the Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 receiver. |
159 | 159 | ||
diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig index 080fa257a0bc..aebb8d6f26f8 100644 --- a/drivers/media/dvb/frontends/Kconfig +++ b/drivers/media/dvb/frontends/Kconfig | |||
@@ -276,6 +276,8 @@ config DVB_TDA826X | |||
276 | 276 | ||
277 | config DVB_TUNER_MT2060 | 277 | config DVB_TUNER_MT2060 |
278 | tristate "Microtune MT2060 silicon IF tuner" | 278 | tristate "Microtune MT2060 silicon IF tuner" |
279 | depends on I2C | ||
280 | default m if DVB_FE_CUSTOMISE | ||
279 | help | 281 | help |
280 | A driver for the silicon IF tuner MT2060 from Microtune. | 282 | A driver for the silicon IF tuner MT2060 from Microtune. |
281 | 283 | ||
diff --git a/drivers/media/dvb/frontends/bcm3510.h b/drivers/media/dvb/frontends/bcm3510.h index 6dfa839a7022..7e4f95e1734b 100644 --- a/drivers/media/dvb/frontends/bcm3510.h +++ b/drivers/media/dvb/frontends/bcm3510.h | |||
@@ -34,7 +34,7 @@ struct bcm3510_config | |||
34 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 34 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_BCM3510) || defined(CONFIG_DVB_BCM3510_MODULE) | 37 | #if defined(CONFIG_DVB_BCM3510) || (defined(CONFIG_DVB_BCM3510_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config, | 38 | extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/cx22700.h b/drivers/media/dvb/frontends/cx22700.h index 10286cc29fb4..7ac33690cdcc 100644 --- a/drivers/media/dvb/frontends/cx22700.h +++ b/drivers/media/dvb/frontends/cx22700.h | |||
@@ -31,7 +31,7 @@ struct cx22700_config | |||
31 | u8 demod_address; | 31 | u8 demod_address; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | #if defined(CONFIG_DVB_CX22700) || defined(CONFIG_DVB_CX22700_MODULE) | 34 | #if defined(CONFIG_DVB_CX22700) || (defined(CONFIG_DVB_CX22700_MODULE) && defined(MODULE)) |
35 | extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config, | 35 | extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config, |
36 | struct i2c_adapter* i2c); | 36 | struct i2c_adapter* i2c); |
37 | #else | 37 | #else |
diff --git a/drivers/media/dvb/frontends/cx22702.h b/drivers/media/dvb/frontends/cx22702.h index bc217ddf02c0..9cd64da6ee40 100644 --- a/drivers/media/dvb/frontends/cx22702.h +++ b/drivers/media/dvb/frontends/cx22702.h | |||
@@ -41,7 +41,7 @@ struct cx22702_config | |||
41 | u8 output_mode; | 41 | u8 output_mode; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_CX22702) || defined(CONFIG_DVB_CX22702_MODULE) | 44 | #if defined(CONFIG_DVB_CX22702) || (defined(CONFIG_DVB_CX22702_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config, | 45 | extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config, |
46 | struct i2c_adapter* i2c); | 46 | struct i2c_adapter* i2c); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/cx24110.h b/drivers/media/dvb/frontends/cx24110.h index c9d5ae250ebb..0ca3af4db513 100644 --- a/drivers/media/dvb/frontends/cx24110.h +++ b/drivers/media/dvb/frontends/cx24110.h | |||
@@ -41,7 +41,7 @@ static inline int cx24110_pll_write(struct dvb_frontend *fe, u32 val) { | |||
41 | return r; | 41 | return r; |
42 | } | 42 | } |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_CX24110) || defined(CONFIG_DVB_CX24110_MODULE) | 44 | #if defined(CONFIG_DVB_CX24110) || (defined(CONFIG_DVB_CX24110_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, | 45 | extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, |
46 | struct i2c_adapter* i2c); | 46 | struct i2c_adapter* i2c); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/cx24123.h b/drivers/media/dvb/frontends/cx24123.h index 57a1dae1dc40..84f9e4f5c15e 100644 --- a/drivers/media/dvb/frontends/cx24123.h +++ b/drivers/media/dvb/frontends/cx24123.h | |||
@@ -35,7 +35,7 @@ struct cx24123_config | |||
35 | int lnb_polarity; | 35 | int lnb_polarity; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_CX24123) || defined(CONFIG_DVB_CX24123_MODULE) | 38 | #if defined(CONFIG_DVB_CX24123) || (defined(CONFIG_DVB_CX24123_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config, | 39 | extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/dib3000.h b/drivers/media/dvb/frontends/dib3000.h index 0caac3f0f279..a6d3854a67bc 100644 --- a/drivers/media/dvb/frontends/dib3000.h +++ b/drivers/media/dvb/frontends/dib3000.h | |||
@@ -41,7 +41,7 @@ struct dib_fe_xfer_ops | |||
41 | int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl); | 41 | int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl); |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_DIB3000MB) || defined(CONFIG_DVB_DIB3000MB_MODULE) | 44 | #if defined(CONFIG_DVB_DIB3000MB) || (defined(CONFIG_DVB_DIB3000MB_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, | 45 | extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, |
46 | struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops); | 46 | struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/dib3000mc.h b/drivers/media/dvb/frontends/dib3000mc.h index 0d6fdef77538..72d4757601d8 100644 --- a/drivers/media/dvb/frontends/dib3000mc.h +++ b/drivers/media/dvb/frontends/dib3000mc.h | |||
@@ -39,7 +39,7 @@ struct dib3000mc_config { | |||
39 | #define DEFAULT_DIB3000MC_I2C_ADDRESS 16 | 39 | #define DEFAULT_DIB3000MC_I2C_ADDRESS 16 |
40 | #define DEFAULT_DIB3000P_I2C_ADDRESS 24 | 40 | #define DEFAULT_DIB3000P_I2C_ADDRESS 24 |
41 | 41 | ||
42 | #if defined(CONFIG_DVB_DIB3000MC) || defined(CONFIG_DVB_DIB3000MC_MODULE) | 42 | #if defined(CONFIG_DVB_DIB3000MC) || (defined(CONFIG_DVB_DIB3000MC_MODULE) && defined(MODULE)) |
43 | extern struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg); | 43 | extern struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg); |
44 | #else | 44 | #else |
45 | static inline struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg) | 45 | static inline struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg) |
diff --git a/drivers/media/dvb/frontends/isl6421.h b/drivers/media/dvb/frontends/isl6421.h index 1916e3eb2df3..ea7f78a7d3cd 100644 --- a/drivers/media/dvb/frontends/isl6421.h +++ b/drivers/media/dvb/frontends/isl6421.h | |||
@@ -39,7 +39,7 @@ | |||
39 | #define ISL6421_ISEL1 0x20 | 39 | #define ISL6421_ISEL1 0x20 |
40 | #define ISL6421_DCL 0x40 | 40 | #define ISL6421_DCL 0x40 |
41 | 41 | ||
42 | #if defined(CONFIG_DVB_ISL6421) || defined(CONFIG_DVB_ISL6421_MODULE) | 42 | #if defined(CONFIG_DVB_ISL6421) || (defined(CONFIG_DVB_ISL6421_MODULE) && defined(MODULE)) |
43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ | 43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ |
44 | extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, | 44 | extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, |
45 | u8 override_set, u8 override_clear); | 45 | u8 override_set, u8 override_clear); |
diff --git a/drivers/media/dvb/frontends/l64781.h b/drivers/media/dvb/frontends/l64781.h index 21ba4a230760..cd15f76ff28d 100644 --- a/drivers/media/dvb/frontends/l64781.h +++ b/drivers/media/dvb/frontends/l64781.h | |||
@@ -31,7 +31,7 @@ struct l64781_config | |||
31 | u8 demod_address; | 31 | u8 demod_address; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | #if defined(CONFIG_DVB_L64781) || defined(CONFIG_DVB_L64781_MODULE) | 34 | #if defined(CONFIG_DVB_L64781) || (defined(CONFIG_DVB_L64781_MODULE) && defined(MODULE)) |
35 | extern struct dvb_frontend* l64781_attach(const struct l64781_config* config, | 35 | extern struct dvb_frontend* l64781_attach(const struct l64781_config* config, |
36 | struct i2c_adapter* i2c); | 36 | struct i2c_adapter* i2c); |
37 | #else | 37 | #else |
diff --git a/drivers/media/dvb/frontends/lgdt330x.h b/drivers/media/dvb/frontends/lgdt330x.h index 3f96b485584c..995059004b10 100644 --- a/drivers/media/dvb/frontends/lgdt330x.h +++ b/drivers/media/dvb/frontends/lgdt330x.h | |||
@@ -52,7 +52,7 @@ struct lgdt330x_config | |||
52 | int clock_polarity_flip; | 52 | int clock_polarity_flip; |
53 | }; | 53 | }; |
54 | 54 | ||
55 | #if defined(CONFIG_DVB_LGDT330X) || defined(CONFIG_DVB_LGDT330X_MODULE) | 55 | #if defined(CONFIG_DVB_LGDT330X) || (defined(CONFIG_DVB_LGDT330X_MODULE) && defined(MODULE)) |
56 | extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, | 56 | extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, |
57 | struct i2c_adapter* i2c); | 57 | struct i2c_adapter* i2c); |
58 | #else | 58 | #else |
diff --git a/drivers/media/dvb/frontends/lnbp21.h b/drivers/media/dvb/frontends/lnbp21.h index 1fe1dd179312..68906acf7d63 100644 --- a/drivers/media/dvb/frontends/lnbp21.h +++ b/drivers/media/dvb/frontends/lnbp21.h | |||
@@ -39,7 +39,7 @@ | |||
39 | 39 | ||
40 | #include <linux/dvb/frontend.h> | 40 | #include <linux/dvb/frontend.h> |
41 | 41 | ||
42 | #if defined(CONFIG_DVB_LNBP21) || defined(CONFIG_DVB_LNBP21_MODULE) | 42 | #if defined(CONFIG_DVB_LNBP21) || (defined(CONFIG_DVB_LNBP21_MODULE) && defined(MODULE)) |
43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ | 43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ |
44 | extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear); | 44 | extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear); |
45 | #else | 45 | #else |
diff --git a/drivers/media/dvb/frontends/mt2060.h b/drivers/media/dvb/frontends/mt2060.h index 34a37c2b556f..0a86eab3a954 100644 --- a/drivers/media/dvb/frontends/mt2060.h +++ b/drivers/media/dvb/frontends/mt2060.h | |||
@@ -30,6 +30,14 @@ struct mt2060_config { | |||
30 | u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */ | 30 | u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */ |
31 | }; | 31 | }; |
32 | 32 | ||
33 | #if defined(CONFIG_DVB_TUNER_MT2060) || (defined(CONFIG_DVB_TUNER_MT2060_MODULE) && defined(MODULE)) | ||
33 | extern struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1); | 34 | extern struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1); |
35 | #else | ||
36 | static inline struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1) | ||
37 | { | ||
38 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__); | ||
39 | return NULL; | ||
40 | } | ||
41 | #endif // CONFIG_DVB_TUNER_MT2060 | ||
34 | 42 | ||
35 | #endif | 43 | #endif |
diff --git a/drivers/media/dvb/frontends/mt312.h b/drivers/media/dvb/frontends/mt312.h index 7112fb4d58ac..cf9a1505ad4b 100644 --- a/drivers/media/dvb/frontends/mt312.h +++ b/drivers/media/dvb/frontends/mt312.h | |||
@@ -34,7 +34,7 @@ struct mt312_config | |||
34 | u8 demod_address; | 34 | u8 demod_address; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_MT312) || defined(CONFIG_DVB_MT312_MODULE) | 37 | #if defined(CONFIG_DVB_MT312) || (defined(CONFIG_DVB_MT312_MODULE) && defined(MODULE)) |
38 | struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config, | 38 | struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/mt352.h b/drivers/media/dvb/frontends/mt352.h index 0035c2e2d7c2..e9964081fd84 100644 --- a/drivers/media/dvb/frontends/mt352.h +++ b/drivers/media/dvb/frontends/mt352.h | |||
@@ -51,7 +51,7 @@ struct mt352_config | |||
51 | int (*demod_init)(struct dvb_frontend* fe); | 51 | int (*demod_init)(struct dvb_frontend* fe); |
52 | }; | 52 | }; |
53 | 53 | ||
54 | #if defined(CONFIG_DVB_MT352) || defined(CONFIG_DVB_MT352_MODULE) | 54 | #if defined(CONFIG_DVB_MT352) || (defined(CONFIG_DVB_MT352_MODULE) && defined(MODULE)) |
55 | extern struct dvb_frontend* mt352_attach(const struct mt352_config* config, | 55 | extern struct dvb_frontend* mt352_attach(const struct mt352_config* config, |
56 | struct i2c_adapter* i2c); | 56 | struct i2c_adapter* i2c); |
57 | #else | 57 | #else |
diff --git a/drivers/media/dvb/frontends/nxt200x.h b/drivers/media/dvb/frontends/nxt200x.h index 2eb220e98062..28bc5591b319 100644 --- a/drivers/media/dvb/frontends/nxt200x.h +++ b/drivers/media/dvb/frontends/nxt200x.h | |||
@@ -45,7 +45,7 @@ struct nxt200x_config | |||
45 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); | 45 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); |
46 | }; | 46 | }; |
47 | 47 | ||
48 | #if defined(CONFIG_DVB_NXT200X) || defined(CONFIG_DVB_NXT200X_MODULE) | 48 | #if defined(CONFIG_DVB_NXT200X) || (defined(CONFIG_DVB_NXT200X_MODULE) && defined(MODULE)) |
49 | extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config, | 49 | extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config, |
50 | struct i2c_adapter* i2c); | 50 | struct i2c_adapter* i2c); |
51 | #else | 51 | #else |
diff --git a/drivers/media/dvb/frontends/nxt6000.h b/drivers/media/dvb/frontends/nxt6000.h index 9397393a6bd1..13d22518356e 100644 --- a/drivers/media/dvb/frontends/nxt6000.h +++ b/drivers/media/dvb/frontends/nxt6000.h | |||
@@ -33,7 +33,7 @@ struct nxt6000_config | |||
33 | u8 clock_inversion:1; | 33 | u8 clock_inversion:1; |
34 | }; | 34 | }; |
35 | 35 | ||
36 | #if defined(CONFIG_DVB_NXT6000) || defined(CONFIG_DVB_NXT6000_MODULE) | 36 | #if defined(CONFIG_DVB_NXT6000) || (defined(CONFIG_DVB_NXT6000_MODULE) && defined(MODULE)) |
37 | extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, | 37 | extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, |
38 | struct i2c_adapter* i2c); | 38 | struct i2c_adapter* i2c); |
39 | #else | 39 | #else |
diff --git a/drivers/media/dvb/frontends/or51132.h b/drivers/media/dvb/frontends/or51132.h index 9718be4fb835..add24f0a743b 100644 --- a/drivers/media/dvb/frontends/or51132.h +++ b/drivers/media/dvb/frontends/or51132.h | |||
@@ -34,7 +34,7 @@ struct or51132_config | |||
34 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); | 34 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_OR51132) || defined(CONFIG_DVB_OR51132_MODULE) | 37 | #if defined(CONFIG_DVB_OR51132) || (defined(CONFIG_DVB_OR51132_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend* or51132_attach(const struct or51132_config* config, | 38 | extern struct dvb_frontend* or51132_attach(const struct or51132_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/or51211.h b/drivers/media/dvb/frontends/or51211.h index 10a5419f9e00..8aad8402d615 100644 --- a/drivers/media/dvb/frontends/or51211.h +++ b/drivers/media/dvb/frontends/or51211.h | |||
@@ -37,7 +37,7 @@ struct or51211_config | |||
37 | void (*sleep)(struct dvb_frontend * fe); | 37 | void (*sleep)(struct dvb_frontend * fe); |
38 | }; | 38 | }; |
39 | 39 | ||
40 | #if defined(CONFIG_DVB_OR51211) || defined(CONFIG_DVB_OR51211_MODULE) | 40 | #if defined(CONFIG_DVB_OR51211) || (defined(CONFIG_DVB_OR51211_MODULE) && defined(MODULE)) |
41 | extern struct dvb_frontend* or51211_attach(const struct or51211_config* config, | 41 | extern struct dvb_frontend* or51211_attach(const struct or51211_config* config, |
42 | struct i2c_adapter* i2c); | 42 | struct i2c_adapter* i2c); |
43 | #else | 43 | #else |
diff --git a/drivers/media/dvb/frontends/s5h1420.h b/drivers/media/dvb/frontends/s5h1420.h index efc54d7f3c55..1555870f7226 100644 --- a/drivers/media/dvb/frontends/s5h1420.h +++ b/drivers/media/dvb/frontends/s5h1420.h | |||
@@ -34,7 +34,7 @@ struct s5h1420_config | |||
34 | u8 invert:1; | 34 | u8 invert:1; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_S5H1420) || defined(CONFIG_DVB_S5H1420_MODULE) | 37 | #if defined(CONFIG_DVB_S5H1420) || (defined(CONFIG_DVB_S5H1420_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config, | 38 | extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/sp8870.h b/drivers/media/dvb/frontends/sp8870.h index 4cf27d3b10f2..909cefe7139e 100644 --- a/drivers/media/dvb/frontends/sp8870.h +++ b/drivers/media/dvb/frontends/sp8870.h | |||
@@ -35,7 +35,7 @@ struct sp8870_config | |||
35 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 35 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_SP8870) || defined(CONFIG_DVB_SP8870_MODULE) | 38 | #if defined(CONFIG_DVB_SP8870) || (defined(CONFIG_DVB_SP8870_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config, | 39 | extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/sp887x.h b/drivers/media/dvb/frontends/sp887x.h index cab7ea644dfa..7ee78d7d916d 100644 --- a/drivers/media/dvb/frontends/sp887x.h +++ b/drivers/media/dvb/frontends/sp887x.h | |||
@@ -17,7 +17,7 @@ struct sp887x_config | |||
17 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 17 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
18 | }; | 18 | }; |
19 | 19 | ||
20 | #if defined(CONFIG_DVB_SP887X) || defined(CONFIG_DVB_SP887X_MODULE) | 20 | #if defined(CONFIG_DVB_SP887X) || (defined(CONFIG_DVB_SP887X_MODULE) && defined(MODULE)) |
21 | extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config, | 21 | extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config, |
22 | struct i2c_adapter* i2c); | 22 | struct i2c_adapter* i2c); |
23 | #else | 23 | #else |
diff --git a/drivers/media/dvb/frontends/stv0297.h b/drivers/media/dvb/frontends/stv0297.h index 760b80db43a5..69f4515df2b9 100644 --- a/drivers/media/dvb/frontends/stv0297.h +++ b/drivers/media/dvb/frontends/stv0297.h | |||
@@ -42,7 +42,7 @@ struct stv0297_config | |||
42 | u8 stop_during_read:1; | 42 | u8 stop_during_read:1; |
43 | }; | 43 | }; |
44 | 44 | ||
45 | #if defined(CONFIG_DVB_STV0297) || defined(CONFIG_DVB_STV0297_MODULE) | 45 | #if defined(CONFIG_DVB_STV0297) || (defined(CONFIG_DVB_STV0297_MODULE) && defined(MODULE)) |
46 | extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config, | 46 | extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config, |
47 | struct i2c_adapter* i2c); | 47 | struct i2c_adapter* i2c); |
48 | #else | 48 | #else |
diff --git a/drivers/media/dvb/frontends/stv0299.h b/drivers/media/dvb/frontends/stv0299.h index 7ef25207081d..33df9495908f 100644 --- a/drivers/media/dvb/frontends/stv0299.h +++ b/drivers/media/dvb/frontends/stv0299.h | |||
@@ -89,7 +89,7 @@ struct stv0299_config | |||
89 | int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio); | 89 | int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio); |
90 | }; | 90 | }; |
91 | 91 | ||
92 | #if defined(CONFIG_DVB_STV0299) || defined(CONFIG_DVB_STV0299_MODULE) | 92 | #if defined(CONFIG_DVB_STV0299) || (defined(CONFIG_DVB_STV0299_MODULE) && defined(MODULE)) |
93 | extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config, | 93 | extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config, |
94 | struct i2c_adapter* i2c); | 94 | struct i2c_adapter* i2c); |
95 | #else | 95 | #else |
diff --git a/drivers/media/dvb/frontends/tda10021.h b/drivers/media/dvb/frontends/tda10021.h index d68ae20c8412..e3da780108f6 100644 --- a/drivers/media/dvb/frontends/tda10021.h +++ b/drivers/media/dvb/frontends/tda10021.h | |||
@@ -32,7 +32,7 @@ struct tda10021_config | |||
32 | u8 demod_address; | 32 | u8 demod_address; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | #if defined(CONFIG_DVB_TDA10021) || defined(CONFIG_DVB_TDA10021_MODULE) | 35 | #if defined(CONFIG_DVB_TDA10021) || (defined(CONFIG_DVB_TDA10021_MODULE) && defined(MODULE)) |
36 | extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config, | 36 | extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config, |
37 | struct i2c_adapter* i2c, u8 pwm); | 37 | struct i2c_adapter* i2c, u8 pwm); |
38 | #else | 38 | #else |
diff --git a/drivers/media/dvb/frontends/tda1004x.h b/drivers/media/dvb/frontends/tda1004x.h index e28fca05734c..605ad2dfc09d 100644 --- a/drivers/media/dvb/frontends/tda1004x.h +++ b/drivers/media/dvb/frontends/tda1004x.h | |||
@@ -71,7 +71,7 @@ struct tda1004x_config | |||
71 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 71 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
72 | }; | 72 | }; |
73 | 73 | ||
74 | #if defined(CONFIG_DVB_TDA1004X) || defined(CONFIG_DVB_TDA1004X_MODULE) | 74 | #if defined(CONFIG_DVB_TDA1004X) || (defined(CONFIG_DVB_TDA1004X_MODULE) && defined(MODULE)) |
75 | extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, | 75 | extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, |
76 | struct i2c_adapter* i2c); | 76 | struct i2c_adapter* i2c); |
77 | 77 | ||
diff --git a/drivers/media/dvb/frontends/tda10086.h b/drivers/media/dvb/frontends/tda10086.h index 18457adee30b..ed584a8f4a89 100644 --- a/drivers/media/dvb/frontends/tda10086.h +++ b/drivers/media/dvb/frontends/tda10086.h | |||
@@ -35,7 +35,7 @@ struct tda10086_config | |||
35 | u8 invert; | 35 | u8 invert; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_TDA10086) || defined(CONFIG_DVB_TDA10086_MODULE) | 38 | #if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config, | 39 | extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/tda8083.h b/drivers/media/dvb/frontends/tda8083.h index aae15bdce6eb..2d3307999f21 100644 --- a/drivers/media/dvb/frontends/tda8083.h +++ b/drivers/media/dvb/frontends/tda8083.h | |||
@@ -35,7 +35,7 @@ struct tda8083_config | |||
35 | u8 demod_address; | 35 | u8 demod_address; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_TDA8083) || defined(CONFIG_DVB_TDA8083_MODULE) | 38 | #if defined(CONFIG_DVB_TDA8083) || (defined(CONFIG_DVB_TDA8083_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config, | 39 | extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/tda826x.c b/drivers/media/dvb/frontends/tda826x.c index eeab26bd36ed..34815b0b97e4 100644 --- a/drivers/media/dvb/frontends/tda826x.c +++ b/drivers/media/dvb/frontends/tda826x.c | |||
@@ -121,7 +121,7 @@ static struct dvb_tuner_ops tda826x_tuner_ops = { | |||
121 | .info = { | 121 | .info = { |
122 | .name = "Philips TDA826X", | 122 | .name = "Philips TDA826X", |
123 | .frequency_min = 950000, | 123 | .frequency_min = 950000, |
124 | .frequency_min = 2175000 | 124 | .frequency_max = 2175000 |
125 | }, | 125 | }, |
126 | .release = tda826x_release, | 126 | .release = tda826x_release, |
127 | .sleep = tda826x_sleep, | 127 | .sleep = tda826x_sleep, |
diff --git a/drivers/media/dvb/frontends/tda826x.h b/drivers/media/dvb/frontends/tda826x.h index 83998c001196..ad9981195961 100644 --- a/drivers/media/dvb/frontends/tda826x.h +++ b/drivers/media/dvb/frontends/tda826x.h | |||
@@ -35,7 +35,7 @@ | |||
35 | * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector. | 35 | * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector. |
36 | * @return FE pointer on success, NULL on failure. | 36 | * @return FE pointer on success, NULL on failure. |
37 | */ | 37 | */ |
38 | #if defined(CONFIG_DVB_TDA826X) || defined(CONFIG_DVB_TDA826X_MODULE) | 38 | #if defined(CONFIG_DVB_TDA826X) || (defined(CONFIG_DVB_TDA826X_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, | 39 | extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, |
40 | struct i2c_adapter *i2c, | 40 | struct i2c_adapter *i2c, |
41 | int has_loopthrough); | 41 | int has_loopthrough); |
diff --git a/drivers/media/dvb/frontends/tua6100.h b/drivers/media/dvb/frontends/tua6100.h index 8f98033ffa7b..03a665e7df6d 100644 --- a/drivers/media/dvb/frontends/tua6100.h +++ b/drivers/media/dvb/frontends/tua6100.h | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <linux/i2c.h> | 34 | #include <linux/i2c.h> |
35 | #include "dvb_frontend.h" | 35 | #include "dvb_frontend.h" |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_TUA6100) || defined(CONFIG_DVB_TUA6100_MODULE) | 37 | #if defined(CONFIG_DVB_TUA6100) || (defined(CONFIG_DVB_TUA6100_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c); | 38 | extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c); |
39 | #else | 39 | #else |
40 | static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c) | 40 | static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c) |
diff --git a/drivers/media/dvb/frontends/ves1820.h b/drivers/media/dvb/frontends/ves1820.h index f0c9dded39d7..e4a2a324046a 100644 --- a/drivers/media/dvb/frontends/ves1820.h +++ b/drivers/media/dvb/frontends/ves1820.h | |||
@@ -41,7 +41,7 @@ struct ves1820_config | |||
41 | u8 selagc:1; | 41 | u8 selagc:1; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_VES1820) || defined(CONFIG_DVB_VES1820_MODULE) | 44 | #if defined(CONFIG_DVB_VES1820) || (defined(CONFIG_DVB_VES1820_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, | 45 | extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, |
46 | struct i2c_adapter* i2c, u8 pwm); | 46 | struct i2c_adapter* i2c, u8 pwm); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/ves1x93.h b/drivers/media/dvb/frontends/ves1x93.h index 395fed39b286..d507f8966f81 100644 --- a/drivers/media/dvb/frontends/ves1x93.h +++ b/drivers/media/dvb/frontends/ves1x93.h | |||
@@ -40,7 +40,7 @@ struct ves1x93_config | |||
40 | u8 invert_pwm:1; | 40 | u8 invert_pwm:1; |
41 | }; | 41 | }; |
42 | 42 | ||
43 | #if defined(CONFIG_DVB_VES1X93) || defined(CONFIG_DVB_VES1X93_MODULE) | 43 | #if defined(CONFIG_DVB_VES1X93) || (defined(CONFIG_DVB_VES1X93_MODULE) && defined(MODULE)) |
44 | extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config, | 44 | extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config, |
45 | struct i2c_adapter* i2c); | 45 | struct i2c_adapter* i2c); |
46 | #else | 46 | #else |
diff --git a/drivers/media/dvb/frontends/zl10353.h b/drivers/media/dvb/frontends/zl10353.h index 79a947215c4d..0bc0109737f1 100644 --- a/drivers/media/dvb/frontends/zl10353.h +++ b/drivers/media/dvb/frontends/zl10353.h | |||
@@ -36,7 +36,7 @@ struct zl10353_config | |||
36 | int parallel_ts; | 36 | int parallel_ts; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | #if defined(CONFIG_DVB_ZL10353) || defined(CONFIG_DVB_ZL10353_MODULE) | 39 | #if defined(CONFIG_DVB_ZL10353) || (defined(CONFIG_DVB_ZL10353_MODULE) && defined(MODULE)) |
40 | extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config, | 40 | extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config, |
41 | struct i2c_adapter *i2c); | 41 | struct i2c_adapter *i2c); |
42 | #else | 42 | #else |
diff --git a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c index 2a2e9b400613..cd5ec489af1c 100644 --- a/drivers/media/dvb/ttpci/budget-ci.c +++ b/drivers/media/dvb/ttpci/budget-ci.c | |||
@@ -46,7 +46,14 @@ | |||
46 | #include "bsbe1.h" | 46 | #include "bsbe1.h" |
47 | #include "bsru6.h" | 47 | #include "bsru6.h" |
48 | 48 | ||
49 | #define DEBIADDR_IR 0x1234 | 49 | /* |
50 | * Regarding DEBIADDR_IR: | ||
51 | * Some CI modules hang if random addresses are read. | ||
52 | * Using address 0x4000 for the IR read means that we | ||
53 | * use the same address as for CI version, which should | ||
54 | * be a safe default. | ||
55 | */ | ||
56 | #define DEBIADDR_IR 0x4000 | ||
50 | #define DEBIADDR_CICONTROL 0x0000 | 57 | #define DEBIADDR_CICONTROL 0x0000 |
51 | #define DEBIADDR_CIVERSION 0x4000 | 58 | #define DEBIADDR_CIVERSION 0x4000 |
52 | #define DEBIADDR_IO 0x1000 | 59 | #define DEBIADDR_IO 0x1000 |
@@ -1028,6 +1035,7 @@ static void frontend_init(struct budget_ci *budget_ci) | |||
1028 | 1035 | ||
1029 | case 0x1012: // TT DVB-T CI budget (tda10046/Philips tdm1316l(tda6651tt)) | 1036 | case 0x1012: // TT DVB-T CI budget (tda10046/Philips tdm1316l(tda6651tt)) |
1030 | budget_ci->tuner_pll_address = 0x60; | 1037 | budget_ci->tuner_pll_address = 0x60; |
1038 | philips_tdm1316l_config.invert = 1; | ||
1031 | budget_ci->budget.dvb_frontend = | 1039 | budget_ci->budget.dvb_frontend = |
1032 | dvb_attach(tda10046_attach, &philips_tdm1316l_config, &budget_ci->budget.i2c_adap); | 1040 | dvb_attach(tda10046_attach, &philips_tdm1316l_config, &budget_ci->budget.i2c_adap); |
1033 | if (budget_ci->budget.dvb_frontend) { | 1041 | if (budget_ci->budget.dvb_frontend) { |
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index fbe5b6168cc2..bf267552941f 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
@@ -186,7 +186,7 @@ config VIDEO_KS0127 | |||
186 | 186 | ||
187 | config VIDEO_SAA7110 | 187 | config VIDEO_SAA7110 |
188 | tristate "Philips SAA7110 video decoder" | 188 | tristate "Philips SAA7110 video decoder" |
189 | depends on VIDEO_V4L1 | 189 | depends on VIDEO_V4L1 && I2C |
190 | ---help--- | 190 | ---help--- |
191 | Support for the Philips SAA7110 video decoders. | 191 | Support for the Philips SAA7110 video decoders. |
192 | 192 | ||
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c index a84903e0d810..21ebe8f13815 100644 --- a/drivers/media/video/bt8xx/bttv-cards.c +++ b/drivers/media/video/bt8xx/bttv-cards.c | |||
@@ -4001,7 +4001,7 @@ static void __devinit init_PXC200(struct bttv *btv) | |||
4001 | * - sleep 1ms | 4001 | * - sleep 1ms |
4002 | * - write 0x0E | 4002 | * - write 0x0E |
4003 | * read from GPIO_DATA into buf (uint_32) | 4003 | * read from GPIO_DATA into buf (uint_32) |
4004 | * - if ( buf>>18 & 0x01 ) || ( buf>>19 && 0x01 != 0 ) | 4004 | * - if ( buf>>18 & 0x01 ) || ( buf>>19 & 0x01 != 0 ) |
4005 | * error. ERROR_CPLD_Check_Failed. | 4005 | * error. ERROR_CPLD_Check_Failed. |
4006 | */ | 4006 | */ |
4007 | /* ----------------------------------------------------------------------- */ | 4007 | /* ----------------------------------------------------------------------- */ |
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c index ee48995a4ab5..57e1c024a547 100644 --- a/drivers/media/video/cx88/cx88-input.c +++ b/drivers/media/video/cx88/cx88-input.c | |||
@@ -202,13 +202,19 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
202 | ir->sampling = 1; | 202 | ir->sampling = 1; |
203 | break; | 203 | break; |
204 | case CX88_BOARD_WINFAST_DTV2000H: | 204 | case CX88_BOARD_WINFAST_DTV2000H: |
205 | case CX88_BOARD_WINFAST2000XP_EXPERT: | ||
206 | ir_codes = ir_codes_winfast; | 205 | ir_codes = ir_codes_winfast; |
207 | ir->gpio_addr = MO_GP0_IO; | 206 | ir->gpio_addr = MO_GP0_IO; |
208 | ir->mask_keycode = 0x8f8; | 207 | ir->mask_keycode = 0x8f8; |
209 | ir->mask_keyup = 0x100; | 208 | ir->mask_keyup = 0x100; |
210 | ir->polling = 50; /* ms */ | 209 | ir->polling = 50; /* ms */ |
211 | break; | 210 | break; |
211 | case CX88_BOARD_WINFAST2000XP_EXPERT: | ||
212 | ir_codes = ir_codes_winfast; | ||
213 | ir->gpio_addr = MO_GP0_IO; | ||
214 | ir->mask_keycode = 0x8f8; | ||
215 | ir->mask_keyup = 0x100; | ||
216 | ir->polling = 1; /* ms */ | ||
217 | break; | ||
212 | case CX88_BOARD_IODATA_GVBCTV7E: | 218 | case CX88_BOARD_IODATA_GVBCTV7E: |
213 | ir_codes = ir_codes_iodata_bctv7e; | 219 | ir_codes = ir_codes_iodata_bctv7e; |
214 | ir->gpio_addr = MO_GP0_IO; | 220 | ir->gpio_addr = MO_GP0_IO; |
@@ -216,7 +222,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
216 | ir->mask_keydown = 0x02; | 222 | ir->mask_keydown = 0x02; |
217 | ir->polling = 5; /* ms */ | 223 | ir->polling = 5; /* ms */ |
218 | break; | 224 | break; |
219 | case CX88_BOARD_PROLINK_PLAYTVPVR: | 225 | case CX88_BOARD_PROLINK_PLAYTVPVR: |
220 | case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO: | 226 | case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO: |
221 | ir_codes = ir_codes_pixelview; | 227 | ir_codes = ir_codes_pixelview; |
222 | ir->gpio_addr = MO_GP1_IO; | 228 | ir->gpio_addr = MO_GP1_IO; |
diff --git a/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c index df8feac16aee..c80c26be6e4d 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c +++ b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c | |||
@@ -221,7 +221,7 @@ static unsigned int decoder_describe(struct pvr2_v4l_cx2584x *ctxt, | |||
221 | static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt) | 221 | static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt) |
222 | { | 222 | { |
223 | int ret; | 223 | int ret; |
224 | ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,0); | 224 | ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,NULL); |
225 | pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret); | 225 | pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret); |
226 | } | 226 | } |
227 | 227 | ||
diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c index 97e974d9b9c3..bb40e9085977 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c +++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c | |||
@@ -711,8 +711,8 @@ static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip) | |||
711 | dip->devbase.minor,pvr2_config_get_name(dip->config)); | 711 | dip->devbase.minor,pvr2_config_get_name(dip->config)); |
712 | 712 | ||
713 | /* Paranoia */ | 713 | /* Paranoia */ |
714 | dip->v4lp = 0; | 714 | dip->v4lp = NULL; |
715 | dip->stream = 0; | 715 | dip->stream = NULL; |
716 | 716 | ||
717 | /* Actual deallocation happens later when all internal references | 717 | /* Actual deallocation happens later when all internal references |
718 | are gone. */ | 718 | are gone. */ |
@@ -1076,7 +1076,7 @@ struct pvr2_v4l2 *pvr2_v4l2_create(struct pvr2_context *mnp) | |||
1076 | vp->vdev = kmalloc(sizeof(*vp->vdev),GFP_KERNEL); | 1076 | vp->vdev = kmalloc(sizeof(*vp->vdev),GFP_KERNEL); |
1077 | if (!vp->vdev) { | 1077 | if (!vp->vdev) { |
1078 | kfree(vp); | 1078 | kfree(vp); |
1079 | return 0; | 1079 | return NULL; |
1080 | } | 1080 | } |
1081 | memset(vp->vdev,0,sizeof(*vp->vdev)); | 1081 | memset(vp->vdev,0,sizeof(*vp->vdev)); |
1082 | pvr2_channel_init(&vp->channel,mnp); | 1082 | pvr2_channel_init(&vp->channel,mnp); |
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c index c9d8e3b9cc37..51f0cfdcb680 100644 --- a/drivers/media/video/saa7134/saa7134-cards.c +++ b/drivers/media/video/saa7134/saa7134-cards.c | |||
@@ -2969,7 +2969,7 @@ struct saa7134_board saa7134_boards[] = { | |||
2969 | /* Petr Baudis <pasky@ucw.cz> */ | 2969 | /* Petr Baudis <pasky@ucw.cz> */ |
2970 | .name = "AVerMedia TV Hybrid A16AR", | 2970 | .name = "AVerMedia TV Hybrid A16AR", |
2971 | .audio_clock = 0x187de7, | 2971 | .audio_clock = 0x187de7, |
2972 | .tuner_type = TUNER_PHILIPS_TDA8290, /* untested */ | 2972 | .tuner_type = TUNER_PHILIPS_TD1316, /* untested */ |
2973 | .radio_type = TUNER_TEA5767, /* untested */ | 2973 | .radio_type = TUNER_TEA5767, /* untested */ |
2974 | .tuner_addr = ADDR_UNSET, | 2974 | .tuner_addr = ADDR_UNSET, |
2975 | .radio_addr = ADDR_UNSET, | 2975 | .radio_addr = ADDR_UNSET, |
@@ -3718,6 +3718,7 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
3718 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: | 3718 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: |
3719 | case SAA7134_BOARD_AVERMEDIA_307: | 3719 | case SAA7134_BOARD_AVERMEDIA_307: |
3720 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: | 3720 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: |
3721 | case SAA7134_BOARD_AVERMEDIA_777: | ||
3721 | /* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */ | 3722 | /* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */ |
3722 | case SAA7134_BOARD_VIDEOMATE_TV_PVR: | 3723 | case SAA7134_BOARD_VIDEOMATE_TV_PVR: |
3723 | case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS: | 3724 | case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS: |
@@ -3734,6 +3735,7 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
3734 | case SAA7134_BOARD_FLYDVBT_LR301: | 3735 | case SAA7134_BOARD_FLYDVBT_LR301: |
3735 | case SAA7134_BOARD_FLYDVBTDUO: | 3736 | case SAA7134_BOARD_FLYDVBTDUO: |
3736 | case SAA7134_BOARD_PROTEUS_2309: | 3737 | case SAA7134_BOARD_PROTEUS_2309: |
3738 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
3737 | dev->has_remote = SAA7134_REMOTE_GPIO; | 3739 | dev->has_remote = SAA7134_REMOTE_GPIO; |
3738 | break; | 3740 | break; |
3739 | case SAA7134_BOARD_FLYDVBS_LR300: | 3741 | case SAA7134_BOARD_FLYDVBS_LR300: |
@@ -3772,7 +3774,6 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
3772 | saa_writeb(SAA7134_GPIO_GPMODE3, 0x08); | 3774 | saa_writeb(SAA7134_GPIO_GPMODE3, 0x08); |
3773 | saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x00); | 3775 | saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x00); |
3774 | break; | 3776 | break; |
3775 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
3776 | case SAA7134_BOARD_AVERMEDIA_CARDBUS: | 3777 | case SAA7134_BOARD_AVERMEDIA_CARDBUS: |
3777 | /* power-up tuner chip */ | 3778 | /* power-up tuner chip */ |
3778 | saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); | 3779 | saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); |
diff --git a/drivers/media/video/saa7134/saa7134-dvb.c b/drivers/media/video/saa7134/saa7134-dvb.c index 1ba53b525ad2..6b61d9b2fcb5 100644 --- a/drivers/media/video/saa7134/saa7134-dvb.c +++ b/drivers/media/video/saa7134/saa7134-dvb.c | |||
@@ -1147,6 +1147,8 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1147 | &philips_europa_config, | 1147 | &philips_europa_config, |
1148 | &dev->i2c_adap); | 1148 | &dev->i2c_adap); |
1149 | if (dev->dvb.frontend) { | 1149 | if (dev->dvb.frontend) { |
1150 | dev->original_demod_sleep = dev->dvb.frontend->ops.sleep; | ||
1151 | dev->dvb.frontend->ops.sleep = philips_europa_demod_sleep; | ||
1150 | dev->dvb.frontend->ops.tuner_ops.init = philips_europa_tuner_init; | 1152 | dev->dvb.frontend->ops.tuner_ops.init = philips_europa_tuner_init; |
1151 | dev->dvb.frontend->ops.tuner_ops.sleep = philips_europa_tuner_sleep; | 1153 | dev->dvb.frontend->ops.tuner_ops.sleep = philips_europa_tuner_sleep; |
1152 | dev->dvb.frontend->ops.tuner_ops.set_params = philips_td1316_tuner_set_params; | 1154 | dev->dvb.frontend->ops.tuner_ops.set_params = philips_td1316_tuner_set_params; |
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c index ff5991136f4e..dee83552e681 100644 --- a/drivers/media/video/saa7134/saa7134-input.c +++ b/drivers/media/video/saa7134/saa7134-input.c | |||
@@ -185,7 +185,6 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
185 | case SAA7134_BOARD_AVERMEDIA_STUDIO_305: | 185 | case SAA7134_BOARD_AVERMEDIA_STUDIO_305: |
186 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: | 186 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: |
187 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: | 187 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: |
188 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
189 | ir_codes = ir_codes_avermedia; | 188 | ir_codes = ir_codes_avermedia; |
190 | mask_keycode = 0x0007C8; | 189 | mask_keycode = 0x0007C8; |
191 | mask_keydown = 0x000010; | 190 | mask_keydown = 0x000010; |
@@ -194,6 +193,16 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
194 | saa_setb(SAA7134_GPIO_GPMODE0, 0x4); | 193 | saa_setb(SAA7134_GPIO_GPMODE0, 0x4); |
195 | saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); | 194 | saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); |
196 | break; | 195 | break; |
196 | case SAA7134_BOARD_AVERMEDIA_777: | ||
197 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
198 | ir_codes = ir_codes_avermedia; | ||
199 | mask_keycode = 0x02F200; | ||
200 | mask_keydown = 0x000400; | ||
201 | polling = 50; // ms | ||
202 | /* Without this we won't receive key up events */ | ||
203 | saa_setb(SAA7134_GPIO_GPMODE1, 0x1); | ||
204 | saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1); | ||
205 | break; | ||
197 | case SAA7134_BOARD_KWORLD_TERMINATOR: | 206 | case SAA7134_BOARD_KWORLD_TERMINATOR: |
198 | ir_codes = ir_codes_pixelview; | 207 | ir_codes = ir_codes_pixelview; |
199 | mask_keycode = 0x00001f; | 208 | mask_keycode = 0x00001f; |
diff --git a/drivers/media/video/tveeprom.c b/drivers/media/video/tveeprom.c index e6baaee038bf..6b9ef731b83a 100644 --- a/drivers/media/video/tveeprom.c +++ b/drivers/media/video/tveeprom.c | |||
@@ -468,7 +468,7 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee, | |||
468 | (eeprom_data[i+6] << 8) + | 468 | (eeprom_data[i+6] << 8) + |
469 | (eeprom_data[i+7] << 16); | 469 | (eeprom_data[i+7] << 16); |
470 | 470 | ||
471 | if ( (eeprom_data[i + 8] && 0xf0) && | 471 | if ( (eeprom_data[i + 8] & 0xf0) && |
472 | (tvee->serial_number < 0xffffff) ) { | 472 | (tvee->serial_number < 0xffffff) ) { |
473 | tvee->MAC_address[0] = 0x00; | 473 | tvee->MAC_address[0] = 0x00; |
474 | tvee->MAC_address[1] = 0x0D; | 474 | tvee->MAC_address[1] = 0x0D; |
diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c index bbdba7b37e11..db9d7df75ae0 100644 --- a/drivers/misc/lkdtm.c +++ b/drivers/misc/lkdtm.c | |||
@@ -44,12 +44,14 @@ | |||
44 | */ | 44 | */ |
45 | 45 | ||
46 | #include <linux/kernel.h> | 46 | #include <linux/kernel.h> |
47 | #include <linux/fs.h> | ||
47 | #include <linux/module.h> | 48 | #include <linux/module.h> |
49 | #include <linux/buffer_head.h> | ||
48 | #include <linux/kprobes.h> | 50 | #include <linux/kprobes.h> |
49 | #include <linux/kallsyms.h> | 51 | #include <linux/list.h> |
50 | #include <linux/init.h> | 52 | #include <linux/init.h> |
51 | #include <linux/irq.h> | ||
52 | #include <linux/interrupt.h> | 53 | #include <linux/interrupt.h> |
54 | #include <linux/hrtimer.h> | ||
53 | #include <scsi/scsi_cmnd.h> | 55 | #include <scsi/scsi_cmnd.h> |
54 | 56 | ||
55 | #ifdef CONFIG_IDE | 57 | #ifdef CONFIG_IDE |
@@ -116,16 +118,16 @@ static enum ctype cptype = NONE; | |||
116 | static int count = DEFAULT_COUNT; | 118 | static int count = DEFAULT_COUNT; |
117 | 119 | ||
118 | module_param(recur_count, int, 0644); | 120 | module_param(recur_count, int, 0644); |
119 | MODULE_PARM_DESC(recur_count, "Recurcion level for the stack overflow test,\ | 121 | MODULE_PARM_DESC(recur_count, " Recursion level for the stack overflow test, "\ |
120 | default is 10"); | 122 | "default is 10"); |
121 | module_param(cpoint_name, charp, 0644); | 123 | module_param(cpoint_name, charp, 0644); |
122 | MODULE_PARM_DESC(cpoint_name, "Crash Point, where kernel is to be crashed"); | 124 | MODULE_PARM_DESC(cpoint_name, " Crash Point, where kernel is to be crashed"); |
123 | module_param(cpoint_type, charp, 06444); | 125 | module_param(cpoint_type, charp, 0644); |
124 | MODULE_PARM_DESC(cpoint_type, "Crash Point Type, action to be taken on\ | 126 | MODULE_PARM_DESC(cpoint_type, " Crash Point Type, action to be taken on "\ |
125 | hitting the crash point"); | 127 | "hitting the crash point"); |
126 | module_param(cpoint_count, int, 06444); | 128 | module_param(cpoint_count, int, 0644); |
127 | MODULE_PARM_DESC(cpoint_count, "Crash Point Count, number of times the \ | 129 | MODULE_PARM_DESC(cpoint_count, " Crash Point Count, number of times the "\ |
128 | crash point is to be hit to trigger action"); | 130 | "crash point is to be hit to trigger action"); |
129 | 131 | ||
130 | unsigned int jp_do_irq(unsigned int irq) | 132 | unsigned int jp_do_irq(unsigned int irq) |
131 | { | 133 | { |
@@ -155,8 +157,8 @@ void jp_ll_rw_block(int rw, int nr, struct buffer_head *bhs[]) | |||
155 | 157 | ||
156 | struct scan_control; | 158 | struct scan_control; |
157 | 159 | ||
158 | unsigned long jp_shrink_page_list(struct list_head *page_list, | 160 | unsigned long jp_shrink_inactive_list(unsigned long max_scan, |
159 | struct scan_control *sc) | 161 | struct zone *zone, struct scan_control *sc) |
160 | { | 162 | { |
161 | lkdtm_handler(); | 163 | lkdtm_handler(); |
162 | jprobe_return(); | 164 | jprobe_return(); |
@@ -295,8 +297,8 @@ int lkdtm_module_init(void) | |||
295 | lkdtm.entry = (kprobe_opcode_t*) jp_ll_rw_block; | 297 | lkdtm.entry = (kprobe_opcode_t*) jp_ll_rw_block; |
296 | break; | 298 | break; |
297 | case MEM_SWAPOUT: | 299 | case MEM_SWAPOUT: |
298 | lkdtm.kp.symbol_name = "shrink_page_list"; | 300 | lkdtm.kp.symbol_name = "shrink_inactive_list"; |
299 | lkdtm.entry = (kprobe_opcode_t*) jp_shrink_page_list; | 301 | lkdtm.entry = (kprobe_opcode_t*) jp_shrink_inactive_list; |
300 | break; | 302 | break; |
301 | case TIMERADD: | 303 | case TIMERADD: |
302 | lkdtm.kp.symbol_name = "hrtimer_start"; | 304 | lkdtm.kp.symbol_name = "hrtimer_start"; |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 28c17d1ca5cb..6e863aa9894c 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -486,7 +486,7 @@ config SGI_IOC3_ETH_HW_TX_CSUM | |||
486 | 486 | ||
487 | config MIPS_SIM_NET | 487 | config MIPS_SIM_NET |
488 | tristate "MIPS simulator Network device (EXPERIMENTAL)" | 488 | tristate "MIPS simulator Network device (EXPERIMENTAL)" |
489 | depends on NETDEVICES && MIPS_SIM && EXPERIMENTAL | 489 | depends on MIPS_SIM && EXPERIMENTAL |
490 | help | 490 | help |
491 | The MIPSNET device is a simple Ethernet network device which is | 491 | The MIPSNET device is a simple Ethernet network device which is |
492 | emulated by the MIPS Simulator. | 492 | emulated by the MIPS Simulator. |
@@ -2467,7 +2467,7 @@ config ISERIES_VETH | |||
2467 | 2467 | ||
2468 | config RIONET | 2468 | config RIONET |
2469 | tristate "RapidIO Ethernet over messaging driver support" | 2469 | tristate "RapidIO Ethernet over messaging driver support" |
2470 | depends on NETDEVICES && RAPIDIO | 2470 | depends on RAPIDIO |
2471 | 2471 | ||
2472 | config RIONET_TX_SIZE | 2472 | config RIONET_TX_SIZE |
2473 | int "Number of outbound queue entries" | 2473 | int "Number of outbound queue entries" |
@@ -2833,7 +2833,7 @@ config NET_FC | |||
2833 | "SCSI generic support". | 2833 | "SCSI generic support". |
2834 | 2834 | ||
2835 | config SHAPER | 2835 | config SHAPER |
2836 | tristate "Traffic Shaper (EXPERIMENTAL)" | 2836 | tristate "Traffic Shaper (OBSOLETE)" |
2837 | depends on EXPERIMENTAL | 2837 | depends on EXPERIMENTAL |
2838 | ---help--- | 2838 | ---help--- |
2839 | The traffic shaper is a virtual network device that allows you to | 2839 | The traffic shaper is a virtual network device that allows you to |
@@ -2842,9 +2842,9 @@ config SHAPER | |||
2842 | these virtual devices. See | 2842 | these virtual devices. See |
2843 | <file:Documentation/networking/shaper.txt> for more information. | 2843 | <file:Documentation/networking/shaper.txt> for more information. |
2844 | 2844 | ||
2845 | An alternative to this traffic shaper is the experimental | 2845 | An alternative to this traffic shaper are traffic schedulers which |
2846 | Class-Based Queuing (CBQ) scheduling support which you get if you | 2846 | you'll get if you say Y to "QoS and/or fair queuing" in |
2847 | say Y to "QoS and/or fair queuing" above. | 2847 | "Networking options". |
2848 | 2848 | ||
2849 | To compile this driver as a module, choose M here: the module | 2849 | To compile this driver as a module, choose M here: the module |
2850 | will be called shaper. If unsure, say N. | 2850 | will be called shaper. If unsure, say N. |
diff --git a/drivers/net/arcnet/com20020.c b/drivers/net/arcnet/com20020.c index 0dc70c7b7940..aa9dd8f11269 100644 --- a/drivers/net/arcnet/com20020.c +++ b/drivers/net/arcnet/com20020.c | |||
@@ -337,13 +337,16 @@ static void com20020_set_mc_list(struct net_device *dev) | |||
337 | } | 337 | } |
338 | } | 338 | } |
339 | 339 | ||
340 | #ifdef MODULE | 340 | #if defined(CONFIG_ARCNET_COM20020_PCI_MODULE) || \ |
341 | 341 | defined(CONFIG_ARCNET_COM20020_ISA_MODULE) | |
342 | EXPORT_SYMBOL(com20020_check); | 342 | EXPORT_SYMBOL(com20020_check); |
343 | EXPORT_SYMBOL(com20020_found); | 343 | EXPORT_SYMBOL(com20020_found); |
344 | #endif | ||
344 | 345 | ||
345 | MODULE_LICENSE("GPL"); | 346 | MODULE_LICENSE("GPL"); |
346 | 347 | ||
348 | #ifdef MODULE | ||
349 | |||
347 | int init_module(void) | 350 | int init_module(void) |
348 | { | 351 | { |
349 | BUGLVL(D_NORMAL) printk(VERSION); | 352 | BUGLVL(D_NORMAL) printk(VERSION); |
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index 1ec217433b4c..474a4e3438db 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -908,8 +908,9 @@ static irqreturn_t b44_interrupt(int irq, void *dev_id) | |||
908 | istat = br32(bp, B44_ISTAT); | 908 | istat = br32(bp, B44_ISTAT); |
909 | imask = br32(bp, B44_IMASK); | 909 | imask = br32(bp, B44_IMASK); |
910 | 910 | ||
911 | /* ??? What the fuck is the purpose of the interrupt mask | 911 | /* The interrupt mask register controls which interrupt bits |
912 | * ??? register if we have to mask it out by hand anyways? | 912 | * will actually raise an interrupt to the CPU when set by hw/firmware, |
913 | * but doesn't mask off the bits. | ||
913 | */ | 914 | */ |
914 | istat &= imask; | 915 | istat &= imask; |
915 | if (istat) { | 916 | if (istat) { |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index c0bbddae4ec4..17a461152d39 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -4692,6 +4692,8 @@ static int bond_check_params(struct bond_params *params) | |||
4692 | return 0; | 4692 | return 0; |
4693 | } | 4693 | } |
4694 | 4694 | ||
4695 | static struct lock_class_key bonding_netdev_xmit_lock_key; | ||
4696 | |||
4695 | /* Create a new bond based on the specified name and bonding parameters. | 4697 | /* Create a new bond based on the specified name and bonding parameters. |
4696 | * Caller must NOT hold rtnl_lock; we need to release it here before we | 4698 | * Caller must NOT hold rtnl_lock; we need to release it here before we |
4697 | * set up our sysfs entries. | 4699 | * set up our sysfs entries. |
@@ -4727,6 +4729,9 @@ int bond_create(char *name, struct bond_params *params, struct bonding **newbond | |||
4727 | if (res < 0) { | 4729 | if (res < 0) { |
4728 | goto out_bond; | 4730 | goto out_bond; |
4729 | } | 4731 | } |
4732 | |||
4733 | lockdep_set_class(&bond_dev->_xmit_lock, &bonding_netdev_xmit_lock_key); | ||
4734 | |||
4730 | if (newbond) | 4735 | if (newbond) |
4731 | *newbond = bond_dev->priv; | 4736 | *newbond = bond_dev->priv; |
4732 | 4737 | ||
diff --git a/drivers/net/cris/eth_v10.c b/drivers/net/cris/eth_v10.c index 966b563e42bb..a03d781f6d0a 100644 --- a/drivers/net/cris/eth_v10.c +++ b/drivers/net/cris/eth_v10.c | |||
@@ -509,6 +509,8 @@ etrax_ethernet_init(void) | |||
509 | * does not share cacheline with any other data (to avoid cache bug) | 509 | * does not share cacheline with any other data (to avoid cache bug) |
510 | */ | 510 | */ |
511 | RxDescList[i].skb = dev_alloc_skb(MAX_MEDIA_DATA_SIZE + 2 * L1_CACHE_BYTES); | 511 | RxDescList[i].skb = dev_alloc_skb(MAX_MEDIA_DATA_SIZE + 2 * L1_CACHE_BYTES); |
512 | if (!RxDescList[i].skb) | ||
513 | return -ENOMEM; | ||
512 | RxDescList[i].descr.ctrl = 0; | 514 | RxDescList[i].descr.ctrl = 0; |
513 | RxDescList[i].descr.sw_len = MAX_MEDIA_DATA_SIZE; | 515 | RxDescList[i].descr.sw_len = MAX_MEDIA_DATA_SIZE; |
514 | RxDescList[i].descr.next = virt_to_phys(&RxDescList[i + 1]); | 516 | RxDescList[i].descr.next = virt_to_phys(&RxDescList[i + 1]); |
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 8d04752777a8..726ec5e88ab2 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -4800,6 +4800,9 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state) | |||
4800 | if (adapter->hw.phy_type == e1000_phy_igp_3) | 4800 | if (adapter->hw.phy_type == e1000_phy_igp_3) |
4801 | e1000_phy_powerdown_workaround(&adapter->hw); | 4801 | e1000_phy_powerdown_workaround(&adapter->hw); |
4802 | 4802 | ||
4803 | if (netif_running(netdev)) | ||
4804 | e1000_free_irq(adapter); | ||
4805 | |||
4803 | /* Release control of h/w to f/w. If f/w is AMT enabled, this | 4806 | /* Release control of h/w to f/w. If f/w is AMT enabled, this |
4804 | * would have already happened in close and is redundant. */ | 4807 | * would have already happened in close and is redundant. */ |
4805 | e1000_release_hw_control(adapter); | 4808 | e1000_release_hw_control(adapter); |
@@ -4830,6 +4833,10 @@ e1000_resume(struct pci_dev *pdev) | |||
4830 | pci_enable_wake(pdev, PCI_D3hot, 0); | 4833 | pci_enable_wake(pdev, PCI_D3hot, 0); |
4831 | pci_enable_wake(pdev, PCI_D3cold, 0); | 4834 | pci_enable_wake(pdev, PCI_D3cold, 0); |
4832 | 4835 | ||
4836 | if (netif_running(netdev) && (err = e1000_request_irq(adapter))) | ||
4837 | return err; | ||
4838 | |||
4839 | e1000_power_up_phy(adapter); | ||
4833 | e1000_reset(adapter); | 4840 | e1000_reset(adapter); |
4834 | E1000_WRITE_REG(&adapter->hw, WUS, ~0); | 4841 | E1000_WRITE_REG(&adapter->hw, WUS, ~0); |
4835 | 4842 | ||
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index b40724fc6b74..39ad9f73d1ec 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h | |||
@@ -39,7 +39,7 @@ | |||
39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
40 | 40 | ||
41 | #define DRV_NAME "ehea" | 41 | #define DRV_NAME "ehea" |
42 | #define DRV_VERSION "EHEA_0034" | 42 | #define DRV_VERSION "EHEA_0043" |
43 | 43 | ||
44 | #define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \ | 44 | #define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \ |
45 | | NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR) | 45 | | NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR) |
@@ -105,9 +105,6 @@ | |||
105 | #define EHEA_BCMC_VLANID_ALL 0x01 | 105 | #define EHEA_BCMC_VLANID_ALL 0x01 |
106 | #define EHEA_BCMC_VLANID_SINGLE 0x00 | 106 | #define EHEA_BCMC_VLANID_SINGLE 0x00 |
107 | 107 | ||
108 | /* Use this define to kmallocate pHYP control blocks */ | ||
109 | #define H_CB_ALIGNMENT 4096 | ||
110 | |||
111 | #define EHEA_CACHE_LINE 128 | 108 | #define EHEA_CACHE_LINE 128 |
112 | 109 | ||
113 | /* Memory Regions */ | 110 | /* Memory Regions */ |
diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c index 82eb2fb8c75e..9f57c2e78ced 100644 --- a/drivers/net/ehea/ehea_ethtool.c +++ b/drivers/net/ehea/ehea_ethtool.c | |||
@@ -238,7 +238,7 @@ static void ehea_get_ethtool_stats(struct net_device *dev, | |||
238 | data[i++] = port->port_res[0].swqe_refill_th; | 238 | data[i++] = port->port_res[0].swqe_refill_th; |
239 | data[i++] = port->resets; | 239 | data[i++] = port->resets; |
240 | 240 | ||
241 | cb6 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 241 | cb6 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
242 | if (!cb6) { | 242 | if (!cb6) { |
243 | ehea_error("no mem for cb6"); | 243 | ehea_error("no mem for cb6"); |
244 | return; | 244 | return; |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 4538c99733fd..6ad696101418 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -92,7 +92,7 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev) | |||
92 | 92 | ||
93 | memset(stats, 0, sizeof(*stats)); | 93 | memset(stats, 0, sizeof(*stats)); |
94 | 94 | ||
95 | cb2 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 95 | cb2 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
96 | if (!cb2) { | 96 | if (!cb2) { |
97 | ehea_error("no mem for cb2"); | 97 | ehea_error("no mem for cb2"); |
98 | goto out; | 98 | goto out; |
@@ -586,8 +586,8 @@ int ehea_sense_port_attr(struct ehea_port *port) | |||
586 | u64 hret; | 586 | u64 hret; |
587 | struct hcp_ehea_port_cb0 *cb0; | 587 | struct hcp_ehea_port_cb0 *cb0; |
588 | 588 | ||
589 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_ATOMIC); /* May be called via */ | 589 | cb0 = kzalloc(PAGE_SIZE, GFP_ATOMIC); /* May be called via */ |
590 | if (!cb0) { /* ehea_neq_tasklet() */ | 590 | if (!cb0) { /* ehea_neq_tasklet() */ |
591 | ehea_error("no mem for cb0"); | 591 | ehea_error("no mem for cb0"); |
592 | ret = -ENOMEM; | 592 | ret = -ENOMEM; |
593 | goto out; | 593 | goto out; |
@@ -670,7 +670,7 @@ int ehea_set_portspeed(struct ehea_port *port, u32 port_speed) | |||
670 | u64 hret; | 670 | u64 hret; |
671 | int ret = 0; | 671 | int ret = 0; |
672 | 672 | ||
673 | cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 673 | cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
674 | if (!cb4) { | 674 | if (!cb4) { |
675 | ehea_error("no mem for cb4"); | 675 | ehea_error("no mem for cb4"); |
676 | ret = -ENOMEM; | 676 | ret = -ENOMEM; |
@@ -985,7 +985,7 @@ static int ehea_configure_port(struct ehea_port *port) | |||
985 | struct hcp_ehea_port_cb0 *cb0; | 985 | struct hcp_ehea_port_cb0 *cb0; |
986 | 986 | ||
987 | ret = -ENOMEM; | 987 | ret = -ENOMEM; |
988 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 988 | cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
989 | if (!cb0) | 989 | if (!cb0) |
990 | goto out; | 990 | goto out; |
991 | 991 | ||
@@ -1443,7 +1443,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa) | |||
1443 | goto out; | 1443 | goto out; |
1444 | } | 1444 | } |
1445 | 1445 | ||
1446 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1446 | cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
1447 | if (!cb0) { | 1447 | if (!cb0) { |
1448 | ehea_error("no mem for cb0"); | 1448 | ehea_error("no mem for cb0"); |
1449 | ret = -ENOMEM; | 1449 | ret = -ENOMEM; |
@@ -1501,7 +1501,7 @@ static void ehea_promiscuous(struct net_device *dev, int enable) | |||
1501 | if ((enable && port->promisc) || (!enable && !port->promisc)) | 1501 | if ((enable && port->promisc) || (!enable && !port->promisc)) |
1502 | return; | 1502 | return; |
1503 | 1503 | ||
1504 | cb7 = kzalloc(H_CB_ALIGNMENT, GFP_ATOMIC); | 1504 | cb7 = kzalloc(PAGE_SIZE, GFP_ATOMIC); |
1505 | if (!cb7) { | 1505 | if (!cb7) { |
1506 | ehea_error("no mem for cb7"); | 1506 | ehea_error("no mem for cb7"); |
1507 | goto out; | 1507 | goto out; |
@@ -1870,7 +1870,7 @@ static void ehea_vlan_rx_register(struct net_device *dev, | |||
1870 | 1870 | ||
1871 | port->vgrp = grp; | 1871 | port->vgrp = grp; |
1872 | 1872 | ||
1873 | cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1873 | cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
1874 | if (!cb1) { | 1874 | if (!cb1) { |
1875 | ehea_error("no mem for cb1"); | 1875 | ehea_error("no mem for cb1"); |
1876 | goto out; | 1876 | goto out; |
@@ -1899,7 +1899,7 @@ static void ehea_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
1899 | int index; | 1899 | int index; |
1900 | u64 hret; | 1900 | u64 hret; |
1901 | 1901 | ||
1902 | cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1902 | cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
1903 | if (!cb1) { | 1903 | if (!cb1) { |
1904 | ehea_error("no mem for cb1"); | 1904 | ehea_error("no mem for cb1"); |
1905 | goto out; | 1905 | goto out; |
@@ -1935,7 +1935,7 @@ static void ehea_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
1935 | if (port->vgrp) | 1935 | if (port->vgrp) |
1936 | port->vgrp->vlan_devices[vid] = NULL; | 1936 | port->vgrp->vlan_devices[vid] = NULL; |
1937 | 1937 | ||
1938 | cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1938 | cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
1939 | if (!cb1) { | 1939 | if (!cb1) { |
1940 | ehea_error("no mem for cb1"); | 1940 | ehea_error("no mem for cb1"); |
1941 | goto out; | 1941 | goto out; |
@@ -1968,7 +1968,7 @@ int ehea_activate_qp(struct ehea_adapter *adapter, struct ehea_qp *qp) | |||
1968 | u64 dummy64 = 0; | 1968 | u64 dummy64 = 0; |
1969 | struct hcp_modify_qp_cb0* cb0; | 1969 | struct hcp_modify_qp_cb0* cb0; |
1970 | 1970 | ||
1971 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1971 | cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
1972 | if (!cb0) { | 1972 | if (!cb0) { |
1973 | ret = -ENOMEM; | 1973 | ret = -ENOMEM; |
1974 | goto out; | 1974 | goto out; |
@@ -2269,7 +2269,7 @@ int ehea_sense_adapter_attr(struct ehea_adapter *adapter) | |||
2269 | u64 hret; | 2269 | u64 hret; |
2270 | int ret; | 2270 | int ret; |
2271 | 2271 | ||
2272 | cb = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 2272 | cb = kzalloc(PAGE_SIZE, GFP_KERNEL); |
2273 | if (!cb) { | 2273 | if (!cb) { |
2274 | ret = -ENOMEM; | 2274 | ret = -ENOMEM; |
2275 | goto out; | 2275 | goto out; |
@@ -2340,7 +2340,7 @@ static int ehea_setup_single_port(struct ehea_port *port, | |||
2340 | goto out; | 2340 | goto out; |
2341 | 2341 | ||
2342 | /* Enable Jumbo frames */ | 2342 | /* Enable Jumbo frames */ |
2343 | cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 2343 | cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
2344 | if (!cb4) { | 2344 | if (!cb4) { |
2345 | ehea_error("no mem for cb4"); | 2345 | ehea_error("no mem for cb4"); |
2346 | } else { | 2346 | } else { |
diff --git a/drivers/net/ehea/ehea_phyp.c b/drivers/net/ehea/ehea_phyp.c index 0b51a8cea077..0cfc2bc1a27b 100644 --- a/drivers/net/ehea/ehea_phyp.c +++ b/drivers/net/ehea/ehea_phyp.c | |||
@@ -506,7 +506,7 @@ u64 ehea_h_register_rpage_mr(const u64 adapter_handle, const u64 mr_handle, | |||
506 | const u8 pagesize, const u8 queue_type, | 506 | const u8 pagesize, const u8 queue_type, |
507 | const u64 log_pageaddr, const u64 count) | 507 | const u64 log_pageaddr, const u64 count) |
508 | { | 508 | { |
509 | if ((count > 1) && (log_pageaddr & 0xfff)) { | 509 | if ((count > 1) && (log_pageaddr & ~PAGE_MASK)) { |
510 | ehea_error("not on pageboundary"); | 510 | ehea_error("not on pageboundary"); |
511 | return H_PARAMETER; | 511 | return H_PARAMETER; |
512 | } | 512 | } |
diff --git a/drivers/net/ehea/ehea_phyp.h b/drivers/net/ehea/ehea_phyp.h index fa51e3b5bb05..919f94b75933 100644 --- a/drivers/net/ehea/ehea_phyp.h +++ b/drivers/net/ehea/ehea_phyp.h | |||
@@ -81,14 +81,16 @@ static inline u32 get_longbusy_msecs(int long_busy_ret_code) | |||
81 | static inline void hcp_epas_ctor(struct h_epas *epas, u64 paddr_kernel, | 81 | static inline void hcp_epas_ctor(struct h_epas *epas, u64 paddr_kernel, |
82 | u64 paddr_user) | 82 | u64 paddr_user) |
83 | { | 83 | { |
84 | epas->kernel.addr = ioremap(paddr_kernel, PAGE_SIZE); | 84 | /* To support 64k pages we must round to 64k page boundary */ |
85 | epas->kernel.addr = ioremap((paddr_kernel & PAGE_MASK), PAGE_SIZE) + | ||
86 | (paddr_kernel & ~PAGE_MASK); | ||
85 | epas->user.addr = paddr_user; | 87 | epas->user.addr = paddr_user; |
86 | } | 88 | } |
87 | 89 | ||
88 | static inline void hcp_epas_dtor(struct h_epas *epas) | 90 | static inline void hcp_epas_dtor(struct h_epas *epas) |
89 | { | 91 | { |
90 | if (epas->kernel.addr) | 92 | if (epas->kernel.addr) |
91 | iounmap(epas->kernel.addr); | 93 | iounmap((void __iomem*)((u64)epas->kernel.addr & PAGE_MASK)); |
92 | 94 | ||
93 | epas->user.addr = 0; | 95 | epas->user.addr = 0; |
94 | epas->kernel.addr = 0; | 96 | epas->kernel.addr = 0; |
diff --git a/drivers/net/ehea/ehea_qmr.c b/drivers/net/ehea/ehea_qmr.c index 3e1862326c88..72ef7bde3346 100644 --- a/drivers/net/ehea/ehea_qmr.c +++ b/drivers/net/ehea/ehea_qmr.c | |||
@@ -209,11 +209,11 @@ int ehea_destroy_cq(struct ehea_cq *cq) | |||
209 | { | 209 | { |
210 | u64 adapter_handle, hret; | 210 | u64 adapter_handle, hret; |
211 | 211 | ||
212 | adapter_handle = cq->adapter->handle; | ||
213 | |||
214 | if (!cq) | 212 | if (!cq) |
215 | return 0; | 213 | return 0; |
216 | 214 | ||
215 | adapter_handle = cq->adapter->handle; | ||
216 | |||
217 | /* deregister all previous registered pages */ | 217 | /* deregister all previous registered pages */ |
218 | hret = ehea_h_free_resource(adapter_handle, cq->fw_handle); | 218 | hret = ehea_h_free_resource(adapter_handle, cq->fw_handle); |
219 | if (hret != H_SUCCESS) { | 219 | if (hret != H_SUCCESS) { |
@@ -512,7 +512,7 @@ int ehea_reg_mr_adapter(struct ehea_adapter *adapter) | |||
512 | 512 | ||
513 | start = KERNELBASE; | 513 | start = KERNELBASE; |
514 | end = (u64)high_memory; | 514 | end = (u64)high_memory; |
515 | nr_pages = (end - start) / PAGE_SIZE; | 515 | nr_pages = (end - start) / EHEA_PAGESIZE; |
516 | 516 | ||
517 | pt = kzalloc(PAGE_SIZE, GFP_KERNEL); | 517 | pt = kzalloc(PAGE_SIZE, GFP_KERNEL); |
518 | if (!pt) { | 518 | if (!pt) { |
@@ -538,9 +538,9 @@ int ehea_reg_mr_adapter(struct ehea_adapter *adapter) | |||
538 | if (nr_pages > 1) { | 538 | if (nr_pages > 1) { |
539 | u64 num_pages = min(nr_pages, (u64)512); | 539 | u64 num_pages = min(nr_pages, (u64)512); |
540 | for (i = 0; i < num_pages; i++) | 540 | for (i = 0; i < num_pages; i++) |
541 | pt[i] = virt_to_abs((void*)(((u64)start) | 541 | pt[i] = virt_to_abs((void*)(((u64)start) + |
542 | + ((k++) * | 542 | ((k++) * |
543 | PAGE_SIZE))); | 543 | EHEA_PAGESIZE))); |
544 | 544 | ||
545 | hret = ehea_h_register_rpage_mr(adapter->handle, | 545 | hret = ehea_h_register_rpage_mr(adapter->handle, |
546 | adapter->mr.handle, 0, | 546 | adapter->mr.handle, 0, |
@@ -548,8 +548,9 @@ int ehea_reg_mr_adapter(struct ehea_adapter *adapter) | |||
548 | num_pages); | 548 | num_pages); |
549 | nr_pages -= num_pages; | 549 | nr_pages -= num_pages; |
550 | } else { | 550 | } else { |
551 | u64 abs_adr = virt_to_abs((void*)(((u64)start) | 551 | u64 abs_adr = virt_to_abs((void*)(((u64)start) + |
552 | + (k * PAGE_SIZE))); | 552 | (k * EHEA_PAGESIZE))); |
553 | |||
553 | hret = ehea_h_register_rpage_mr(adapter->handle, | 554 | hret = ehea_h_register_rpage_mr(adapter->handle, |
554 | adapter->mr.handle, 0, | 555 | adapter->mr.handle, 0, |
555 | 0, abs_adr,1); | 556 | 0, abs_adr,1); |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 8e398499c045..06e4f77b0988 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -68,8 +68,8 @@ | |||
68 | 68 | ||
69 | #define DRV_MODULE_NAME "tg3" | 69 | #define DRV_MODULE_NAME "tg3" |
70 | #define PFX DRV_MODULE_NAME ": " | 70 | #define PFX DRV_MODULE_NAME ": " |
71 | #define DRV_MODULE_VERSION "3.67" | 71 | #define DRV_MODULE_VERSION "3.68" |
72 | #define DRV_MODULE_RELDATE "October 18, 2006" | 72 | #define DRV_MODULE_RELDATE "November 02, 2006" |
73 | 73 | ||
74 | #define TG3_DEF_MAC_MODE 0 | 74 | #define TG3_DEF_MAC_MODE 0 |
75 | #define TG3_DEF_RX_MODE 0 | 75 | #define TG3_DEF_RX_MODE 0 |
@@ -6014,7 +6014,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
6014 | tg3_abort_hw(tp, 1); | 6014 | tg3_abort_hw(tp, 1); |
6015 | } | 6015 | } |
6016 | 6016 | ||
6017 | if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) && reset_phy) | 6017 | if (reset_phy) |
6018 | tg3_phy_reset(tp); | 6018 | tg3_phy_reset(tp); |
6019 | 6019 | ||
6020 | err = tg3_chip_reset(tp); | 6020 | err = tg3_chip_reset(tp); |
@@ -6574,7 +6574,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
6574 | tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); | 6574 | tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); |
6575 | } | 6575 | } |
6576 | 6576 | ||
6577 | err = tg3_setup_phy(tp, reset_phy); | 6577 | err = tg3_setup_phy(tp, 0); |
6578 | if (err) | 6578 | if (err) |
6579 | return err; | 6579 | return err; |
6580 | 6580 | ||
@@ -10212,7 +10212,7 @@ skip_phy_reset: | |||
10212 | static void __devinit tg3_read_partno(struct tg3 *tp) | 10212 | static void __devinit tg3_read_partno(struct tg3 *tp) |
10213 | { | 10213 | { |
10214 | unsigned char vpd_data[256]; | 10214 | unsigned char vpd_data[256]; |
10215 | int i; | 10215 | unsigned int i; |
10216 | u32 magic; | 10216 | u32 magic; |
10217 | 10217 | ||
10218 | if (tg3_nvram_read_swab(tp, 0x0, &magic)) | 10218 | if (tg3_nvram_read_swab(tp, 0x0, &magic)) |
@@ -10258,9 +10258,9 @@ static void __devinit tg3_read_partno(struct tg3 *tp) | |||
10258 | } | 10258 | } |
10259 | 10259 | ||
10260 | /* Now parse and find the part number. */ | 10260 | /* Now parse and find the part number. */ |
10261 | for (i = 0; i < 256; ) { | 10261 | for (i = 0; i < 254; ) { |
10262 | unsigned char val = vpd_data[i]; | 10262 | unsigned char val = vpd_data[i]; |
10263 | int block_end; | 10263 | unsigned int block_end; |
10264 | 10264 | ||
10265 | if (val == 0x82 || val == 0x91) { | 10265 | if (val == 0x82 || val == 0x91) { |
10266 | i = (i + 3 + | 10266 | i = (i + 3 + |
@@ -10276,21 +10276,26 @@ static void __devinit tg3_read_partno(struct tg3 *tp) | |||
10276 | (vpd_data[i + 1] + | 10276 | (vpd_data[i + 1] + |
10277 | (vpd_data[i + 2] << 8))); | 10277 | (vpd_data[i + 2] << 8))); |
10278 | i += 3; | 10278 | i += 3; |
10279 | while (i < block_end) { | 10279 | |
10280 | if (block_end > 256) | ||
10281 | goto out_not_found; | ||
10282 | |||
10283 | while (i < (block_end - 2)) { | ||
10280 | if (vpd_data[i + 0] == 'P' && | 10284 | if (vpd_data[i + 0] == 'P' && |
10281 | vpd_data[i + 1] == 'N') { | 10285 | vpd_data[i + 1] == 'N') { |
10282 | int partno_len = vpd_data[i + 2]; | 10286 | int partno_len = vpd_data[i + 2]; |
10283 | 10287 | ||
10284 | if (partno_len > 24) | 10288 | i += 3; |
10289 | if (partno_len > 24 || (partno_len + i) > 256) | ||
10285 | goto out_not_found; | 10290 | goto out_not_found; |
10286 | 10291 | ||
10287 | memcpy(tp->board_part_number, | 10292 | memcpy(tp->board_part_number, |
10288 | &vpd_data[i + 3], | 10293 | &vpd_data[i], partno_len); |
10289 | partno_len); | ||
10290 | 10294 | ||
10291 | /* Success. */ | 10295 | /* Success. */ |
10292 | return; | 10296 | return; |
10293 | } | 10297 | } |
10298 | i += 3 + vpd_data[i + 2]; | ||
10294 | } | 10299 | } |
10295 | 10300 | ||
10296 | /* Part number not found. */ | 10301 | /* Part number not found. */ |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c index 2ddbec6bf15b..7d383a27b927 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c | |||
@@ -189,20 +189,24 @@ void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity) | |||
189 | case BCM43xx_LED_INACTIVE: | 189 | case BCM43xx_LED_INACTIVE: |
190 | continue; | 190 | continue; |
191 | case BCM43xx_LED_OFF: | 191 | case BCM43xx_LED_OFF: |
192 | case BCM43xx_LED_BCM4303_3: | ||
192 | break; | 193 | break; |
193 | case BCM43xx_LED_ON: | 194 | case BCM43xx_LED_ON: |
194 | turn_on = 1; | 195 | turn_on = 1; |
195 | break; | 196 | break; |
196 | case BCM43xx_LED_ACTIVITY: | 197 | case BCM43xx_LED_ACTIVITY: |
198 | case BCM43xx_LED_BCM4303_0: | ||
197 | turn_on = activity; | 199 | turn_on = activity; |
198 | break; | 200 | break; |
199 | case BCM43xx_LED_RADIO_ALL: | 201 | case BCM43xx_LED_RADIO_ALL: |
200 | turn_on = radio->enabled; | 202 | turn_on = radio->enabled; |
201 | break; | 203 | break; |
202 | case BCM43xx_LED_RADIO_A: | 204 | case BCM43xx_LED_RADIO_A: |
205 | case BCM43xx_LED_BCM4303_2: | ||
203 | turn_on = (radio->enabled && phy->type == BCM43xx_PHYTYPE_A); | 206 | turn_on = (radio->enabled && phy->type == BCM43xx_PHYTYPE_A); |
204 | break; | 207 | break; |
205 | case BCM43xx_LED_RADIO_B: | 208 | case BCM43xx_LED_RADIO_B: |
209 | case BCM43xx_LED_BCM4303_1: | ||
206 | turn_on = (radio->enabled && | 210 | turn_on = (radio->enabled && |
207 | (phy->type == BCM43xx_PHYTYPE_B || | 211 | (phy->type == BCM43xx_PHYTYPE_B || |
208 | phy->type == BCM43xx_PHYTYPE_G)); | 212 | phy->type == BCM43xx_PHYTYPE_G)); |
@@ -257,7 +261,8 @@ void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity) | |||
257 | continue; | 261 | continue; |
258 | #endif /* CONFIG_BCM43XX_DEBUG */ | 262 | #endif /* CONFIG_BCM43XX_DEBUG */ |
259 | default: | 263 | default: |
260 | assert(0); | 264 | dprintkl(KERN_INFO PFX "Bad value in leds_update," |
265 | " led->behaviour: 0x%x\n", led->behaviour); | ||
261 | }; | 266 | }; |
262 | 267 | ||
263 | if (led->activelow) | 268 | if (led->activelow) |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_leds.h b/drivers/net/wireless/bcm43xx/bcm43xx_leds.h index d3716cf3aebc..811e14a81198 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_leds.h +++ b/drivers/net/wireless/bcm43xx/bcm43xx_leds.h | |||
@@ -46,6 +46,12 @@ enum { /* LED behaviour values */ | |||
46 | BCM43xx_LED_TEST_BLINKSLOW, | 46 | BCM43xx_LED_TEST_BLINKSLOW, |
47 | BCM43xx_LED_TEST_BLINKMEDIUM, | 47 | BCM43xx_LED_TEST_BLINKMEDIUM, |
48 | BCM43xx_LED_TEST_BLINKFAST, | 48 | BCM43xx_LED_TEST_BLINKFAST, |
49 | |||
50 | /* Misc values for BCM4303 */ | ||
51 | BCM43xx_LED_BCM4303_0 = 0x2B, | ||
52 | BCM43xx_LED_BCM4303_1 = 0x78, | ||
53 | BCM43xx_LED_BCM4303_2 = 0x2E, | ||
54 | BCM43xx_LED_BCM4303_3 = 0x19, | ||
49 | }; | 55 | }; |
50 | 56 | ||
51 | int bcm43xx_leds_init(struct bcm43xx_private *bcm); | 57 | int bcm43xx_leds_init(struct bcm43xx_private *bcm); |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index a94c6d8826f8..a1b783813d8e 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
@@ -746,7 +746,7 @@ int bcm43xx_sprom_write(struct bcm43xx_private *bcm, const u16 *sprom) | |||
746 | if (err) | 746 | if (err) |
747 | goto err_ctlreg; | 747 | goto err_ctlreg; |
748 | spromctl |= 0x10; /* SPROM WRITE enable. */ | 748 | spromctl |= 0x10; /* SPROM WRITE enable. */ |
749 | bcm43xx_pci_write_config32(bcm, BCM43xx_PCICFG_SPROMCTL, spromctl); | 749 | err = bcm43xx_pci_write_config32(bcm, BCM43xx_PCICFG_SPROMCTL, spromctl); |
750 | if (err) | 750 | if (err) |
751 | goto err_ctlreg; | 751 | goto err_ctlreg; |
752 | /* We must burn lots of CPU cycles here, but that does not | 752 | /* We must burn lots of CPU cycles here, but that does not |
@@ -768,7 +768,7 @@ int bcm43xx_sprom_write(struct bcm43xx_private *bcm, const u16 *sprom) | |||
768 | mdelay(20); | 768 | mdelay(20); |
769 | } | 769 | } |
770 | spromctl &= ~0x10; /* SPROM WRITE enable. */ | 770 | spromctl &= ~0x10; /* SPROM WRITE enable. */ |
771 | bcm43xx_pci_write_config32(bcm, BCM43xx_PCICFG_SPROMCTL, spromctl); | 771 | err = bcm43xx_pci_write_config32(bcm, BCM43xx_PCICFG_SPROMCTL, spromctl); |
772 | if (err) | 772 | if (err) |
773 | goto err_ctlreg; | 773 | goto err_ctlreg; |
774 | mdelay(500); | 774 | mdelay(500); |
@@ -1463,6 +1463,23 @@ static void handle_irq_transmit_status(struct bcm43xx_private *bcm) | |||
1463 | } | 1463 | } |
1464 | } | 1464 | } |
1465 | 1465 | ||
1466 | static void drain_txstatus_queue(struct bcm43xx_private *bcm) | ||
1467 | { | ||
1468 | u32 dummy; | ||
1469 | |||
1470 | if (bcm->current_core->rev < 5) | ||
1471 | return; | ||
1472 | /* Read all entries from the microcode TXstatus FIFO | ||
1473 | * and throw them away. | ||
1474 | */ | ||
1475 | while (1) { | ||
1476 | dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_0); | ||
1477 | if (!dummy) | ||
1478 | break; | ||
1479 | dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_1); | ||
1480 | } | ||
1481 | } | ||
1482 | |||
1466 | static void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm) | 1483 | static void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm) |
1467 | { | 1484 | { |
1468 | bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x408, 0x7F7F); | 1485 | bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x408, 0x7F7F); |
@@ -3163,9 +3180,11 @@ static int estimate_periodic_work_badness(unsigned int state) | |||
3163 | static void bcm43xx_periodic_work_handler(void *d) | 3180 | static void bcm43xx_periodic_work_handler(void *d) |
3164 | { | 3181 | { |
3165 | struct bcm43xx_private *bcm = d; | 3182 | struct bcm43xx_private *bcm = d; |
3183 | struct net_device *net_dev = bcm->net_dev; | ||
3166 | unsigned long flags; | 3184 | unsigned long flags; |
3167 | u32 savedirqs = 0; | 3185 | u32 savedirqs = 0; |
3168 | int badness; | 3186 | int badness; |
3187 | unsigned long orig_trans_start = 0; | ||
3169 | 3188 | ||
3170 | mutex_lock(&bcm->mutex); | 3189 | mutex_lock(&bcm->mutex); |
3171 | badness = estimate_periodic_work_badness(bcm->periodic_state); | 3190 | badness = estimate_periodic_work_badness(bcm->periodic_state); |
@@ -3173,7 +3192,18 @@ static void bcm43xx_periodic_work_handler(void *d) | |||
3173 | /* Periodic work will take a long time, so we want it to | 3192 | /* Periodic work will take a long time, so we want it to |
3174 | * be preemtible. | 3193 | * be preemtible. |
3175 | */ | 3194 | */ |
3176 | netif_tx_disable(bcm->net_dev); | 3195 | |
3196 | netif_tx_lock_bh(net_dev); | ||
3197 | /* We must fake a started transmission here, as we are going to | ||
3198 | * disable TX. If we wouldn't fake a TX, it would be possible to | ||
3199 | * trigger the netdev watchdog, if the last real TX is already | ||
3200 | * some time on the past (slightly less than 5secs) | ||
3201 | */ | ||
3202 | orig_trans_start = net_dev->trans_start; | ||
3203 | net_dev->trans_start = jiffies; | ||
3204 | netif_stop_queue(net_dev); | ||
3205 | netif_tx_unlock_bh(net_dev); | ||
3206 | |||
3177 | spin_lock_irqsave(&bcm->irq_lock, flags); | 3207 | spin_lock_irqsave(&bcm->irq_lock, flags); |
3178 | bcm43xx_mac_suspend(bcm); | 3208 | bcm43xx_mac_suspend(bcm); |
3179 | if (bcm43xx_using_pio(bcm)) | 3209 | if (bcm43xx_using_pio(bcm)) |
@@ -3198,6 +3228,7 @@ static void bcm43xx_periodic_work_handler(void *d) | |||
3198 | bcm43xx_pio_thaw_txqueues(bcm); | 3228 | bcm43xx_pio_thaw_txqueues(bcm); |
3199 | bcm43xx_mac_enable(bcm); | 3229 | bcm43xx_mac_enable(bcm); |
3200 | netif_wake_queue(bcm->net_dev); | 3230 | netif_wake_queue(bcm->net_dev); |
3231 | net_dev->trans_start = orig_trans_start; | ||
3201 | } | 3232 | } |
3202 | mmiowb(); | 3233 | mmiowb(); |
3203 | spin_unlock_irqrestore(&bcm->irq_lock, flags); | 3234 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
@@ -3518,6 +3549,7 @@ int bcm43xx_select_wireless_core(struct bcm43xx_private *bcm, | |||
3518 | bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC); | 3549 | bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC); |
3519 | bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr)); | 3550 | bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr)); |
3520 | bcm43xx_security_init(bcm); | 3551 | bcm43xx_security_init(bcm); |
3552 | drain_txstatus_queue(bcm); | ||
3521 | ieee80211softmac_start(bcm->net_dev); | 3553 | ieee80211softmac_start(bcm->net_dev); |
3522 | 3554 | ||
3523 | /* Let's go! Be careful after enabling the IRQs. | 3555 | /* Let's go! Be careful after enabling the IRQs. |
diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c index 6dfa041be66d..bc81b13a5a2a 100644 --- a/drivers/net/wireless/hostap/hostap_plx.c +++ b/drivers/net/wireless/hostap/hostap_plx.c | |||
@@ -364,7 +364,7 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len, | |||
364 | 364 | ||
365 | pos = 0; | 365 | pos = 0; |
366 | while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) { | 366 | while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) { |
367 | if (pos + cis[pos + 1] >= CIS_MAX_LEN) | 367 | if (pos + 2 + cis[pos + 1] > CIS_MAX_LEN) |
368 | goto cis_error; | 368 | goto cis_error; |
369 | 369 | ||
370 | switch (cis[pos]) { | 370 | switch (cis[pos]) { |
@@ -391,7 +391,7 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len, | |||
391 | break; | 391 | break; |
392 | 392 | ||
393 | case CISTPL_MANFID: | 393 | case CISTPL_MANFID: |
394 | if (cis[pos + 1] < 5) | 394 | if (cis[pos + 1] < 4) |
395 | goto cis_error; | 395 | goto cis_error; |
396 | manfid1 = cis[pos + 2] + (cis[pos + 3] << 8); | 396 | manfid1 = cis[pos + 2] + (cis[pos + 3] << 8); |
397 | manfid2 = cis[pos + 4] + (cis[pos + 5] << 8); | 397 | manfid2 = cis[pos + 4] + (cis[pos + 5] << 8); |
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig index ecc50db8585a..5f1b9f58070e 100644 --- a/drivers/pci/Kconfig +++ b/drivers/pci/Kconfig | |||
@@ -19,7 +19,7 @@ config PCI_MSI | |||
19 | 19 | ||
20 | config PCI_MULTITHREAD_PROBE | 20 | config PCI_MULTITHREAD_PROBE |
21 | bool "PCI Multi-threaded probe (EXPERIMENTAL)" | 21 | bool "PCI Multi-threaded probe (EXPERIMENTAL)" |
22 | depends on PCI && EXPERIMENTAL | 22 | depends on PCI && EXPERIMENTAL && BROKEN |
23 | help | 23 | help |
24 | Say Y here if you want the PCI core to spawn a new thread for | 24 | Say Y here if you want the PCI core to spawn a new thread for |
25 | every PCI device that is probed. This can cause a huge | 25 | every PCI device that is probed. This can cause a huge |
diff --git a/drivers/pci/htirq.c b/drivers/pci/htirq.c index 0e27f2404a83..0a8d1cce9fa0 100644 --- a/drivers/pci/htirq.c +++ b/drivers/pci/htirq.c | |||
@@ -25,97 +25,72 @@ static DEFINE_SPINLOCK(ht_irq_lock); | |||
25 | 25 | ||
26 | struct ht_irq_cfg { | 26 | struct ht_irq_cfg { |
27 | struct pci_dev *dev; | 27 | struct pci_dev *dev; |
28 | /* Update callback used to cope with buggy hardware */ | ||
29 | ht_irq_update_t *update; | ||
28 | unsigned pos; | 30 | unsigned pos; |
29 | unsigned idx; | 31 | unsigned idx; |
32 | struct ht_irq_msg msg; | ||
30 | }; | 33 | }; |
31 | 34 | ||
32 | void write_ht_irq_low(unsigned int irq, u32 data) | ||
33 | { | ||
34 | struct ht_irq_cfg *cfg = get_irq_data(irq); | ||
35 | unsigned long flags; | ||
36 | spin_lock_irqsave(&ht_irq_lock, flags); | ||
37 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx); | ||
38 | pci_write_config_dword(cfg->dev, cfg->pos + 4, data); | ||
39 | spin_unlock_irqrestore(&ht_irq_lock, flags); | ||
40 | } | ||
41 | 35 | ||
42 | void write_ht_irq_high(unsigned int irq, u32 data) | 36 | void write_ht_irq_msg(unsigned int irq, struct ht_irq_msg *msg) |
43 | { | 37 | { |
44 | struct ht_irq_cfg *cfg = get_irq_data(irq); | 38 | struct ht_irq_cfg *cfg = get_irq_data(irq); |
45 | unsigned long flags; | 39 | unsigned long flags; |
46 | spin_lock_irqsave(&ht_irq_lock, flags); | 40 | spin_lock_irqsave(&ht_irq_lock, flags); |
47 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx + 1); | 41 | if (cfg->msg.address_lo != msg->address_lo) { |
48 | pci_write_config_dword(cfg->dev, cfg->pos + 4, data); | 42 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx); |
49 | spin_unlock_irqrestore(&ht_irq_lock, flags); | 43 | pci_write_config_dword(cfg->dev, cfg->pos + 4, msg->address_lo); |
50 | } | 44 | } |
51 | 45 | if (cfg->msg.address_hi != msg->address_hi) { | |
52 | u32 read_ht_irq_low(unsigned int irq) | 46 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx + 1); |
53 | { | 47 | pci_write_config_dword(cfg->dev, cfg->pos + 4, msg->address_hi); |
54 | struct ht_irq_cfg *cfg = get_irq_data(irq); | 48 | } |
55 | unsigned long flags; | 49 | if (cfg->update) |
56 | u32 data; | 50 | cfg->update(cfg->dev, irq, msg); |
57 | spin_lock_irqsave(&ht_irq_lock, flags); | ||
58 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx); | ||
59 | pci_read_config_dword(cfg->dev, cfg->pos + 4, &data); | ||
60 | spin_unlock_irqrestore(&ht_irq_lock, flags); | 51 | spin_unlock_irqrestore(&ht_irq_lock, flags); |
61 | return data; | 52 | cfg->msg = *msg; |
62 | } | 53 | } |
63 | 54 | ||
64 | u32 read_ht_irq_high(unsigned int irq) | 55 | void fetch_ht_irq_msg(unsigned int irq, struct ht_irq_msg *msg) |
65 | { | 56 | { |
66 | struct ht_irq_cfg *cfg = get_irq_data(irq); | 57 | struct ht_irq_cfg *cfg = get_irq_data(irq); |
67 | unsigned long flags; | 58 | *msg = cfg->msg; |
68 | u32 data; | ||
69 | spin_lock_irqsave(&ht_irq_lock, flags); | ||
70 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx + 1); | ||
71 | pci_read_config_dword(cfg->dev, cfg->pos + 4, &data); | ||
72 | spin_unlock_irqrestore(&ht_irq_lock, flags); | ||
73 | return data; | ||
74 | } | 59 | } |
75 | 60 | ||
76 | void mask_ht_irq(unsigned int irq) | 61 | void mask_ht_irq(unsigned int irq) |
77 | { | 62 | { |
78 | struct ht_irq_cfg *cfg; | 63 | struct ht_irq_cfg *cfg; |
79 | unsigned long flags; | 64 | struct ht_irq_msg msg; |
80 | u32 data; | ||
81 | 65 | ||
82 | cfg = get_irq_data(irq); | 66 | cfg = get_irq_data(irq); |
83 | 67 | ||
84 | spin_lock_irqsave(&ht_irq_lock, flags); | 68 | msg = cfg->msg; |
85 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx); | 69 | msg.address_lo |= 1; |
86 | pci_read_config_dword(cfg->dev, cfg->pos + 4, &data); | 70 | write_ht_irq_msg(irq, &msg); |
87 | data |= 1; | ||
88 | pci_write_config_dword(cfg->dev, cfg->pos + 4, data); | ||
89 | spin_unlock_irqrestore(&ht_irq_lock, flags); | ||
90 | } | 71 | } |
91 | 72 | ||
92 | void unmask_ht_irq(unsigned int irq) | 73 | void unmask_ht_irq(unsigned int irq) |
93 | { | 74 | { |
94 | struct ht_irq_cfg *cfg; | 75 | struct ht_irq_cfg *cfg; |
95 | unsigned long flags; | 76 | struct ht_irq_msg msg; |
96 | u32 data; | ||
97 | 77 | ||
98 | cfg = get_irq_data(irq); | 78 | cfg = get_irq_data(irq); |
99 | 79 | ||
100 | spin_lock_irqsave(&ht_irq_lock, flags); | 80 | msg = cfg->msg; |
101 | pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx); | 81 | msg.address_lo &= ~1; |
102 | pci_read_config_dword(cfg->dev, cfg->pos + 4, &data); | 82 | write_ht_irq_msg(irq, &msg); |
103 | data &= ~1; | ||
104 | pci_write_config_dword(cfg->dev, cfg->pos + 4, data); | ||
105 | spin_unlock_irqrestore(&ht_irq_lock, flags); | ||
106 | } | 83 | } |
107 | 84 | ||
108 | /** | 85 | /** |
109 | * ht_create_irq - create an irq and attach it to a device. | 86 | * __ht_create_irq - create an irq and attach it to a device. |
110 | * @dev: The hypertransport device to find the irq capability on. | 87 | * @dev: The hypertransport device to find the irq capability on. |
111 | * @idx: Which of the possible irqs to attach to. | 88 | * @idx: Which of the possible irqs to attach to. |
112 | * | 89 | * @update: Function to be called when changing the htirq message |
113 | * ht_create_irq is needs to be called for all hypertransport devices | ||
114 | * that generate irqs. | ||
115 | * | 90 | * |
116 | * The irq number of the new irq or a negative error value is returned. | 91 | * The irq number of the new irq or a negative error value is returned. |
117 | */ | 92 | */ |
118 | int ht_create_irq(struct pci_dev *dev, int idx) | 93 | int __ht_create_irq(struct pci_dev *dev, int idx, ht_irq_update_t *update) |
119 | { | 94 | { |
120 | struct ht_irq_cfg *cfg; | 95 | struct ht_irq_cfg *cfg; |
121 | unsigned long flags; | 96 | unsigned long flags; |
@@ -150,8 +125,12 @@ int ht_create_irq(struct pci_dev *dev, int idx) | |||
150 | return -ENOMEM; | 125 | return -ENOMEM; |
151 | 126 | ||
152 | cfg->dev = dev; | 127 | cfg->dev = dev; |
128 | cfg->update = update; | ||
153 | cfg->pos = pos; | 129 | cfg->pos = pos; |
154 | cfg->idx = 0x10 + (idx * 2); | 130 | cfg->idx = 0x10 + (idx * 2); |
131 | /* Initialize msg to a value that will never match the first write. */ | ||
132 | cfg->msg.address_lo = 0xffffffff; | ||
133 | cfg->msg.address_hi = 0xffffffff; | ||
155 | 134 | ||
156 | irq = create_irq(); | 135 | irq = create_irq(); |
157 | if (irq < 0) { | 136 | if (irq < 0) { |
@@ -169,6 +148,21 @@ int ht_create_irq(struct pci_dev *dev, int idx) | |||
169 | } | 148 | } |
170 | 149 | ||
171 | /** | 150 | /** |
151 | * ht_create_irq - create an irq and attach it to a device. | ||
152 | * @dev: The hypertransport device to find the irq capability on. | ||
153 | * @idx: Which of the possible irqs to attach to. | ||
154 | * | ||
155 | * ht_create_irq needs to be called for all hypertransport devices | ||
156 | * that generate irqs. | ||
157 | * | ||
158 | * The irq number of the new irq or a negative error value is returned. | ||
159 | */ | ||
160 | int ht_create_irq(struct pci_dev *dev, int idx) | ||
161 | { | ||
162 | return __ht_create_irq(dev, idx, NULL); | ||
163 | } | ||
164 | |||
165 | /** | ||
172 | * ht_destroy_irq - destroy an irq created with ht_create_irq | 166 | * ht_destroy_irq - destroy an irq created with ht_create_irq |
173 | * | 167 | * |
174 | * This reverses ht_create_irq removing the specified irq from | 168 | * This reverses ht_create_irq removing the specified irq from |
@@ -186,5 +180,6 @@ void ht_destroy_irq(unsigned int irq) | |||
186 | kfree(cfg); | 180 | kfree(cfg); |
187 | } | 181 | } |
188 | 182 | ||
183 | EXPORT_SYMBOL(__ht_create_irq); | ||
189 | EXPORT_SYMBOL(ht_create_irq); | 184 | EXPORT_SYMBOL(ht_create_irq); |
190 | EXPORT_SYMBOL(ht_destroy_irq); | 185 | EXPORT_SYMBOL(ht_destroy_irq); |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index a1d2e979b17f..f952bfea48a6 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
@@ -642,6 +642,9 @@ err: | |||
642 | */ | 642 | */ |
643 | void pci_remove_sysfs_dev_files(struct pci_dev *pdev) | 643 | void pci_remove_sysfs_dev_files(struct pci_dev *pdev) |
644 | { | 644 | { |
645 | if (!sysfs_initialized) | ||
646 | return; | ||
647 | |||
645 | if (pdev->cfg_size < 4096) | 648 | if (pdev->cfg_size < 4096) |
646 | sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr); | 649 | sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr); |
647 | else | 650 | else |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index fd9e281c3bfe..94a274645f6f 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -631,12 +631,22 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, | |||
631 | * scanning run at their own risk, or supply a user level program | 631 | * scanning run at their own risk, or supply a user level program |
632 | * that can correctly scan. | 632 | * that can correctly scan. |
633 | */ | 633 | */ |
634 | sdev->inquiry = kmalloc(sdev->inquiry_len, GFP_ATOMIC); | 634 | |
635 | if (sdev->inquiry == NULL) { | 635 | /* |
636 | * Copy at least 36 bytes of INQUIRY data, so that we don't | ||
637 | * dereference unallocated memory when accessing the Vendor, | ||
638 | * Product, and Revision strings. Badly behaved devices may set | ||
639 | * the INQUIRY Additional Length byte to a small value, indicating | ||
640 | * these strings are invalid, but often they contain plausible data | ||
641 | * nonetheless. It doesn't matter if the device sent < 36 bytes | ||
642 | * total, since scsi_probe_lun() initializes inq_result with 0s. | ||
643 | */ | ||
644 | sdev->inquiry = kmemdup(inq_result, | ||
645 | max_t(size_t, sdev->inquiry_len, 36), | ||
646 | GFP_ATOMIC); | ||
647 | if (sdev->inquiry == NULL) | ||
636 | return SCSI_SCAN_NO_RESPONSE; | 648 | return SCSI_SCAN_NO_RESPONSE; |
637 | } | ||
638 | 649 | ||
639 | memcpy(sdev->inquiry, inq_result, sdev->inquiry_len); | ||
640 | sdev->vendor = (char *) (sdev->inquiry + 8); | 650 | sdev->vendor = (char *) (sdev->inquiry + 8); |
641 | sdev->model = (char *) (sdev->inquiry + 16); | 651 | sdev->model = (char *) (sdev->inquiry + 16); |
642 | sdev->rev = (char *) (sdev->inquiry + 32); | 652 | sdev->rev = (char *) (sdev->inquiry + 32); |
diff --git a/drivers/serial/cpm_uart/cpm_uart.h b/drivers/serial/cpm_uart/cpm_uart.h index a8f894c78194..69715e556506 100644 --- a/drivers/serial/cpm_uart/cpm_uart.h +++ b/drivers/serial/cpm_uart/cpm_uart.h | |||
@@ -88,7 +88,7 @@ extern struct uart_cpm_port cpm_uart_ports[UART_NR]; | |||
88 | 88 | ||
89 | /* these are located in their respective files */ | 89 | /* these are located in their respective files */ |
90 | void cpm_line_cr_cmd(int line, int cmd); | 90 | void cpm_line_cr_cmd(int line, int cmd); |
91 | int cpm_uart_init_portdesc(void); | 91 | int __init cpm_uart_init_portdesc(void); |
92 | int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con); | 92 | int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con); |
93 | void cpm_uart_freebuf(struct uart_cpm_port *pinfo); | 93 | void cpm_uart_freebuf(struct uart_cpm_port *pinfo); |
94 | 94 | ||
diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c index 0abb544ae63d..7a3b97fdf8d1 100644 --- a/drivers/serial/cpm_uart/cpm_uart_core.c +++ b/drivers/serial/cpm_uart/cpm_uart_core.c | |||
@@ -195,10 +195,8 @@ static void cpm_uart_start_tx(struct uart_port *port) | |||
195 | if (cpm_uart_tx_pump(port) != 0) { | 195 | if (cpm_uart_tx_pump(port) != 0) { |
196 | if (IS_SMC(pinfo)) { | 196 | if (IS_SMC(pinfo)) { |
197 | smcp->smc_smcm |= SMCM_TX; | 197 | smcp->smc_smcm |= SMCM_TX; |
198 | smcp->smc_smcmr |= SMCMR_TEN; | ||
199 | } else { | 198 | } else { |
200 | sccp->scc_sccm |= UART_SCCM_TX; | 199 | sccp->scc_sccm |= UART_SCCM_TX; |
201 | pinfo->sccp->scc_gsmrl |= SCC_GSMRL_ENT; | ||
202 | } | 200 | } |
203 | } | 201 | } |
204 | } | 202 | } |
@@ -421,9 +419,10 @@ static int cpm_uart_startup(struct uart_port *port) | |||
421 | /* Startup rx-int */ | 419 | /* Startup rx-int */ |
422 | if (IS_SMC(pinfo)) { | 420 | if (IS_SMC(pinfo)) { |
423 | pinfo->smcp->smc_smcm |= SMCM_RX; | 421 | pinfo->smcp->smc_smcm |= SMCM_RX; |
424 | pinfo->smcp->smc_smcmr |= SMCMR_REN; | 422 | pinfo->smcp->smc_smcmr |= (SMCMR_REN | SMCMR_TEN); |
425 | } else { | 423 | } else { |
426 | pinfo->sccp->scc_sccm |= UART_SCCM_RX; | 424 | pinfo->sccp->scc_sccm |= UART_SCCM_RX; |
425 | pinfo->sccp->scc_gsmrl |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT); | ||
427 | } | 426 | } |
428 | 427 | ||
429 | if (!(pinfo->flags & FLAG_CONSOLE)) | 428 | if (!(pinfo->flags & FLAG_CONSOLE)) |
@@ -1350,11 +1349,10 @@ static int cpm_uart_init(void) { | |||
1350 | pr_info("cpm_uart: WARNING: no UART devices found on platform bus!\n"); | 1349 | pr_info("cpm_uart: WARNING: no UART devices found on platform bus!\n"); |
1351 | pr_info( | 1350 | pr_info( |
1352 | "cpm_uart: the driver will guess configuration, but this mode is no longer supported.\n"); | 1351 | "cpm_uart: the driver will guess configuration, but this mode is no longer supported.\n"); |
1353 | #ifndef CONFIG_SERIAL_CPM_CONSOLE | 1352 | |
1354 | ret = cpm_uart_init_portdesc(); | 1353 | /* Don't run this again, if the console driver did it already */ |
1355 | if (ret) | 1354 | if (cpm_uart_nr == 0) |
1356 | return ret; | 1355 | cpm_uart_init_portdesc(); |
1357 | #endif | ||
1358 | 1356 | ||
1359 | cpm_reg.nr = cpm_uart_nr; | 1357 | cpm_reg.nr = cpm_uart_nr; |
1360 | ret = uart_register_driver(&cpm_reg); | 1358 | ret = uart_register_driver(&cpm_reg); |
@@ -1366,6 +1364,8 @@ static int cpm_uart_init(void) { | |||
1366 | int con = cpm_uart_port_map[i]; | 1364 | int con = cpm_uart_port_map[i]; |
1367 | cpm_uart_ports[con].port.line = i; | 1365 | cpm_uart_ports[con].port.line = i; |
1368 | cpm_uart_ports[con].port.flags = UPF_BOOT_AUTOCONF; | 1366 | cpm_uart_ports[con].port.flags = UPF_BOOT_AUTOCONF; |
1367 | if (cpm_uart_ports[con].set_lineif) | ||
1368 | cpm_uart_ports[con].set_lineif(&cpm_uart_ports[con]); | ||
1369 | uart_add_one_port(&cpm_reg, &cpm_uart_ports[con].port); | 1369 | uart_add_one_port(&cpm_reg, &cpm_uart_ports[con].port); |
1370 | } | 1370 | } |
1371 | 1371 | ||
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm1.c b/drivers/serial/cpm_uart/cpm_uart_cpm1.c index 95afc37297a8..08e55fdc882a 100644 --- a/drivers/serial/cpm_uart/cpm_uart_cpm1.c +++ b/drivers/serial/cpm_uart/cpm_uart_cpm1.c | |||
@@ -184,7 +184,7 @@ void cpm_uart_freebuf(struct uart_cpm_port *pinfo) | |||
184 | } | 184 | } |
185 | 185 | ||
186 | /* Setup any dynamic params in the uart desc */ | 186 | /* Setup any dynamic params in the uart desc */ |
187 | int cpm_uart_init_portdesc(void) | 187 | int __init cpm_uart_init_portdesc(void) |
188 | { | 188 | { |
189 | pr_debug("CPM uart[-]:init portdesc\n"); | 189 | pr_debug("CPM uart[-]:init portdesc\n"); |
190 | 190 | ||
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 146298ad7371..c3c0626f550b 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -281,7 +281,6 @@ spi_register_board_info(struct spi_board_info const *info, unsigned n) | |||
281 | up(&board_lock); | 281 | up(&board_lock); |
282 | return 0; | 282 | return 0; |
283 | } | 283 | } |
284 | EXPORT_SYMBOL_GPL(spi_register_board_info); | ||
285 | 284 | ||
286 | /* FIXME someone should add support for a __setup("spi", ...) that | 285 | /* FIXME someone should add support for a __setup("spi", ...) that |
287 | * creates board info from kernel command lines | 286 | * creates board info from kernel command lines |
diff --git a/drivers/telephony/ixj.h b/drivers/telephony/ixj.h index fbea4541c234..8d69bcdc29c9 100644 --- a/drivers/telephony/ixj.h +++ b/drivers/telephony/ixj.h | |||
@@ -1295,7 +1295,7 @@ typedef struct { | |||
1295 | Proc_Info_Type Info_write; | 1295 | Proc_Info_Type Info_write; |
1296 | unsigned short frame_count; | 1296 | unsigned short frame_count; |
1297 | unsigned int filter_hist[4]; | 1297 | unsigned int filter_hist[4]; |
1298 | unsigned char filter_en[4]; | 1298 | unsigned char filter_en[6]; |
1299 | unsigned short proc_load; | 1299 | unsigned short proc_load; |
1300 | unsigned long framesread; | 1300 | unsigned long framesread; |
1301 | unsigned long frameswritten; | 1301 | unsigned long frameswritten; |
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index 809d465eb257..6303970e93c1 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c | |||
@@ -722,6 +722,7 @@ static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t | |||
722 | usblp->wcomplete = 0; | 722 | usblp->wcomplete = 0; |
723 | err = usb_submit_urb(usblp->writeurb, GFP_KERNEL); | 723 | err = usb_submit_urb(usblp->writeurb, GFP_KERNEL); |
724 | if (err) { | 724 | if (err) { |
725 | usblp->wcomplete = 1; | ||
725 | if (err != -ENOMEM) | 726 | if (err != -ENOMEM) |
726 | count = -EIO; | 727 | count = -EIO; |
727 | else | 728 | else |
@@ -1202,8 +1203,6 @@ static int usblp_suspend (struct usb_interface *intf, pm_message_t message) | |||
1202 | down (&usblp->sem); | 1203 | down (&usblp->sem); |
1203 | /* we take no more IO */ | 1204 | /* we take no more IO */ |
1204 | usblp->sleeping = 1; | 1205 | usblp->sleeping = 1; |
1205 | /* we wait for anything printing */ | ||
1206 | wait_event (usblp->wait, usblp->wcomplete || !usblp->present); | ||
1207 | usblp_unlink_urbs(usblp); | 1206 | usblp_unlink_urbs(usblp); |
1208 | up (&usblp->sem); | 1207 | up (&usblp->sem); |
1209 | mutex_unlock (&usblp_mutex); | 1208 | mutex_unlock (&usblp_mutex); |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 66bff184a30c..ba165aff9ea4 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -1188,6 +1188,7 @@ static inline void show_string(struct usb_device *udev, char *id, char *string) | |||
1188 | 1188 | ||
1189 | #ifdef CONFIG_USB_OTG | 1189 | #ifdef CONFIG_USB_OTG |
1190 | #include "otg_whitelist.h" | 1190 | #include "otg_whitelist.h" |
1191 | static int __usb_port_suspend(struct usb_device *, int port1); | ||
1191 | #endif | 1192 | #endif |
1192 | 1193 | ||
1193 | /** | 1194 | /** |
@@ -1289,8 +1290,6 @@ int usb_new_device(struct usb_device *udev) | |||
1289 | * (Includes HNP test device.) | 1290 | * (Includes HNP test device.) |
1290 | */ | 1291 | */ |
1291 | if (udev->bus->b_hnp_enable || udev->bus->is_b_host) { | 1292 | if (udev->bus->b_hnp_enable || udev->bus->is_b_host) { |
1292 | static int __usb_port_suspend(struct usb_device *, | ||
1293 | int port1); | ||
1294 | err = __usb_port_suspend(udev, udev->bus->otg_port); | 1293 | err = __usb_port_suspend(udev, udev->bus->otg_port); |
1295 | if (err < 0) | 1294 | if (err < 0) |
1296 | dev_dbg(&udev->dev, "HNP fail, %d\n", err); | 1295 | dev_dbg(&udev->dev, "HNP fail, %d\n", err); |
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c index 45f44fe33bfe..6daf85c6eeee 100644 --- a/drivers/usb/input/hid-core.c +++ b/drivers/usb/input/hid-core.c | |||
@@ -270,7 +270,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign | |||
270 | * Read data value from item. | 270 | * Read data value from item. |
271 | */ | 271 | */ |
272 | 272 | ||
273 | static __inline__ __u32 item_udata(struct hid_item *item) | 273 | static u32 item_udata(struct hid_item *item) |
274 | { | 274 | { |
275 | switch (item->size) { | 275 | switch (item->size) { |
276 | case 1: return item->data.u8; | 276 | case 1: return item->data.u8; |
@@ -280,7 +280,7 @@ static __inline__ __u32 item_udata(struct hid_item *item) | |||
280 | return 0; | 280 | return 0; |
281 | } | 281 | } |
282 | 282 | ||
283 | static __inline__ __s32 item_sdata(struct hid_item *item) | 283 | static s32 item_sdata(struct hid_item *item) |
284 | { | 284 | { |
285 | switch (item->size) { | 285 | switch (item->size) { |
286 | case 1: return item->data.s8; | 286 | case 1: return item->data.s8; |
@@ -727,7 +727,7 @@ static struct hid_device *hid_parse_report(__u8 *start, unsigned size) | |||
727 | * done by hand. | 727 | * done by hand. |
728 | */ | 728 | */ |
729 | 729 | ||
730 | static __inline__ __s32 snto32(__u32 value, unsigned n) | 730 | static s32 snto32(__u32 value, unsigned n) |
731 | { | 731 | { |
732 | switch (n) { | 732 | switch (n) { |
733 | case 8: return ((__s8)value); | 733 | case 8: return ((__s8)value); |
@@ -741,9 +741,9 @@ static __inline__ __s32 snto32(__u32 value, unsigned n) | |||
741 | * Convert a signed 32-bit integer to a signed n-bit integer. | 741 | * Convert a signed 32-bit integer to a signed n-bit integer. |
742 | */ | 742 | */ |
743 | 743 | ||
744 | static __inline__ __u32 s32ton(__s32 value, unsigned n) | 744 | static u32 s32ton(__s32 value, unsigned n) |
745 | { | 745 | { |
746 | __s32 a = value >> (n - 1); | 746 | s32 a = value >> (n - 1); |
747 | if (a && a != -1) | 747 | if (a && a != -1) |
748 | return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1; | 748 | return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1; |
749 | return value & ((1 << n) - 1); | 749 | return value & ((1 << n) - 1); |
@@ -751,30 +751,55 @@ static __inline__ __u32 s32ton(__s32 value, unsigned n) | |||
751 | 751 | ||
752 | /* | 752 | /* |
753 | * Extract/implement a data field from/to a little endian report (bit array). | 753 | * Extract/implement a data field from/to a little endian report (bit array). |
754 | * | ||
755 | * Code sort-of follows HID spec: | ||
756 | * http://www.usb.org/developers/devclass_docs/HID1_11.pdf | ||
757 | * | ||
758 | * While the USB HID spec allows unlimited length bit fields in "report | ||
759 | * descriptors", most devices never use more than 16 bits. | ||
760 | * One model of UPS is claimed to report "LINEV" as a 32-bit field. | ||
761 | * Search linux-kernel and linux-usb-devel archives for "hid-core extract". | ||
754 | */ | 762 | */ |
755 | 763 | ||
756 | static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n) | 764 | static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n) |
757 | { | 765 | { |
758 | u32 x; | 766 | u64 x; |
767 | |||
768 | WARN_ON(n > 32); | ||
759 | 769 | ||
760 | report += offset >> 3; /* adjust byte index */ | 770 | report += offset >> 3; /* adjust byte index */ |
761 | offset &= 8 - 1; | 771 | offset &= 7; /* now only need bit offset into one byte */ |
762 | x = get_unaligned((u32 *) report); | 772 | x = get_unaligned((u64 *) report); |
763 | x = le32_to_cpu(x); | 773 | x = le64_to_cpu(x); |
764 | x = (x >> offset) & ((1 << n) - 1); | 774 | x = (x >> offset) & ((1ULL << n) - 1); /* extract bit field */ |
765 | return x; | 775 | return (u32) x; |
766 | } | 776 | } |
767 | 777 | ||
778 | /* | ||
779 | * "implement" : set bits in a little endian bit stream. | ||
780 | * Same concepts as "extract" (see comments above). | ||
781 | * The data mangled in the bit stream remains in little endian | ||
782 | * order the whole time. It make more sense to talk about | ||
783 | * endianness of register values by considering a register | ||
784 | * a "cached" copy of the little endiad bit stream. | ||
785 | */ | ||
768 | static __inline__ void implement(__u8 *report, unsigned offset, unsigned n, __u32 value) | 786 | static __inline__ void implement(__u8 *report, unsigned offset, unsigned n, __u32 value) |
769 | { | 787 | { |
770 | u32 x; | 788 | u64 x; |
789 | u64 m = (1ULL << n) - 1; | ||
790 | |||
791 | WARN_ON(n > 32); | ||
792 | |||
793 | WARN_ON(value > m); | ||
794 | value &= m; | ||
771 | 795 | ||
772 | report += offset >> 3; | 796 | report += offset >> 3; |
773 | offset &= 8 - 1; | 797 | offset &= 7; |
774 | x = get_unaligned((u32 *)report); | 798 | |
775 | x &= cpu_to_le32(~((((__u32) 1 << n) - 1) << offset)); | 799 | x = get_unaligned((u64 *)report); |
776 | x |= cpu_to_le32(value << offset); | 800 | x &= cpu_to_le64(~(m << offset)); |
777 | put_unaligned(x,(u32 *)report); | 801 | x |= cpu_to_le64(((u64) value) << offset); |
802 | put_unaligned(x, (u64 *) report); | ||
778 | } | 803 | } |
779 | 804 | ||
780 | /* | 805 | /* |
@@ -1615,6 +1640,9 @@ void hid_init_reports(struct hid_device *hid) | |||
1615 | #define USB_VENDOR_ID_SUN 0x0430 | 1640 | #define USB_VENDOR_ID_SUN 0x0430 |
1616 | #define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab | 1641 | #define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab |
1617 | 1642 | ||
1643 | #define USB_VENDOR_ID_AIRCABLE 0x16CA | ||
1644 | #define USB_DEVICE_ID_AIRCABLE1 0x1502 | ||
1645 | |||
1618 | /* | 1646 | /* |
1619 | * Alphabetically sorted blacklist by quirk type. | 1647 | * Alphabetically sorted blacklist by quirk type. |
1620 | */ | 1648 | */ |
@@ -1632,6 +1660,7 @@ static const struct hid_blacklist { | |||
1632 | { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE }, | 1660 | { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE }, |
1633 | { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE }, | 1661 | { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE }, |
1634 | { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE }, | 1662 | { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE }, |
1663 | { USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1, HID_QUIRK_IGNORE }, | ||
1635 | { USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE }, | 1664 | { USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE }, |
1636 | { USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE }, | 1665 | { USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE }, |
1637 | { USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW40, HID_QUIRK_IGNORE }, | 1666 | { USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW40, HID_QUIRK_IGNORE }, |
diff --git a/drivers/usb/input/usbtouchscreen.c b/drivers/usb/input/usbtouchscreen.c index 2902742895ad..933ceddf3dee 100644 --- a/drivers/usb/input/usbtouchscreen.c +++ b/drivers/usb/input/usbtouchscreen.c | |||
@@ -640,7 +640,7 @@ static int usbtouch_probe(struct usb_interface *intf, | |||
640 | type->max_press, 0, 0); | 640 | type->max_press, 0, 0); |
641 | 641 | ||
642 | usb_fill_int_urb(usbtouch->irq, usbtouch->udev, | 642 | usb_fill_int_urb(usbtouch->irq, usbtouch->udev, |
643 | usb_rcvintpipe(usbtouch->udev, 0x81), | 643 | usb_rcvintpipe(usbtouch->udev, endpoint->bEndpointAddress), |
644 | usbtouch->data, type->rept_size, | 644 | usbtouch->data, type->rept_size, |
645 | usbtouch_irq, usbtouch, endpoint->bInterval); | 645 | usbtouch_irq, usbtouch, endpoint->bInterval); |
646 | 646 | ||
diff --git a/drivers/usb/input/xpad.c b/drivers/usb/input/xpad.c index 6a12a943b938..df97e5c803f9 100644 --- a/drivers/usb/input/xpad.c +++ b/drivers/usb/input/xpad.c | |||
@@ -2,6 +2,10 @@ | |||
2 | * X-Box gamepad - v0.0.6 | 2 | * X-Box gamepad - v0.0.6 |
3 | * | 3 | * |
4 | * Copyright (c) 2002 Marko Friedemann <mfr@bmx-chemnitz.de> | 4 | * Copyright (c) 2002 Marko Friedemann <mfr@bmx-chemnitz.de> |
5 | * 2004 Oliver Schwartz <Oliver.Schwartz@gmx.de>, | ||
6 | * Steven Toth <steve@toth.demon.co.uk>, | ||
7 | * Franz Lehner <franz@caos.at>, | ||
8 | * Ivan Hawkes <blackhawk@ivanhawkes.com> | ||
5 | * 2005 Dominic Cerquetti <binary1230@yahoo.com> | 9 | * 2005 Dominic Cerquetti <binary1230@yahoo.com> |
6 | * 2006 Adam Buchbinder <adam.buchbinder@gmail.com> | 10 | * 2006 Adam Buchbinder <adam.buchbinder@gmail.com> |
7 | * | 11 | * |
@@ -29,6 +33,7 @@ | |||
29 | * - ITO Takayuki for providing essential xpad information on his website | 33 | * - ITO Takayuki for providing essential xpad information on his website |
30 | * - Vojtech Pavlik - iforce driver / input subsystem | 34 | * - Vojtech Pavlik - iforce driver / input subsystem |
31 | * - Greg Kroah-Hartman - usb-skeleton driver | 35 | * - Greg Kroah-Hartman - usb-skeleton driver |
36 | * - XBOX Linux project - extra USB id's | ||
32 | * | 37 | * |
33 | * TODO: | 38 | * TODO: |
34 | * - fine tune axes (especially trigger axes) | 39 | * - fine tune axes (especially trigger axes) |
@@ -54,6 +59,13 @@ | |||
54 | * - fixed d-pad to axes mapping | 59 | * - fixed d-pad to axes mapping |
55 | * | 60 | * |
56 | * 2002-07-17 - 0.0.5 : simplified d-pad handling | 61 | * 2002-07-17 - 0.0.5 : simplified d-pad handling |
62 | * | ||
63 | * 2004-10-02 - 0.0.6 : DDR pad support | ||
64 | * - borrowed from the XBOX linux kernel | ||
65 | * - USB id's for commonly used dance pads are present | ||
66 | * - dance pads will map D-PAD to buttons, not axes | ||
67 | * - pass the module paramater 'dpad_to_buttons' to force | ||
68 | * the D-PAD to map to buttons if your pad is not detected | ||
57 | */ | 69 | */ |
58 | 70 | ||
59 | #include <linux/kernel.h> | 71 | #include <linux/kernel.h> |
@@ -90,8 +102,35 @@ static const struct xpad_device { | |||
90 | { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", MAP_DPAD_TO_AXES }, | 102 | { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", MAP_DPAD_TO_AXES }, |
91 | { 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", MAP_DPAD_TO_AXES }, | 103 | { 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", MAP_DPAD_TO_AXES }, |
92 | { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", MAP_DPAD_TO_AXES }, | 104 | { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", MAP_DPAD_TO_AXES }, |
93 | { 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", MAP_DPAD_TO_AXES }, | 105 | { 0x045e, 0x0287, "Microsoft Xbox Controller S", MAP_DPAD_TO_AXES }, |
94 | { 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", MAP_DPAD_TO_BUTTONS }, | 106 | { 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", MAP_DPAD_TO_BUTTONS }, |
107 | { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", MAP_DPAD_TO_AXES }, | ||
108 | { 0x046d, 0xca84, "Logitech Xbox Cordless Controller", MAP_DPAD_TO_AXES }, | ||
109 | { 0x046d, 0xca88, "Logitech Compact Controller for Xbox", MAP_DPAD_TO_AXES }, | ||
110 | { 0x05fd, 0x1007, "Mad Catz Controller (unverified)", MAP_DPAD_TO_AXES }, | ||
111 | { 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", MAP_DPAD_TO_AXES }, | ||
112 | { 0x0738, 0x4516, "Mad Catz Control Pad", MAP_DPAD_TO_AXES }, | ||
113 | { 0x0738, 0x4522, "Mad Catz LumiCON", MAP_DPAD_TO_AXES }, | ||
114 | { 0x0738, 0x4526, "Mad Catz Control Pad Pro", MAP_DPAD_TO_AXES }, | ||
115 | { 0x0738, 0x4536, "Mad Catz MicroCON", MAP_DPAD_TO_AXES }, | ||
116 | { 0x0738, 0x4540, "Mad Catz Beat Pad", MAP_DPAD_TO_BUTTONS }, | ||
117 | { 0x0738, 0x4556, "Mad Catz Lynx Wireless Controller", MAP_DPAD_TO_AXES }, | ||
118 | { 0x0738, 0x6040, "Mad Catz Beat Pad Pro", MAP_DPAD_TO_BUTTONS }, | ||
119 | { 0x0c12, 0x8802, "Zeroplus Xbox Controller", MAP_DPAD_TO_AXES }, | ||
120 | { 0x0c12, 0x8810, "Zeroplus Xbox Controller", MAP_DPAD_TO_AXES }, | ||
121 | { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", MAP_DPAD_TO_AXES }, | ||
122 | { 0x0e4c, 0x1097, "Radica Gamester Controller", MAP_DPAD_TO_AXES }, | ||
123 | { 0x0e4c, 0x2390, "Radica Games Jtech Controller", MAP_DPAD_TO_AXES}, | ||
124 | { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", MAP_DPAD_TO_AXES }, | ||
125 | { 0x0e6f, 0x0005, "Eclipse wireless Controller", MAP_DPAD_TO_AXES }, | ||
126 | { 0x0e6f, 0x0006, "Edge wireless Controller", MAP_DPAD_TO_AXES }, | ||
127 | { 0x0e8f, 0x0201, "SmartJoy Frag Xpad/PS2 adaptor", MAP_DPAD_TO_AXES }, | ||
128 | { 0x0f30, 0x0202, "Joytech Advanced Controller", MAP_DPAD_TO_AXES }, | ||
129 | { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", MAP_DPAD_TO_AXES }, | ||
130 | { 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", MAP_DPAD_TO_AXES }, | ||
131 | { 0x12ab, 0x8809, "Xbox DDR dancepad", MAP_DPAD_TO_BUTTONS }, | ||
132 | { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS }, | ||
133 | { 0xffff, 0xffff, "Chinese-made Xbox Controller", MAP_DPAD_TO_AXES }, | ||
95 | { 0x0000, 0x0000, "Generic X-Box pad", MAP_DPAD_UNKNOWN } | 134 | { 0x0000, 0x0000, "Generic X-Box pad", MAP_DPAD_UNKNOWN } |
96 | }; | 135 | }; |
97 | 136 | ||
diff --git a/drivers/usb/net/Kconfig b/drivers/usb/net/Kconfig index 454a186b64ad..e081836014ac 100644 --- a/drivers/usb/net/Kconfig +++ b/drivers/usb/net/Kconfig | |||
@@ -92,8 +92,13 @@ config USB_RTL8150 | |||
92 | To compile this driver as a module, choose M here: the | 92 | To compile this driver as a module, choose M here: the |
93 | module will be called rtl8150. | 93 | module will be called rtl8150. |
94 | 94 | ||
95 | config USB_USBNET_MII | ||
96 | tristate | ||
97 | default n | ||
98 | |||
95 | config USB_USBNET | 99 | config USB_USBNET |
96 | tristate "Multi-purpose USB Networking Framework" | 100 | tristate "Multi-purpose USB Networking Framework" |
101 | select MII if USBNET_MII != n | ||
97 | ---help--- | 102 | ---help--- |
98 | This driver supports several kinds of network links over USB, | 103 | This driver supports several kinds of network links over USB, |
99 | with "minidrivers" built around a common network driver core | 104 | with "minidrivers" built around a common network driver core |
@@ -129,7 +134,7 @@ config USB_NET_AX8817X | |||
129 | tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters" | 134 | tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters" |
130 | depends on USB_USBNET && NET_ETHERNET | 135 | depends on USB_USBNET && NET_ETHERNET |
131 | select CRC32 | 136 | select CRC32 |
132 | select MII | 137 | select USB_USBNET_MII |
133 | default y | 138 | default y |
134 | help | 139 | help |
135 | This option adds support for ASIX AX88xxx based USB 2.0 | 140 | This option adds support for ASIX AX88xxx based USB 2.0 |
@@ -210,6 +215,7 @@ config USB_NET_PLUSB | |||
210 | config USB_NET_MCS7830 | 215 | config USB_NET_MCS7830 |
211 | tristate "MosChip MCS7830 based Ethernet adapters" | 216 | tristate "MosChip MCS7830 based Ethernet adapters" |
212 | depends on USB_USBNET | 217 | depends on USB_USBNET |
218 | select USB_USBNET_MII | ||
213 | help | 219 | help |
214 | Choose this option if you're using a 10/100 Ethernet USB2 | 220 | Choose this option if you're using a 10/100 Ethernet USB2 |
215 | adapter based on the MosChip 7830 controller. This includes | 221 | adapter based on the MosChip 7830 controller. This includes |
diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c index 40873635d80e..760b5327b81b 100644 --- a/drivers/usb/net/usbnet.c +++ b/drivers/usb/net/usbnet.c | |||
@@ -669,6 +669,9 @@ done: | |||
669 | * they'll probably want to use this base set. | 669 | * they'll probably want to use this base set. |
670 | */ | 670 | */ |
671 | 671 | ||
672 | #if defined(CONFIG_MII) || defined(CONFIG_MII_MODULE) | ||
673 | #define HAVE_MII | ||
674 | |||
672 | int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd) | 675 | int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd) |
673 | { | 676 | { |
674 | struct usbnet *dev = netdev_priv(net); | 677 | struct usbnet *dev = netdev_priv(net); |
@@ -699,20 +702,6 @@ int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd) | |||
699 | } | 702 | } |
700 | EXPORT_SYMBOL_GPL(usbnet_set_settings); | 703 | EXPORT_SYMBOL_GPL(usbnet_set_settings); |
701 | 704 | ||
702 | |||
703 | void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info) | ||
704 | { | ||
705 | struct usbnet *dev = netdev_priv(net); | ||
706 | |||
707 | /* REVISIT don't always return "usbnet" */ | ||
708 | strncpy (info->driver, driver_name, sizeof info->driver); | ||
709 | strncpy (info->version, DRIVER_VERSION, sizeof info->version); | ||
710 | strncpy (info->fw_version, dev->driver_info->description, | ||
711 | sizeof info->fw_version); | ||
712 | usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info); | ||
713 | } | ||
714 | EXPORT_SYMBOL_GPL(usbnet_get_drvinfo); | ||
715 | |||
716 | u32 usbnet_get_link (struct net_device *net) | 705 | u32 usbnet_get_link (struct net_device *net) |
717 | { | 706 | { |
718 | struct usbnet *dev = netdev_priv(net); | 707 | struct usbnet *dev = netdev_priv(net); |
@@ -730,40 +719,57 @@ u32 usbnet_get_link (struct net_device *net) | |||
730 | } | 719 | } |
731 | EXPORT_SYMBOL_GPL(usbnet_get_link); | 720 | EXPORT_SYMBOL_GPL(usbnet_get_link); |
732 | 721 | ||
733 | u32 usbnet_get_msglevel (struct net_device *net) | 722 | int usbnet_nway_reset(struct net_device *net) |
734 | { | 723 | { |
735 | struct usbnet *dev = netdev_priv(net); | 724 | struct usbnet *dev = netdev_priv(net); |
736 | 725 | ||
737 | return dev->msg_enable; | 726 | if (!dev->mii.mdio_write) |
727 | return -EOPNOTSUPP; | ||
728 | |||
729 | return mii_nway_restart(&dev->mii); | ||
738 | } | 730 | } |
739 | EXPORT_SYMBOL_GPL(usbnet_get_msglevel); | 731 | EXPORT_SYMBOL_GPL(usbnet_nway_reset); |
740 | 732 | ||
741 | void usbnet_set_msglevel (struct net_device *net, u32 level) | 733 | #endif /* HAVE_MII */ |
734 | |||
735 | void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info) | ||
742 | { | 736 | { |
743 | struct usbnet *dev = netdev_priv(net); | 737 | struct usbnet *dev = netdev_priv(net); |
744 | 738 | ||
745 | dev->msg_enable = level; | 739 | /* REVISIT don't always return "usbnet" */ |
740 | strncpy (info->driver, driver_name, sizeof info->driver); | ||
741 | strncpy (info->version, DRIVER_VERSION, sizeof info->version); | ||
742 | strncpy (info->fw_version, dev->driver_info->description, | ||
743 | sizeof info->fw_version); | ||
744 | usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info); | ||
746 | } | 745 | } |
747 | EXPORT_SYMBOL_GPL(usbnet_set_msglevel); | 746 | EXPORT_SYMBOL_GPL(usbnet_get_drvinfo); |
748 | 747 | ||
749 | int usbnet_nway_reset(struct net_device *net) | 748 | u32 usbnet_get_msglevel (struct net_device *net) |
750 | { | 749 | { |
751 | struct usbnet *dev = netdev_priv(net); | 750 | struct usbnet *dev = netdev_priv(net); |
752 | 751 | ||
753 | if (!dev->mii.mdio_write) | 752 | return dev->msg_enable; |
754 | return -EOPNOTSUPP; | 753 | } |
754 | EXPORT_SYMBOL_GPL(usbnet_get_msglevel); | ||
755 | 755 | ||
756 | return mii_nway_restart(&dev->mii); | 756 | void usbnet_set_msglevel (struct net_device *net, u32 level) |
757 | { | ||
758 | struct usbnet *dev = netdev_priv(net); | ||
759 | |||
760 | dev->msg_enable = level; | ||
757 | } | 761 | } |
758 | EXPORT_SYMBOL_GPL(usbnet_nway_reset); | 762 | EXPORT_SYMBOL_GPL(usbnet_set_msglevel); |
759 | 763 | ||
760 | /* drivers may override default ethtool_ops in their bind() routine */ | 764 | /* drivers may override default ethtool_ops in their bind() routine */ |
761 | static struct ethtool_ops usbnet_ethtool_ops = { | 765 | static struct ethtool_ops usbnet_ethtool_ops = { |
766 | #ifdef HAVE_MII | ||
762 | .get_settings = usbnet_get_settings, | 767 | .get_settings = usbnet_get_settings, |
763 | .set_settings = usbnet_set_settings, | 768 | .set_settings = usbnet_set_settings, |
764 | .get_drvinfo = usbnet_get_drvinfo, | ||
765 | .get_link = usbnet_get_link, | 769 | .get_link = usbnet_get_link, |
766 | .nway_reset = usbnet_nway_reset, | 770 | .nway_reset = usbnet_nway_reset, |
771 | #endif | ||
772 | .get_drvinfo = usbnet_get_drvinfo, | ||
767 | .get_msglevel = usbnet_get_msglevel, | 773 | .get_msglevel = usbnet_get_msglevel, |
768 | .set_msglevel = usbnet_set_msglevel, | 774 | .set_msglevel = usbnet_set_msglevel, |
769 | }; | 775 | }; |
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig index 9a6ec1b5e3d5..2a8dd4cc943d 100644 --- a/drivers/usb/serial/Kconfig +++ b/drivers/usb/serial/Kconfig | |||
@@ -54,10 +54,10 @@ config USB_SERIAL_GENERIC | |||
54 | properly. | 54 | properly. |
55 | 55 | ||
56 | config USB_SERIAL_AIRCABLE | 56 | config USB_SERIAL_AIRCABLE |
57 | tristate "AIRcable USB Bluetooth Dongle Driver (EXPERIMENTAL)" | 57 | tristate "USB AIRcable Bluetooth Dongle Driver (EXPERIMENTAL)" |
58 | depends on USB_SERIAL && EXPERIMENTAL | 58 | depends on USB_SERIAL && EXPERIMENTAL |
59 | help | 59 | help |
60 | Say Y here if you want to use AIRcable USB Bluetoot Dongle. | 60 | Say Y here if you want to use USB AIRcable Bluetooth Dongle. |
61 | 61 | ||
62 | To compile this driver as a module, choose M here: the module | 62 | To compile this driver as a module, choose M here: the module |
63 | will be called aircable. | 63 | will be called aircable. |
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c index bbf6532c26e5..f95d42c0d16a 100644 --- a/drivers/usb/serial/cp2101.c +++ b/drivers/usb/serial/cp2101.c | |||
@@ -64,6 +64,9 @@ static struct usb_device_id id_table [] = { | |||
64 | { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ | 64 | { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ |
65 | { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ | 65 | { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ |
66 | { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ | 66 | { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ |
67 | { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */ | ||
68 | { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */ | ||
69 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ | ||
67 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | 70 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ |
68 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | 71 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ |
69 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ | 72 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index ea16572d19f8..4b5097fa48d7 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -35,6 +35,7 @@ static struct usb_device_id id_table [] = { | |||
35 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ | 35 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ |
36 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ | 36 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ |
37 | { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */ | 37 | { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */ |
38 | { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ | ||
38 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ | 39 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ |
39 | { USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */ | 40 | { USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */ |
40 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 for Europe */ | 41 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 for Europe */ |
@@ -58,8 +59,10 @@ static struct usb_device_id id_table_3port [] = { | |||
58 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ | 59 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ |
59 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ | 60 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ |
60 | { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */ | 61 | { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */ |
62 | { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ | ||
61 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ | 63 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ |
62 | { USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */ | 64 | { USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */ |
65 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 for Europe */ | ||
63 | { USB_DEVICE(0x1199, 0x6812) }, /* Sierra Wireless MC8775 */ | 66 | { USB_DEVICE(0x1199, 0x6812) }, /* Sierra Wireless MC8775 */ |
64 | { USB_DEVICE(0x1199, 0x6820) }, /* Sierra Wireless AirCard 875 */ | 67 | { USB_DEVICE(0x1199, 0x6820) }, /* Sierra Wireless AirCard 875 */ |
65 | { } | 68 | { } |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 37ed8e0f2dc8..bc1ac07bf6ce 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -1236,7 +1236,7 @@ UNUSUAL_DEV( 0x0e21, 0x0520, 0x0100, 0x0100, | |||
1236 | "Cowon Systems", | 1236 | "Cowon Systems", |
1237 | "iAUDIO M5", | 1237 | "iAUDIO M5", |
1238 | US_SC_DEVICE, US_PR_BULK, NULL, | 1238 | US_SC_DEVICE, US_PR_BULK, NULL, |
1239 | 0 ), | 1239 | US_FL_NEED_OVERRIDE ), |
1240 | 1240 | ||
1241 | /* Submitted by Antoine Mairesse <antoine.mairesse@free.fr> */ | 1241 | /* Submitted by Antoine Mairesse <antoine.mairesse@free.fr> */ |
1242 | UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300, | 1242 | UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300, |
@@ -1313,6 +1313,13 @@ UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000, | |||
1313 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1313 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1314 | US_FL_FIX_CAPACITY ), | 1314 | US_FL_FIX_CAPACITY ), |
1315 | 1315 | ||
1316 | /* Reported by Jan Mate <mate@fiit.stuba.sk> */ | ||
1317 | UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000, | ||
1318 | "Sony Ericsson", | ||
1319 | "P990i", | ||
1320 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1321 | US_FL_FIX_CAPACITY ), | ||
1322 | |||
1316 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> | 1323 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> |
1317 | * Tested on hardware version 1.10. | 1324 | * Tested on hardware version 1.10. |
1318 | * Entry is needed only for the initializer function override. | 1325 | * Entry is needed only for the initializer function override. |
diff --git a/drivers/video/nvidia/nv_hw.c b/drivers/video/nvidia/nv_hw.c index 9ed640d35728..ea426115c6f9 100644 --- a/drivers/video/nvidia/nv_hw.c +++ b/drivers/video/nvidia/nv_hw.c | |||
@@ -145,12 +145,18 @@ static void nvGetClocks(struct nvidia_par *par, unsigned int *MClk, | |||
145 | 145 | ||
146 | if (par->Architecture >= NV_ARCH_40) { | 146 | if (par->Architecture >= NV_ARCH_40) { |
147 | pll = NV_RD32(par->PMC, 0x4020); | 147 | pll = NV_RD32(par->PMC, 0x4020); |
148 | P = (pll >> 16) & 0x03; | 148 | P = (pll >> 16) & 0x07; |
149 | pll = NV_RD32(par->PMC, 0x4024); | 149 | pll = NV_RD32(par->PMC, 0x4024); |
150 | M = pll & 0xFF; | 150 | M = pll & 0xFF; |
151 | N = (pll >> 8) & 0xFF; | 151 | N = (pll >> 8) & 0xFF; |
152 | MB = (pll >> 16) & 0xFF; | 152 | if (((par->Chipset & 0xfff0) == 0x0290) || |
153 | NB = (pll >> 24) & 0xFF; | 153 | ((par->Chipset & 0xfff0) == 0x0390)) { |
154 | MB = 1; | ||
155 | NB = 1; | ||
156 | } else { | ||
157 | MB = (pll >> 16) & 0xFF; | ||
158 | NB = (pll >> 24) & 0xFF; | ||
159 | } | ||
154 | *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P; | 160 | *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P; |
155 | 161 | ||
156 | pll = NV_RD32(par->PMC, 0x4000); | 162 | pll = NV_RD32(par->PMC, 0x4000); |
diff --git a/drivers/video/nvidia/nv_setup.c b/drivers/video/nvidia/nv_setup.c index a18a9aebf05f..61dc46fecf2b 100644 --- a/drivers/video/nvidia/nv_setup.c +++ b/drivers/video/nvidia/nv_setup.c | |||
@@ -359,6 +359,7 @@ int NVCommonSetup(struct fb_info *info) | |||
359 | case 0x0186: | 359 | case 0x0186: |
360 | case 0x0187: | 360 | case 0x0187: |
361 | case 0x018D: | 361 | case 0x018D: |
362 | case 0x0228: | ||
362 | case 0x0286: | 363 | case 0x0286: |
363 | case 0x028C: | 364 | case 0x028C: |
364 | case 0x0316: | 365 | case 0x0316: |
@@ -382,6 +383,10 @@ int NVCommonSetup(struct fb_info *info) | |||
382 | case 0x034C: | 383 | case 0x034C: |
383 | case 0x0160: | 384 | case 0x0160: |
384 | case 0x0166: | 385 | case 0x0166: |
386 | case 0x0169: | ||
387 | case 0x016B: | ||
388 | case 0x016C: | ||
389 | case 0x016D: | ||
385 | case 0x00C8: | 390 | case 0x00C8: |
386 | case 0x00CC: | 391 | case 0x00CC: |
387 | case 0x0144: | 392 | case 0x0144: |
@@ -639,12 +644,23 @@ int NVCommonSetup(struct fb_info *info) | |||
639 | par->fpHeight = NV_RD32(par->PRAMDAC, 0x0800) + 1; | 644 | par->fpHeight = NV_RD32(par->PRAMDAC, 0x0800) + 1; |
640 | par->fpSyncs = NV_RD32(par->PRAMDAC, 0x0848) & 0x30000033; | 645 | par->fpSyncs = NV_RD32(par->PRAMDAC, 0x0848) & 0x30000033; |
641 | 646 | ||
642 | printk("Panel size is %i x %i\n", par->fpWidth, par->fpHeight); | 647 | printk("nvidiafb: Panel size is %i x %i\n", par->fpWidth, par->fpHeight); |
643 | } | 648 | } |
644 | 649 | ||
645 | if (monA) | 650 | if (monA) |
646 | info->monspecs = *monA; | 651 | info->monspecs = *monA; |
647 | 652 | ||
653 | if (!par->FlatPanel || !par->twoHeads) | ||
654 | par->FPDither = 0; | ||
655 | |||
656 | par->LVDS = 0; | ||
657 | if (par->FlatPanel && par->twoHeads) { | ||
658 | NV_WR32(par->PRAMDAC0, 0x08B0, 0x00010004); | ||
659 | if (par->PRAMDAC0[0x08b4] & 1) | ||
660 | par->LVDS = 1; | ||
661 | printk("nvidiafb: Panel is %s\n", par->LVDS ? "LVDS" : "TMDS"); | ||
662 | } | ||
663 | |||
648 | kfree(edidA); | 664 | kfree(edidA); |
649 | kfree(edidB); | 665 | kfree(edidB); |
650 | done: | 666 | done: |
diff --git a/drivers/video/nvidia/nv_type.h b/drivers/video/nvidia/nv_type.h index acdc26693402..86e65dea60d3 100644 --- a/drivers/video/nvidia/nv_type.h +++ b/drivers/video/nvidia/nv_type.h | |||
@@ -129,6 +129,7 @@ struct nvidia_par { | |||
129 | int fpHeight; | 129 | int fpHeight; |
130 | int PanelTweak; | 130 | int PanelTweak; |
131 | int paneltweak; | 131 | int paneltweak; |
132 | int LVDS; | ||
132 | int pm_state; | 133 | int pm_state; |
133 | u32 crtcSync_read; | 134 | u32 crtcSync_read; |
134 | u32 fpSyncs; | 135 | u32 fpSyncs; |
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c index eb24107bcc81..538e947610e1 100644 --- a/drivers/video/nvidia/nvidia.c +++ b/drivers/video/nvidia/nvidia.c | |||
@@ -1160,20 +1160,20 @@ static u32 __devinit nvidia_get_arch(struct fb_info *info) | |||
1160 | case 0x0340: /* GeForceFX 5700 */ | 1160 | case 0x0340: /* GeForceFX 5700 */ |
1161 | arch = NV_ARCH_30; | 1161 | arch = NV_ARCH_30; |
1162 | break; | 1162 | break; |
1163 | case 0x0040: | 1163 | case 0x0040: /* GeForce 6800 */ |
1164 | case 0x00C0: | 1164 | case 0x00C0: /* GeForce 6800 */ |
1165 | case 0x0120: | 1165 | case 0x0120: /* GeForce 6800 */ |
1166 | case 0x0130: | 1166 | case 0x0130: |
1167 | case 0x0140: | 1167 | case 0x0140: /* GeForce 6600 */ |
1168 | case 0x0160: | 1168 | case 0x0160: /* GeForce 6200 */ |
1169 | case 0x01D0: | 1169 | case 0x01D0: /* GeForce 7200, 7300, 7400 */ |
1170 | case 0x0090: | 1170 | case 0x0090: /* GeForce 7800 */ |
1171 | case 0x0210: | 1171 | case 0x0210: /* GeForce 6800 */ |
1172 | case 0x0220: | 1172 | case 0x0220: /* GeForce 6200 */ |
1173 | case 0x0230: | 1173 | case 0x0230: |
1174 | case 0x0240: | 1174 | case 0x0240: /* GeForce 6100 */ |
1175 | case 0x0290: | 1175 | case 0x0290: /* GeForce 7900 */ |
1176 | case 0x0390: | 1176 | case 0x0390: /* GeForce 7600 */ |
1177 | arch = NV_ARCH_40; | 1177 | arch = NV_ARCH_40; |
1178 | break; | 1178 | break; |
1179 | case 0x0020: /* TNT, TNT2 */ | 1179 | case 0x0020: /* TNT, TNT2 */ |
diff --git a/fs/cifs/CHANGES b/fs/cifs/CHANGES index 1eb9a2ec0a3b..0b3c37ef52e0 100644 --- a/fs/cifs/CHANGES +++ b/fs/cifs/CHANGES | |||
@@ -1,6 +1,11 @@ | |||
1 | Version 1.46 | 1 | Version 1.46 |
2 | ------------ | 2 | ------------ |
3 | Support deep tree mounts. Better support OS/2, Win9x (DOS) time stamps. | 3 | Support deep tree mounts. Better support OS/2, Win9x (DOS) time stamps. |
4 | Allow null user to be specified on mount ("username="). Do not return | ||
5 | EINVAL on readdir when filldir fails due to overwritten blocksize | ||
6 | (fixes FC problem). Return error in rename 2nd attempt retry (ie report | ||
7 | if rename by handle also fails, after rename by path fails, we were | ||
8 | not reporting whether the retry worked or not). | ||
4 | 9 | ||
5 | Version 1.45 | 10 | Version 1.45 |
6 | ------------ | 11 | ------------ |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 4093d5332930..71f77914ce93 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -822,10 +822,13 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol) | |||
822 | } else if (strnicmp(data, "nouser_xattr",12) == 0) { | 822 | } else if (strnicmp(data, "nouser_xattr",12) == 0) { |
823 | vol->no_xattr = 1; | 823 | vol->no_xattr = 1; |
824 | } else if (strnicmp(data, "user", 4) == 0) { | 824 | } else if (strnicmp(data, "user", 4) == 0) { |
825 | if (!value || !*value) { | 825 | if (!value) { |
826 | printk(KERN_WARNING | 826 | printk(KERN_WARNING |
827 | "CIFS: invalid or missing username\n"); | 827 | "CIFS: invalid or missing username\n"); |
828 | return 1; /* needs_arg; */ | 828 | return 1; /* needs_arg; */ |
829 | } else if(!*value) { | ||
830 | /* null user, ie anonymous, authentication */ | ||
831 | vol->nullauth = 1; | ||
829 | } | 832 | } |
830 | if (strnlen(value, 200) < 200) { | 833 | if (strnlen(value, 200) < 200) { |
831 | vol->username = value; | 834 | vol->username = value; |
@@ -1642,6 +1645,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, | |||
1642 | /* BB fixme parse for domain name here */ | 1645 | /* BB fixme parse for domain name here */ |
1643 | cFYI(1, ("Username: %s ", volume_info.username)); | 1646 | cFYI(1, ("Username: %s ", volume_info.username)); |
1644 | 1647 | ||
1648 | } else if (volume_info.nullauth) { | ||
1649 | cFYI(1,("null user")); | ||
1645 | } else { | 1650 | } else { |
1646 | cifserror("No username specified"); | 1651 | cifserror("No username specified"); |
1647 | /* In userspace mount helper we can get user name from alternate | 1652 | /* In userspace mount helper we can get user name from alternate |
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 976a691c5a68..2436ed8fc840 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
@@ -492,10 +492,14 @@ int cifs_close(struct inode *inode, struct file *file) | |||
492 | the struct would be in each open file, | 492 | the struct would be in each open file, |
493 | but this should give enough time to | 493 | but this should give enough time to |
494 | clear the socket */ | 494 | clear the socket */ |
495 | cERROR(1,("close with pending writes")); | 495 | #ifdef CONFIG_CIFS_DEBUG2 |
496 | cFYI(1,("close delay, write pending")); | ||
497 | #endif /* DEBUG2 */ | ||
496 | msleep(timeout); | 498 | msleep(timeout); |
497 | timeout *= 4; | 499 | timeout *= 4; |
498 | } | 500 | } |
501 | if(atomic_read(&pSMBFile->wrtPending)) | ||
502 | cERROR(1,("close with pending writes")); | ||
499 | rc = CIFSSMBClose(xid, pTcon, | 503 | rc = CIFSSMBClose(xid, pTcon, |
500 | pSMBFile->netfid); | 504 | pSMBFile->netfid); |
501 | } | 505 | } |
@@ -1806,13 +1810,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, | |||
1806 | } | 1810 | } |
1807 | if ((rc < 0) || (smb_read_data == NULL)) { | 1811 | if ((rc < 0) || (smb_read_data == NULL)) { |
1808 | cFYI(1, ("Read error in readpages: %d", rc)); | 1812 | cFYI(1, ("Read error in readpages: %d", rc)); |
1809 | /* clean up remaing pages off list */ | ||
1810 | while (!list_empty(page_list) && (i < num_pages)) { | ||
1811 | page = list_entry(page_list->prev, struct page, | ||
1812 | lru); | ||
1813 | list_del(&page->lru); | ||
1814 | page_cache_release(page); | ||
1815 | } | ||
1816 | break; | 1813 | break; |
1817 | } else if (bytes_read > 0) { | 1814 | } else if (bytes_read > 0) { |
1818 | pSMBr = (struct smb_com_read_rsp *)smb_read_data; | 1815 | pSMBr = (struct smb_com_read_rsp *)smb_read_data; |
@@ -1831,13 +1828,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, | |||
1831 | this case is ok - if we are at server EOF | 1828 | this case is ok - if we are at server EOF |
1832 | we will hit it on next read */ | 1829 | we will hit it on next read */ |
1833 | 1830 | ||
1834 | /* while (!list_empty(page_list) && (i < num_pages)) { | 1831 | /* break; */ |
1835 | page = list_entry(page_list->prev, | ||
1836 | struct page, list); | ||
1837 | list_del(&page->list); | ||
1838 | page_cache_release(page); | ||
1839 | } | ||
1840 | break; */ | ||
1841 | } | 1832 | } |
1842 | } else { | 1833 | } else { |
1843 | cFYI(1, ("No bytes read (%d) at offset %lld . " | 1834 | cFYI(1, ("No bytes read (%d) at offset %lld . " |
@@ -1845,14 +1836,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, | |||
1845 | bytes_read, offset)); | 1836 | bytes_read, offset)); |
1846 | /* BB turn off caching and do new lookup on | 1837 | /* BB turn off caching and do new lookup on |
1847 | file size at server? */ | 1838 | file size at server? */ |
1848 | while (!list_empty(page_list) && (i < num_pages)) { | ||
1849 | page = list_entry(page_list->prev, struct page, | ||
1850 | lru); | ||
1851 | list_del(&page->lru); | ||
1852 | |||
1853 | /* BB removeme - replace with zero of page? */ | ||
1854 | page_cache_release(page); | ||
1855 | } | ||
1856 | break; | 1839 | break; |
1857 | } | 1840 | } |
1858 | if (smb_read_data) { | 1841 | if (smb_read_data) { |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 35d54bb0869a..1ad8c9fcc742 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -885,10 +885,14 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, | |||
885 | kmalloc(2 * sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL); | 885 | kmalloc(2 * sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL); |
886 | if (info_buf_source != NULL) { | 886 | if (info_buf_source != NULL) { |
887 | info_buf_target = info_buf_source + 1; | 887 | info_buf_target = info_buf_source + 1; |
888 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, fromName, | 888 | if (pTcon->ses->capabilities & CAP_UNIX) |
889 | info_buf_source, cifs_sb_source->local_nls, | 889 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, fromName, |
890 | cifs_sb_source->mnt_cifs_flags & | 890 | info_buf_source, |
891 | CIFS_MOUNT_MAP_SPECIAL_CHR); | 891 | cifs_sb_source->local_nls, |
892 | cifs_sb_source->mnt_cifs_flags & | ||
893 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
894 | /* else rc is still EEXIST so will fall through to | ||
895 | unlink the target and retry rename */ | ||
892 | if (rc == 0) { | 896 | if (rc == 0) { |
893 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, toName, | 897 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, toName, |
894 | info_buf_target, | 898 | info_buf_target, |
@@ -937,7 +941,7 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, | |||
937 | cifs_sb_source->mnt_cifs_flags & | 941 | cifs_sb_source->mnt_cifs_flags & |
938 | CIFS_MOUNT_MAP_SPECIAL_CHR); | 942 | CIFS_MOUNT_MAP_SPECIAL_CHR); |
939 | if (rc==0) { | 943 | if (rc==0) { |
940 | CIFSSMBRenameOpenFile(xid, pTcon, netfid, toName, | 944 | rc = CIFSSMBRenameOpenFile(xid, pTcon, netfid, toName, |
941 | cifs_sb_source->local_nls, | 945 | cifs_sb_source->local_nls, |
942 | cifs_sb_source->mnt_cifs_flags & | 946 | cifs_sb_source->mnt_cifs_flags & |
943 | CIFS_MOUNT_MAP_SPECIAL_CHR); | 947 | CIFS_MOUNT_MAP_SPECIAL_CHR); |
@@ -1085,8 +1089,10 @@ int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry, | |||
1085 | struct kstat *stat) | 1089 | struct kstat *stat) |
1086 | { | 1090 | { |
1087 | int err = cifs_revalidate(dentry); | 1091 | int err = cifs_revalidate(dentry); |
1088 | if (!err) | 1092 | if (!err) { |
1089 | generic_fillattr(dentry->d_inode, stat); | 1093 | generic_fillattr(dentry->d_inode, stat); |
1094 | stat->blksize = CIFS_MAX_MSGSIZE; | ||
1095 | } | ||
1090 | return err; | 1096 | return err; |
1091 | } | 1097 | } |
1092 | 1098 | ||
diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c index b5b0a2a41bef..ed18c3965f7b 100644 --- a/fs/cifs/readdir.c +++ b/fs/cifs/readdir.c | |||
@@ -896,6 +896,10 @@ static int cifs_filldir(char *pfindEntry, struct file *file, | |||
896 | tmp_inode->i_ino,obj_type); | 896 | tmp_inode->i_ino,obj_type); |
897 | if(rc) { | 897 | if(rc) { |
898 | cFYI(1,("filldir rc = %d",rc)); | 898 | cFYI(1,("filldir rc = %d",rc)); |
899 | /* we can not return filldir errors to the caller | ||
900 | since they are "normal" when the stat blocksize | ||
901 | is too small - we return remapped error instead */ | ||
902 | rc = -EOVERFLOW; | ||
899 | } | 903 | } |
900 | 904 | ||
901 | dput(tmp_dentry); | 905 | dput(tmp_dentry); |
@@ -1074,6 +1078,11 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir) | |||
1074 | we want to check for that here? */ | 1078 | we want to check for that here? */ |
1075 | rc = cifs_filldir(current_entry, file, | 1079 | rc = cifs_filldir(current_entry, file, |
1076 | filldir, direntry, tmp_buf, max_len); | 1080 | filldir, direntry, tmp_buf, max_len); |
1081 | if(rc == -EOVERFLOW) { | ||
1082 | rc = 0; | ||
1083 | break; | ||
1084 | } | ||
1085 | |||
1077 | file->f_pos++; | 1086 | file->f_pos++; |
1078 | if(file->f_pos == | 1087 | if(file->f_pos == |
1079 | cifsFile->srch_inf.index_of_last_entry) { | 1088 | cifsFile->srch_inf.index_of_last_entry) { |
diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c index a8a083543ba0..bbdda99dce61 100644 --- a/fs/cifs/sess.c +++ b/fs/cifs/sess.c | |||
@@ -90,7 +90,9 @@ static void unicode_ssetup_strings(char ** pbcc_area, struct cifsSesInfo *ses, | |||
90 | } */ | 90 | } */ |
91 | /* copy user */ | 91 | /* copy user */ |
92 | if(ses->userName == NULL) { | 92 | if(ses->userName == NULL) { |
93 | /* BB what about null user mounts - check that we do this BB */ | 93 | /* null user mount */ |
94 | *bcc_ptr = 0; | ||
95 | *(bcc_ptr+1) = 0; | ||
94 | } else { /* 300 should be long enough for any conceivable user name */ | 96 | } else { /* 300 should be long enough for any conceivable user name */ |
95 | bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->userName, | 97 | bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->userName, |
96 | 300, nls_cp); | 98 | 300, nls_cp); |
@@ -98,10 +100,13 @@ static void unicode_ssetup_strings(char ** pbcc_area, struct cifsSesInfo *ses, | |||
98 | bcc_ptr += 2 * bytes_ret; | 100 | bcc_ptr += 2 * bytes_ret; |
99 | bcc_ptr += 2; /* account for null termination */ | 101 | bcc_ptr += 2; /* account for null termination */ |
100 | /* copy domain */ | 102 | /* copy domain */ |
101 | if(ses->domainName == NULL) | 103 | if(ses->domainName == NULL) { |
102 | bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, | 104 | /* Sending null domain better than using a bogus domain name (as |
103 | "CIFS_LINUX_DOM", 32, nls_cp); | 105 | we did briefly in 2.6.18) since server will use its default */ |
104 | else | 106 | *bcc_ptr = 0; |
107 | *(bcc_ptr+1) = 0; | ||
108 | bytes_ret = 0; | ||
109 | } else | ||
105 | bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->domainName, | 110 | bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->domainName, |
106 | 256, nls_cp); | 111 | 256, nls_cp); |
107 | bcc_ptr += 2 * bytes_ret; | 112 | bcc_ptr += 2 * bytes_ret; |
@@ -144,13 +149,11 @@ static void ascii_ssetup_strings(char ** pbcc_area, struct cifsSesInfo *ses, | |||
144 | 149 | ||
145 | /* copy domain */ | 150 | /* copy domain */ |
146 | 151 | ||
147 | if(ses->domainName == NULL) { | 152 | if(ses->domainName != NULL) { |
148 | strcpy(bcc_ptr, "CIFS_LINUX_DOM"); | ||
149 | bcc_ptr += 14; /* strlen(CIFS_LINUX_DOM) */ | ||
150 | } else { | ||
151 | strncpy(bcc_ptr, ses->domainName, 256); | 153 | strncpy(bcc_ptr, ses->domainName, 256); |
152 | bcc_ptr += strnlen(ses->domainName, 256); | 154 | bcc_ptr += strnlen(ses->domainName, 256); |
153 | } | 155 | } /* else we will send a null domain name |
156 | so the server will default to its own domain */ | ||
154 | *bcc_ptr = 0; | 157 | *bcc_ptr = 0; |
155 | bcc_ptr++; | 158 | bcc_ptr++; |
156 | 159 | ||
diff --git a/fs/compat.c b/fs/compat.c index 50624d4a70c6..8d0a0018a7d2 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -1835,9 +1835,12 @@ asmlinkage long compat_sys_pselect7(int n, compat_ulong_t __user *inp, | |||
1835 | 1835 | ||
1836 | } while (!ret && !timeout && tsp && (ts.tv_sec || ts.tv_nsec)); | 1836 | } while (!ret && !timeout && tsp && (ts.tv_sec || ts.tv_nsec)); |
1837 | 1837 | ||
1838 | if (ret == 0 && tsp && !(current->personality & STICKY_TIMEOUTS)) { | 1838 | if (tsp) { |
1839 | struct compat_timespec rts; | 1839 | struct compat_timespec rts; |
1840 | 1840 | ||
1841 | if (current->personality & STICKY_TIMEOUTS) | ||
1842 | goto sticky; | ||
1843 | |||
1841 | rts.tv_sec = timeout / HZ; | 1844 | rts.tv_sec = timeout / HZ; |
1842 | rts.tv_nsec = (timeout % HZ) * (NSEC_PER_SEC/HZ); | 1845 | rts.tv_nsec = (timeout % HZ) * (NSEC_PER_SEC/HZ); |
1843 | if (rts.tv_nsec >= NSEC_PER_SEC) { | 1846 | if (rts.tv_nsec >= NSEC_PER_SEC) { |
@@ -1846,8 +1849,19 @@ asmlinkage long compat_sys_pselect7(int n, compat_ulong_t __user *inp, | |||
1846 | } | 1849 | } |
1847 | if (compat_timespec_compare(&rts, &ts) >= 0) | 1850 | if (compat_timespec_compare(&rts, &ts) >= 0) |
1848 | rts = ts; | 1851 | rts = ts; |
1849 | if (copy_to_user(tsp, &rts, sizeof(rts))) | 1852 | if (copy_to_user(tsp, &rts, sizeof(rts))) { |
1850 | ret = -EFAULT; | 1853 | sticky: |
1854 | /* | ||
1855 | * If an application puts its timeval in read-only | ||
1856 | * memory, we don't want the Linux-specific update to | ||
1857 | * the timeval to cause a fault after the select has | ||
1858 | * completed successfully. However, because we're not | ||
1859 | * updating the timeval, we can't restart the system | ||
1860 | * call. | ||
1861 | */ | ||
1862 | if (ret == -ERESTARTNOHAND) | ||
1863 | ret = -EINTR; | ||
1864 | } | ||
1851 | } | 1865 | } |
1852 | 1866 | ||
1853 | if (ret == -ERESTARTNOHAND) { | 1867 | if (ret == -ERESTARTNOHAND) { |
diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c index 109333c8ecb9..f8842ca443c2 100644 --- a/fs/dlm/lockspace.c +++ b/fs/dlm/lockspace.c | |||
@@ -43,6 +43,10 @@ static ssize_t dlm_control_store(struct dlm_ls *ls, const char *buf, size_t len) | |||
43 | ssize_t ret = len; | 43 | ssize_t ret = len; |
44 | int n = simple_strtol(buf, NULL, 0); | 44 | int n = simple_strtol(buf, NULL, 0); |
45 | 45 | ||
46 | ls = dlm_find_lockspace_local(ls->ls_local_handle); | ||
47 | if (!ls) | ||
48 | return -EINVAL; | ||
49 | |||
46 | switch (n) { | 50 | switch (n) { |
47 | case 0: | 51 | case 0: |
48 | dlm_ls_stop(ls); | 52 | dlm_ls_stop(ls); |
@@ -53,6 +57,7 @@ static ssize_t dlm_control_store(struct dlm_ls *ls, const char *buf, size_t len) | |||
53 | default: | 57 | default: |
54 | ret = -EINVAL; | 58 | ret = -EINVAL; |
55 | } | 59 | } |
60 | dlm_put_lockspace(ls); | ||
56 | return ret; | 61 | return ret; |
57 | } | 62 | } |
58 | 63 | ||
@@ -143,6 +148,12 @@ static ssize_t dlm_attr_store(struct kobject *kobj, struct attribute *attr, | |||
143 | return a->store ? a->store(ls, buf, len) : len; | 148 | return a->store ? a->store(ls, buf, len) : len; |
144 | } | 149 | } |
145 | 150 | ||
151 | static void lockspace_kobj_release(struct kobject *k) | ||
152 | { | ||
153 | struct dlm_ls *ls = container_of(k, struct dlm_ls, ls_kobj); | ||
154 | kfree(ls); | ||
155 | } | ||
156 | |||
146 | static struct sysfs_ops dlm_attr_ops = { | 157 | static struct sysfs_ops dlm_attr_ops = { |
147 | .show = dlm_attr_show, | 158 | .show = dlm_attr_show, |
148 | .store = dlm_attr_store, | 159 | .store = dlm_attr_store, |
@@ -151,6 +162,7 @@ static struct sysfs_ops dlm_attr_ops = { | |||
151 | static struct kobj_type dlm_ktype = { | 162 | static struct kobj_type dlm_ktype = { |
152 | .default_attrs = dlm_attrs, | 163 | .default_attrs = dlm_attrs, |
153 | .sysfs_ops = &dlm_attr_ops, | 164 | .sysfs_ops = &dlm_attr_ops, |
165 | .release = lockspace_kobj_release, | ||
154 | }; | 166 | }; |
155 | 167 | ||
156 | static struct kset dlm_kset = { | 168 | static struct kset dlm_kset = { |
@@ -678,7 +690,7 @@ static int release_lockspace(struct dlm_ls *ls, int force) | |||
678 | dlm_clear_members_gone(ls); | 690 | dlm_clear_members_gone(ls); |
679 | kfree(ls->ls_node_array); | 691 | kfree(ls->ls_node_array); |
680 | kobject_unregister(&ls->ls_kobj); | 692 | kobject_unregister(&ls->ls_kobj); |
681 | kfree(ls); | 693 | /* The ls structure will be freed when the kobject is done with */ |
682 | 694 | ||
683 | mutex_lock(&ls_lock); | 695 | mutex_lock(&ls_lock); |
684 | ls_count--; | 696 | ls_count--; |
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c index f49f105394b7..136175a69332 100644 --- a/fs/ecryptfs/crypto.c +++ b/fs/ecryptfs/crypto.c | |||
@@ -134,7 +134,7 @@ int ecryptfs_crypto_api_algify_cipher_name(char **algified_name, | |||
134 | 134 | ||
135 | algified_name_len = (chaining_modifier_len + cipher_name_len + 3); | 135 | algified_name_len = (chaining_modifier_len + cipher_name_len + 3); |
136 | (*algified_name) = kmalloc(algified_name_len, GFP_KERNEL); | 136 | (*algified_name) = kmalloc(algified_name_len, GFP_KERNEL); |
137 | if (!(algified_name)) { | 137 | if (!(*algified_name)) { |
138 | rc = -ENOMEM; | 138 | rc = -ENOMEM; |
139 | goto out; | 139 | goto out; |
140 | } | 140 | } |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 2bb5ace3882d..763a50daf1c0 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -397,14 +397,14 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, | |||
397 | 397 | ||
398 | err = -EIO; | 398 | err = -EIO; |
399 | if (is_bad_inode(inode)) | 399 | if (is_bad_inode(inode)) |
400 | goto clean_pages_up; | 400 | goto out; |
401 | 401 | ||
402 | data.file = file; | 402 | data.file = file; |
403 | data.inode = inode; | 403 | data.inode = inode; |
404 | data.req = fuse_get_req(fc); | 404 | data.req = fuse_get_req(fc); |
405 | err = PTR_ERR(data.req); | 405 | err = PTR_ERR(data.req); |
406 | if (IS_ERR(data.req)) | 406 | if (IS_ERR(data.req)) |
407 | goto clean_pages_up; | 407 | goto out; |
408 | 408 | ||
409 | err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); | 409 | err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); |
410 | if (!err) { | 410 | if (!err) { |
@@ -413,10 +413,7 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, | |||
413 | else | 413 | else |
414 | fuse_put_request(fc, data.req); | 414 | fuse_put_request(fc, data.req); |
415 | } | 415 | } |
416 | return err; | 416 | out: |
417 | |||
418 | clean_pages_up: | ||
419 | put_pages_list(pages); | ||
420 | return err; | 417 | return err; |
421 | } | 418 | } |
422 | 419 | ||
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 57c43ac47925..d470e5286ecd 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
@@ -157,6 +157,9 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, struct gfs2_inum *inum, | |||
157 | struct gfs2_glock *io_gl; | 157 | struct gfs2_glock *io_gl; |
158 | int error; | 158 | int error; |
159 | 159 | ||
160 | if (!inode) | ||
161 | return ERR_PTR(-ENOBUFS); | ||
162 | |||
160 | if (inode->i_state & I_NEW) { | 163 | if (inode->i_state & I_NEW) { |
161 | struct gfs2_sbd *sdp = GFS2_SB(inode); | 164 | struct gfs2_sbd *sdp = GFS2_SB(inode); |
162 | umode_t mode = DT2IF(type); | 165 | umode_t mode = DT2IF(type); |
diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index 21508a13bb78..9889c1eacec1 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c | |||
@@ -84,8 +84,8 @@ static int __init init_gfs2_fs(void) | |||
84 | 84 | ||
85 | gfs2_inode_cachep = kmem_cache_create("gfs2_inode", | 85 | gfs2_inode_cachep = kmem_cache_create("gfs2_inode", |
86 | sizeof(struct gfs2_inode), | 86 | sizeof(struct gfs2_inode), |
87 | 0, (SLAB_RECLAIM_ACCOUNT| | 87 | 0, SLAB_RECLAIM_ACCOUNT| |
88 | SLAB_PANIC|SLAB_MEM_SPREAD), | 88 | SLAB_MEM_SPREAD, |
89 | gfs2_init_inode_once, NULL); | 89 | gfs2_init_inode_once, NULL); |
90 | if (!gfs2_inode_cachep) | 90 | if (!gfs2_inode_cachep) |
91 | goto fail; | 91 | goto fail; |
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c index 8d5963c7e123..015640b3f123 100644 --- a/fs/gfs2/ops_address.c +++ b/fs/gfs2/ops_address.c | |||
@@ -337,13 +337,6 @@ out: | |||
337 | out_noerror: | 337 | out_noerror: |
338 | ret = 0; | 338 | ret = 0; |
339 | out_unlock: | 339 | out_unlock: |
340 | /* unlock all pages, we can't do any I/O right now */ | ||
341 | for (page_idx = 0; page_idx < nr_pages; page_idx++) { | ||
342 | struct page *page = list_entry(pages->prev, struct page, lru); | ||
343 | list_del(&page->lru); | ||
344 | unlock_page(page); | ||
345 | page_cache_release(page); | ||
346 | } | ||
347 | if (do_unlock) | 340 | if (do_unlock) |
348 | gfs2_holder_uninit(&gh); | 341 | gfs2_holder_uninit(&gh); |
349 | goto out; | 342 | goto out; |
diff --git a/fs/gfs2/ops_super.c b/fs/gfs2/ops_super.c index 06f06f7773d0..b47d9598c047 100644 --- a/fs/gfs2/ops_super.c +++ b/fs/gfs2/ops_super.c | |||
@@ -138,16 +138,27 @@ static void gfs2_put_super(struct super_block *sb) | |||
138 | } | 138 | } |
139 | 139 | ||
140 | /** | 140 | /** |
141 | * gfs2_write_super - disk commit all incore transactions | 141 | * gfs2_write_super |
142 | * @sb: the filesystem | 142 | * @sb: the superblock |
143 | * | 143 | * |
144 | * This function is called every time sync(2) is called. | ||
145 | * After this exits, all dirty buffers are synced. | ||
146 | */ | 144 | */ |
147 | 145 | ||
148 | static void gfs2_write_super(struct super_block *sb) | 146 | static void gfs2_write_super(struct super_block *sb) |
149 | { | 147 | { |
148 | sb->s_dirt = 0; | ||
149 | } | ||
150 | |||
151 | /** | ||
152 | * gfs2_sync_fs - sync the filesystem | ||
153 | * @sb: the superblock | ||
154 | * | ||
155 | * Flushes the log to disk. | ||
156 | */ | ||
157 | static int gfs2_sync_fs(struct super_block *sb, int wait) | ||
158 | { | ||
159 | sb->s_dirt = 0; | ||
150 | gfs2_log_flush(sb->s_fs_info, NULL); | 160 | gfs2_log_flush(sb->s_fs_info, NULL); |
161 | return 0; | ||
151 | } | 162 | } |
152 | 163 | ||
153 | /** | 164 | /** |
@@ -452,17 +463,18 @@ static void gfs2_destroy_inode(struct inode *inode) | |||
452 | } | 463 | } |
453 | 464 | ||
454 | struct super_operations gfs2_super_ops = { | 465 | struct super_operations gfs2_super_ops = { |
455 | .alloc_inode = gfs2_alloc_inode, | 466 | .alloc_inode = gfs2_alloc_inode, |
456 | .destroy_inode = gfs2_destroy_inode, | 467 | .destroy_inode = gfs2_destroy_inode, |
457 | .write_inode = gfs2_write_inode, | 468 | .write_inode = gfs2_write_inode, |
458 | .delete_inode = gfs2_delete_inode, | 469 | .delete_inode = gfs2_delete_inode, |
459 | .put_super = gfs2_put_super, | 470 | .put_super = gfs2_put_super, |
460 | .write_super = gfs2_write_super, | 471 | .write_super = gfs2_write_super, |
461 | .write_super_lockfs = gfs2_write_super_lockfs, | 472 | .sync_fs = gfs2_sync_fs, |
462 | .unlockfs = gfs2_unlockfs, | 473 | .write_super_lockfs = gfs2_write_super_lockfs, |
463 | .statfs = gfs2_statfs, | 474 | .unlockfs = gfs2_unlockfs, |
464 | .remount_fs = gfs2_remount_fs, | 475 | .statfs = gfs2_statfs, |
465 | .clear_inode = gfs2_clear_inode, | 476 | .remount_fs = gfs2_remount_fs, |
466 | .show_options = gfs2_show_options, | 477 | .clear_inode = gfs2_clear_inode, |
478 | .show_options = gfs2_show_options, | ||
467 | }; | 479 | }; |
468 | 480 | ||
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index 4c7985ebca92..b753ba216450 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c | |||
@@ -756,6 +756,11 @@ static int can_set_system_xattr(struct inode *inode, const char *name, | |||
756 | return -EOPNOTSUPP; | 756 | return -EOPNOTSUPP; |
757 | } | 757 | } |
758 | 758 | ||
759 | /* | ||
760 | * Most of the permission checking is done by xattr_permission in the vfs. | ||
761 | * The local file system is responsible for handling the system.* namespace. | ||
762 | * We also need to verify that this is a namespace that we recognize. | ||
763 | */ | ||
759 | static int can_set_xattr(struct inode *inode, const char *name, | 764 | static int can_set_xattr(struct inode *inode, const char *name, |
760 | const void *value, size_t value_len) | 765 | const void *value, size_t value_len) |
761 | { | 766 | { |
@@ -771,10 +776,6 @@ static int can_set_xattr(struct inode *inode, const char *name, | |||
771 | strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN)) | 776 | strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN)) |
772 | return -EOPNOTSUPP; | 777 | return -EOPNOTSUPP; |
773 | 778 | ||
774 | if (!S_ISREG(inode->i_mode) && | ||
775 | (!S_ISDIR(inode->i_mode) || inode->i_mode &S_ISVTX)) | ||
776 | return -EPERM; | ||
777 | |||
778 | return 0; | 779 | return 0; |
779 | } | 780 | } |
780 | 781 | ||
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index 634139232aaf..8ca18085e68d 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c | |||
@@ -353,9 +353,6 @@ EXPORT_SYMBOL(lockd_down); | |||
353 | * Sysctl parameters (same as module parameters, different interface). | 353 | * Sysctl parameters (same as module parameters, different interface). |
354 | */ | 354 | */ |
355 | 355 | ||
356 | /* Something that isn't CTL_ANY, CTL_NONE or a value that may clash. */ | ||
357 | #define CTL_UNNUMBERED -2 | ||
358 | |||
359 | static ctl_table nlm_sysctls[] = { | 356 | static ctl_table nlm_sysctls[] = { |
360 | { | 357 | { |
361 | .ctl_name = CTL_UNNUMBERED, | 358 | .ctl_name = CTL_UNNUMBERED, |
diff --git a/fs/nfs/sysctl.c b/fs/nfs/sysctl.c index 2fe3403c2409..3ea50ac64820 100644 --- a/fs/nfs/sysctl.c +++ b/fs/nfs/sysctl.c | |||
@@ -18,11 +18,6 @@ | |||
18 | static const int nfs_set_port_min = 0; | 18 | static const int nfs_set_port_min = 0; |
19 | static const int nfs_set_port_max = 65535; | 19 | static const int nfs_set_port_max = 65535; |
20 | static struct ctl_table_header *nfs_callback_sysctl_table; | 20 | static struct ctl_table_header *nfs_callback_sysctl_table; |
21 | /* | ||
22 | * Something that isn't CTL_ANY, CTL_NONE or a value that may clash. | ||
23 | * Use the same values as fs/lockd/svc.c | ||
24 | */ | ||
25 | #define CTL_UNNUMBERED -2 | ||
26 | 21 | ||
27 | static ctl_table nfs_cb_sysctls[] = { | 22 | static ctl_table nfs_cb_sysctls[] = { |
28 | #ifdef CONFIG_NFS_V4 | 23 | #ifdef CONFIG_NFS_V4 |
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index 64db601c2bd2..7f5bad0393b1 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c | |||
@@ -258,7 +258,7 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, | |||
258 | /* Now create the file and set attributes */ | 258 | /* Now create the file and set attributes */ |
259 | nfserr = nfsd_create_v3(rqstp, dirfhp, argp->name, argp->len, | 259 | nfserr = nfsd_create_v3(rqstp, dirfhp, argp->name, argp->len, |
260 | attr, newfhp, | 260 | attr, newfhp, |
261 | argp->createmode, argp->verf, NULL); | 261 | argp->createmode, argp->verf, NULL, NULL); |
262 | 262 | ||
263 | RETURN_STATUS(nfserr); | 263 | RETURN_STATUS(nfserr); |
264 | } | 264 | } |
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 0a7bbdc4a10a..50bc94243ca1 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c | |||
@@ -93,6 +93,7 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o | |||
93 | { | 93 | { |
94 | struct svc_fh resfh; | 94 | struct svc_fh resfh; |
95 | __be32 status; | 95 | __be32 status; |
96 | int created = 0; | ||
96 | 97 | ||
97 | fh_init(&resfh, NFS4_FHSIZE); | 98 | fh_init(&resfh, NFS4_FHSIZE); |
98 | open->op_truncate = 0; | 99 | open->op_truncate = 0; |
@@ -105,28 +106,27 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o | |||
105 | status = nfsd_create_v3(rqstp, current_fh, open->op_fname.data, | 106 | status = nfsd_create_v3(rqstp, current_fh, open->op_fname.data, |
106 | open->op_fname.len, &open->op_iattr, | 107 | open->op_fname.len, &open->op_iattr, |
107 | &resfh, open->op_createmode, | 108 | &resfh, open->op_createmode, |
108 | (u32 *)open->op_verf.data, &open->op_truncate); | 109 | (u32 *)open->op_verf.data, &open->op_truncate, &created); |
109 | } | 110 | } else { |
110 | else { | ||
111 | status = nfsd_lookup(rqstp, current_fh, | 111 | status = nfsd_lookup(rqstp, current_fh, |
112 | open->op_fname.data, open->op_fname.len, &resfh); | 112 | open->op_fname.data, open->op_fname.len, &resfh); |
113 | fh_unlock(current_fh); | 113 | fh_unlock(current_fh); |
114 | } | 114 | } |
115 | if (status) | ||
116 | goto out; | ||
115 | 117 | ||
116 | if (!status) { | 118 | set_change_info(&open->op_cinfo, current_fh); |
117 | set_change_info(&open->op_cinfo, current_fh); | ||
118 | 119 | ||
119 | /* set reply cache */ | 120 | /* set reply cache */ |
120 | fh_dup2(current_fh, &resfh); | 121 | fh_dup2(current_fh, &resfh); |
121 | open->op_stateowner->so_replay.rp_openfh_len = | 122 | open->op_stateowner->so_replay.rp_openfh_len = resfh.fh_handle.fh_size; |
122 | resfh.fh_handle.fh_size; | 123 | memcpy(open->op_stateowner->so_replay.rp_openfh, |
123 | memcpy(open->op_stateowner->so_replay.rp_openfh, | 124 | &resfh.fh_handle.fh_base, resfh.fh_handle.fh_size); |
124 | &resfh.fh_handle.fh_base, | ||
125 | resfh.fh_handle.fh_size); | ||
126 | 125 | ||
126 | if (!created) | ||
127 | status = do_open_permission(rqstp, current_fh, open, MAY_NOP); | 127 | status = do_open_permission(rqstp, current_fh, open, MAY_NOP); |
128 | } | ||
129 | 128 | ||
129 | out: | ||
130 | fh_put(&resfh); | 130 | fh_put(&resfh); |
131 | return status; | 131 | return status; |
132 | } | 132 | } |
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index e9d07704680e..81b8565d3837 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
@@ -274,7 +274,7 @@ nfsd4_clear_clid_dir(struct dentry *dir, struct dentry *dentry) | |||
274 | * any regular files anyway, just in case the directory was created by | 274 | * any regular files anyway, just in case the directory was created by |
275 | * a kernel from the future.... */ | 275 | * a kernel from the future.... */ |
276 | nfsd4_list_rec_dir(dentry, nfsd4_remove_clid_file); | 276 | nfsd4_list_rec_dir(dentry, nfsd4_remove_clid_file); |
277 | mutex_lock(&dir->d_inode->i_mutex); | 277 | mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT); |
278 | status = vfs_rmdir(dir->d_inode, dentry); | 278 | status = vfs_rmdir(dir->d_inode, dentry); |
279 | mutex_unlock(&dir->d_inode->i_mutex); | 279 | mutex_unlock(&dir->d_inode->i_mutex); |
280 | return status; | 280 | return status; |
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index f21e917bb8ed..bb4d926e4487 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -1177,7 +1177,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
1177 | /* | 1177 | /* |
1178 | * Get the dir op function pointer. | 1178 | * Get the dir op function pointer. |
1179 | */ | 1179 | */ |
1180 | err = nfserr_perm; | 1180 | err = 0; |
1181 | switch (type) { | 1181 | switch (type) { |
1182 | case S_IFREG: | 1182 | case S_IFREG: |
1183 | host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); | 1183 | host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); |
@@ -1237,7 +1237,7 @@ __be32 | |||
1237 | nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, | 1237 | nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, |
1238 | char *fname, int flen, struct iattr *iap, | 1238 | char *fname, int flen, struct iattr *iap, |
1239 | struct svc_fh *resfhp, int createmode, u32 *verifier, | 1239 | struct svc_fh *resfhp, int createmode, u32 *verifier, |
1240 | int *truncp) | 1240 | int *truncp, int *created) |
1241 | { | 1241 | { |
1242 | struct dentry *dentry, *dchild = NULL; | 1242 | struct dentry *dentry, *dchild = NULL; |
1243 | struct inode *dirp; | 1243 | struct inode *dirp; |
@@ -1331,6 +1331,8 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
1331 | host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); | 1331 | host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); |
1332 | if (host_err < 0) | 1332 | if (host_err < 0) |
1333 | goto out_nfserr; | 1333 | goto out_nfserr; |
1334 | if (created) | ||
1335 | *created = 1; | ||
1334 | 1336 | ||
1335 | if (EX_ISSYNC(fhp->fh_export)) { | 1337 | if (EX_ISSYNC(fhp->fh_export)) { |
1336 | err = nfserrno(nfsd_sync_dir(dentry)); | 1338 | err = nfserrno(nfsd_sync_dir(dentry)); |
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 9041802df832..17249994110f 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c | |||
@@ -1619,6 +1619,7 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) | |||
1619 | "jmacd-8: reiserfs_fill_super: unable to read bitmap"); | 1619 | "jmacd-8: reiserfs_fill_super: unable to read bitmap"); |
1620 | goto error; | 1620 | goto error; |
1621 | } | 1621 | } |
1622 | errval = -EINVAL; | ||
1622 | #ifdef CONFIG_REISERFS_CHECK | 1623 | #ifdef CONFIG_REISERFS_CHECK |
1623 | SWARN(silent, s, "CONFIG_REISERFS_CHECK is set ON"); | 1624 | SWARN(silent, s, "CONFIG_REISERFS_CHECK is set ON"); |
1624 | SWARN(silent, s, "- it is slow mode for debugging."); | 1625 | SWARN(silent, s, "- it is slow mode for debugging."); |
diff --git a/fs/splice.c b/fs/splice.c index 8d705954d294..da74583a00ee 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
@@ -1109,6 +1109,19 @@ out_release: | |||
1109 | EXPORT_SYMBOL(do_splice_direct); | 1109 | EXPORT_SYMBOL(do_splice_direct); |
1110 | 1110 | ||
1111 | /* | 1111 | /* |
1112 | * After the inode slimming patch, i_pipe/i_bdev/i_cdev share the same | ||
1113 | * location, so checking ->i_pipe is not enough to verify that this is a | ||
1114 | * pipe. | ||
1115 | */ | ||
1116 | static inline struct pipe_inode_info *pipe_info(struct inode *inode) | ||
1117 | { | ||
1118 | if (S_ISFIFO(inode->i_mode)) | ||
1119 | return inode->i_pipe; | ||
1120 | |||
1121 | return NULL; | ||
1122 | } | ||
1123 | |||
1124 | /* | ||
1112 | * Determine where to splice to/from. | 1125 | * Determine where to splice to/from. |
1113 | */ | 1126 | */ |
1114 | static long do_splice(struct file *in, loff_t __user *off_in, | 1127 | static long do_splice(struct file *in, loff_t __user *off_in, |
@@ -1119,7 +1132,7 @@ static long do_splice(struct file *in, loff_t __user *off_in, | |||
1119 | loff_t offset, *off; | 1132 | loff_t offset, *off; |
1120 | long ret; | 1133 | long ret; |
1121 | 1134 | ||
1122 | pipe = in->f_dentry->d_inode->i_pipe; | 1135 | pipe = pipe_info(in->f_dentry->d_inode); |
1123 | if (pipe) { | 1136 | if (pipe) { |
1124 | if (off_in) | 1137 | if (off_in) |
1125 | return -ESPIPE; | 1138 | return -ESPIPE; |
@@ -1140,7 +1153,7 @@ static long do_splice(struct file *in, loff_t __user *off_in, | |||
1140 | return ret; | 1153 | return ret; |
1141 | } | 1154 | } |
1142 | 1155 | ||
1143 | pipe = out->f_dentry->d_inode->i_pipe; | 1156 | pipe = pipe_info(out->f_dentry->d_inode); |
1144 | if (pipe) { | 1157 | if (pipe) { |
1145 | if (off_out) | 1158 | if (off_out) |
1146 | return -ESPIPE; | 1159 | return -ESPIPE; |
@@ -1298,7 +1311,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, | |||
1298 | static long do_vmsplice(struct file *file, const struct iovec __user *iov, | 1311 | static long do_vmsplice(struct file *file, const struct iovec __user *iov, |
1299 | unsigned long nr_segs, unsigned int flags) | 1312 | unsigned long nr_segs, unsigned int flags) |
1300 | { | 1313 | { |
1301 | struct pipe_inode_info *pipe = file->f_dentry->d_inode->i_pipe; | 1314 | struct pipe_inode_info *pipe; |
1302 | struct page *pages[PIPE_BUFFERS]; | 1315 | struct page *pages[PIPE_BUFFERS]; |
1303 | struct partial_page partial[PIPE_BUFFERS]; | 1316 | struct partial_page partial[PIPE_BUFFERS]; |
1304 | struct splice_pipe_desc spd = { | 1317 | struct splice_pipe_desc spd = { |
@@ -1308,7 +1321,8 @@ static long do_vmsplice(struct file *file, const struct iovec __user *iov, | |||
1308 | .ops = &user_page_pipe_buf_ops, | 1321 | .ops = &user_page_pipe_buf_ops, |
1309 | }; | 1322 | }; |
1310 | 1323 | ||
1311 | if (unlikely(!pipe)) | 1324 | pipe = pipe_info(file->f_dentry->d_inode); |
1325 | if (!pipe) | ||
1312 | return -EBADF; | 1326 | return -EBADF; |
1313 | if (unlikely(nr_segs > UIO_MAXIOV)) | 1327 | if (unlikely(nr_segs > UIO_MAXIOV)) |
1314 | return -EINVAL; | 1328 | return -EINVAL; |
@@ -1535,8 +1549,8 @@ static int link_pipe(struct pipe_inode_info *ipipe, | |||
1535 | static long do_tee(struct file *in, struct file *out, size_t len, | 1549 | static long do_tee(struct file *in, struct file *out, size_t len, |
1536 | unsigned int flags) | 1550 | unsigned int flags) |
1537 | { | 1551 | { |
1538 | struct pipe_inode_info *ipipe = in->f_dentry->d_inode->i_pipe; | 1552 | struct pipe_inode_info *ipipe = pipe_info(in->f_dentry->d_inode); |
1539 | struct pipe_inode_info *opipe = out->f_dentry->d_inode->i_pipe; | 1553 | struct pipe_inode_info *opipe = pipe_info(out->f_dentry->d_inode); |
1540 | int ret = -EINVAL; | 1554 | int ret = -EINVAL; |
1541 | 1555 | ||
1542 | /* | 1556 | /* |
diff --git a/fs/xattr.c b/fs/xattr.c index 395635100f77..0901bdc2ce24 100644 --- a/fs/xattr.c +++ b/fs/xattr.c | |||
@@ -48,14 +48,21 @@ xattr_permission(struct inode *inode, const char *name, int mask) | |||
48 | return 0; | 48 | return 0; |
49 | 49 | ||
50 | /* | 50 | /* |
51 | * The trusted.* namespace can only accessed by a privilegued user. | 51 | * The trusted.* namespace can only be accessed by a privileged user. |
52 | */ | 52 | */ |
53 | if (!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN)) | 53 | if (!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN)) |
54 | return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM); | 54 | return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM); |
55 | 55 | ||
56 | /* In user.* namespace, only regular files and directories can have | ||
57 | * extended attributes. For sticky directories, only the owner and | ||
58 | * privileged user can write attributes. | ||
59 | */ | ||
56 | if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) { | 60 | if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) { |
57 | if (!S_ISREG(inode->i_mode) && | 61 | if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode)) |
58 | (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX)) | 62 | return -EPERM; |
63 | if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) && | ||
64 | (mask & MAY_WRITE) && (current->fsuid != inode->i_uid) && | ||
65 | !capable(CAP_FOWNER)) | ||
59 | return -EPERM; | 66 | return -EPERM; |
60 | } | 67 | } |
61 | 68 | ||
diff --git a/fs/xfs/Makefile-linux-2.6 b/fs/xfs/Makefile-linux-2.6 index 291948d5085a..b49989bb89ad 100644 --- a/fs/xfs/Makefile-linux-2.6 +++ b/fs/xfs/Makefile-linux-2.6 | |||
@@ -21,22 +21,7 @@ EXTRA_CFLAGS += -Ifs/xfs -Ifs/xfs/linux-2.6 -funsigned-char | |||
21 | XFS_LINUX := linux-2.6 | 21 | XFS_LINUX := linux-2.6 |
22 | 22 | ||
23 | ifeq ($(CONFIG_XFS_DEBUG),y) | 23 | ifeq ($(CONFIG_XFS_DEBUG),y) |
24 | EXTRA_CFLAGS += -g -DSTATIC="" -DDEBUG | 24 | EXTRA_CFLAGS += -g |
25 | EXTRA_CFLAGS += -DXFS_BUF_LOCK_TRACKING | ||
26 | endif | ||
27 | ifeq ($(CONFIG_XFS_TRACE),y) | ||
28 | EXTRA_CFLAGS += -DXFS_ALLOC_TRACE | ||
29 | EXTRA_CFLAGS += -DXFS_ATTR_TRACE | ||
30 | EXTRA_CFLAGS += -DXFS_BLI_TRACE | ||
31 | EXTRA_CFLAGS += -DXFS_BMAP_TRACE | ||
32 | EXTRA_CFLAGS += -DXFS_BMBT_TRACE | ||
33 | EXTRA_CFLAGS += -DXFS_DIR2_TRACE | ||
34 | EXTRA_CFLAGS += -DXFS_DQUOT_TRACE | ||
35 | EXTRA_CFLAGS += -DXFS_ILOCK_TRACE | ||
36 | EXTRA_CFLAGS += -DXFS_LOG_TRACE | ||
37 | EXTRA_CFLAGS += -DXFS_RW_TRACE | ||
38 | EXTRA_CFLAGS += -DXFS_BUF_TRACE | ||
39 | EXTRA_CFLAGS += -DXFS_VNODE_TRACE | ||
40 | endif | 25 | endif |
41 | 26 | ||
42 | obj-$(CONFIG_XFS_FS) += xfs.o | 27 | obj-$(CONFIG_XFS_FS) += xfs.o |
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index db5f5a3608ca..d3382843698e 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
@@ -15,6 +15,7 @@ | |||
15 | * along with this program; if not, write the Free Software Foundation, | 15 | * along with this program; if not, write the Free Software Foundation, |
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
17 | */ | 17 | */ |
18 | #include "xfs.h" | ||
18 | #include <linux/stddef.h> | 19 | #include <linux/stddef.h> |
19 | #include <linux/errno.h> | 20 | #include <linux/errno.h> |
20 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
@@ -31,7 +32,6 @@ | |||
31 | #include <linux/kthread.h> | 32 | #include <linux/kthread.h> |
32 | #include <linux/migrate.h> | 33 | #include <linux/migrate.h> |
33 | #include <linux/backing-dev.h> | 34 | #include <linux/backing-dev.h> |
34 | #include "xfs_linux.h" | ||
35 | 35 | ||
36 | STATIC kmem_zone_t *xfs_buf_zone; | 36 | STATIC kmem_zone_t *xfs_buf_zone; |
37 | STATIC kmem_shaker_t xfs_buf_shake; | 37 | STATIC kmem_shaker_t xfs_buf_shake; |
@@ -1406,7 +1406,7 @@ xfs_alloc_bufhash( | |||
1406 | btp->bt_hashshift = external ? 3 : 8; /* 8 or 256 buckets */ | 1406 | btp->bt_hashshift = external ? 3 : 8; /* 8 or 256 buckets */ |
1407 | btp->bt_hashmask = (1 << btp->bt_hashshift) - 1; | 1407 | btp->bt_hashmask = (1 << btp->bt_hashshift) - 1; |
1408 | btp->bt_hash = kmem_zalloc((1 << btp->bt_hashshift) * | 1408 | btp->bt_hash = kmem_zalloc((1 << btp->bt_hashshift) * |
1409 | sizeof(xfs_bufhash_t), KM_SLEEP); | 1409 | sizeof(xfs_bufhash_t), KM_SLEEP | KM_LARGE); |
1410 | for (i = 0; i < (1 << btp->bt_hashshift); i++) { | 1410 | for (i = 0; i < (1 << btp->bt_hashshift); i++) { |
1411 | spin_lock_init(&btp->bt_hash[i].bh_lock); | 1411 | spin_lock_init(&btp->bt_hash[i].bh_lock); |
1412 | INIT_LIST_HEAD(&btp->bt_hash[i].bh_list); | 1412 | INIT_LIST_HEAD(&btp->bt_hash[i].bh_list); |
diff --git a/fs/xfs/linux-2.6/xfs_dmapi_priv.h b/fs/xfs/linux-2.6/xfs_dmapi_priv.h new file mode 100644 index 000000000000..a8b0b1685eed --- /dev/null +++ b/fs/xfs/linux-2.6/xfs_dmapi_priv.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2000-2006 Silicon Graphics, Inc. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it would be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write the Free Software Foundation, | ||
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
17 | */ | ||
18 | #ifndef __XFS_DMAPI_PRIV_H__ | ||
19 | #define __XFS_DMAPI_PRIV_H__ | ||
20 | |||
21 | /* | ||
22 | * Based on IO_ISDIRECT, decide which i_ flag is set. | ||
23 | */ | ||
24 | #define DM_SEM_FLAG_RD(ioflags) (((ioflags) & IO_ISDIRECT) ? \ | ||
25 | DM_FLAGS_IMUX : 0) | ||
26 | #define DM_SEM_FLAG_WR (DM_FLAGS_IALLOCSEM_WR | DM_FLAGS_IMUX) | ||
27 | |||
28 | #endif /*__XFS_DMAPI_PRIV_H__*/ | ||
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index a74f854d91e6..74d094829a4d 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
@@ -341,8 +341,11 @@ xfs_open_by_handle( | |||
341 | put_unused_fd(new_fd); | 341 | put_unused_fd(new_fd); |
342 | return -XFS_ERROR(-PTR_ERR(filp)); | 342 | return -XFS_ERROR(-PTR_ERR(filp)); |
343 | } | 343 | } |
344 | if (inode->i_mode & S_IFREG) | 344 | if (inode->i_mode & S_IFREG) { |
345 | /* invisible operation should not change atime */ | ||
346 | filp->f_flags |= O_NOATIME; | ||
345 | filp->f_op = &xfs_invis_file_operations; | 347 | filp->f_op = &xfs_invis_file_operations; |
348 | } | ||
346 | 349 | ||
347 | fd_install(new_fd, filp); | 350 | fd_install(new_fd, filp); |
348 | return new_fd; | 351 | return new_fd; |
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 38c4d128a8c0..de05abbbe7fd 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
@@ -227,9 +227,7 @@ xfs_initialize_vnode( | |||
227 | xfs_revalidate_inode(XFS_BHVTOM(bdp), vp, ip); | 227 | xfs_revalidate_inode(XFS_BHVTOM(bdp), vp, ip); |
228 | xfs_set_inodeops(inode); | 228 | xfs_set_inodeops(inode); |
229 | 229 | ||
230 | spin_lock(&ip->i_flags_lock); | 230 | xfs_iflags_clear(ip, XFS_INEW); |
231 | ip->i_flags &= ~XFS_INEW; | ||
232 | spin_unlock(&ip->i_flags_lock); | ||
233 | barrier(); | 231 | barrier(); |
234 | 232 | ||
235 | unlock_new_inode(inode); | 233 | unlock_new_inode(inode); |
diff --git a/fs/xfs/support/debug.c b/fs/xfs/support/debug.c index c75f68361e33..4363512d2f90 100644 --- a/fs/xfs/support/debug.c +++ b/fs/xfs/support/debug.c | |||
@@ -15,11 +15,9 @@ | |||
15 | * along with this program; if not, write the Free Software Foundation, | 15 | * along with this program; if not, write the Free Software Foundation, |
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
17 | */ | 17 | */ |
18 | #include <xfs.h> | ||
18 | #include "debug.h" | 19 | #include "debug.h" |
19 | #include "spin.h" | 20 | #include "spin.h" |
20 | #include <asm/page.h> | ||
21 | #include <linux/sched.h> | ||
22 | #include <linux/kernel.h> | ||
23 | 21 | ||
24 | static char message[256]; /* keep it off the stack */ | 22 | static char message[256]; /* keep it off the stack */ |
25 | static DEFINE_SPINLOCK(xfs_err_lock); | 23 | static DEFINE_SPINLOCK(xfs_err_lock); |
diff --git a/fs/xfs/support/move.c b/fs/xfs/support/move.c index caefa17b80fe..ac8617ca3909 100644 --- a/fs/xfs/support/move.c +++ b/fs/xfs/support/move.c | |||
@@ -22,7 +22,7 @@ | |||
22 | * as we go. | 22 | * as we go. |
23 | */ | 23 | */ |
24 | int | 24 | int |
25 | uio_read(caddr_t src, size_t len, struct uio *uio) | 25 | xfs_uio_read(caddr_t src, size_t len, struct uio *uio) |
26 | { | 26 | { |
27 | size_t count; | 27 | size_t count; |
28 | 28 | ||
diff --git a/fs/xfs/support/move.h b/fs/xfs/support/move.h index 97a2498d2da3..977879c24ff5 100644 --- a/fs/xfs/support/move.h +++ b/fs/xfs/support/move.h | |||
@@ -65,6 +65,6 @@ struct uio { | |||
65 | typedef struct uio uio_t; | 65 | typedef struct uio uio_t; |
66 | typedef struct iovec iovec_t; | 66 | typedef struct iovec iovec_t; |
67 | 67 | ||
68 | extern int uio_read (caddr_t, size_t, uio_t *); | 68 | extern int xfs_uio_read (caddr_t, size_t, uio_t *); |
69 | 69 | ||
70 | #endif /* __XFS_SUPPORT_MOVE_H__ */ | 70 | #endif /* __XFS_SUPPORT_MOVE_H__ */ |
diff --git a/fs/xfs/xfs.h b/fs/xfs/xfs.h index 1a48dbb902a7..bf0a12040b13 100644 --- a/fs/xfs/xfs.h +++ b/fs/xfs/xfs.h | |||
@@ -17,5 +17,28 @@ | |||
17 | */ | 17 | */ |
18 | #ifndef __XFS_H__ | 18 | #ifndef __XFS_H__ |
19 | #define __XFS_H__ | 19 | #define __XFS_H__ |
20 | |||
21 | #ifdef CONFIG_XFS_DEBUG | ||
22 | #define STATIC | ||
23 | #define DEBUG 1 | ||
24 | #define XFS_BUF_LOCK_TRACKING 1 | ||
25 | /* #define QUOTADEBUG 1 */ | ||
26 | #endif | ||
27 | |||
28 | #ifdef CONFIG_XFS_TRACE | ||
29 | #define XFS_ALLOC_TRACE 1 | ||
30 | #define XFS_ATTR_TRACE 1 | ||
31 | #define XFS_BLI_TRACE 1 | ||
32 | #define XFS_BMAP_TRACE 1 | ||
33 | #define XFS_BMBT_TRACE 1 | ||
34 | #define XFS_DIR2_TRACE 1 | ||
35 | #define XFS_DQUOT_TRACE 1 | ||
36 | #define XFS_ILOCK_TRACE 1 | ||
37 | #define XFS_LOG_TRACE 1 | ||
38 | #define XFS_RW_TRACE 1 | ||
39 | #define XFS_BUF_TRACE 1 | ||
40 | #define XFS_VNODE_TRACE 1 | ||
41 | #endif | ||
42 | |||
20 | #include <linux-2.6/xfs_linux.h> | 43 | #include <linux-2.6/xfs_linux.h> |
21 | #endif /* __XFS_H__ */ | 44 | #endif /* __XFS_H__ */ |
diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index 8edbe1adb95b..8e8e5279334a 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c | |||
@@ -678,7 +678,7 @@ xfs_dir2_put_dirent64_uio( | |||
678 | idbp->d_off = pa->cook; | 678 | idbp->d_off = pa->cook; |
679 | idbp->d_name[namelen] = '\0'; | 679 | idbp->d_name[namelen] = '\0'; |
680 | memcpy(idbp->d_name, pa->name, namelen); | 680 | memcpy(idbp->d_name, pa->name, namelen); |
681 | rval = uio_read((caddr_t)idbp, reclen, uio); | 681 | rval = xfs_uio_read((caddr_t)idbp, reclen, uio); |
682 | pa->done = (rval == 0); | 682 | pa->done = (rval == 0); |
683 | return rval; | 683 | return rval; |
684 | } | 684 | } |
diff --git a/fs/xfs/xfs_dmapi.h b/fs/xfs/xfs_dmapi.h index 4e7865ad6f0e..adc3d251240d 100644 --- a/fs/xfs/xfs_dmapi.h +++ b/fs/xfs/xfs_dmapi.h | |||
@@ -157,27 +157,9 @@ typedef enum { | |||
157 | #define DM_FLAGS_IALLOCSEM_WR 0x020 /* thread holds i_alloc_sem wr */ | 157 | #define DM_FLAGS_IALLOCSEM_WR 0x020 /* thread holds i_alloc_sem wr */ |
158 | 158 | ||
159 | /* | 159 | /* |
160 | * Based on IO_ISDIRECT, decide which i_ flag is set. | 160 | * Pull in platform specific event flags defines |
161 | */ | 161 | */ |
162 | #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) | 162 | #include "xfs_dmapi_priv.h" |
163 | #define DM_SEM_FLAG_RD(ioflags) (((ioflags) & IO_ISDIRECT) ? \ | ||
164 | DM_FLAGS_IMUX : 0) | ||
165 | #define DM_SEM_FLAG_WR (DM_FLAGS_IALLOCSEM_WR | DM_FLAGS_IMUX) | ||
166 | #endif | ||
167 | |||
168 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) && \ | ||
169 | (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,22)) | ||
170 | #define DM_SEM_FLAG_RD(ioflags) (((ioflags) & IO_ISDIRECT) ? \ | ||
171 | DM_FLAGS_IALLOCSEM_RD : DM_FLAGS_IMUX) | ||
172 | #define DM_SEM_FLAG_WR (DM_FLAGS_IALLOCSEM_WR | DM_FLAGS_IMUX) | ||
173 | #endif | ||
174 | |||
175 | #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,21) | ||
176 | #define DM_SEM_FLAG_RD(ioflags) (((ioflags) & IO_ISDIRECT) ? \ | ||
177 | 0 : DM_FLAGS_IMUX) | ||
178 | #define DM_SEM_FLAG_WR (DM_FLAGS_IMUX) | ||
179 | #endif | ||
180 | |||
181 | 163 | ||
182 | /* | 164 | /* |
183 | * Macros to turn caller specified delay/block flags into | 165 | * Macros to turn caller specified delay/block flags into |
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index b73d216ecaf9..c1c89dac19cc 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
@@ -215,7 +215,7 @@ again: | |||
215 | * If INEW is set this inode is being set up | 215 | * If INEW is set this inode is being set up |
216 | * we need to pause and try again. | 216 | * we need to pause and try again. |
217 | */ | 217 | */ |
218 | if (ip->i_flags & XFS_INEW) { | 218 | if (xfs_iflags_test(ip, XFS_INEW)) { |
219 | read_unlock(&ih->ih_lock); | 219 | read_unlock(&ih->ih_lock); |
220 | delay(1); | 220 | delay(1); |
221 | XFS_STATS_INC(xs_ig_frecycle); | 221 | XFS_STATS_INC(xs_ig_frecycle); |
@@ -230,22 +230,50 @@ again: | |||
230 | * on its way out of the system, | 230 | * on its way out of the system, |
231 | * we need to pause and try again. | 231 | * we need to pause and try again. |
232 | */ | 232 | */ |
233 | if (ip->i_flags & XFS_IRECLAIM) { | 233 | if (xfs_iflags_test(ip, XFS_IRECLAIM)) { |
234 | read_unlock(&ih->ih_lock); | 234 | read_unlock(&ih->ih_lock); |
235 | delay(1); | 235 | delay(1); |
236 | XFS_STATS_INC(xs_ig_frecycle); | 236 | XFS_STATS_INC(xs_ig_frecycle); |
237 | 237 | ||
238 | goto again; | 238 | goto again; |
239 | } | 239 | } |
240 | ASSERT(xfs_iflags_test(ip, XFS_IRECLAIMABLE)); | ||
241 | |||
242 | /* | ||
243 | * If lookup is racing with unlink, then we | ||
244 | * should return an error immediately so we | ||
245 | * don't remove it from the reclaim list and | ||
246 | * potentially leak the inode. | ||
247 | */ | ||
248 | if ((ip->i_d.di_mode == 0) && | ||
249 | !(flags & XFS_IGET_CREATE)) { | ||
250 | read_unlock(&ih->ih_lock); | ||
251 | return ENOENT; | ||
252 | } | ||
253 | |||
254 | /* | ||
255 | * There may be transactions sitting in the | ||
256 | * incore log buffers or being flushed to disk | ||
257 | * at this time. We can't clear the | ||
258 | * XFS_IRECLAIMABLE flag until these | ||
259 | * transactions have hit the disk, otherwise we | ||
260 | * will void the guarantee the flag provides | ||
261 | * xfs_iunpin() | ||
262 | */ | ||
263 | if (xfs_ipincount(ip)) { | ||
264 | read_unlock(&ih->ih_lock); | ||
265 | xfs_log_force(mp, 0, | ||
266 | XFS_LOG_FORCE|XFS_LOG_SYNC); | ||
267 | XFS_STATS_INC(xs_ig_frecycle); | ||
268 | goto again; | ||
269 | } | ||
240 | 270 | ||
241 | vn_trace_exit(vp, "xfs_iget.alloc", | 271 | vn_trace_exit(vp, "xfs_iget.alloc", |
242 | (inst_t *)__return_address); | 272 | (inst_t *)__return_address); |
243 | 273 | ||
244 | XFS_STATS_INC(xs_ig_found); | 274 | XFS_STATS_INC(xs_ig_found); |
245 | 275 | ||
246 | spin_lock(&ip->i_flags_lock); | 276 | xfs_iflags_clear(ip, XFS_IRECLAIMABLE); |
247 | ip->i_flags &= ~XFS_IRECLAIMABLE; | ||
248 | spin_unlock(&ip->i_flags_lock); | ||
249 | version = ih->ih_version; | 277 | version = ih->ih_version; |
250 | read_unlock(&ih->ih_lock); | 278 | read_unlock(&ih->ih_lock); |
251 | xfs_ihash_promote(ih, ip, version); | 279 | xfs_ihash_promote(ih, ip, version); |
@@ -299,10 +327,7 @@ finish_inode: | |||
299 | if (lock_flags != 0) | 327 | if (lock_flags != 0) |
300 | xfs_ilock(ip, lock_flags); | 328 | xfs_ilock(ip, lock_flags); |
301 | 329 | ||
302 | spin_lock(&ip->i_flags_lock); | 330 | xfs_iflags_clear(ip, XFS_ISTALE); |
303 | ip->i_flags &= ~XFS_ISTALE; | ||
304 | spin_unlock(&ip->i_flags_lock); | ||
305 | |||
306 | vn_trace_exit(vp, "xfs_iget.found", | 331 | vn_trace_exit(vp, "xfs_iget.found", |
307 | (inst_t *)__return_address); | 332 | (inst_t *)__return_address); |
308 | goto return_ip; | 333 | goto return_ip; |
@@ -371,10 +396,7 @@ finish_inode: | |||
371 | ih->ih_next = ip; | 396 | ih->ih_next = ip; |
372 | ip->i_udquot = ip->i_gdquot = NULL; | 397 | ip->i_udquot = ip->i_gdquot = NULL; |
373 | ih->ih_version++; | 398 | ih->ih_version++; |
374 | spin_lock(&ip->i_flags_lock); | 399 | xfs_iflags_set(ip, XFS_INEW); |
375 | ip->i_flags |= XFS_INEW; | ||
376 | spin_unlock(&ip->i_flags_lock); | ||
377 | |||
378 | write_unlock(&ih->ih_lock); | 400 | write_unlock(&ih->ih_lock); |
379 | 401 | ||
380 | /* | 402 | /* |
@@ -625,7 +647,7 @@ xfs_iput_new(xfs_inode_t *ip, | |||
625 | vn_trace_entry(vp, "xfs_iput_new", (inst_t *)__return_address); | 647 | vn_trace_entry(vp, "xfs_iput_new", (inst_t *)__return_address); |
626 | 648 | ||
627 | if ((ip->i_d.di_mode == 0)) { | 649 | if ((ip->i_d.di_mode == 0)) { |
628 | ASSERT(!(ip->i_flags & XFS_IRECLAIMABLE)); | 650 | ASSERT(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); |
629 | vn_mark_bad(vp); | 651 | vn_mark_bad(vp); |
630 | } | 652 | } |
631 | if (inode->i_state & I_NEW) | 653 | if (inode->i_state & I_NEW) |
@@ -683,6 +705,7 @@ xfs_ireclaim(xfs_inode_t *ip) | |||
683 | /* | 705 | /* |
684 | * Free all memory associated with the inode. | 706 | * Free all memory associated with the inode. |
685 | */ | 707 | */ |
708 | xfs_iunlock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); | ||
686 | xfs_idestroy(ip); | 709 | xfs_idestroy(ip); |
687 | } | 710 | } |
688 | 711 | ||
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index c27d7d495aa0..d72c80dbfbb1 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -2193,7 +2193,7 @@ xfs_ifree_cluster( | |||
2193 | /* Inode not in memory or we found it already, | 2193 | /* Inode not in memory or we found it already, |
2194 | * nothing to do | 2194 | * nothing to do |
2195 | */ | 2195 | */ |
2196 | if (!ip || (ip->i_flags & XFS_ISTALE)) { | 2196 | if (!ip || xfs_iflags_test(ip, XFS_ISTALE)) { |
2197 | read_unlock(&ih->ih_lock); | 2197 | read_unlock(&ih->ih_lock); |
2198 | continue; | 2198 | continue; |
2199 | } | 2199 | } |
@@ -2215,10 +2215,7 @@ xfs_ifree_cluster( | |||
2215 | 2215 | ||
2216 | if (ip == free_ip) { | 2216 | if (ip == free_ip) { |
2217 | if (xfs_iflock_nowait(ip)) { | 2217 | if (xfs_iflock_nowait(ip)) { |
2218 | spin_lock(&ip->i_flags_lock); | 2218 | xfs_iflags_set(ip, XFS_ISTALE); |
2219 | ip->i_flags |= XFS_ISTALE; | ||
2220 | spin_unlock(&ip->i_flags_lock); | ||
2221 | |||
2222 | if (xfs_inode_clean(ip)) { | 2219 | if (xfs_inode_clean(ip)) { |
2223 | xfs_ifunlock(ip); | 2220 | xfs_ifunlock(ip); |
2224 | } else { | 2221 | } else { |
@@ -2231,9 +2228,7 @@ xfs_ifree_cluster( | |||
2231 | 2228 | ||
2232 | if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { | 2229 | if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { |
2233 | if (xfs_iflock_nowait(ip)) { | 2230 | if (xfs_iflock_nowait(ip)) { |
2234 | spin_lock(&ip->i_flags_lock); | 2231 | xfs_iflags_set(ip, XFS_ISTALE); |
2235 | ip->i_flags |= XFS_ISTALE; | ||
2236 | spin_unlock(&ip->i_flags_lock); | ||
2237 | 2232 | ||
2238 | if (xfs_inode_clean(ip)) { | 2233 | if (xfs_inode_clean(ip)) { |
2239 | xfs_ifunlock(ip); | 2234 | xfs_ifunlock(ip); |
@@ -2263,9 +2258,7 @@ xfs_ifree_cluster( | |||
2263 | AIL_LOCK(mp,s); | 2258 | AIL_LOCK(mp,s); |
2264 | iip->ili_flush_lsn = iip->ili_item.li_lsn; | 2259 | iip->ili_flush_lsn = iip->ili_item.li_lsn; |
2265 | AIL_UNLOCK(mp, s); | 2260 | AIL_UNLOCK(mp, s); |
2266 | spin_lock(&iip->ili_inode->i_flags_lock); | 2261 | xfs_iflags_set(ip, XFS_ISTALE); |
2267 | iip->ili_inode->i_flags |= XFS_ISTALE; | ||
2268 | spin_unlock(&iip->ili_inode->i_flags_lock); | ||
2269 | pre_flushed++; | 2262 | pre_flushed++; |
2270 | } | 2263 | } |
2271 | lip = lip->li_bio_list; | 2264 | lip = lip->li_bio_list; |
@@ -2748,42 +2741,39 @@ xfs_iunpin( | |||
2748 | { | 2741 | { |
2749 | ASSERT(atomic_read(&ip->i_pincount) > 0); | 2742 | ASSERT(atomic_read(&ip->i_pincount) > 0); |
2750 | 2743 | ||
2751 | if (atomic_dec_and_test(&ip->i_pincount)) { | 2744 | if (atomic_dec_and_lock(&ip->i_pincount, &ip->i_flags_lock)) { |
2745 | |||
2752 | /* | 2746 | /* |
2753 | * If the inode is currently being reclaimed, the | 2747 | * If the inode is currently being reclaimed, the link between |
2754 | * linux inode _and_ the xfs vnode may have been | 2748 | * the bhv_vnode and the xfs_inode will be broken after the |
2755 | * freed so we cannot reference either of them safely. | 2749 | * XFS_IRECLAIM* flag is set. Hence, if these flags are not |
2756 | * Hence we should not try to do anything to them | 2750 | * set, then we can move forward and mark the linux inode dirty |
2757 | * if the xfs inode is currently in the reclaim | 2751 | * knowing that it is still valid as it won't freed until after |
2758 | * path. | 2752 | * the bhv_vnode<->xfs_inode link is broken in xfs_reclaim. The |
2753 | * i_flags_lock is used to synchronise the setting of the | ||
2754 | * XFS_IRECLAIM* flags and the breaking of the link, and so we | ||
2755 | * can execute atomically w.r.t to reclaim by holding this lock | ||
2756 | * here. | ||
2759 | * | 2757 | * |
2760 | * However, we still need to issue the unpin wakeup | 2758 | * However, we still need to issue the unpin wakeup call as the |
2761 | * call as the inode reclaim may be blocked waiting for | 2759 | * inode reclaim may be blocked waiting for the inode to become |
2762 | * the inode to become unpinned. | 2760 | * unpinned. |
2763 | */ | 2761 | */ |
2764 | struct inode *inode = NULL; | ||
2765 | 2762 | ||
2766 | spin_lock(&ip->i_flags_lock); | 2763 | if (!__xfs_iflags_test(ip, XFS_IRECLAIM|XFS_IRECLAIMABLE)) { |
2767 | if (!(ip->i_flags & (XFS_IRECLAIM|XFS_IRECLAIMABLE))) { | ||
2768 | bhv_vnode_t *vp = XFS_ITOV_NULL(ip); | 2764 | bhv_vnode_t *vp = XFS_ITOV_NULL(ip); |
2765 | struct inode *inode = NULL; | ||
2766 | |||
2767 | BUG_ON(vp == NULL); | ||
2768 | inode = vn_to_inode(vp); | ||
2769 | BUG_ON(inode->i_state & I_CLEAR); | ||
2769 | 2770 | ||
2770 | /* make sync come back and flush this inode */ | 2771 | /* make sync come back and flush this inode */ |
2771 | if (vp) { | 2772 | if (!(inode->i_state & (I_NEW|I_FREEING))) |
2772 | inode = vn_to_inode(vp); | 2773 | mark_inode_dirty_sync(inode); |
2773 | |||
2774 | if (!(inode->i_state & | ||
2775 | (I_NEW|I_FREEING|I_CLEAR))) { | ||
2776 | inode = igrab(inode); | ||
2777 | if (inode) | ||
2778 | mark_inode_dirty_sync(inode); | ||
2779 | } else | ||
2780 | inode = NULL; | ||
2781 | } | ||
2782 | } | 2774 | } |
2783 | spin_unlock(&ip->i_flags_lock); | 2775 | spin_unlock(&ip->i_flags_lock); |
2784 | wake_up(&ip->i_ipin_wait); | 2776 | wake_up(&ip->i_ipin_wait); |
2785 | if (inode) | ||
2786 | iput(inode); | ||
2787 | } | 2777 | } |
2788 | } | 2778 | } |
2789 | 2779 | ||
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index e96eb0835fe6..bc823720d88f 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
@@ -305,6 +305,47 @@ typedef struct xfs_inode { | |||
305 | #endif | 305 | #endif |
306 | } xfs_inode_t; | 306 | } xfs_inode_t; |
307 | 307 | ||
308 | |||
309 | /* | ||
310 | * i_flags helper functions | ||
311 | */ | ||
312 | static inline void | ||
313 | __xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) | ||
314 | { | ||
315 | ip->i_flags |= flags; | ||
316 | } | ||
317 | |||
318 | static inline void | ||
319 | xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) | ||
320 | { | ||
321 | spin_lock(&ip->i_flags_lock); | ||
322 | __xfs_iflags_set(ip, flags); | ||
323 | spin_unlock(&ip->i_flags_lock); | ||
324 | } | ||
325 | |||
326 | static inline void | ||
327 | xfs_iflags_clear(xfs_inode_t *ip, unsigned short flags) | ||
328 | { | ||
329 | spin_lock(&ip->i_flags_lock); | ||
330 | ip->i_flags &= ~flags; | ||
331 | spin_unlock(&ip->i_flags_lock); | ||
332 | } | ||
333 | |||
334 | static inline int | ||
335 | __xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) | ||
336 | { | ||
337 | return (ip->i_flags & flags); | ||
338 | } | ||
339 | |||
340 | static inline int | ||
341 | xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) | ||
342 | { | ||
343 | int ret; | ||
344 | spin_lock(&ip->i_flags_lock); | ||
345 | ret = __xfs_iflags_test(ip, flags); | ||
346 | spin_unlock(&ip->i_flags_lock); | ||
347 | return ret; | ||
348 | } | ||
308 | #endif /* __KERNEL__ */ | 349 | #endif /* __KERNEL__ */ |
309 | 350 | ||
310 | 351 | ||
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 061e2ffdd1de..bda774a04b8f 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -1013,7 +1013,7 @@ xfs_readlink( | |||
1013 | pathlen = (int)ip->i_d.di_size; | 1013 | pathlen = (int)ip->i_d.di_size; |
1014 | 1014 | ||
1015 | if (ip->i_df.if_flags & XFS_IFINLINE) { | 1015 | if (ip->i_df.if_flags & XFS_IFINLINE) { |
1016 | error = uio_read(ip->i_df.if_u1.if_data, pathlen, uiop); | 1016 | error = xfs_uio_read(ip->i_df.if_u1.if_data, pathlen, uiop); |
1017 | } | 1017 | } |
1018 | else { | 1018 | else { |
1019 | /* | 1019 | /* |
@@ -1044,7 +1044,7 @@ xfs_readlink( | |||
1044 | byte_cnt = pathlen; | 1044 | byte_cnt = pathlen; |
1045 | pathlen -= byte_cnt; | 1045 | pathlen -= byte_cnt; |
1046 | 1046 | ||
1047 | error = uio_read(XFS_BUF_PTR(bp), byte_cnt, uiop); | 1047 | error = xfs_uio_read(XFS_BUF_PTR(bp), byte_cnt, uiop); |
1048 | xfs_buf_relse (bp); | 1048 | xfs_buf_relse (bp); |
1049 | } | 1049 | } |
1050 | 1050 | ||
@@ -3827,11 +3827,16 @@ xfs_reclaim( | |||
3827 | */ | 3827 | */ |
3828 | xfs_synchronize_atime(ip); | 3828 | xfs_synchronize_atime(ip); |
3829 | 3829 | ||
3830 | /* If we have nothing to flush with this inode then complete the | 3830 | /* |
3831 | * teardown now, otherwise break the link between the xfs inode | 3831 | * If we have nothing to flush with this inode then complete the |
3832 | * and the linux inode and clean up the xfs inode later. This | 3832 | * teardown now, otherwise break the link between the xfs inode and the |
3833 | * avoids flushing the inode to disk during the delete operation | 3833 | * linux inode and clean up the xfs inode later. This avoids flushing |
3834 | * itself. | 3834 | * the inode to disk during the delete operation itself. |
3835 | * | ||
3836 | * When breaking the link, we need to set the XFS_IRECLAIMABLE flag | ||
3837 | * first to ensure that xfs_iunpin() will never see an xfs inode | ||
3838 | * that has a linux inode being reclaimed. Synchronisation is provided | ||
3839 | * by the i_flags_lock. | ||
3835 | */ | 3840 | */ |
3836 | if (!ip->i_update_core && (ip->i_itemp == NULL)) { | 3841 | if (!ip->i_update_core && (ip->i_itemp == NULL)) { |
3837 | xfs_ilock(ip, XFS_ILOCK_EXCL); | 3842 | xfs_ilock(ip, XFS_ILOCK_EXCL); |
@@ -3840,13 +3845,13 @@ xfs_reclaim( | |||
3840 | } else { | 3845 | } else { |
3841 | xfs_mount_t *mp = ip->i_mount; | 3846 | xfs_mount_t *mp = ip->i_mount; |
3842 | 3847 | ||
3843 | /* Protect sync from us */ | 3848 | /* Protect sync and unpin from us */ |
3844 | XFS_MOUNT_ILOCK(mp); | 3849 | XFS_MOUNT_ILOCK(mp); |
3845 | vn_bhv_remove(VN_BHV_HEAD(vp), XFS_ITOBHV(ip)); | ||
3846 | list_add_tail(&ip->i_reclaim, &mp->m_del_inodes); | ||
3847 | spin_lock(&ip->i_flags_lock); | 3850 | spin_lock(&ip->i_flags_lock); |
3848 | ip->i_flags |= XFS_IRECLAIMABLE; | 3851 | __xfs_iflags_set(ip, XFS_IRECLAIMABLE); |
3852 | vn_bhv_remove(VN_BHV_HEAD(vp), XFS_ITOBHV(ip)); | ||
3849 | spin_unlock(&ip->i_flags_lock); | 3853 | spin_unlock(&ip->i_flags_lock); |
3854 | list_add_tail(&ip->i_reclaim, &mp->m_del_inodes); | ||
3850 | XFS_MOUNT_IUNLOCK(mp); | 3855 | XFS_MOUNT_IUNLOCK(mp); |
3851 | } | 3856 | } |
3852 | return 0; | 3857 | return 0; |
@@ -3872,8 +3877,8 @@ xfs_finish_reclaim( | |||
3872 | */ | 3877 | */ |
3873 | write_lock(&ih->ih_lock); | 3878 | write_lock(&ih->ih_lock); |
3874 | spin_lock(&ip->i_flags_lock); | 3879 | spin_lock(&ip->i_flags_lock); |
3875 | if ((ip->i_flags & XFS_IRECLAIM) || | 3880 | if (__xfs_iflags_test(ip, XFS_IRECLAIM) || |
3876 | (!(ip->i_flags & XFS_IRECLAIMABLE) && vp == NULL)) { | 3881 | (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) && vp == NULL)) { |
3877 | spin_unlock(&ip->i_flags_lock); | 3882 | spin_unlock(&ip->i_flags_lock); |
3878 | write_unlock(&ih->ih_lock); | 3883 | write_unlock(&ih->ih_lock); |
3879 | if (locked) { | 3884 | if (locked) { |
@@ -3882,7 +3887,7 @@ xfs_finish_reclaim( | |||
3882 | } | 3887 | } |
3883 | return 1; | 3888 | return 1; |
3884 | } | 3889 | } |
3885 | ip->i_flags |= XFS_IRECLAIM; | 3890 | __xfs_iflags_set(ip, XFS_IRECLAIM); |
3886 | spin_unlock(&ip->i_flags_lock); | 3891 | spin_unlock(&ip->i_flags_lock); |
3887 | write_unlock(&ih->ih_lock); | 3892 | write_unlock(&ih->ih_lock); |
3888 | 3893 | ||
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h index 68731e0923a4..cff752f35230 100644 --- a/include/asm-arm/arch-pxa/pxa-regs.h +++ b/include/asm-arm/arch-pxa/pxa-regs.h | |||
@@ -2242,7 +2242,7 @@ | |||
2242 | 2242 | ||
2243 | #define CICR1_TBIT (1 << 31) /* Transparency bit */ | 2243 | #define CICR1_TBIT (1 << 31) /* Transparency bit */ |
2244 | #define CICR1_RGBT_CONV (0x3 << 30) /* RGBT conversion mask */ | 2244 | #define CICR1_RGBT_CONV (0x3 << 30) /* RGBT conversion mask */ |
2245 | #define CICR1_PPL (0x3f << 15) /* Pixels per line mask */ | 2245 | #define CICR1_PPL (0x7ff << 15) /* Pixels per line mask */ |
2246 | #define CICR1_RGB_CONV (0x7 << 12) /* RGB conversion mask */ | 2246 | #define CICR1_RGB_CONV (0x7 << 12) /* RGB conversion mask */ |
2247 | #define CICR1_RGB_F (1 << 11) /* RGB format */ | 2247 | #define CICR1_RGB_F (1 << 11) /* RGB format */ |
2248 | #define CICR1_YCBCR_F (1 << 10) /* YCbCr format */ | 2248 | #define CICR1_YCBCR_F (1 << 10) /* YCbCr format */ |
@@ -2268,7 +2268,7 @@ | |||
2268 | #define CICR3_VSW (0x3f << 10) /* Vertical sync pulse width mask */ | 2268 | #define CICR3_VSW (0x3f << 10) /* Vertical sync pulse width mask */ |
2269 | #define CICR3_BFPW (0x3f << 3) /* Beginning-of-frame pixel clock | 2269 | #define CICR3_BFPW (0x3f << 3) /* Beginning-of-frame pixel clock |
2270 | wait count mask */ | 2270 | wait count mask */ |
2271 | #define CICR3_LPF (0x3ff << 0) /* Lines per frame mask */ | 2271 | #define CICR3_LPF (0x7ff << 0) /* Lines per frame mask */ |
2272 | 2272 | ||
2273 | #define CICR4_MCLK_DLY (0x3 << 24) /* MCLK Data Capture Delay mask */ | 2273 | #define CICR4_MCLK_DLY (0x3 << 24) /* MCLK Data Capture Delay mask */ |
2274 | #define CICR4_PCLK_EN (1 << 23) /* Pixel clock enable */ | 2274 | #define CICR4_PCLK_EN (1 << 23) /* Pixel clock enable */ |
@@ -2289,8 +2289,8 @@ | |||
2289 | #define CISR_EOL (1 << 8) /* End of line */ | 2289 | #define CISR_EOL (1 << 8) /* End of line */ |
2290 | #define CISR_PAR_ERR (1 << 7) /* Parity error */ | 2290 | #define CISR_PAR_ERR (1 << 7) /* Parity error */ |
2291 | #define CISR_CQD (1 << 6) /* Camera interface quick disable */ | 2291 | #define CISR_CQD (1 << 6) /* Camera interface quick disable */ |
2292 | #define CISR_SOF (1 << 5) /* Start of frame */ | 2292 | #define CISR_CDD (1 << 5) /* Camera interface disable done */ |
2293 | #define CISR_CDD (1 << 4) /* Camera interface disable done */ | 2293 | #define CISR_SOF (1 << 4) /* Start of frame */ |
2294 | #define CISR_EOF (1 << 3) /* End of frame */ | 2294 | #define CISR_EOF (1 << 3) /* End of frame */ |
2295 | #define CISR_IFO_2 (1 << 2) /* FIFO overrun for Channel 2 */ | 2295 | #define CISR_IFO_2 (1 << 2) /* FIFO overrun for Channel 2 */ |
2296 | #define CISR_IFO_1 (1 << 1) /* FIFO overrun for Channel 1 */ | 2296 | #define CISR_IFO_1 (1 << 1) /* FIFO overrun for Channel 1 */ |
diff --git a/include/asm-avr32/unistd.h b/include/asm-avr32/unistd.h index a50e5004550c..56ed1f9d348a 100644 --- a/include/asm-avr32/unistd.h +++ b/include/asm-avr32/unistd.h | |||
@@ -280,9 +280,10 @@ | |||
280 | #define __NR_sync_file_range 262 | 280 | #define __NR_sync_file_range 262 |
281 | #define __NR_tee 263 | 281 | #define __NR_tee 263 |
282 | #define __NR_vmsplice 264 | 282 | #define __NR_vmsplice 264 |
283 | #define __NR_epoll_pwait 265 | ||
283 | 284 | ||
284 | #ifdef __KERNEL__ | 285 | #ifdef __KERNEL__ |
285 | #define NR_syscalls 265 | 286 | #define NR_syscalls 266 |
286 | 287 | ||
287 | 288 | ||
288 | #define __ARCH_WANT_IPC_PARSE_VERSION | 289 | #define __ARCH_WANT_IPC_PARSE_VERSION |
diff --git a/include/asm-ia64/sn/addrs.h b/include/asm-ia64/sn/addrs.h index 1d9efe541662..e715c794b186 100644 --- a/include/asm-ia64/sn/addrs.h +++ b/include/asm-ia64/sn/addrs.h | |||
@@ -136,9 +136,13 @@ | |||
136 | */ | 136 | */ |
137 | #define TO_PHYS(x) (TO_PHYS_MASK & (x)) | 137 | #define TO_PHYS(x) (TO_PHYS_MASK & (x)) |
138 | #define TO_CAC(x) (CAC_BASE | TO_PHYS(x)) | 138 | #define TO_CAC(x) (CAC_BASE | TO_PHYS(x)) |
139 | #ifdef CONFIG_SGI_SN | ||
139 | #define TO_AMO(x) (AMO_BASE | TO_PHYS(x)) | 140 | #define TO_AMO(x) (AMO_BASE | TO_PHYS(x)) |
140 | #define TO_GET(x) (GET_BASE | TO_PHYS(x)) | 141 | #define TO_GET(x) (GET_BASE | TO_PHYS(x)) |
141 | 142 | #else | |
143 | #define TO_AMO(x) ({ BUG(); x; }) | ||
144 | #define TO_GET(x) ({ BUG(); x; }) | ||
145 | #endif | ||
142 | 146 | ||
143 | /* | 147 | /* |
144 | * Covert from processor physical address to II/TIO physical address: | 148 | * Covert from processor physical address to II/TIO physical address: |
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index 0ce2a80b689e..35a05ca5560c 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
@@ -74,4 +74,8 @@ extern int setup_irq_smtc(unsigned int irq, struct irqaction * new, | |||
74 | unsigned long hwmask); | 74 | unsigned long hwmask); |
75 | #endif /* CONFIG_MIPS_MT_SMTC */ | 75 | #endif /* CONFIG_MIPS_MT_SMTC */ |
76 | 76 | ||
77 | extern int allocate_irqno(void); | ||
78 | extern void alloc_legacy_irqno(void); | ||
79 | extern void free_irqno(unsigned int irq); | ||
80 | |||
77 | #endif /* _ASM_IRQ_H */ | 81 | #endif /* _ASM_IRQ_H */ |
diff --git a/include/asm-powerpc/systbl.h b/include/asm-powerpc/systbl.h index eac85ce101b6..c6a03187f932 100644 --- a/include/asm-powerpc/systbl.h +++ b/include/asm-powerpc/systbl.h | |||
@@ -261,7 +261,7 @@ SYSX(sys_ni_syscall, ppc_fadvise64_64, ppc_fadvise64_64) | |||
261 | PPC_SYS_SPU(rtas) | 261 | PPC_SYS_SPU(rtas) |
262 | OLDSYS(debug_setcontext) | 262 | OLDSYS(debug_setcontext) |
263 | SYSCALL(ni_syscall) | 263 | SYSCALL(ni_syscall) |
264 | SYSCALL(ni_syscall) | 264 | COMPAT_SYS(migrate_pages) |
265 | COMPAT_SYS(mbind) | 265 | COMPAT_SYS(mbind) |
266 | COMPAT_SYS(get_mempolicy) | 266 | COMPAT_SYS(get_mempolicy) |
267 | COMPAT_SYS(set_mempolicy) | 267 | COMPAT_SYS(set_mempolicy) |
diff --git a/include/asm-powerpc/unistd.h b/include/asm-powerpc/unistd.h index 464a48cce7f5..b5fe93291c96 100644 --- a/include/asm-powerpc/unistd.h +++ b/include/asm-powerpc/unistd.h | |||
@@ -276,7 +276,7 @@ | |||
276 | #define __NR_rtas 255 | 276 | #define __NR_rtas 255 |
277 | #define __NR_sys_debug_setcontext 256 | 277 | #define __NR_sys_debug_setcontext 256 |
278 | /* Number 257 is reserved for vserver */ | 278 | /* Number 257 is reserved for vserver */ |
279 | /* 258 currently unused */ | 279 | #define __NR_migrate_pages 258 |
280 | #define __NR_mbind 259 | 280 | #define __NR_mbind 259 |
281 | #define __NR_get_mempolicy 260 | 281 | #define __NR_get_mempolicy 260 |
282 | #define __NR_set_mempolicy 261 | 282 | #define __NR_set_mempolicy 261 |
diff --git a/include/asm-sparc/unistd.h b/include/asm-sparc/unistd.h index c7a495afc82e..f7827fa4cd5e 100644 --- a/include/asm-sparc/unistd.h +++ b/include/asm-sparc/unistd.h | |||
@@ -318,12 +318,15 @@ | |||
318 | #define __NR_unshare 299 | 318 | #define __NR_unshare 299 |
319 | #define __NR_set_robust_list 300 | 319 | #define __NR_set_robust_list 300 |
320 | #define __NR_get_robust_list 301 | 320 | #define __NR_get_robust_list 301 |
321 | #define __NR_migrate_pages 302 | ||
322 | |||
323 | #define NR_SYSCALLS 303 | ||
321 | 324 | ||
322 | #ifdef __KERNEL__ | 325 | #ifdef __KERNEL__ |
323 | /* WARNING: You MAY NOT add syscall numbers larger than 301, since | 326 | /* WARNING: You MAY NOT add syscall numbers larger than 302, since |
324 | * all of the syscall tables in the Sparc kernel are | 327 | * all of the syscall tables in the Sparc kernel are |
325 | * sized to have 301 entries (starting at zero). Therefore | 328 | * sized to have 302 entries (starting at zero). Therefore |
326 | * find a free slot in the 0-301 range. | 329 | * find a free slot in the 0-302 range. |
327 | */ | 330 | */ |
328 | 331 | ||
329 | #define _syscall0(type,name) \ | 332 | #define _syscall0(type,name) \ |
diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h index 124cf076717f..63669dad0d72 100644 --- a/include/asm-sparc64/unistd.h +++ b/include/asm-sparc64/unistd.h | |||
@@ -320,12 +320,16 @@ | |||
320 | #define __NR_unshare 299 | 320 | #define __NR_unshare 299 |
321 | #define __NR_set_robust_list 300 | 321 | #define __NR_set_robust_list 300 |
322 | #define __NR_get_robust_list 301 | 322 | #define __NR_get_robust_list 301 |
323 | #define __NR_migrate_pages 302 | ||
324 | |||
325 | #define NR_SYSCALLS 303 | ||
323 | 326 | ||
324 | #ifdef __KERNEL__ | 327 | #ifdef __KERNEL__ |
325 | /* WARNING: You MAY NOT add syscall numbers larger than 301, since | 328 | |
329 | /* WARNING: You MAY NOT add syscall numbers larger than 302, since | ||
326 | * all of the syscall tables in the Sparc kernel are | 330 | * all of the syscall tables in the Sparc kernel are |
327 | * sized to have 301 entries (starting at zero). Therefore | 331 | * sized to have 302 entries (starting at zero). Therefore |
328 | * find a free slot in the 0-301 range. | 332 | * find a free slot in the 0-302 range. |
329 | */ | 333 | */ |
330 | 334 | ||
331 | #define _syscall0(type,name) \ | 335 | #define _syscall0(type,name) \ |
diff --git a/include/asm-x86_64/io_apic.h b/include/asm-x86_64/io_apic.h index 171ec2dc8c04..561ecbfd4cb5 100644 --- a/include/asm-x86_64/io_apic.h +++ b/include/asm-x86_64/io_apic.h | |||
@@ -12,10 +12,6 @@ | |||
12 | 12 | ||
13 | #define APIC_MISMATCH_DEBUG | 13 | #define APIC_MISMATCH_DEBUG |
14 | 14 | ||
15 | #define IO_APIC_BASE(idx) \ | ||
16 | ((volatile int *)(__fix_to_virt(FIX_IO_APIC_BASE_0 + idx) \ | ||
17 | + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK))) | ||
18 | |||
19 | /* | 15 | /* |
20 | * The structure of the IO-APIC: | 16 | * The structure of the IO-APIC: |
21 | */ | 17 | */ |
@@ -119,36 +115,6 @@ extern struct mpc_config_intsrc mp_irqs[MAX_IRQ_SOURCES]; | |||
119 | /* non-0 if default (table-less) MP configuration */ | 115 | /* non-0 if default (table-less) MP configuration */ |
120 | extern int mpc_default_type; | 116 | extern int mpc_default_type; |
121 | 117 | ||
122 | static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg) | ||
123 | { | ||
124 | *IO_APIC_BASE(apic) = reg; | ||
125 | return *(IO_APIC_BASE(apic)+4); | ||
126 | } | ||
127 | |||
128 | static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value) | ||
129 | { | ||
130 | *IO_APIC_BASE(apic) = reg; | ||
131 | *(IO_APIC_BASE(apic)+4) = value; | ||
132 | } | ||
133 | |||
134 | /* | ||
135 | * Re-write a value: to be used for read-modify-write | ||
136 | * cycles where the read already set up the index register. | ||
137 | */ | ||
138 | static inline void io_apic_modify(unsigned int apic, unsigned int value) | ||
139 | { | ||
140 | *(IO_APIC_BASE(apic)+4) = value; | ||
141 | } | ||
142 | |||
143 | /* | ||
144 | * Synchronize the IO-APIC and the CPU by doing | ||
145 | * a dummy read from the IO-APIC | ||
146 | */ | ||
147 | static inline void io_apic_sync(unsigned int apic) | ||
148 | { | ||
149 | (void) *(IO_APIC_BASE(apic)+4); | ||
150 | } | ||
151 | |||
152 | /* 1 if "noapic" boot option passed */ | 118 | /* 1 if "noapic" boot option passed */ |
153 | extern int skip_ioapic_setup; | 119 | extern int skip_ioapic_setup; |
154 | 120 | ||
diff --git a/include/linux/compat.h b/include/linux/compat.h index f1553196826f..80b17f440ec1 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -230,5 +230,9 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); | |||
230 | extern int compat_printk(const char *fmt, ...); | 230 | extern int compat_printk(const char *fmt, ...); |
231 | extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); | 231 | extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); |
232 | 232 | ||
233 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, | ||
234 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, | ||
235 | const compat_ulong_t __user *new_nodes); | ||
236 | |||
233 | #endif /* CONFIG_COMPAT */ | 237 | #endif /* CONFIG_COMPAT */ |
234 | #endif /* _LINUX_COMPAT_H */ | 238 | #endif /* _LINUX_COMPAT_H */ |
diff --git a/include/linux/htirq.h b/include/linux/htirq.h index 1f15ce279a23..c96ea46737d0 100644 --- a/include/linux/htirq.h +++ b/include/linux/htirq.h | |||
@@ -1,15 +1,23 @@ | |||
1 | #ifndef LINUX_HTIRQ_H | 1 | #ifndef LINUX_HTIRQ_H |
2 | #define LINUX_HTIRQ_H | 2 | #define LINUX_HTIRQ_H |
3 | 3 | ||
4 | struct ht_irq_msg { | ||
5 | u32 address_lo; /* low 32 bits of the ht irq message */ | ||
6 | u32 address_hi; /* high 32 bits of the it irq message */ | ||
7 | }; | ||
8 | |||
4 | /* Helper functions.. */ | 9 | /* Helper functions.. */ |
5 | void write_ht_irq_low(unsigned int irq, u32 data); | 10 | void fetch_ht_irq_msg(unsigned int irq, struct ht_irq_msg *msg); |
6 | void write_ht_irq_high(unsigned int irq, u32 data); | 11 | void write_ht_irq_msg(unsigned int irq, struct ht_irq_msg *msg); |
7 | u32 read_ht_irq_low(unsigned int irq); | ||
8 | u32 read_ht_irq_high(unsigned int irq); | ||
9 | void mask_ht_irq(unsigned int irq); | 12 | void mask_ht_irq(unsigned int irq); |
10 | void unmask_ht_irq(unsigned int irq); | 13 | void unmask_ht_irq(unsigned int irq); |
11 | 14 | ||
12 | /* The arch hook for getting things started */ | 15 | /* The arch hook for getting things started */ |
13 | int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev); | 16 | int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev); |
14 | 17 | ||
18 | /* For drivers of buggy hardware */ | ||
19 | typedef void (ht_irq_update_t)(struct pci_dev *dev, int irq, | ||
20 | struct ht_irq_msg *msg); | ||
21 | int __ht_create_irq(struct pci_dev *dev, int idx, ht_irq_update_t *update); | ||
22 | |||
15 | #endif /* LINUX_HTIRQ_H */ | 23 | #endif /* LINUX_HTIRQ_H */ |
diff --git a/include/linux/ipmi_msgdefs.h b/include/linux/ipmi_msgdefs.h index 22f5e2afda4f..4d04d8b58a0a 100644 --- a/include/linux/ipmi_msgdefs.h +++ b/include/linux/ipmi_msgdefs.h | |||
@@ -75,6 +75,8 @@ | |||
75 | #define IPMI_INVALID_COMMAND_ERR 0xc1 | 75 | #define IPMI_INVALID_COMMAND_ERR 0xc1 |
76 | #define IPMI_ERR_MSG_TRUNCATED 0xc6 | 76 | #define IPMI_ERR_MSG_TRUNCATED 0xc6 |
77 | #define IPMI_LOST_ARBITRATION_ERR 0x81 | 77 | #define IPMI_LOST_ARBITRATION_ERR 0x81 |
78 | #define IPMI_BUS_ERR 0x82 | ||
79 | #define IPMI_NAK_ON_WRITE_ERR 0x83 | ||
78 | #define IPMI_ERR_UNSPECIFIED 0xff | 80 | #define IPMI_ERR_UNSPECIFIED 0xff |
79 | 81 | ||
80 | #define IPMI_CHANNEL_PROTOCOL_IPMB 1 | 82 | #define IPMI_CHANNEL_PROTOCOL_IPMB 1 |
diff --git a/include/linux/ipx.h b/include/linux/ipx.h index 4f29c60964c4..eb19b4ea84f4 100644 --- a/include/linux/ipx.h +++ b/include/linux/ipx.h | |||
@@ -7,8 +7,8 @@ | |||
7 | 7 | ||
8 | struct sockaddr_ipx { | 8 | struct sockaddr_ipx { |
9 | sa_family_t sipx_family; | 9 | sa_family_t sipx_family; |
10 | __u16 sipx_port; | 10 | __be16 sipx_port; |
11 | __u32 sipx_network; | 11 | __be32 sipx_network; |
12 | unsigned char sipx_node[IPX_NODE_LEN]; | 12 | unsigned char sipx_node[IPX_NODE_LEN]; |
13 | __u8 sipx_type; | 13 | __u8 sipx_type; |
14 | unsigned char sipx_zero; /* 16 byte fill */ | 14 | unsigned char sipx_zero; /* 16 byte fill */ |
@@ -23,13 +23,13 @@ struct sockaddr_ipx { | |||
23 | #define IPX_CRTITF 1 | 23 | #define IPX_CRTITF 1 |
24 | 24 | ||
25 | struct ipx_route_definition { | 25 | struct ipx_route_definition { |
26 | __u32 ipx_network; | 26 | __be32 ipx_network; |
27 | __u32 ipx_router_network; | 27 | __be32 ipx_router_network; |
28 | unsigned char ipx_router_node[IPX_NODE_LEN]; | 28 | unsigned char ipx_router_node[IPX_NODE_LEN]; |
29 | }; | 29 | }; |
30 | 30 | ||
31 | struct ipx_interface_definition { | 31 | struct ipx_interface_definition { |
32 | __u32 ipx_network; | 32 | __be32 ipx_network; |
33 | unsigned char ipx_device[16]; | 33 | unsigned char ipx_device[16]; |
34 | unsigned char ipx_dlink_type; | 34 | unsigned char ipx_dlink_type; |
35 | #define IPX_FRAME_NONE 0 | 35 | #define IPX_FRAME_NONE 0 |
@@ -55,8 +55,8 @@ struct ipx_config_data { | |||
55 | */ | 55 | */ |
56 | 56 | ||
57 | struct ipx_route_def { | 57 | struct ipx_route_def { |
58 | __u32 ipx_network; | 58 | __be32 ipx_network; |
59 | __u32 ipx_router_network; | 59 | __be32 ipx_router_network; |
60 | #define IPX_ROUTE_NO_ROUTER 0 | 60 | #define IPX_ROUTE_NO_ROUTER 0 |
61 | unsigned char ipx_router_node[IPX_NODE_LEN]; | 61 | unsigned char ipx_router_node[IPX_NODE_LEN]; |
62 | unsigned char ipx_device[16]; | 62 | unsigned char ipx_device[16]; |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 80f39cab470a..24b611147adb 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -171,6 +171,8 @@ __attribute_const__ roundup_pow_of_two(unsigned long x) | |||
171 | 171 | ||
172 | extern int printk_ratelimit(void); | 172 | extern int printk_ratelimit(void); |
173 | extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst); | 173 | extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst); |
174 | extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, | ||
175 | unsigned int interval_msec); | ||
174 | 176 | ||
175 | static inline void console_silent(void) | 177 | static inline void console_silent(void) |
176 | { | 178 | { |
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index eb231143d579..edb54c3171b3 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
@@ -89,7 +89,7 @@ __be32 nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *); | |||
89 | __be32 nfsd_create_v3(struct svc_rqst *, struct svc_fh *, | 89 | __be32 nfsd_create_v3(struct svc_rqst *, struct svc_fh *, |
90 | char *name, int len, struct iattr *attrs, | 90 | char *name, int len, struct iattr *attrs, |
91 | struct svc_fh *res, int createmode, | 91 | struct svc_fh *res, int createmode, |
92 | u32 *verifier, int *truncp); | 92 | u32 *verifier, int *truncp, int *created); |
93 | __be32 nfsd_commit(struct svc_rqst *, struct svc_fh *, | 93 | __be32 nfsd_commit(struct svc_rqst *, struct svc_fh *, |
94 | loff_t, unsigned long); | 94 | loff_t, unsigned long); |
95 | #endif /* CONFIG_NFSD_V3 */ | 95 | #endif /* CONFIG_NFSD_V3 */ |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f3a168f3c9df..fa4e1d799782 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1213,6 +1213,7 @@ | |||
1213 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | 1213 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 |
1214 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 | 1214 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 |
1215 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 | 1215 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 |
1216 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 | ||
1216 | 1217 | ||
1217 | #define PCI_VENDOR_ID_IMS 0x10e0 | 1218 | #define PCI_VENDOR_ID_IMS 0x10e0 |
1218 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 | 1219 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 |
diff --git a/include/linux/personality.h b/include/linux/personality.h index bf4cf2080e5c..012cd558189b 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
@@ -114,7 +114,7 @@ struct exec_domain { | |||
114 | * Change personality of the currently running process. | 114 | * Change personality of the currently running process. |
115 | */ | 115 | */ |
116 | #define set_personality(pers) \ | 116 | #define set_personality(pers) \ |
117 | ((current->personality == pers) ? 0 : __set_personality(pers)) | 117 | ((current->personality == (pers)) ? 0 : __set_personality(pers)) |
118 | 118 | ||
119 | #endif /* __KERNEL__ */ | 119 | #endif /* __KERNEL__ */ |
120 | 120 | ||
diff --git a/include/linux/pm.h b/include/linux/pm.h index 6b27e07aef19..070394e846d0 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -116,7 +116,9 @@ typedef int __bitwise suspend_disk_method_t; | |||
116 | #define PM_DISK_PLATFORM ((__force suspend_disk_method_t) 2) | 116 | #define PM_DISK_PLATFORM ((__force suspend_disk_method_t) 2) |
117 | #define PM_DISK_SHUTDOWN ((__force suspend_disk_method_t) 3) | 117 | #define PM_DISK_SHUTDOWN ((__force suspend_disk_method_t) 3) |
118 | #define PM_DISK_REBOOT ((__force suspend_disk_method_t) 4) | 118 | #define PM_DISK_REBOOT ((__force suspend_disk_method_t) 4) |
119 | #define PM_DISK_MAX ((__force suspend_disk_method_t) 5) | 119 | #define PM_DISK_TEST ((__force suspend_disk_method_t) 5) |
120 | #define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 6) | ||
121 | #define PM_DISK_MAX ((__force suspend_disk_method_t) 7) | ||
120 | 122 | ||
121 | struct pm_ops { | 123 | struct pm_ops { |
122 | suspend_disk_method_t pm_disk_mode; | 124 | suspend_disk_method_t pm_disk_mode; |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 1b24bd45e080..d98562f1df76 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -6,10 +6,17 @@ | |||
6 | **************************************************************** | 6 | **************************************************************** |
7 | **************************************************************** | 7 | **************************************************************** |
8 | ** | 8 | ** |
9 | ** WARNING: | ||
9 | ** The values in this file are exported to user space via | 10 | ** The values in this file are exported to user space via |
10 | ** the sysctl() binary interface. However this interface | 11 | ** the sysctl() binary interface. Do *NOT* change the |
11 | ** is unstable and deprecated and will be removed in the future. | 12 | ** numbering of any existing values here, and do not change |
12 | ** For a stable interface use /proc/sys. | 13 | ** any numbers within any one set of values. If you have to |
14 | ** have to redefine an existing interface, use a new number for it. | ||
15 | ** The kernel will then return -ENOTDIR to any application using | ||
16 | ** the old binary interface. | ||
17 | ** | ||
18 | ** For new interfaces unless you really need a binary number | ||
19 | ** please use CTL_UNNUMBERED. | ||
13 | ** | 20 | ** |
14 | **************************************************************** | 21 | **************************************************************** |
15 | **************************************************************** | 22 | **************************************************************** |
@@ -48,6 +55,7 @@ struct __sysctl_args { | |||
48 | #ifdef __KERNEL__ | 55 | #ifdef __KERNEL__ |
49 | #define CTL_ANY -1 /* Matches any name */ | 56 | #define CTL_ANY -1 /* Matches any name */ |
50 | #define CTL_NONE 0 | 57 | #define CTL_NONE 0 |
58 | #define CTL_UNNUMBERED CTL_NONE /* sysctl without a binary number */ | ||
51 | #endif | 59 | #endif |
52 | 60 | ||
53 | enum | 61 | enum |
@@ -961,8 +969,8 @@ extern ctl_handler sysctl_ms_jiffies; | |||
961 | /* | 969 | /* |
962 | * Register a set of sysctl names by calling register_sysctl_table | 970 | * Register a set of sysctl names by calling register_sysctl_table |
963 | * with an initialised array of ctl_table's. An entry with zero | 971 | * with an initialised array of ctl_table's. An entry with zero |
964 | * ctl_name terminates the table. table->de will be set up by the | 972 | * ctl_name and NULL procname terminates the table. table->de will be |
965 | * registration and need not be initialised in advance. | 973 | * set up by the registration and need not be initialised in advance. |
966 | * | 974 | * |
967 | * sysctl names can be mirrored automatically under /proc/sys. The | 975 | * sysctl names can be mirrored automatically under /proc/sys. The |
968 | * procname supplied controls /proc naming. | 976 | * procname supplied controls /proc naming. |
@@ -973,7 +981,10 @@ extern ctl_handler sysctl_ms_jiffies; | |||
973 | * Leaf nodes in the sysctl tree will be represented by a single file | 981 | * Leaf nodes in the sysctl tree will be represented by a single file |
974 | * under /proc; non-leaf nodes will be represented by directories. A | 982 | * under /proc; non-leaf nodes will be represented by directories. A |
975 | * null procname disables /proc mirroring at this node. | 983 | * null procname disables /proc mirroring at this node. |
976 | * | 984 | * |
985 | * sysctl entries with a zero ctl_name will not be available through | ||
986 | * the binary sysctl interface. | ||
987 | * | ||
977 | * sysctl(2) can automatically manage read and write requests through | 988 | * sysctl(2) can automatically manage read and write requests through |
978 | * the sysctl table. The data and maxlen fields of the ctl_table | 989 | * the sysctl table. The data and maxlen fields of the ctl_table |
979 | * struct enable minimal validation of the values being written to be | 990 | * struct enable minimal validation of the values being written to be |
diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index 61eef508b041..28967eda9d7b 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h | |||
@@ -908,7 +908,7 @@ struct ufs_super_block_third { | |||
908 | __fs64 fs_csaddr; /* blk addr of cyl grp summary area */ | 908 | __fs64 fs_csaddr; /* blk addr of cyl grp summary area */ |
909 | __fs64 fs_pendingblocks;/* blocks in process of being freed */ | 909 | __fs64 fs_pendingblocks;/* blocks in process of being freed */ |
910 | __fs32 fs_pendinginodes;/*inodes in process of being freed */ | 910 | __fs32 fs_pendinginodes;/*inodes in process of being freed */ |
911 | } fs_u2; | 911 | } __attribute__ ((packed)) fs_u2; |
912 | } fs_un1; | 912 | } fs_un1; |
913 | union { | 913 | union { |
914 | struct { | 914 | struct { |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index dc9a29d84abc..924e502905d4 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
@@ -23,13 +23,14 @@ struct vm_area_struct; | |||
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | struct vm_struct { | 25 | struct vm_struct { |
26 | /* keep next,addr,size together to speedup lookups */ | ||
27 | struct vm_struct *next; | ||
26 | void *addr; | 28 | void *addr; |
27 | unsigned long size; | 29 | unsigned long size; |
28 | unsigned long flags; | 30 | unsigned long flags; |
29 | struct page **pages; | 31 | struct page **pages; |
30 | unsigned int nr_pages; | 32 | unsigned int nr_pages; |
31 | unsigned long phys_addr; | 33 | unsigned long phys_addr; |
32 | struct vm_struct *next; | ||
33 | }; | 34 | }; |
34 | 35 | ||
35 | /* | 36 | /* |
diff --git a/include/net/inet_ecn.h b/include/net/inet_ecn.h index d599c6bfbb86..7849844a4911 100644 --- a/include/net/inet_ecn.h +++ b/include/net/inet_ecn.h | |||
@@ -48,7 +48,7 @@ static inline __u8 INET_ECN_encapsulate(__u8 outer, __u8 inner) | |||
48 | 48 | ||
49 | #define IP6_ECN_flow_xmit(sk, label) do { \ | 49 | #define IP6_ECN_flow_xmit(sk, label) do { \ |
50 | if (INET_ECN_is_capable(inet_sk(sk)->tos)) \ | 50 | if (INET_ECN_is_capable(inet_sk(sk)->tos)) \ |
51 | (label) |= __constant_htons(INET_ECN_ECT_0 << 4); \ | 51 | (label) |= htonl(INET_ECN_ECT_0 << 20); \ |
52 | } while (0) | 52 | } while (0) |
53 | 53 | ||
54 | static inline int IP_ECN_set_ce(struct iphdr *iph) | 54 | static inline int IP_ECN_set_ce(struct iphdr *iph) |
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h index 49c717e3b040..903108e583f8 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #define _IP_VS_H | 7 | #define _IP_VS_H |
8 | 8 | ||
9 | #include <asm/types.h> /* For __uXX types */ | 9 | #include <asm/types.h> /* For __uXX types */ |
10 | #include <linux/types.h> /* For __beXX types in userland */ | ||
10 | 11 | ||
11 | #define IP_VS_VERSION_CODE 0x010201 | 12 | #define IP_VS_VERSION_CODE 0x010201 |
12 | #define NVERSION(version) \ | 13 | #define NVERSION(version) \ |
diff --git a/include/net/ipx.h b/include/net/ipx.h index 5c0cf33826c5..c6b2ee610866 100644 --- a/include/net/ipx.h +++ b/include/net/ipx.h | |||
@@ -15,9 +15,9 @@ | |||
15 | #include <linux/list.h> | 15 | #include <linux/list.h> |
16 | 16 | ||
17 | struct ipx_address { | 17 | struct ipx_address { |
18 | __u32 net; | 18 | __be32 net; |
19 | __u8 node[IPX_NODE_LEN]; | 19 | __u8 node[IPX_NODE_LEN]; |
20 | __u16 sock; | 20 | __be16 sock; |
21 | }; | 21 | }; |
22 | 22 | ||
23 | #define ipx_broadcast_node "\377\377\377\377\377\377" | 23 | #define ipx_broadcast_node "\377\377\377\377\377\377" |
@@ -26,9 +26,9 @@ struct ipx_address { | |||
26 | #define IPX_MAX_PPROP_HOPS 8 | 26 | #define IPX_MAX_PPROP_HOPS 8 |
27 | 27 | ||
28 | struct ipxhdr { | 28 | struct ipxhdr { |
29 | __u16 ipx_checksum __attribute__ ((packed)); | 29 | __be16 ipx_checksum __attribute__ ((packed)); |
30 | #define IPX_NO_CHECKSUM 0xFFFF | 30 | #define IPX_NO_CHECKSUM __constant_htons(0xFFFF) |
31 | __u16 ipx_pktsize __attribute__ ((packed)); | 31 | __be16 ipx_pktsize __attribute__ ((packed)); |
32 | __u8 ipx_tctrl; | 32 | __u8 ipx_tctrl; |
33 | __u8 ipx_type; | 33 | __u8 ipx_type; |
34 | #define IPX_TYPE_UNKNOWN 0x00 | 34 | #define IPX_TYPE_UNKNOWN 0x00 |
@@ -48,14 +48,14 @@ static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb) | |||
48 | 48 | ||
49 | struct ipx_interface { | 49 | struct ipx_interface { |
50 | /* IPX address */ | 50 | /* IPX address */ |
51 | __u32 if_netnum; | 51 | __be32 if_netnum; |
52 | unsigned char if_node[IPX_NODE_LEN]; | 52 | unsigned char if_node[IPX_NODE_LEN]; |
53 | atomic_t refcnt; | 53 | atomic_t refcnt; |
54 | 54 | ||
55 | /* physical device info */ | 55 | /* physical device info */ |
56 | struct net_device *if_dev; | 56 | struct net_device *if_dev; |
57 | struct datalink_proto *if_dlink; | 57 | struct datalink_proto *if_dlink; |
58 | unsigned short if_dlink_type; | 58 | __be16 if_dlink_type; |
59 | 59 | ||
60 | /* socket support */ | 60 | /* socket support */ |
61 | unsigned short if_sknum; | 61 | unsigned short if_sknum; |
@@ -71,7 +71,7 @@ struct ipx_interface { | |||
71 | }; | 71 | }; |
72 | 72 | ||
73 | struct ipx_route { | 73 | struct ipx_route { |
74 | __u32 ir_net; | 74 | __be32 ir_net; |
75 | struct ipx_interface *ir_intrfc; | 75 | struct ipx_interface *ir_intrfc; |
76 | unsigned char ir_routed; | 76 | unsigned char ir_routed; |
77 | unsigned char ir_router_node[IPX_NODE_LEN]; | 77 | unsigned char ir_router_node[IPX_NODE_LEN]; |
@@ -82,10 +82,10 @@ struct ipx_route { | |||
82 | #ifdef __KERNEL__ | 82 | #ifdef __KERNEL__ |
83 | struct ipx_cb { | 83 | struct ipx_cb { |
84 | u8 ipx_tctrl; | 84 | u8 ipx_tctrl; |
85 | u32 ipx_dest_net; | 85 | __be32 ipx_dest_net; |
86 | u32 ipx_source_net; | 86 | __be32 ipx_source_net; |
87 | struct { | 87 | struct { |
88 | u32 netnum; | 88 | __be32 netnum; |
89 | int index; | 89 | int index; |
90 | } last_hop; | 90 | } last_hop; |
91 | }; | 91 | }; |
@@ -97,7 +97,7 @@ struct ipx_sock { | |||
97 | struct sock sk; | 97 | struct sock sk; |
98 | struct ipx_address dest_addr; | 98 | struct ipx_address dest_addr; |
99 | struct ipx_interface *intrfc; | 99 | struct ipx_interface *intrfc; |
100 | unsigned short port; | 100 | __be16 port; |
101 | #ifdef CONFIG_IPX_INTERN | 101 | #ifdef CONFIG_IPX_INTERN |
102 | unsigned char node[IPX_NODE_LEN]; | 102 | unsigned char node[IPX_NODE_LEN]; |
103 | #endif | 103 | #endif |
@@ -132,7 +132,7 @@ extern struct ipx_interface *ipx_primary_net; | |||
132 | extern int ipx_proc_init(void); | 132 | extern int ipx_proc_init(void); |
133 | extern void ipx_proc_exit(void); | 133 | extern void ipx_proc_exit(void); |
134 | 134 | ||
135 | extern const char *ipx_frame_name(unsigned short); | 135 | extern const char *ipx_frame_name(__be16); |
136 | extern const char *ipx_device_name(struct ipx_interface *intrfc); | 136 | extern const char *ipx_device_name(struct ipx_interface *intrfc); |
137 | 137 | ||
138 | static __inline__ void ipxitf_hold(struct ipx_interface *intrfc) | 138 | static __inline__ void ipxitf_hold(struct ipx_interface *intrfc) |
diff --git a/init/Kconfig b/init/Kconfig index c8b2624af176..176f7e5136c7 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -304,20 +304,19 @@ config UID16 | |||
304 | 304 | ||
305 | config SYSCTL_SYSCALL | 305 | config SYSCTL_SYSCALL |
306 | bool "Sysctl syscall support" if EMBEDDED | 306 | bool "Sysctl syscall support" if EMBEDDED |
307 | default n | 307 | default y |
308 | select SYSCTL | 308 | select SYSCTL |
309 | ---help--- | 309 | ---help--- |
310 | Enable the deprecated sysctl system call. sys_sysctl uses | 310 | sys_sysctl uses binary paths that have been found challenging |
311 | binary paths that have been found to be a major pain to maintain | 311 | to properly maintain and use. The interface in /proc/sys |
312 | and use. The interface in /proc/sys is now the primary and what | 312 | using paths with ascii names is now the primary path to this |
313 | everyone uses. | 313 | information. |
314 | 314 | ||
315 | Nothing has been using the binary sysctl interface for some | 315 | Almost nothing using the binary sysctl interface so if you are |
316 | time now so nothing should break if you disable sysctl syscall | 316 | trying to save some space it is probably safe to disable this, |
317 | support, and your kernel will get marginally smaller. | 317 | making your kernel marginally smaller. |
318 | 318 | ||
319 | Unless you have an application that uses the sys_sysctl interface | 319 | If unsure say Y here. |
320 | you should probably say N here. | ||
321 | 320 | ||
322 | config KALLSYMS | 321 | config KALLSYMS |
323 | bool "Load all symbols for debugging/kksymoops" if EMBEDDED | 322 | bool "Load all symbols for debugging/kksymoops" if EMBEDDED |
@@ -52,7 +52,7 @@ struct msg_receiver { | |||
52 | long r_msgtype; | 52 | long r_msgtype; |
53 | long r_maxsize; | 53 | long r_maxsize; |
54 | 54 | ||
55 | volatile struct msg_msg *r_msg; | 55 | struct msg_msg *volatile r_msg; |
56 | }; | 56 | }; |
57 | 57 | ||
58 | /* one msg_sender for each sleeping sender */ | 58 | /* one msg_sender for each sleeping sender */ |
@@ -124,6 +124,7 @@ void msg_exit_ns(struct ipc_namespace *ns) | |||
124 | } | 124 | } |
125 | mutex_unlock(&msg_ids(ns).mutex); | 125 | mutex_unlock(&msg_ids(ns).mutex); |
126 | 126 | ||
127 | ipc_fini_ids(ns->ids[IPC_MSG_IDS]); | ||
127 | kfree(ns->ids[IPC_MSG_IDS]); | 128 | kfree(ns->ids[IPC_MSG_IDS]); |
128 | ns->ids[IPC_MSG_IDS] = NULL; | 129 | ns->ids[IPC_MSG_IDS] = NULL; |
129 | } | 130 | } |
@@ -161,6 +161,7 @@ void sem_exit_ns(struct ipc_namespace *ns) | |||
161 | } | 161 | } |
162 | mutex_unlock(&sem_ids(ns).mutex); | 162 | mutex_unlock(&sem_ids(ns).mutex); |
163 | 163 | ||
164 | ipc_fini_ids(ns->ids[IPC_SEM_IDS]); | ||
164 | kfree(ns->ids[IPC_SEM_IDS]); | 165 | kfree(ns->ids[IPC_SEM_IDS]); |
165 | ns->ids[IPC_SEM_IDS] = NULL; | 166 | ns->ids[IPC_SEM_IDS] = NULL; |
166 | } | 167 | } |
@@ -116,6 +116,7 @@ void shm_exit_ns(struct ipc_namespace *ns) | |||
116 | } | 116 | } |
117 | mutex_unlock(&shm_ids(ns).mutex); | 117 | mutex_unlock(&shm_ids(ns).mutex); |
118 | 118 | ||
119 | ipc_fini_ids(ns->ids[IPC_SHM_IDS]); | ||
119 | kfree(ns->ids[IPC_SHM_IDS]); | 120 | kfree(ns->ids[IPC_SHM_IDS]); |
120 | ns->ids[IPC_SHM_IDS] = NULL; | 121 | ns->ids[IPC_SHM_IDS] = NULL; |
121 | } | 122 | } |
diff --git a/ipc/util.c b/ipc/util.c index 42479e4eec59..cd8bb14a431f 100644 --- a/ipc/util.c +++ b/ipc/util.c | |||
@@ -301,7 +301,7 @@ static int grow_ary(struct ipc_ids* ids, int newsize) | |||
301 | */ | 301 | */ |
302 | rcu_assign_pointer(ids->entries, new); | 302 | rcu_assign_pointer(ids->entries, new); |
303 | 303 | ||
304 | ipc_rcu_putref(old); | 304 | __ipc_fini_ids(ids, old); |
305 | return newsize; | 305 | return newsize; |
306 | } | 306 | } |
307 | 307 | ||
diff --git a/ipc/util.h b/ipc/util.h index c8fd6b9d77b5..e3aa2c5c97dc 100644 --- a/ipc/util.h +++ b/ipc/util.h | |||
@@ -83,6 +83,18 @@ void* ipc_rcu_alloc(int size); | |||
83 | void ipc_rcu_getref(void *ptr); | 83 | void ipc_rcu_getref(void *ptr); |
84 | void ipc_rcu_putref(void *ptr); | 84 | void ipc_rcu_putref(void *ptr); |
85 | 85 | ||
86 | static inline void __ipc_fini_ids(struct ipc_ids *ids, | ||
87 | struct ipc_id_ary *entries) | ||
88 | { | ||
89 | if (entries != &ids->nullentry) | ||
90 | ipc_rcu_putref(entries); | ||
91 | } | ||
92 | |||
93 | static inline void ipc_fini_ids(struct ipc_ids *ids) | ||
94 | { | ||
95 | __ipc_fini_ids(ids, ids->entries); | ||
96 | } | ||
97 | |||
86 | struct kern_ipc_perm* ipc_get(struct ipc_ids* ids, int id); | 98 | struct kern_ipc_perm* ipc_get(struct ipc_ids* ids, int id); |
87 | struct kern_ipc_perm* ipc_lock(struct ipc_ids* ids, int id); | 99 | struct kern_ipc_perm* ipc_lock(struct ipc_ids* ids, int id); |
88 | void ipc_lock_by_ptr(struct kern_ipc_perm *ipcp); | 100 | void ipc_lock_by_ptr(struct kern_ipc_perm *ipcp); |
diff --git a/kernel/compat.c b/kernel/compat.c index d4898aad6cfa..6952dd057300 100644 --- a/kernel/compat.c +++ b/kernel/compat.c | |||
@@ -982,4 +982,37 @@ asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages, | |||
982 | } | 982 | } |
983 | return sys_move_pages(pid, nr_pages, pages, nodes, status, flags); | 983 | return sys_move_pages(pid, nr_pages, pages, nodes, status, flags); |
984 | } | 984 | } |
985 | |||
986 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, | ||
987 | compat_ulong_t maxnode, | ||
988 | const compat_ulong_t __user *old_nodes, | ||
989 | const compat_ulong_t __user *new_nodes) | ||
990 | { | ||
991 | unsigned long __user *old = NULL; | ||
992 | unsigned long __user *new = NULL; | ||
993 | nodemask_t tmp_mask; | ||
994 | unsigned long nr_bits; | ||
995 | unsigned long size; | ||
996 | |||
997 | nr_bits = min_t(unsigned long, maxnode - 1, MAX_NUMNODES); | ||
998 | size = ALIGN(nr_bits, BITS_PER_LONG) / 8; | ||
999 | if (old_nodes) { | ||
1000 | if (compat_get_bitmap(nodes_addr(tmp_mask), old_nodes, nr_bits)) | ||
1001 | return -EFAULT; | ||
1002 | old = compat_alloc_user_space(new_nodes ? size * 2 : size); | ||
1003 | if (new_nodes) | ||
1004 | new = old + size / sizeof(unsigned long); | ||
1005 | if (copy_to_user(old, nodes_addr(tmp_mask), size)) | ||
1006 | return -EFAULT; | ||
1007 | } | ||
1008 | if (new_nodes) { | ||
1009 | if (compat_get_bitmap(nodes_addr(tmp_mask), new_nodes, nr_bits)) | ||
1010 | return -EFAULT; | ||
1011 | if (new == NULL) | ||
1012 | new = compat_alloc_user_space(size); | ||
1013 | if (copy_to_user(new, nodes_addr(tmp_mask), size)) | ||
1014 | return -EFAULT; | ||
1015 | } | ||
1016 | return sys_migrate_pages(pid, nr_bits + 1, old, new); | ||
1017 | } | ||
985 | #endif | 1018 | #endif |
diff --git a/kernel/cpu.c b/kernel/cpu.c index 663c920b2234..272254f20d97 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
@@ -58,8 +58,8 @@ void unlock_cpu_hotplug(void) | |||
58 | recursive_depth--; | 58 | recursive_depth--; |
59 | return; | 59 | return; |
60 | } | 60 | } |
61 | mutex_unlock(&cpu_bitmask_lock); | ||
62 | recursive = NULL; | 61 | recursive = NULL; |
62 | mutex_unlock(&cpu_bitmask_lock); | ||
63 | } | 63 | } |
64 | EXPORT_SYMBOL_GPL(unlock_cpu_hotplug); | 64 | EXPORT_SYMBOL_GPL(unlock_cpu_hotplug); |
65 | 65 | ||
diff --git a/kernel/delayacct.c b/kernel/delayacct.c index 36752f124c6a..66a0ea48751d 100644 --- a/kernel/delayacct.c +++ b/kernel/delayacct.c | |||
@@ -66,6 +66,7 @@ static void delayacct_end(struct timespec *start, struct timespec *end, | |||
66 | { | 66 | { |
67 | struct timespec ts; | 67 | struct timespec ts; |
68 | s64 ns; | 68 | s64 ns; |
69 | unsigned long flags; | ||
69 | 70 | ||
70 | do_posix_clock_monotonic_gettime(end); | 71 | do_posix_clock_monotonic_gettime(end); |
71 | ts = timespec_sub(*end, *start); | 72 | ts = timespec_sub(*end, *start); |
@@ -73,10 +74,10 @@ static void delayacct_end(struct timespec *start, struct timespec *end, | |||
73 | if (ns < 0) | 74 | if (ns < 0) |
74 | return; | 75 | return; |
75 | 76 | ||
76 | spin_lock(¤t->delays->lock); | 77 | spin_lock_irqsave(¤t->delays->lock, flags); |
77 | *total += ns; | 78 | *total += ns; |
78 | (*count)++; | 79 | (*count)++; |
79 | spin_unlock(¤t->delays->lock); | 80 | spin_unlock_irqrestore(¤t->delays->lock, flags); |
80 | } | 81 | } |
81 | 82 | ||
82 | void __delayacct_blkio_start(void) | 83 | void __delayacct_blkio_start(void) |
@@ -104,6 +105,7 @@ int __delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) | |||
104 | s64 tmp; | 105 | s64 tmp; |
105 | struct timespec ts; | 106 | struct timespec ts; |
106 | unsigned long t1,t2,t3; | 107 | unsigned long t1,t2,t3; |
108 | unsigned long flags; | ||
107 | 109 | ||
108 | /* Though tsk->delays accessed later, early exit avoids | 110 | /* Though tsk->delays accessed later, early exit avoids |
109 | * unnecessary returning of other data | 111 | * unnecessary returning of other data |
@@ -136,14 +138,14 @@ int __delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) | |||
136 | 138 | ||
137 | /* zero XXX_total, non-zero XXX_count implies XXX stat overflowed */ | 139 | /* zero XXX_total, non-zero XXX_count implies XXX stat overflowed */ |
138 | 140 | ||
139 | spin_lock(&tsk->delays->lock); | 141 | spin_lock_irqsave(&tsk->delays->lock, flags); |
140 | tmp = d->blkio_delay_total + tsk->delays->blkio_delay; | 142 | tmp = d->blkio_delay_total + tsk->delays->blkio_delay; |
141 | d->blkio_delay_total = (tmp < d->blkio_delay_total) ? 0 : tmp; | 143 | d->blkio_delay_total = (tmp < d->blkio_delay_total) ? 0 : tmp; |
142 | tmp = d->swapin_delay_total + tsk->delays->swapin_delay; | 144 | tmp = d->swapin_delay_total + tsk->delays->swapin_delay; |
143 | d->swapin_delay_total = (tmp < d->swapin_delay_total) ? 0 : tmp; | 145 | d->swapin_delay_total = (tmp < d->swapin_delay_total) ? 0 : tmp; |
144 | d->blkio_count += tsk->delays->blkio_count; | 146 | d->blkio_count += tsk->delays->blkio_count; |
145 | d->swapin_count += tsk->delays->swapin_count; | 147 | d->swapin_count += tsk->delays->swapin_count; |
146 | spin_unlock(&tsk->delays->lock); | 148 | spin_unlock_irqrestore(&tsk->delays->lock, flags); |
147 | 149 | ||
148 | done: | 150 | done: |
149 | return 0; | 151 | return 0; |
@@ -152,11 +154,12 @@ done: | |||
152 | __u64 __delayacct_blkio_ticks(struct task_struct *tsk) | 154 | __u64 __delayacct_blkio_ticks(struct task_struct *tsk) |
153 | { | 155 | { |
154 | __u64 ret; | 156 | __u64 ret; |
157 | unsigned long flags; | ||
155 | 158 | ||
156 | spin_lock(&tsk->delays->lock); | 159 | spin_lock_irqsave(&tsk->delays->lock, flags); |
157 | ret = nsec_to_clock_t(tsk->delays->blkio_delay + | 160 | ret = nsec_to_clock_t(tsk->delays->blkio_delay + |
158 | tsk->delays->swapin_delay); | 161 | tsk->delays->swapin_delay); |
159 | spin_unlock(&tsk->delays->lock); | 162 | spin_unlock_irqrestore(&tsk->delays->lock, flags); |
160 | return ret; | 163 | return ret; |
161 | } | 164 | } |
162 | 165 | ||
diff --git a/kernel/fork.c b/kernel/fork.c index 3da978eec791..4b4eab2a3161 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -687,6 +687,7 @@ static struct files_struct *dup_fd(struct files_struct *oldf, int *errorp) | |||
687 | * the latest pointer. | 687 | * the latest pointer. |
688 | */ | 688 | */ |
689 | spin_lock(&oldf->file_lock); | 689 | spin_lock(&oldf->file_lock); |
690 | open_files = count_open_files(old_fdt); | ||
690 | old_fdt = files_fdtable(oldf); | 691 | old_fdt = files_fdtable(oldf); |
691 | } | 692 | } |
692 | 693 | ||
diff --git a/kernel/futex.c b/kernel/futex.c index b364e0026191..93ef30ba209f 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -1507,6 +1507,13 @@ static int futex_fd(u32 __user *uaddr, int signal) | |||
1507 | struct futex_q *q; | 1507 | struct futex_q *q; |
1508 | struct file *filp; | 1508 | struct file *filp; |
1509 | int ret, err; | 1509 | int ret, err; |
1510 | static unsigned long printk_interval; | ||
1511 | |||
1512 | if (printk_timed_ratelimit(&printk_interval, 60 * 60 * 1000)) { | ||
1513 | printk(KERN_WARNING "Process `%s' used FUTEX_FD, which " | ||
1514 | "will be removed from the kernel in June 2007\n", | ||
1515 | current->comm); | ||
1516 | } | ||
1510 | 1517 | ||
1511 | ret = -EINVAL; | 1518 | ret = -EINVAL; |
1512 | if (!valid_signal(signal)) | 1519 | if (!valid_signal(signal)) |
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c index 543ea2e5ad93..9c7e2e4c1fe7 100644 --- a/kernel/irq/spurious.c +++ b/kernel/irq/spurious.c | |||
@@ -147,7 +147,11 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc, | |||
147 | if (unlikely(irqfixup)) { | 147 | if (unlikely(irqfixup)) { |
148 | /* Don't punish working computers */ | 148 | /* Don't punish working computers */ |
149 | if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) { | 149 | if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) { |
150 | int ok = misrouted_irq(irq); | 150 | int ok; |
151 | |||
152 | spin_unlock(&desc->lock); | ||
153 | ok = misrouted_irq(irq); | ||
154 | spin_lock(&desc->lock); | ||
151 | if (action_ret == IRQ_NONE) | 155 | if (action_ret == IRQ_NONE) |
152 | desc->irqs_unhandled -= ok; | 156 | desc->irqs_unhandled -= ok; |
153 | } | 157 | } |
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index d3a158a60312..b1fb7866b0b3 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
@@ -71,7 +71,7 @@ static inline void platform_finish(void) | |||
71 | 71 | ||
72 | static int prepare_processes(void) | 72 | static int prepare_processes(void) |
73 | { | 73 | { |
74 | int error; | 74 | int error = 0; |
75 | 75 | ||
76 | pm_prepare_console(); | 76 | pm_prepare_console(); |
77 | 77 | ||
@@ -84,6 +84,12 @@ static int prepare_processes(void) | |||
84 | goto thaw; | 84 | goto thaw; |
85 | } | 85 | } |
86 | 86 | ||
87 | if (pm_disk_mode == PM_DISK_TESTPROC) { | ||
88 | printk("swsusp debug: Waiting for 5 seconds.\n"); | ||
89 | mdelay(5000); | ||
90 | goto thaw; | ||
91 | } | ||
92 | |||
87 | /* Free memory before shutting down devices. */ | 93 | /* Free memory before shutting down devices. */ |
88 | if (!(error = swsusp_shrink_memory())) | 94 | if (!(error = swsusp_shrink_memory())) |
89 | return 0; | 95 | return 0; |
@@ -120,13 +126,21 @@ int pm_suspend_disk(void) | |||
120 | if (error) | 126 | if (error) |
121 | return error; | 127 | return error; |
122 | 128 | ||
129 | if (pm_disk_mode == PM_DISK_TESTPROC) | ||
130 | goto Thaw; | ||
131 | |||
123 | suspend_console(); | 132 | suspend_console(); |
124 | error = device_suspend(PMSG_FREEZE); | 133 | error = device_suspend(PMSG_FREEZE); |
125 | if (error) { | 134 | if (error) { |
126 | resume_console(); | 135 | resume_console(); |
127 | printk("Some devices failed to suspend\n"); | 136 | printk("Some devices failed to suspend\n"); |
128 | unprepare_processes(); | 137 | goto Thaw; |
129 | return error; | 138 | } |
139 | |||
140 | if (pm_disk_mode == PM_DISK_TEST) { | ||
141 | printk("swsusp debug: Waiting for 5 seconds.\n"); | ||
142 | mdelay(5000); | ||
143 | goto Done; | ||
130 | } | 144 | } |
131 | 145 | ||
132 | pr_debug("PM: snapshotting memory.\n"); | 146 | pr_debug("PM: snapshotting memory.\n"); |
@@ -143,16 +157,17 @@ int pm_suspend_disk(void) | |||
143 | power_down(pm_disk_mode); | 157 | power_down(pm_disk_mode); |
144 | else { | 158 | else { |
145 | swsusp_free(); | 159 | swsusp_free(); |
146 | unprepare_processes(); | 160 | goto Thaw; |
147 | return error; | ||
148 | } | 161 | } |
149 | } else | 162 | } else { |
150 | pr_debug("PM: Image restored successfully.\n"); | 163 | pr_debug("PM: Image restored successfully.\n"); |
164 | } | ||
151 | 165 | ||
152 | swsusp_free(); | 166 | swsusp_free(); |
153 | Done: | 167 | Done: |
154 | device_resume(); | 168 | device_resume(); |
155 | resume_console(); | 169 | resume_console(); |
170 | Thaw: | ||
156 | unprepare_processes(); | 171 | unprepare_processes(); |
157 | return error; | 172 | return error; |
158 | } | 173 | } |
@@ -249,6 +264,8 @@ static const char * const pm_disk_modes[] = { | |||
249 | [PM_DISK_PLATFORM] = "platform", | 264 | [PM_DISK_PLATFORM] = "platform", |
250 | [PM_DISK_SHUTDOWN] = "shutdown", | 265 | [PM_DISK_SHUTDOWN] = "shutdown", |
251 | [PM_DISK_REBOOT] = "reboot", | 266 | [PM_DISK_REBOOT] = "reboot", |
267 | [PM_DISK_TEST] = "test", | ||
268 | [PM_DISK_TESTPROC] = "testproc", | ||
252 | }; | 269 | }; |
253 | 270 | ||
254 | /** | 271 | /** |
@@ -303,17 +320,19 @@ static ssize_t disk_store(struct subsystem * s, const char * buf, size_t n) | |||
303 | } | 320 | } |
304 | } | 321 | } |
305 | if (mode) { | 322 | if (mode) { |
306 | if (mode == PM_DISK_SHUTDOWN || mode == PM_DISK_REBOOT) | 323 | if (mode == PM_DISK_SHUTDOWN || mode == PM_DISK_REBOOT || |
324 | mode == PM_DISK_TEST || mode == PM_DISK_TESTPROC) { | ||
307 | pm_disk_mode = mode; | 325 | pm_disk_mode = mode; |
308 | else { | 326 | } else { |
309 | if (pm_ops && pm_ops->enter && | 327 | if (pm_ops && pm_ops->enter && |
310 | (mode == pm_ops->pm_disk_mode)) | 328 | (mode == pm_ops->pm_disk_mode)) |
311 | pm_disk_mode = mode; | 329 | pm_disk_mode = mode; |
312 | else | 330 | else |
313 | error = -EINVAL; | 331 | error = -EINVAL; |
314 | } | 332 | } |
315 | } else | 333 | } else { |
316 | error = -EINVAL; | 334 | error = -EINVAL; |
335 | } | ||
317 | 336 | ||
318 | pr_debug("PM: suspend-to-disk mode set to '%s'\n", | 337 | pr_debug("PM: suspend-to-disk mode set to '%s'\n", |
319 | pm_disk_modes[mode]); | 338 | pm_disk_modes[mode]); |
diff --git a/kernel/printk.c b/kernel/printk.c index f7d427ef5038..66426552fbfe 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/security.h> | 31 | #include <linux/security.h> |
32 | #include <linux/bootmem.h> | 32 | #include <linux/bootmem.h> |
33 | #include <linux/syscalls.h> | 33 | #include <linux/syscalls.h> |
34 | #include <linux/jiffies.h> | ||
34 | 35 | ||
35 | #include <asm/uaccess.h> | 36 | #include <asm/uaccess.h> |
36 | 37 | ||
@@ -1101,3 +1102,23 @@ int printk_ratelimit(void) | |||
1101 | printk_ratelimit_burst); | 1102 | printk_ratelimit_burst); |
1102 | } | 1103 | } |
1103 | EXPORT_SYMBOL(printk_ratelimit); | 1104 | EXPORT_SYMBOL(printk_ratelimit); |
1105 | |||
1106 | /** | ||
1107 | * printk_timed_ratelimit - caller-controlled printk ratelimiting | ||
1108 | * @caller_jiffies: pointer to caller's state | ||
1109 | * @interval_msecs: minimum interval between prints | ||
1110 | * | ||
1111 | * printk_timed_ratelimit() returns true if more than @interval_msecs | ||
1112 | * milliseconds have elapsed since the last time printk_timed_ratelimit() | ||
1113 | * returned true. | ||
1114 | */ | ||
1115 | bool printk_timed_ratelimit(unsigned long *caller_jiffies, | ||
1116 | unsigned int interval_msecs) | ||
1117 | { | ||
1118 | if (*caller_jiffies == 0 || time_after(jiffies, *caller_jiffies)) { | ||
1119 | *caller_jiffies = jiffies + msecs_to_jiffies(interval_msecs); | ||
1120 | return true; | ||
1121 | } | ||
1122 | return false; | ||
1123 | } | ||
1124 | EXPORT_SYMBOL(printk_timed_ratelimit); | ||
diff --git a/kernel/signal.c b/kernel/signal.c index 7ed8d5304bec..df18c167a2a7 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -267,18 +267,25 @@ static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags, | |||
267 | int override_rlimit) | 267 | int override_rlimit) |
268 | { | 268 | { |
269 | struct sigqueue *q = NULL; | 269 | struct sigqueue *q = NULL; |
270 | struct user_struct *user; | ||
270 | 271 | ||
271 | atomic_inc(&t->user->sigpending); | 272 | /* |
273 | * In order to avoid problems with "switch_user()", we want to make | ||
274 | * sure that the compiler doesn't re-load "t->user" | ||
275 | */ | ||
276 | user = t->user; | ||
277 | barrier(); | ||
278 | atomic_inc(&user->sigpending); | ||
272 | if (override_rlimit || | 279 | if (override_rlimit || |
273 | atomic_read(&t->user->sigpending) <= | 280 | atomic_read(&user->sigpending) <= |
274 | t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur) | 281 | t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur) |
275 | q = kmem_cache_alloc(sigqueue_cachep, flags); | 282 | q = kmem_cache_alloc(sigqueue_cachep, flags); |
276 | if (unlikely(q == NULL)) { | 283 | if (unlikely(q == NULL)) { |
277 | atomic_dec(&t->user->sigpending); | 284 | atomic_dec(&user->sigpending); |
278 | } else { | 285 | } else { |
279 | INIT_LIST_HEAD(&q->list); | 286 | INIT_LIST_HEAD(&q->list); |
280 | q->flags = 0; | 287 | q->flags = 0; |
281 | q->user = get_uid(t->user); | 288 | q->user = get_uid(user); |
282 | } | 289 | } |
283 | return(q); | 290 | return(q); |
284 | } | 291 | } |
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index 0e53314b14de..d7306d0f3dfc 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c | |||
@@ -135,6 +135,7 @@ cond_syscall(sys_madvise); | |||
135 | cond_syscall(sys_mremap); | 135 | cond_syscall(sys_mremap); |
136 | cond_syscall(sys_remap_file_pages); | 136 | cond_syscall(sys_remap_file_pages); |
137 | cond_syscall(compat_sys_move_pages); | 137 | cond_syscall(compat_sys_move_pages); |
138 | cond_syscall(compat_sys_migrate_pages); | ||
138 | 139 | ||
139 | /* block-layer dependent */ | 140 | /* block-layer dependent */ |
140 | cond_syscall(sys_bdflush); | 141 | cond_syscall(sys_bdflush); |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 8bff2c18fb5a..09e569f4792b 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -1315,7 +1315,9 @@ repeat: | |||
1315 | return -ENOTDIR; | 1315 | return -ENOTDIR; |
1316 | if (get_user(n, name)) | 1316 | if (get_user(n, name)) |
1317 | return -EFAULT; | 1317 | return -EFAULT; |
1318 | for ( ; table->ctl_name; table++) { | 1318 | for ( ; table->ctl_name || table->procname; table++) { |
1319 | if (!table->ctl_name) | ||
1320 | continue; | ||
1319 | if (n == table->ctl_name || table->ctl_name == CTL_ANY) { | 1321 | if (n == table->ctl_name || table->ctl_name == CTL_ANY) { |
1320 | int error; | 1322 | int error; |
1321 | if (table->child) { | 1323 | if (table->child) { |
@@ -1532,7 +1534,7 @@ static void register_proc_table(ctl_table * table, struct proc_dir_entry *root, | |||
1532 | int len; | 1534 | int len; |
1533 | mode_t mode; | 1535 | mode_t mode; |
1534 | 1536 | ||
1535 | for (; table->ctl_name; table++) { | 1537 | for (; table->ctl_name || table->procname; table++) { |
1536 | /* Can't do anything without a proc name. */ | 1538 | /* Can't do anything without a proc name. */ |
1537 | if (!table->procname) | 1539 | if (!table->procname) |
1538 | continue; | 1540 | continue; |
@@ -1579,7 +1581,7 @@ static void register_proc_table(ctl_table * table, struct proc_dir_entry *root, | |||
1579 | static void unregister_proc_table(ctl_table * table, struct proc_dir_entry *root) | 1581 | static void unregister_proc_table(ctl_table * table, struct proc_dir_entry *root) |
1580 | { | 1582 | { |
1581 | struct proc_dir_entry *de; | 1583 | struct proc_dir_entry *de; |
1582 | for (; table->ctl_name; table++) { | 1584 | for (; table->ctl_name || table->procname; table++) { |
1583 | if (!(de = table->de)) | 1585 | if (!(de = table->de)) |
1584 | continue; | 1586 | continue; |
1585 | if (de->mode & S_IFDIR) { | 1587 | if (de->mode & S_IFDIR) { |
@@ -2680,13 +2682,33 @@ int sysctl_ms_jiffies(ctl_table *table, int __user *name, int nlen, | |||
2680 | asmlinkage long sys_sysctl(struct __sysctl_args __user *args) | 2682 | asmlinkage long sys_sysctl(struct __sysctl_args __user *args) |
2681 | { | 2683 | { |
2682 | static int msg_count; | 2684 | static int msg_count; |
2685 | struct __sysctl_args tmp; | ||
2686 | int name[CTL_MAXNAME]; | ||
2687 | int i; | ||
2688 | |||
2689 | /* Read in the sysctl name for better debug message logging */ | ||
2690 | if (copy_from_user(&tmp, args, sizeof(tmp))) | ||
2691 | return -EFAULT; | ||
2692 | if (tmp.nlen <= 0 || tmp.nlen >= CTL_MAXNAME) | ||
2693 | return -ENOTDIR; | ||
2694 | for (i = 0; i < tmp.nlen; i++) | ||
2695 | if (get_user(name[i], tmp.name + i)) | ||
2696 | return -EFAULT; | ||
2697 | |||
2698 | /* Ignore accesses to kernel.version */ | ||
2699 | if ((tmp.nlen == 2) && (name[0] == CTL_KERN) && (name[1] == KERN_VERSION)) | ||
2700 | goto out; | ||
2683 | 2701 | ||
2684 | if (msg_count < 5) { | 2702 | if (msg_count < 5) { |
2685 | msg_count++; | 2703 | msg_count++; |
2686 | printk(KERN_INFO | 2704 | printk(KERN_INFO |
2687 | "warning: process `%s' used the removed sysctl " | 2705 | "warning: process `%s' used the removed sysctl " |
2688 | "system call\n", current->comm); | 2706 | "system call with ", current->comm); |
2707 | for (i = 0; i < tmp.nlen; i++) | ||
2708 | printk("%d.", name[i]); | ||
2709 | printk("\n"); | ||
2689 | } | 2710 | } |
2711 | out: | ||
2690 | return -ENOSYS; | 2712 | return -ENOSYS; |
2691 | } | 2713 | } |
2692 | 2714 | ||
diff --git a/kernel/user.c b/kernel/user.c index 6408c0424291..220e586127a0 100644 --- a/kernel/user.c +++ b/kernel/user.c | |||
@@ -187,6 +187,17 @@ void switch_uid(struct user_struct *new_user) | |||
187 | atomic_dec(&old_user->processes); | 187 | atomic_dec(&old_user->processes); |
188 | switch_uid_keyring(new_user); | 188 | switch_uid_keyring(new_user); |
189 | current->user = new_user; | 189 | current->user = new_user; |
190 | |||
191 | /* | ||
192 | * We need to synchronize with __sigqueue_alloc() | ||
193 | * doing a get_uid(p->user).. If that saw the old | ||
194 | * user value, we need to wait until it has exited | ||
195 | * its critical region before we can free the old | ||
196 | * structure. | ||
197 | */ | ||
198 | smp_mb(); | ||
199 | spin_unlock_wait(¤t->sighand->siglock); | ||
200 | |||
190 | free_uid(old_user); | 201 | free_uid(old_user); |
191 | suid_keys(current); | 202 | suid_keys(current); |
192 | } | 203 | } |
diff --git a/mm/migrate.c b/mm/migrate.c index ba2453f9483d..b4979d423d2b 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -952,7 +952,8 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages, | |||
952 | goto out; | 952 | goto out; |
953 | 953 | ||
954 | pm[i].node = node; | 954 | pm[i].node = node; |
955 | } | 955 | } else |
956 | pm[i].node = 0; /* anything to not match MAX_NUMNODES */ | ||
956 | } | 957 | } |
957 | /* End marker */ | 958 | /* End marker */ |
958 | pm[nr_pages].node = MAX_NUMNODES; | 959 | pm[nr_pages].node = MAX_NUMNODES; |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b55bb358b832..bf2f6cff1d6a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -853,7 +853,7 @@ again: | |||
853 | pcp = &zone_pcp(zone, cpu)->pcp[cold]; | 853 | pcp = &zone_pcp(zone, cpu)->pcp[cold]; |
854 | local_irq_save(flags); | 854 | local_irq_save(flags); |
855 | if (!pcp->count) { | 855 | if (!pcp->count) { |
856 | pcp->count += rmqueue_bulk(zone, 0, | 856 | pcp->count = rmqueue_bulk(zone, 0, |
857 | pcp->batch, &pcp->list); | 857 | pcp->batch, &pcp->list); |
858 | if (unlikely(!pcp->count)) | 858 | if (unlikely(!pcp->count)) |
859 | goto failed; | 859 | goto failed; |
diff --git a/mm/readahead.c b/mm/readahead.c index 1ba736ac0367..23cb61a01c6e 100644 --- a/mm/readahead.c +++ b/mm/readahead.c | |||
@@ -173,6 +173,8 @@ static int read_pages(struct address_space *mapping, struct file *filp, | |||
173 | 173 | ||
174 | if (mapping->a_ops->readpages) { | 174 | if (mapping->a_ops->readpages) { |
175 | ret = mapping->a_ops->readpages(filp, mapping, pages, nr_pages); | 175 | ret = mapping->a_ops->readpages(filp, mapping, pages, nr_pages); |
176 | /* Clean up the remaining pages */ | ||
177 | put_pages_list(pages); | ||
176 | goto out; | 178 | goto out; |
177 | } | 179 | } |
178 | 180 | ||
@@ -883,7 +883,7 @@ static void init_reap_node(int cpu) | |||
883 | if (node == MAX_NUMNODES) | 883 | if (node == MAX_NUMNODES) |
884 | node = first_node(node_online_map); | 884 | node = first_node(node_online_map); |
885 | 885 | ||
886 | __get_cpu_var(reap_node) = node; | 886 | per_cpu(reap_node, cpu) = node; |
887 | } | 887 | } |
888 | 888 | ||
889 | static void next_reap_node(void) | 889 | static void next_reap_node(void) |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 46606c133e82..7dc6aa745166 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
@@ -186,10 +186,8 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, unsigned long fl | |||
186 | if (unlikely(!area)) | 186 | if (unlikely(!area)) |
187 | return NULL; | 187 | return NULL; |
188 | 188 | ||
189 | if (unlikely(!size)) { | 189 | if (unlikely(!size)) |
190 | kfree (area); | ||
191 | return NULL; | 190 | return NULL; |
192 | } | ||
193 | 191 | ||
194 | /* | 192 | /* |
195 | * We always allocate a guard page. | 193 | * We always allocate a guard page. |
@@ -532,11 +530,12 @@ void *vmalloc_user(unsigned long size) | |||
532 | void *ret; | 530 | void *ret; |
533 | 531 | ||
534 | ret = __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL); | 532 | ret = __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL); |
535 | write_lock(&vmlist_lock); | 533 | if (ret) { |
536 | area = __find_vm_area(ret); | 534 | write_lock(&vmlist_lock); |
537 | area->flags |= VM_USERMAP; | 535 | area = __find_vm_area(ret); |
538 | write_unlock(&vmlist_lock); | 536 | area->flags |= VM_USERMAP; |
539 | 537 | write_unlock(&vmlist_lock); | |
538 | } | ||
540 | return ret; | 539 | return ret; |
541 | } | 540 | } |
542 | EXPORT_SYMBOL(vmalloc_user); | 541 | EXPORT_SYMBOL(vmalloc_user); |
@@ -605,11 +604,12 @@ void *vmalloc_32_user(unsigned long size) | |||
605 | void *ret; | 604 | void *ret; |
606 | 605 | ||
607 | ret = __vmalloc(size, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL); | 606 | ret = __vmalloc(size, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL); |
608 | write_lock(&vmlist_lock); | 607 | if (ret) { |
609 | area = __find_vm_area(ret); | 608 | write_lock(&vmlist_lock); |
610 | area->flags |= VM_USERMAP; | 609 | area = __find_vm_area(ret); |
611 | write_unlock(&vmlist_lock); | 610 | area->flags |= VM_USERMAP; |
612 | 611 | write_unlock(&vmlist_lock); | |
612 | } | ||
613 | return ret; | 613 | return ret; |
614 | } | 614 | } |
615 | EXPORT_SYMBOL(vmalloc_32_user); | 615 | EXPORT_SYMBOL(vmalloc_32_user); |
diff --git a/net/Kconfig b/net/Kconfig index a81aca43932f..67e39ad8b8b6 100644 --- a/net/Kconfig +++ b/net/Kconfig | |||
@@ -63,6 +63,7 @@ config INET | |||
63 | if INET | 63 | if INET |
64 | source "net/ipv4/Kconfig" | 64 | source "net/ipv4/Kconfig" |
65 | source "net/ipv6/Kconfig" | 65 | source "net/ipv6/Kconfig" |
66 | source "net/netlabel/Kconfig" | ||
66 | 67 | ||
67 | endif # if INET | 68 | endif # if INET |
68 | 69 | ||
@@ -249,8 +250,6 @@ source "net/ieee80211/Kconfig" | |||
249 | config WIRELESS_EXT | 250 | config WIRELESS_EXT |
250 | bool | 251 | bool |
251 | 252 | ||
252 | source "net/netlabel/Kconfig" | ||
253 | |||
254 | config FIB_RULES | 253 | config FIB_RULES |
255 | bool | 254 | bool |
256 | 255 | ||
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 9308af060b44..6589adb14cbf 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -340,6 +340,12 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) | |||
340 | udph->dest = htons(np->remote_port); | 340 | udph->dest = htons(np->remote_port); |
341 | udph->len = htons(udp_len); | 341 | udph->len = htons(udp_len); |
342 | udph->check = 0; | 342 | udph->check = 0; |
343 | udph->check = csum_tcpudp_magic(htonl(np->local_ip), | ||
344 | htonl(np->remote_ip), | ||
345 | udp_len, IPPROTO_UDP, | ||
346 | csum_partial((unsigned char *)udph, udp_len, 0)); | ||
347 | if (udph->check == 0) | ||
348 | udph->check = -1; | ||
343 | 349 | ||
344 | skb->nh.iph = iph = (struct iphdr *)skb_push(skb, sizeof(*iph)); | 350 | skb->nh.iph = iph = (struct iphdr *)skb_push(skb, sizeof(*iph)); |
345 | 351 | ||
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index dd023fd28304..733d86d0a4fb 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -2304,6 +2304,12 @@ static void mpls_push(__be32 *mpls, struct pktgen_dev *pkt_dev) | |||
2304 | *mpls |= MPLS_STACK_BOTTOM; | 2304 | *mpls |= MPLS_STACK_BOTTOM; |
2305 | } | 2305 | } |
2306 | 2306 | ||
2307 | static inline __be16 build_tci(unsigned int id, unsigned int cfi, | ||
2308 | unsigned int prio) | ||
2309 | { | ||
2310 | return htons(id | (cfi << 12) | (prio << 13)); | ||
2311 | } | ||
2312 | |||
2307 | static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | 2313 | static struct sk_buff *fill_packet_ipv4(struct net_device *odev, |
2308 | struct pktgen_dev *pkt_dev) | 2314 | struct pktgen_dev *pkt_dev) |
2309 | { | 2315 | { |
@@ -2353,16 +2359,16 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | |||
2353 | if (pkt_dev->vlan_id != 0xffff) { | 2359 | if (pkt_dev->vlan_id != 0xffff) { |
2354 | if(pkt_dev->svlan_id != 0xffff) { | 2360 | if(pkt_dev->svlan_id != 0xffff) { |
2355 | svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); | 2361 | svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); |
2356 | *svlan_tci = htons(pkt_dev->svlan_id); | 2362 | *svlan_tci = build_tci(pkt_dev->svlan_id, |
2357 | *svlan_tci |= pkt_dev->svlan_p << 5; | 2363 | pkt_dev->svlan_cfi, |
2358 | *svlan_tci |= pkt_dev->svlan_cfi << 4; | 2364 | pkt_dev->svlan_p); |
2359 | svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); | 2365 | svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); |
2360 | *svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q); | 2366 | *svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q); |
2361 | } | 2367 | } |
2362 | vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); | 2368 | vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); |
2363 | *vlan_tci = htons(pkt_dev->vlan_id); | 2369 | *vlan_tci = build_tci(pkt_dev->vlan_id, |
2364 | *vlan_tci |= pkt_dev->vlan_p << 5; | 2370 | pkt_dev->vlan_cfi, |
2365 | *vlan_tci |= pkt_dev->vlan_cfi << 4; | 2371 | pkt_dev->vlan_p); |
2366 | vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); | 2372 | vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); |
2367 | *vlan_encapsulated_proto = __constant_htons(ETH_P_IP); | 2373 | *vlan_encapsulated_proto = __constant_htons(ETH_P_IP); |
2368 | } | 2374 | } |
@@ -2689,16 +2695,16 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, | |||
2689 | if (pkt_dev->vlan_id != 0xffff) { | 2695 | if (pkt_dev->vlan_id != 0xffff) { |
2690 | if(pkt_dev->svlan_id != 0xffff) { | 2696 | if(pkt_dev->svlan_id != 0xffff) { |
2691 | svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); | 2697 | svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); |
2692 | *svlan_tci = htons(pkt_dev->svlan_id); | 2698 | *svlan_tci = build_tci(pkt_dev->svlan_id, |
2693 | *svlan_tci |= pkt_dev->svlan_p << 5; | 2699 | pkt_dev->svlan_cfi, |
2694 | *svlan_tci |= pkt_dev->svlan_cfi << 4; | 2700 | pkt_dev->svlan_p); |
2695 | svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); | 2701 | svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); |
2696 | *svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q); | 2702 | *svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q); |
2697 | } | 2703 | } |
2698 | vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); | 2704 | vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); |
2699 | *vlan_tci = htons(pkt_dev->vlan_id); | 2705 | *vlan_tci = build_tci(pkt_dev->vlan_id, |
2700 | *vlan_tci |= pkt_dev->vlan_p << 5; | 2706 | pkt_dev->vlan_cfi, |
2701 | *vlan_tci |= pkt_dev->vlan_cfi << 4; | 2707 | pkt_dev->vlan_p); |
2702 | vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); | 2708 | vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); |
2703 | *vlan_encapsulated_proto = __constant_htons(ETH_P_IPV6); | 2709 | *vlan_encapsulated_proto = __constant_htons(ETH_P_IPV6); |
2704 | } | 2710 | } |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index f735455dc5d1..b8b106358040 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -639,6 +639,7 @@ struct sk_buff *pskb_copy(struct sk_buff *skb, gfp_t gfp_mask) | |||
639 | n->csum = skb->csum; | 639 | n->csum = skb->csum; |
640 | n->ip_summed = skb->ip_summed; | 640 | n->ip_summed = skb->ip_summed; |
641 | 641 | ||
642 | n->truesize += skb->data_len; | ||
642 | n->data_len = skb->data_len; | 643 | n->data_len = skb->data_len; |
643 | n->len = skb->len; | 644 | n->len = skb->len; |
644 | 645 | ||
diff --git a/net/core/sock.c b/net/core/sock.c index d472db4776c3..ee6cd2541d35 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -1160,7 +1160,7 @@ static struct sk_buff *sock_alloc_send_pskb(struct sock *sk, | |||
1160 | goto failure; | 1160 | goto failure; |
1161 | 1161 | ||
1162 | if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) { | 1162 | if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) { |
1163 | skb = alloc_skb(header_len, sk->sk_allocation); | 1163 | skb = alloc_skb(header_len, gfp_mask); |
1164 | if (skb) { | 1164 | if (skb) { |
1165 | int npages; | 1165 | int npages; |
1166 | int i; | 1166 | int i; |
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index 3456cd331835..21f20f21dd32 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c | |||
@@ -166,7 +166,7 @@ static struct hlist_head *dn_find_list(struct sock *sk) | |||
166 | if (scp->addr.sdn_flags & SDF_WILD) | 166 | if (scp->addr.sdn_flags & SDF_WILD) |
167 | return hlist_empty(&dn_wild_sk) ? &dn_wild_sk : NULL; | 167 | return hlist_empty(&dn_wild_sk) ? &dn_wild_sk : NULL; |
168 | 168 | ||
169 | return &dn_sk_hash[scp->addrloc & DN_SK_HASH_MASK]; | 169 | return &dn_sk_hash[dn_ntohs(scp->addrloc) & DN_SK_HASH_MASK]; |
170 | } | 170 | } |
171 | 171 | ||
172 | /* | 172 | /* |
@@ -180,7 +180,7 @@ static int check_port(__le16 port) | |||
180 | if (port == 0) | 180 | if (port == 0) |
181 | return -1; | 181 | return -1; |
182 | 182 | ||
183 | sk_for_each(sk, node, &dn_sk_hash[port & DN_SK_HASH_MASK]) { | 183 | sk_for_each(sk, node, &dn_sk_hash[dn_ntohs(port) & DN_SK_HASH_MASK]) { |
184 | struct dn_scp *scp = DN_SK(sk); | 184 | struct dn_scp *scp = DN_SK(sk); |
185 | if (scp->addrloc == port) | 185 | if (scp->addrloc == port) |
186 | return -1; | 186 | return -1; |
@@ -194,12 +194,12 @@ static unsigned short port_alloc(struct sock *sk) | |||
194 | static unsigned short port = 0x2000; | 194 | static unsigned short port = 0x2000; |
195 | unsigned short i_port = port; | 195 | unsigned short i_port = port; |
196 | 196 | ||
197 | while(check_port(++port) != 0) { | 197 | while(check_port(dn_htons(++port)) != 0) { |
198 | if (port == i_port) | 198 | if (port == i_port) |
199 | return 0; | 199 | return 0; |
200 | } | 200 | } |
201 | 201 | ||
202 | scp->addrloc = port; | 202 | scp->addrloc = dn_htons(port); |
203 | 203 | ||
204 | return 1; | 204 | return 1; |
205 | } | 205 | } |
@@ -418,7 +418,7 @@ struct sock *dn_find_by_skb(struct sk_buff *skb) | |||
418 | struct dn_scp *scp; | 418 | struct dn_scp *scp; |
419 | 419 | ||
420 | read_lock(&dn_hash_lock); | 420 | read_lock(&dn_hash_lock); |
421 | sk_for_each(sk, node, &dn_sk_hash[cb->dst_port & DN_SK_HASH_MASK]) { | 421 | sk_for_each(sk, node, &dn_sk_hash[dn_ntohs(cb->dst_port) & DN_SK_HASH_MASK]) { |
422 | scp = DN_SK(sk); | 422 | scp = DN_SK(sk); |
423 | if (cb->src != dn_saddr2dn(&scp->peer)) | 423 | if (cb->src != dn_saddr2dn(&scp->peer)) |
424 | continue; | 424 | continue; |
@@ -1016,13 +1016,14 @@ static void dn_access_copy(struct sk_buff *skb, struct accessdata_dn *acc) | |||
1016 | 1016 | ||
1017 | static void dn_user_copy(struct sk_buff *skb, struct optdata_dn *opt) | 1017 | static void dn_user_copy(struct sk_buff *skb, struct optdata_dn *opt) |
1018 | { | 1018 | { |
1019 | unsigned char *ptr = skb->data; | 1019 | unsigned char *ptr = skb->data; |
1020 | 1020 | u16 len = *ptr++; /* yes, it's 8bit on the wire */ | |
1021 | opt->opt_optl = *ptr++; | 1021 | |
1022 | opt->opt_status = 0; | 1022 | BUG_ON(len > 16); /* we've checked the contents earlier */ |
1023 | memcpy(opt->opt_data, ptr, opt->opt_optl); | 1023 | opt->opt_optl = dn_htons(len); |
1024 | skb_pull(skb, dn_ntohs(opt->opt_optl) + 1); | 1024 | opt->opt_status = 0; |
1025 | 1025 | memcpy(opt->opt_data, ptr, len); | |
1026 | skb_pull(skb, len + 1); | ||
1026 | } | 1027 | } |
1027 | 1028 | ||
1028 | static struct sk_buff *dn_wait_for_connect(struct sock *sk, long *timeo) | 1029 | static struct sk_buff *dn_wait_for_connect(struct sock *sk, long *timeo) |
diff --git a/net/decnet/dn_nsp_in.c b/net/decnet/dn_nsp_in.c index 72ecc6e62ec4..7683d4f754d2 100644 --- a/net/decnet/dn_nsp_in.c +++ b/net/decnet/dn_nsp_in.c | |||
@@ -360,9 +360,9 @@ static void dn_nsp_conn_conf(struct sock *sk, struct sk_buff *skb) | |||
360 | scp->max_window = decnet_no_fc_max_cwnd; | 360 | scp->max_window = decnet_no_fc_max_cwnd; |
361 | 361 | ||
362 | if (skb->len > 0) { | 362 | if (skb->len > 0) { |
363 | unsigned char dlen = *skb->data; | 363 | u16 dlen = *skb->data; |
364 | if ((dlen <= 16) && (dlen <= skb->len)) { | 364 | if ((dlen <= 16) && (dlen <= skb->len)) { |
365 | scp->conndata_in.opt_optl = dn_htons((__u16)dlen); | 365 | scp->conndata_in.opt_optl = dn_htons(dlen); |
366 | memcpy(scp->conndata_in.opt_data, skb->data + 1, dlen); | 366 | memcpy(scp->conndata_in.opt_data, skb->data + 1, dlen); |
367 | } | 367 | } |
368 | } | 368 | } |
@@ -404,9 +404,9 @@ static void dn_nsp_disc_init(struct sock *sk, struct sk_buff *skb) | |||
404 | memset(scp->discdata_in.opt_data, 0, 16); | 404 | memset(scp->discdata_in.opt_data, 0, 16); |
405 | 405 | ||
406 | if (skb->len > 0) { | 406 | if (skb->len > 0) { |
407 | unsigned char dlen = *skb->data; | 407 | u16 dlen = *skb->data; |
408 | if ((dlen <= 16) && (dlen <= skb->len)) { | 408 | if ((dlen <= 16) && (dlen <= skb->len)) { |
409 | scp->discdata_in.opt_optl = dn_htons((__u16)dlen); | 409 | scp->discdata_in.opt_optl = dn_htons(dlen); |
410 | memcpy(scp->discdata_in.opt_data, skb->data + 1, dlen); | 410 | memcpy(scp->discdata_in.opt_data, skb->data + 1, dlen); |
411 | } | 411 | } |
412 | } | 412 | } |
diff --git a/net/decnet/dn_nsp_out.c b/net/decnet/dn_nsp_out.c index c2e21cd89b3c..b342e4e8f5f8 100644 --- a/net/decnet/dn_nsp_out.c +++ b/net/decnet/dn_nsp_out.c | |||
@@ -526,7 +526,7 @@ void dn_send_conn_conf(struct sock *sk, gfp_t gfp) | |||
526 | struct nsp_conn_init_msg *msg; | 526 | struct nsp_conn_init_msg *msg; |
527 | __u8 len = (__u8)dn_ntohs(scp->conndata_out.opt_optl); | 527 | __u8 len = (__u8)dn_ntohs(scp->conndata_out.opt_optl); |
528 | 528 | ||
529 | if ((skb = dn_alloc_skb(sk, 50 + dn_ntohs(scp->conndata_out.opt_optl), gfp)) == NULL) | 529 | if ((skb = dn_alloc_skb(sk, 50 + len, gfp)) == NULL) |
530 | return; | 530 | return; |
531 | 531 | ||
532 | msg = (struct nsp_conn_init_msg *)skb_put(skb, sizeof(*msg)); | 532 | msg = (struct nsp_conn_init_msg *)skb_put(skb, sizeof(*msg)); |
diff --git a/net/decnet/dn_rules.c b/net/decnet/dn_rules.c index 3e0c882c90bf..590e0a72495c 100644 --- a/net/decnet/dn_rules.c +++ b/net/decnet/dn_rules.c | |||
@@ -124,8 +124,8 @@ static struct nla_policy dn_fib_rule_policy[FRA_MAX+1] __read_mostly = { | |||
124 | static int dn_fib_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) | 124 | static int dn_fib_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) |
125 | { | 125 | { |
126 | struct dn_fib_rule *r = (struct dn_fib_rule *)rule; | 126 | struct dn_fib_rule *r = (struct dn_fib_rule *)rule; |
127 | u16 daddr = fl->fld_dst; | 127 | __le16 daddr = fl->fld_dst; |
128 | u16 saddr = fl->fld_src; | 128 | __le16 saddr = fl->fld_src; |
129 | 129 | ||
130 | if (((saddr ^ r->src) & r->srcmask) || | 130 | if (((saddr ^ r->src) & r->srcmask) || |
131 | ((daddr ^ r->dst) & r->dstmask)) | 131 | ((daddr ^ r->dst) & r->dstmask)) |
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c index 770704183a1b..2759312a4204 100644 --- a/net/ieee80211/ieee80211_rx.c +++ b/net/ieee80211/ieee80211_rx.c | |||
@@ -1078,12 +1078,12 @@ static int ieee80211_parse_info_param(struct ieee80211_info_element | |||
1078 | 1078 | ||
1079 | while (length >= sizeof(*info_element)) { | 1079 | while (length >= sizeof(*info_element)) { |
1080 | if (sizeof(*info_element) + info_element->len > length) { | 1080 | if (sizeof(*info_element) + info_element->len > length) { |
1081 | IEEE80211_ERROR("Info elem: parse failed: " | 1081 | IEEE80211_DEBUG_MGMT("Info elem: parse failed: " |
1082 | "info_element->len + 2 > left : " | 1082 | "info_element->len + 2 > left : " |
1083 | "info_element->len+2=%zd left=%d, id=%d.\n", | 1083 | "info_element->len+2=%zd left=%d, id=%d.\n", |
1084 | info_element->len + | 1084 | info_element->len + |
1085 | sizeof(*info_element), | 1085 | sizeof(*info_element), |
1086 | length, info_element->id); | 1086 | length, info_element->id); |
1087 | /* We stop processing but don't return an error here | 1087 | /* We stop processing but don't return an error here |
1088 | * because some misbehaviour APs break this rule. ie. | 1088 | * because some misbehaviour APs break this rule. ie. |
1089 | * Orinoco AP1000. */ | 1089 | * Orinoco AP1000. */ |
diff --git a/net/ipv4/ipvs/ip_vs_ftp.c b/net/ipv4/ipvs/ip_vs_ftp.c index 6d398f10aa91..687c1de1146f 100644 --- a/net/ipv4/ipvs/ip_vs_ftp.c +++ b/net/ipv4/ipvs/ip_vs_ftp.c | |||
@@ -200,7 +200,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
200 | from = n_cp->vaddr; | 200 | from = n_cp->vaddr; |
201 | port = n_cp->vport; | 201 | port = n_cp->vport; |
202 | sprintf(buf,"%d,%d,%d,%d,%d,%d", NIPQUAD(from), | 202 | sprintf(buf,"%d,%d,%d,%d,%d,%d", NIPQUAD(from), |
203 | ntohs(port)&255, (ntohs(port)>>8)&255); | 203 | (ntohs(port)>>8)&255, ntohs(port)&255); |
204 | buf_len = strlen(buf); | 204 | buf_len = strlen(buf); |
205 | 205 | ||
206 | /* | 206 | /* |
diff --git a/net/ipv4/ipvs/ip_vs_proto_tcp.c b/net/ipv4/ipvs/ip_vs_proto_tcp.c index bfe779e74590..6ff05c3a32e6 100644 --- a/net/ipv4/ipvs/ip_vs_proto_tcp.c +++ b/net/ipv4/ipvs/ip_vs_proto_tcp.c | |||
@@ -117,7 +117,7 @@ tcp_fast_csum_update(struct tcphdr *tcph, __be32 oldip, __be32 newip, | |||
117 | { | 117 | { |
118 | tcph->check = | 118 | tcph->check = |
119 | ip_vs_check_diff(~oldip, newip, | 119 | ip_vs_check_diff(~oldip, newip, |
120 | ip_vs_check_diff(oldport ^ htonl(0xFFFF), | 120 | ip_vs_check_diff(oldport ^ htons(0xFFFF), |
121 | newport, tcph->check)); | 121 | newport, tcph->check)); |
122 | } | 122 | } |
123 | 123 | ||
diff --git a/net/ipv4/ipvs/ip_vs_proto_udp.c b/net/ipv4/ipvs/ip_vs_proto_udp.c index 54aa7603591f..691c8b637b29 100644 --- a/net/ipv4/ipvs/ip_vs_proto_udp.c +++ b/net/ipv4/ipvs/ip_vs_proto_udp.c | |||
@@ -122,10 +122,10 @@ udp_fast_csum_update(struct udphdr *uhdr, __be32 oldip, __be32 newip, | |||
122 | { | 122 | { |
123 | uhdr->check = | 123 | uhdr->check = |
124 | ip_vs_check_diff(~oldip, newip, | 124 | ip_vs_check_diff(~oldip, newip, |
125 | ip_vs_check_diff(oldport ^ htonl(0xFFFF), | 125 | ip_vs_check_diff(oldport ^ htons(0xFFFF), |
126 | newport, uhdr->check)); | 126 | newport, uhdr->check)); |
127 | if (!uhdr->check) | 127 | if (!uhdr->check) |
128 | uhdr->check = htonl(0xFFFF); | 128 | uhdr->check = -1; |
129 | } | 129 | } |
130 | 130 | ||
131 | static int | 131 | static int |
@@ -173,7 +173,7 @@ udp_snat_handler(struct sk_buff **pskb, | |||
173 | cp->protocol, | 173 | cp->protocol, |
174 | (*pskb)->csum); | 174 | (*pskb)->csum); |
175 | if (udph->check == 0) | 175 | if (udph->check == 0) |
176 | udph->check = htonl(0xFFFF); | 176 | udph->check = -1; |
177 | IP_VS_DBG(11, "O-pkt: %s O-csum=%d (+%zd)\n", | 177 | IP_VS_DBG(11, "O-pkt: %s O-csum=%d (+%zd)\n", |
178 | pp->name, udph->check, | 178 | pp->name, udph->check, |
179 | (char*)&(udph->check) - (char*)udph); | 179 | (char*)&(udph->check) - (char*)udph); |
@@ -228,7 +228,7 @@ udp_dnat_handler(struct sk_buff **pskb, | |||
228 | cp->protocol, | 228 | cp->protocol, |
229 | (*pskb)->csum); | 229 | (*pskb)->csum); |
230 | if (udph->check == 0) | 230 | if (udph->check == 0) |
231 | udph->check = 0xFFFF; | 231 | udph->check = -1; |
232 | (*pskb)->ip_summed = CHECKSUM_UNNECESSARY; | 232 | (*pskb)->ip_summed = CHECKSUM_UNNECESSARY; |
233 | } | 233 | } |
234 | return 1; | 234 | return 1; |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 66e9a729f6df..4322318ab332 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -2270,7 +2270,7 @@ void __init tcp_init(void) | |||
2270 | thash_entries, | 2270 | thash_entries, |
2271 | (num_physpages >= 128 * 1024) ? | 2271 | (num_physpages >= 128 * 1024) ? |
2272 | 13 : 15, | 2272 | 13 : 15, |
2273 | HASH_HIGHMEM, | 2273 | 0, |
2274 | &tcp_hashinfo.ehash_size, | 2274 | &tcp_hashinfo.ehash_size, |
2275 | NULL, | 2275 | NULL, |
2276 | 0); | 2276 | 0); |
@@ -2286,7 +2286,7 @@ void __init tcp_init(void) | |||
2286 | tcp_hashinfo.ehash_size, | 2286 | tcp_hashinfo.ehash_size, |
2287 | (num_physpages >= 128 * 1024) ? | 2287 | (num_physpages >= 128 * 1024) ? |
2288 | 13 : 15, | 2288 | 13 : 15, |
2289 | HASH_HIGHMEM, | 2289 | 0, |
2290 | &tcp_hashinfo.bhash_size, | 2290 | &tcp_hashinfo.bhash_size, |
2291 | NULL, | 2291 | NULL, |
2292 | 64 * 1024); | 2292 | 64 * 1024); |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 41a8a5f06602..73eb8c33e9f0 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -1742,6 +1742,7 @@ int __init ndisc_init(struct net_proto_family *ops) | |||
1742 | 1742 | ||
1743 | void ndisc_cleanup(void) | 1743 | void ndisc_cleanup(void) |
1744 | { | 1744 | { |
1745 | unregister_netdevice_notifier(&ndisc_netdev_notifier); | ||
1745 | #ifdef CONFIG_SYSCTL | 1746 | #ifdef CONFIG_SYSCTL |
1746 | neigh_sysctl_unregister(&nd_tbl.parms); | 1747 | neigh_sysctl_unregister(&nd_tbl.parms); |
1747 | #endif | 1748 | #endif |
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index b481a4d780c2..be699f85b2c7 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
@@ -854,3 +854,4 @@ int __init sit_init(void) | |||
854 | module_init(sit_init); | 854 | module_init(sit_init); |
855 | module_exit(sit_cleanup); | 855 | module_exit(sit_cleanup); |
856 | MODULE_LICENSE("GPL"); | 856 | MODULE_LICENSE("GPL"); |
857 | MODULE_ALIAS("sit0"); | ||
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c index bef3f61569f7..76c661566dfd 100644 --- a/net/ipx/af_ipx.c +++ b/net/ipx/af_ipx.c | |||
@@ -83,13 +83,13 @@ DEFINE_SPINLOCK(ipx_interfaces_lock); | |||
83 | struct ipx_interface *ipx_primary_net; | 83 | struct ipx_interface *ipx_primary_net; |
84 | struct ipx_interface *ipx_internal_net; | 84 | struct ipx_interface *ipx_internal_net; |
85 | 85 | ||
86 | extern int ipxrtr_add_route(__u32 network, struct ipx_interface *intrfc, | 86 | extern int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc, |
87 | unsigned char *node); | 87 | unsigned char *node); |
88 | extern void ipxrtr_del_routes(struct ipx_interface *intrfc); | 88 | extern void ipxrtr_del_routes(struct ipx_interface *intrfc); |
89 | extern int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, | 89 | extern int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, |
90 | struct iovec *iov, int len, int noblock); | 90 | struct iovec *iov, int len, int noblock); |
91 | extern int ipxrtr_route_skb(struct sk_buff *skb); | 91 | extern int ipxrtr_route_skb(struct sk_buff *skb); |
92 | extern struct ipx_route *ipxrtr_lookup(__u32 net); | 92 | extern struct ipx_route *ipxrtr_lookup(__be32 net); |
93 | extern int ipxrtr_ioctl(unsigned int cmd, void __user *arg); | 93 | extern int ipxrtr_ioctl(unsigned int cmd, void __user *arg); |
94 | 94 | ||
95 | #undef IPX_REFCNT_DEBUG | 95 | #undef IPX_REFCNT_DEBUG |
@@ -177,7 +177,7 @@ static void ipxitf_clear_primary_net(void) | |||
177 | } | 177 | } |
178 | 178 | ||
179 | static struct ipx_interface *__ipxitf_find_using_phys(struct net_device *dev, | 179 | static struct ipx_interface *__ipxitf_find_using_phys(struct net_device *dev, |
180 | unsigned short datalink) | 180 | __be16 datalink) |
181 | { | 181 | { |
182 | struct ipx_interface *i; | 182 | struct ipx_interface *i; |
183 | 183 | ||
@@ -190,7 +190,7 @@ out: | |||
190 | } | 190 | } |
191 | 191 | ||
192 | static struct ipx_interface *ipxitf_find_using_phys(struct net_device *dev, | 192 | static struct ipx_interface *ipxitf_find_using_phys(struct net_device *dev, |
193 | unsigned short datalink) | 193 | __be16 datalink) |
194 | { | 194 | { |
195 | struct ipx_interface *i; | 195 | struct ipx_interface *i; |
196 | 196 | ||
@@ -202,7 +202,7 @@ static struct ipx_interface *ipxitf_find_using_phys(struct net_device *dev, | |||
202 | return i; | 202 | return i; |
203 | } | 203 | } |
204 | 204 | ||
205 | struct ipx_interface *ipxitf_find_using_net(__u32 net) | 205 | struct ipx_interface *ipxitf_find_using_net(__be32 net) |
206 | { | 206 | { |
207 | struct ipx_interface *i; | 207 | struct ipx_interface *i; |
208 | 208 | ||
@@ -237,7 +237,7 @@ static void ipxitf_insert_socket(struct ipx_interface *intrfc, struct sock *sk) | |||
237 | 237 | ||
238 | /* caller must hold intrfc->if_sklist_lock */ | 238 | /* caller must hold intrfc->if_sklist_lock */ |
239 | static struct sock *__ipxitf_find_socket(struct ipx_interface *intrfc, | 239 | static struct sock *__ipxitf_find_socket(struct ipx_interface *intrfc, |
240 | unsigned short port) | 240 | __be16 port) |
241 | { | 241 | { |
242 | struct sock *s; | 242 | struct sock *s; |
243 | struct hlist_node *node; | 243 | struct hlist_node *node; |
@@ -252,7 +252,7 @@ found: | |||
252 | 252 | ||
253 | /* caller must hold a reference to intrfc */ | 253 | /* caller must hold a reference to intrfc */ |
254 | static struct sock *ipxitf_find_socket(struct ipx_interface *intrfc, | 254 | static struct sock *ipxitf_find_socket(struct ipx_interface *intrfc, |
255 | unsigned short port) | 255 | __be16 port) |
256 | { | 256 | { |
257 | struct sock *s; | 257 | struct sock *s; |
258 | 258 | ||
@@ -268,7 +268,7 @@ static struct sock *ipxitf_find_socket(struct ipx_interface *intrfc, | |||
268 | #ifdef CONFIG_IPX_INTERN | 268 | #ifdef CONFIG_IPX_INTERN |
269 | static struct sock *ipxitf_find_internal_socket(struct ipx_interface *intrfc, | 269 | static struct sock *ipxitf_find_internal_socket(struct ipx_interface *intrfc, |
270 | unsigned char *ipx_node, | 270 | unsigned char *ipx_node, |
271 | unsigned short port) | 271 | __be16 port) |
272 | { | 272 | { |
273 | struct sock *s; | 273 | struct sock *s; |
274 | struct hlist_node *node; | 274 | struct hlist_node *node; |
@@ -600,10 +600,10 @@ int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb, char *node) | |||
600 | 600 | ||
601 | /* see if we need to include the netnum in the route list */ | 601 | /* see if we need to include the netnum in the route list */ |
602 | if (IPX_SKB_CB(skb)->last_hop.index >= 0) { | 602 | if (IPX_SKB_CB(skb)->last_hop.index >= 0) { |
603 | u32 *last_hop = (u32 *)(((u8 *) skb->data) + | 603 | __be32 *last_hop = (__be32 *)(((u8 *) skb->data) + |
604 | sizeof(struct ipxhdr) + | 604 | sizeof(struct ipxhdr) + |
605 | IPX_SKB_CB(skb)->last_hop.index * | 605 | IPX_SKB_CB(skb)->last_hop.index * |
606 | sizeof(u32)); | 606 | sizeof(__be32)); |
607 | *last_hop = IPX_SKB_CB(skb)->last_hop.netnum; | 607 | *last_hop = IPX_SKB_CB(skb)->last_hop.netnum; |
608 | IPX_SKB_CB(skb)->last_hop.index = -1; | 608 | IPX_SKB_CB(skb)->last_hop.index = -1; |
609 | } | 609 | } |
@@ -772,7 +772,7 @@ static void ipxitf_discover_netnum(struct ipx_interface *intrfc, | |||
772 | } else { | 772 | } else { |
773 | printk(KERN_WARNING "IPX: Network number collision " | 773 | printk(KERN_WARNING "IPX: Network number collision " |
774 | "%lx\n %s %s and %s %s\n", | 774 | "%lx\n %s %s and %s %s\n", |
775 | (unsigned long) htonl(cb->ipx_source_net), | 775 | (unsigned long) ntohl(cb->ipx_source_net), |
776 | ipx_device_name(i), | 776 | ipx_device_name(i), |
777 | ipx_frame_name(i->if_dlink_type), | 777 | ipx_frame_name(i->if_dlink_type), |
778 | ipx_device_name(intrfc), | 778 | ipx_device_name(intrfc), |
@@ -812,7 +812,7 @@ static int ipxitf_pprop(struct ipx_interface *intrfc, struct sk_buff *skb) | |||
812 | int i, rc = -EINVAL; | 812 | int i, rc = -EINVAL; |
813 | struct ipx_interface *ifcs; | 813 | struct ipx_interface *ifcs; |
814 | char *c; | 814 | char *c; |
815 | u32 *l; | 815 | __be32 *l; |
816 | 816 | ||
817 | /* Illegal packet - too many hops or too short */ | 817 | /* Illegal packet - too many hops or too short */ |
818 | /* We decide to throw it away: no broadcasting, no local processing. | 818 | /* We decide to throw it away: no broadcasting, no local processing. |
@@ -833,7 +833,7 @@ static int ipxitf_pprop(struct ipx_interface *intrfc, struct sk_buff *skb) | |||
833 | goto out; | 833 | goto out; |
834 | 834 | ||
835 | c = ((u8 *) ipx) + sizeof(struct ipxhdr); | 835 | c = ((u8 *) ipx) + sizeof(struct ipxhdr); |
836 | l = (u32 *) c; | 836 | l = (__be32 *) c; |
837 | 837 | ||
838 | /* Don't broadcast packet if already seen this net */ | 838 | /* Don't broadcast packet if already seen this net */ |
839 | for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++) | 839 | for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++) |
@@ -855,7 +855,7 @@ static int ipxitf_pprop(struct ipx_interface *intrfc, struct sk_buff *skb) | |||
855 | /* That aren't in the list */ | 855 | /* That aren't in the list */ |
856 | if (ifcs == intrfc) | 856 | if (ifcs == intrfc) |
857 | continue; | 857 | continue; |
858 | l = (__u32 *) c; | 858 | l = (__be32 *) c; |
859 | /* don't consider the last entry in the packet list, | 859 | /* don't consider the last entry in the packet list, |
860 | * it is our netnum, and it is not there yet */ | 860 | * it is our netnum, and it is not there yet */ |
861 | for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++) | 861 | for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++) |
@@ -885,8 +885,8 @@ static void ipxitf_insert(struct ipx_interface *intrfc) | |||
885 | ipx_primary_net = intrfc; | 885 | ipx_primary_net = intrfc; |
886 | } | 886 | } |
887 | 887 | ||
888 | static struct ipx_interface *ipxitf_alloc(struct net_device *dev, __u32 netnum, | 888 | static struct ipx_interface *ipxitf_alloc(struct net_device *dev, __be32 netnum, |
889 | unsigned short dlink_type, | 889 | __be16 dlink_type, |
890 | struct datalink_proto *dlink, | 890 | struct datalink_proto *dlink, |
891 | unsigned char internal, | 891 | unsigned char internal, |
892 | int ipx_offset) | 892 | int ipx_offset) |
@@ -960,7 +960,7 @@ static __be16 ipx_map_frame_type(unsigned char type) | |||
960 | static int ipxitf_create(struct ipx_interface_definition *idef) | 960 | static int ipxitf_create(struct ipx_interface_definition *idef) |
961 | { | 961 | { |
962 | struct net_device *dev; | 962 | struct net_device *dev; |
963 | unsigned short dlink_type = 0; | 963 | __be16 dlink_type = 0; |
964 | struct datalink_proto *datalink = NULL; | 964 | struct datalink_proto *datalink = NULL; |
965 | struct ipx_interface *intrfc; | 965 | struct ipx_interface *intrfc; |
966 | int rc; | 966 | int rc; |
@@ -1073,7 +1073,7 @@ out: | |||
1073 | static int ipxitf_delete(struct ipx_interface_definition *idef) | 1073 | static int ipxitf_delete(struct ipx_interface_definition *idef) |
1074 | { | 1074 | { |
1075 | struct net_device *dev = NULL; | 1075 | struct net_device *dev = NULL; |
1076 | unsigned short dlink_type = 0; | 1076 | __be16 dlink_type = 0; |
1077 | struct ipx_interface *intrfc; | 1077 | struct ipx_interface *intrfc; |
1078 | int rc = 0; | 1078 | int rc = 0; |
1079 | 1079 | ||
@@ -1110,7 +1110,7 @@ out: | |||
1110 | } | 1110 | } |
1111 | 1111 | ||
1112 | static struct ipx_interface *ipxitf_auto_create(struct net_device *dev, | 1112 | static struct ipx_interface *ipxitf_auto_create(struct net_device *dev, |
1113 | unsigned short dlink_type) | 1113 | __be16 dlink_type) |
1114 | { | 1114 | { |
1115 | struct ipx_interface *intrfc = NULL; | 1115 | struct ipx_interface *intrfc = NULL; |
1116 | struct datalink_proto *datalink; | 1116 | struct datalink_proto *datalink; |
@@ -1122,7 +1122,7 @@ static struct ipx_interface *ipxitf_auto_create(struct net_device *dev, | |||
1122 | if (dev->addr_len > IPX_NODE_LEN) | 1122 | if (dev->addr_len > IPX_NODE_LEN) |
1123 | goto out; | 1123 | goto out; |
1124 | 1124 | ||
1125 | switch (htons(dlink_type)) { | 1125 | switch (ntohs(dlink_type)) { |
1126 | case ETH_P_IPX: datalink = pEII_datalink; break; | 1126 | case ETH_P_IPX: datalink = pEII_datalink; break; |
1127 | case ETH_P_802_2: datalink = p8022_datalink; break; | 1127 | case ETH_P_802_2: datalink = p8022_datalink; break; |
1128 | case ETH_P_SNAP: datalink = pSNAP_datalink; break; | 1128 | case ETH_P_SNAP: datalink = pSNAP_datalink; break; |
@@ -1234,27 +1234,27 @@ static int ipxitf_ioctl(unsigned int cmd, void __user *arg) | |||
1234 | /* Note: We assume ipx_tctrl==0 and htons(length)==ipx_pktsize */ | 1234 | /* Note: We assume ipx_tctrl==0 and htons(length)==ipx_pktsize */ |
1235 | /* This functions should *not* mess with packet contents */ | 1235 | /* This functions should *not* mess with packet contents */ |
1236 | 1236 | ||
1237 | __u16 ipx_cksum(struct ipxhdr *packet, int length) | 1237 | __be16 ipx_cksum(struct ipxhdr *packet, int length) |
1238 | { | 1238 | { |
1239 | /* | 1239 | /* |
1240 | * NOTE: sum is a net byte order quantity, which optimizes the | 1240 | * NOTE: sum is a net byte order quantity, which optimizes the |
1241 | * loop. This only works on big and little endian machines. (I | 1241 | * loop. This only works on big and little endian machines. (I |
1242 | * don't know of a machine that isn't.) | 1242 | * don't know of a machine that isn't.) |
1243 | */ | 1243 | */ |
1244 | /* start at ipx_dest - We skip the checksum field and start with | 1244 | /* handle the first 3 words separately; checksum should be skipped |
1245 | * ipx_type before the loop, not considering ipx_tctrl in the calc */ | 1245 | * and ipx_tctrl masked out */ |
1246 | __u16 *p = (__u16 *)&packet->ipx_dest; | 1246 | __u16 *p = (__u16 *)packet; |
1247 | __u32 i = (length >> 1) - 1; /* Number of complete words */ | 1247 | __u32 sum = p[1] + (p[2] & (__force u16)htons(0x00ff)); |
1248 | __u32 sum = packet->ipx_type << sizeof(packet->ipx_tctrl); | 1248 | __u32 i = (length >> 1) - 3; /* Number of remaining complete words */ |
1249 | 1249 | ||
1250 | /* Loop through all complete words except the checksum field, | 1250 | /* Loop through them */ |
1251 | * ipx_type (accounted above) and ipx_tctrl (not used in the cksum) */ | 1251 | p += 3; |
1252 | while (--i) | 1252 | while (i--) |
1253 | sum += *p++; | 1253 | sum += *p++; |
1254 | 1254 | ||
1255 | /* Add on the last part word if it exists */ | 1255 | /* Add on the last part word if it exists */ |
1256 | if (packet->ipx_pktsize & htons(1)) | 1256 | if (packet->ipx_pktsize & htons(1)) |
1257 | sum += ntohs(0xff00) & *p; | 1257 | sum += (__force u16)htons(0xff00) & *p; |
1258 | 1258 | ||
1259 | /* Do final fixup */ | 1259 | /* Do final fixup */ |
1260 | sum = (sum & 0xffff) + (sum >> 16); | 1260 | sum = (sum & 0xffff) + (sum >> 16); |
@@ -1263,10 +1263,17 @@ __u16 ipx_cksum(struct ipxhdr *packet, int length) | |||
1263 | if (sum >= 0x10000) | 1263 | if (sum >= 0x10000) |
1264 | sum++; | 1264 | sum++; |
1265 | 1265 | ||
1266 | return ~sum; | 1266 | /* |
1267 | * Leave 0 alone; we don't want 0xffff here. Note that we can't get | ||
1268 | * here with 0x10000, so this check is the same as ((__u16)sum) | ||
1269 | */ | ||
1270 | if (sum) | ||
1271 | sum = ~sum; | ||
1272 | |||
1273 | return (__force __be16)sum; | ||
1267 | } | 1274 | } |
1268 | 1275 | ||
1269 | const char *ipx_frame_name(unsigned short frame) | 1276 | const char *ipx_frame_name(__be16 frame) |
1270 | { | 1277 | { |
1271 | char* rc = "None"; | 1278 | char* rc = "None"; |
1272 | 1279 | ||
@@ -1401,7 +1408,7 @@ out: | |||
1401 | 1408 | ||
1402 | /* caller must hold a reference to intrfc */ | 1409 | /* caller must hold a reference to intrfc */ |
1403 | 1410 | ||
1404 | static unsigned short ipx_first_free_socketnum(struct ipx_interface *intrfc) | 1411 | static __be16 ipx_first_free_socketnum(struct ipx_interface *intrfc) |
1405 | { | 1412 | { |
1406 | unsigned short socketNum = intrfc->if_sknum; | 1413 | unsigned short socketNum = intrfc->if_sknum; |
1407 | 1414 | ||
@@ -1410,7 +1417,7 @@ static unsigned short ipx_first_free_socketnum(struct ipx_interface *intrfc) | |||
1410 | if (socketNum < IPX_MIN_EPHEMERAL_SOCKET) | 1417 | if (socketNum < IPX_MIN_EPHEMERAL_SOCKET) |
1411 | socketNum = IPX_MIN_EPHEMERAL_SOCKET; | 1418 | socketNum = IPX_MIN_EPHEMERAL_SOCKET; |
1412 | 1419 | ||
1413 | while (__ipxitf_find_socket(intrfc, ntohs(socketNum))) | 1420 | while (__ipxitf_find_socket(intrfc, htons(socketNum))) |
1414 | if (socketNum > IPX_MAX_EPHEMERAL_SOCKET) | 1421 | if (socketNum > IPX_MAX_EPHEMERAL_SOCKET) |
1415 | socketNum = IPX_MIN_EPHEMERAL_SOCKET; | 1422 | socketNum = IPX_MIN_EPHEMERAL_SOCKET; |
1416 | else | 1423 | else |
@@ -1419,7 +1426,7 @@ static unsigned short ipx_first_free_socketnum(struct ipx_interface *intrfc) | |||
1419 | spin_unlock_bh(&intrfc->if_sklist_lock); | 1426 | spin_unlock_bh(&intrfc->if_sklist_lock); |
1420 | intrfc->if_sknum = socketNum; | 1427 | intrfc->if_sknum = socketNum; |
1421 | 1428 | ||
1422 | return ntohs(socketNum); | 1429 | return htons(socketNum); |
1423 | } | 1430 | } |
1424 | 1431 | ||
1425 | static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | 1432 | static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) |
@@ -1473,7 +1480,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
1473 | ipxs->port)) { | 1480 | ipxs->port)) { |
1474 | SOCK_DEBUG(sk, | 1481 | SOCK_DEBUG(sk, |
1475 | "IPX: bind failed because port %X in use.\n", | 1482 | "IPX: bind failed because port %X in use.\n", |
1476 | ntohs((int)addr->sipx_port)); | 1483 | ntohs(addr->sipx_port)); |
1477 | goto out_put; | 1484 | goto out_put; |
1478 | } | 1485 | } |
1479 | } else { | 1486 | } else { |
@@ -1488,7 +1495,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
1488 | if (ipxitf_find_socket(intrfc, addr->sipx_port)) { | 1495 | if (ipxitf_find_socket(intrfc, addr->sipx_port)) { |
1489 | SOCK_DEBUG(sk, | 1496 | SOCK_DEBUG(sk, |
1490 | "IPX: bind failed because port %X in use.\n", | 1497 | "IPX: bind failed because port %X in use.\n", |
1491 | ntohs((int)addr->sipx_port)); | 1498 | ntohs(addr->sipx_port)); |
1492 | goto out_put; | 1499 | goto out_put; |
1493 | } | 1500 | } |
1494 | } | 1501 | } |
@@ -1665,7 +1672,7 @@ static int ipx_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty | |||
1665 | intrfc = ipxitf_find_using_phys(dev, pt->type); | 1672 | intrfc = ipxitf_find_using_phys(dev, pt->type); |
1666 | if (!intrfc) { | 1673 | if (!intrfc) { |
1667 | if (ipxcfg_auto_create_interfaces && | 1674 | if (ipxcfg_auto_create_interfaces && |
1668 | ntohl(IPX_SKB_CB(skb)->ipx_dest_net)) { | 1675 | IPX_SKB_CB(skb)->ipx_dest_net) { |
1669 | intrfc = ipxitf_auto_create(dev, pt->type); | 1676 | intrfc = ipxitf_auto_create(dev, pt->type); |
1670 | if (intrfc) | 1677 | if (intrfc) |
1671 | ipxitf_hold(intrfc); | 1678 | ipxitf_hold(intrfc); |
diff --git a/net/ipx/ipx_proc.c b/net/ipx/ipx_proc.c index 4c0c71206e54..b7463dfca63e 100644 --- a/net/ipx/ipx_proc.c +++ b/net/ipx/ipx_proc.c | |||
@@ -260,22 +260,22 @@ static int ipx_seq_socket_show(struct seq_file *seq, void *v) | |||
260 | ipxs = ipx_sk(s); | 260 | ipxs = ipx_sk(s); |
261 | #ifdef CONFIG_IPX_INTERN | 261 | #ifdef CONFIG_IPX_INTERN |
262 | seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ", | 262 | seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ", |
263 | (unsigned long)htonl(ipxs->intrfc->if_netnum), | 263 | (unsigned long)ntohl(ipxs->intrfc->if_netnum), |
264 | ipxs->node[0], ipxs->node[1], ipxs->node[2], ipxs->node[3], | 264 | ipxs->node[0], ipxs->node[1], ipxs->node[2], ipxs->node[3], |
265 | ipxs->node[4], ipxs->node[5], htons(ipxs->port)); | 265 | ipxs->node[4], ipxs->node[5], ntohs(ipxs->port)); |
266 | #else | 266 | #else |
267 | seq_printf(seq, "%08lX:%04X ", (unsigned long) htonl(ipxs->intrfc->if_netnum), | 267 | seq_printf(seq, "%08lX:%04X ", (unsigned long) ntohl(ipxs->intrfc->if_netnum), |
268 | htons(ipxs->port)); | 268 | ntohs(ipxs->port)); |
269 | #endif /* CONFIG_IPX_INTERN */ | 269 | #endif /* CONFIG_IPX_INTERN */ |
270 | if (s->sk_state != TCP_ESTABLISHED) | 270 | if (s->sk_state != TCP_ESTABLISHED) |
271 | seq_printf(seq, "%-28s", "Not_Connected"); | 271 | seq_printf(seq, "%-28s", "Not_Connected"); |
272 | else { | 272 | else { |
273 | seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ", | 273 | seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ", |
274 | (unsigned long)htonl(ipxs->dest_addr.net), | 274 | (unsigned long)ntohl(ipxs->dest_addr.net), |
275 | ipxs->dest_addr.node[0], ipxs->dest_addr.node[1], | 275 | ipxs->dest_addr.node[0], ipxs->dest_addr.node[1], |
276 | ipxs->dest_addr.node[2], ipxs->dest_addr.node[3], | 276 | ipxs->dest_addr.node[2], ipxs->dest_addr.node[3], |
277 | ipxs->dest_addr.node[4], ipxs->dest_addr.node[5], | 277 | ipxs->dest_addr.node[4], ipxs->dest_addr.node[5], |
278 | htons(ipxs->dest_addr.sock)); | 278 | ntohs(ipxs->dest_addr.sock)); |
279 | } | 279 | } |
280 | 280 | ||
281 | seq_printf(seq, "%08X %08X %02X %03d\n", | 281 | seq_printf(seq, "%08X %08X %02X %03d\n", |
diff --git a/net/ipx/ipx_route.c b/net/ipx/ipx_route.c index a30dbb1e08fb..68560ee0d797 100644 --- a/net/ipx/ipx_route.c +++ b/net/ipx/ipx_route.c | |||
@@ -19,17 +19,17 @@ DEFINE_RWLOCK(ipx_routes_lock); | |||
19 | 19 | ||
20 | extern struct ipx_interface *ipx_internal_net; | 20 | extern struct ipx_interface *ipx_internal_net; |
21 | 21 | ||
22 | extern __u16 ipx_cksum(struct ipxhdr *packet, int length); | 22 | extern __be16 ipx_cksum(struct ipxhdr *packet, int length); |
23 | extern struct ipx_interface *ipxitf_find_using_net(__u32 net); | 23 | extern struct ipx_interface *ipxitf_find_using_net(__be32 net); |
24 | extern int ipxitf_demux_socket(struct ipx_interface *intrfc, | 24 | extern int ipxitf_demux_socket(struct ipx_interface *intrfc, |
25 | struct sk_buff *skb, int copy); | 25 | struct sk_buff *skb, int copy); |
26 | extern int ipxitf_demux_socket(struct ipx_interface *intrfc, | 26 | extern int ipxitf_demux_socket(struct ipx_interface *intrfc, |
27 | struct sk_buff *skb, int copy); | 27 | struct sk_buff *skb, int copy); |
28 | extern int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb, | 28 | extern int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb, |
29 | char *node); | 29 | char *node); |
30 | extern struct ipx_interface *ipxitf_find_using_net(__u32 net); | 30 | extern struct ipx_interface *ipxitf_find_using_net(__be32 net); |
31 | 31 | ||
32 | struct ipx_route *ipxrtr_lookup(__u32 net) | 32 | struct ipx_route *ipxrtr_lookup(__be32 net) |
33 | { | 33 | { |
34 | struct ipx_route *r; | 34 | struct ipx_route *r; |
35 | 35 | ||
@@ -48,7 +48,7 @@ unlock: | |||
48 | /* | 48 | /* |
49 | * Caller must hold a reference to intrfc | 49 | * Caller must hold a reference to intrfc |
50 | */ | 50 | */ |
51 | int ipxrtr_add_route(__u32 network, struct ipx_interface *intrfc, | 51 | int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc, |
52 | unsigned char *node) | 52 | unsigned char *node) |
53 | { | 53 | { |
54 | struct ipx_route *rt; | 54 | struct ipx_route *rt; |
@@ -118,7 +118,7 @@ out: | |||
118 | return rc; | 118 | return rc; |
119 | } | 119 | } |
120 | 120 | ||
121 | static int ipxrtr_delete(__u32 net) | 121 | static int ipxrtr_delete(__be32 net) |
122 | { | 122 | { |
123 | struct ipx_route *r, *tmp; | 123 | struct ipx_route *r, *tmp; |
124 | int rc; | 124 | int rc; |
@@ -238,7 +238,7 @@ int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, | |||
238 | 238 | ||
239 | /* Apply checksum. Not allowed on 802.3 links. */ | 239 | /* Apply checksum. Not allowed on 802.3 links. */ |
240 | if (sk->sk_no_check || intrfc->if_dlink_type == htons(IPX_FRAME_8023)) | 240 | if (sk->sk_no_check || intrfc->if_dlink_type == htons(IPX_FRAME_8023)) |
241 | ipx->ipx_checksum = 0xFFFF; | 241 | ipx->ipx_checksum = htons(0xFFFF); |
242 | else | 242 | else |
243 | ipx->ipx_checksum = ipx_cksum(ipx, len + sizeof(struct ipxhdr)); | 243 | ipx->ipx_checksum = ipx_cksum(ipx, len + sizeof(struct ipxhdr)); |
244 | 244 | ||
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c index b59d3b2bde21..b2bf8f2e01da 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c | |||
@@ -427,7 +427,7 @@ __build_packet_message(struct nfulnl_instance *inst, | |||
427 | nfmsg->version = NFNETLINK_V0; | 427 | nfmsg->version = NFNETLINK_V0; |
428 | nfmsg->res_id = htons(inst->group_num); | 428 | nfmsg->res_id = htons(inst->group_num); |
429 | 429 | ||
430 | pmsg.hw_protocol = htons(skb->protocol); | 430 | pmsg.hw_protocol = skb->protocol; |
431 | pmsg.hook = hooknum; | 431 | pmsg.hook = hooknum; |
432 | 432 | ||
433 | NFA_PUT(inst->skb, NFULA_PACKET_HDR, sizeof(pmsg), &pmsg); | 433 | NFA_PUT(inst->skb, NFULA_PACKET_HDR, sizeof(pmsg), &pmsg); |
@@ -878,7 +878,7 @@ nfulnl_recv_config(struct sock *ctnl, struct sk_buff *skb, | |||
878 | params = NFA_DATA(nfula[NFULA_CFG_MODE-1]); | 878 | params = NFA_DATA(nfula[NFULA_CFG_MODE-1]); |
879 | 879 | ||
880 | nfulnl_set_mode(inst, params->copy_mode, | 880 | nfulnl_set_mode(inst, params->copy_mode, |
881 | ntohs(params->copy_range)); | 881 | ntohl(params->copy_range)); |
882 | } | 882 | } |
883 | 883 | ||
884 | if (nfula[NFULA_CFG_TIMEOUT-1]) { | 884 | if (nfula[NFULA_CFG_TIMEOUT-1]) { |
@@ -896,8 +896,8 @@ nfulnl_recv_config(struct sock *ctnl, struct sk_buff *skb, | |||
896 | } | 896 | } |
897 | 897 | ||
898 | if (nfula[NFULA_CFG_QTHRESH-1]) { | 898 | if (nfula[NFULA_CFG_QTHRESH-1]) { |
899 | u_int32_t qthresh = | 899 | __be32 qthresh = |
900 | *(u_int16_t *)NFA_DATA(nfula[NFULA_CFG_QTHRESH-1]); | 900 | *(__be32 *)NFA_DATA(nfula[NFULA_CFG_QTHRESH-1]); |
901 | 901 | ||
902 | nfulnl_set_qthresh(inst, ntohl(qthresh)); | 902 | nfulnl_set_qthresh(inst, ntohl(qthresh)); |
903 | } | 903 | } |
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index 8eb2473d83e1..6e4ada3c1844 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c | |||
@@ -414,7 +414,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue, | |||
414 | nfmsg->res_id = htons(queue->queue_num); | 414 | nfmsg->res_id = htons(queue->queue_num); |
415 | 415 | ||
416 | pmsg.packet_id = htonl(entry->id); | 416 | pmsg.packet_id = htonl(entry->id); |
417 | pmsg.hw_protocol = htons(entskb->protocol); | 417 | pmsg.hw_protocol = entskb->protocol; |
418 | pmsg.hook = entinf->hook; | 418 | pmsg.hook = entinf->hook; |
419 | 419 | ||
420 | NFA_PUT(skb, NFQA_PACKET_HDR, sizeof(pmsg), &pmsg); | 420 | NFA_PUT(skb, NFQA_PACKET_HDR, sizeof(pmsg), &pmsg); |
diff --git a/net/netlabel/Kconfig b/net/netlabel/Kconfig index 9f7121ae13e9..56958c85f2b4 100644 --- a/net/netlabel/Kconfig +++ b/net/netlabel/Kconfig | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | config NETLABEL | 5 | config NETLABEL |
6 | bool "NetLabel subsystem support" | 6 | bool "NetLabel subsystem support" |
7 | depends on NET && SECURITY | 7 | depends on SECURITY |
8 | default n | 8 | default n |
9 | ---help--- | 9 | ---help--- |
10 | NetLabel provides support for explicit network packet labeling | 10 | NetLabel provides support for explicit network packet labeling |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 9b9c555c713f..4b52fa78935a 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
@@ -1284,8 +1284,7 @@ static void htb_destroy_class(struct Qdisc *sch, struct htb_class *cl) | |||
1284 | struct htb_class, sibling)); | 1284 | struct htb_class, sibling)); |
1285 | 1285 | ||
1286 | /* note: this delete may happen twice (see htb_delete) */ | 1286 | /* note: this delete may happen twice (see htb_delete) */ |
1287 | if (!hlist_unhashed(&cl->hlist)) | 1287 | hlist_del_init(&cl->hlist); |
1288 | hlist_del(&cl->hlist); | ||
1289 | list_del(&cl->sibling); | 1288 | list_del(&cl->sibling); |
1290 | 1289 | ||
1291 | if (cl->prio_activity) | 1290 | if (cl->prio_activity) |
@@ -1333,8 +1332,7 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg) | |||
1333 | sch_tree_lock(sch); | 1332 | sch_tree_lock(sch); |
1334 | 1333 | ||
1335 | /* delete from hash and active; remainder in destroy_class */ | 1334 | /* delete from hash and active; remainder in destroy_class */ |
1336 | if (!hlist_unhashed(&cl->hlist)) | 1335 | hlist_del_init(&cl->hlist); |
1337 | hlist_del(&cl->hlist); | ||
1338 | 1336 | ||
1339 | if (cl->prio_activity) | 1337 | if (cl->prio_activity) |
1340 | htb_deactivate(q, cl); | 1338 | htb_deactivate(q, cl); |
diff --git a/net/sunrpc/svcauth.c b/net/sunrpc/svcauth.c index 0004c1f0ef04..ee9bb1522d5e 100644 --- a/net/sunrpc/svcauth.c +++ b/net/sunrpc/svcauth.c | |||
@@ -126,6 +126,7 @@ void auth_domain_put(struct auth_domain *dom) | |||
126 | if (atomic_dec_and_lock(&dom->ref.refcount, &auth_domain_lock)) { | 126 | if (atomic_dec_and_lock(&dom->ref.refcount, &auth_domain_lock)) { |
127 | hlist_del(&dom->hash); | 127 | hlist_del(&dom->hash); |
128 | dom->flavour->domain_release(dom); | 128 | dom->flavour->domain_release(dom); |
129 | spin_unlock(&auth_domain_lock); | ||
129 | } | 130 | } |
130 | } | 131 | } |
131 | 132 | ||
diff --git a/scripts/basic/docproc.c b/scripts/basic/docproc.c index 4ab6cbf09225..d6071cbf13d7 100644 --- a/scripts/basic/docproc.c +++ b/scripts/basic/docproc.c | |||
@@ -250,7 +250,7 @@ void intfunc(char * filename) { docfunctions(filename, NOFUNCTION); } | |||
250 | void extfunc(char * filename) { docfunctions(filename, FUNCTION); } | 250 | void extfunc(char * filename) { docfunctions(filename, FUNCTION); } |
251 | 251 | ||
252 | /* | 252 | /* |
253 | * Document spåecific function(s) in a file. | 253 | * Document specific function(s) in a file. |
254 | * Call kernel-doc with the following parameters: | 254 | * Call kernel-doc with the following parameters: |
255 | * kernel-doc -docbook -function function1 [-function function2] | 255 | * kernel-doc -docbook -function function1 [-function function2] |
256 | */ | 256 | */ |
diff --git a/scripts/kconfig/.gitignore b/scripts/kconfig/.gitignore index e8ad1f6b3da4..b49584c932cc 100644 --- a/scripts/kconfig/.gitignore +++ b/scripts/kconfig/.gitignore | |||
@@ -6,6 +6,8 @@ lex.*.c | |||
6 | *.tab.c | 6 | *.tab.c |
7 | *.tab.h | 7 | *.tab.h |
8 | zconf.hash.c | 8 | zconf.hash.c |
9 | *.moc | ||
10 | lkc_defs.h | ||
9 | 11 | ||
10 | # | 12 | # |
11 | # configuration programs | 13 | # configuration programs |