diff options
Diffstat (limited to 'Documentation')
33 files changed, 1656 insertions, 237 deletions
diff --git a/Documentation/Changes b/Documentation/Changes index 86b86399d61d..fe5ae0f55020 100644 --- a/Documentation/Changes +++ b/Documentation/Changes | |||
@@ -31,8 +31,6 @@ al espaņol de este documento en varios formatos. | |||
31 | Eine deutsche Version dieser Datei finden Sie unter | 31 | Eine deutsche Version dieser Datei finden Sie unter |
32 | <http://www.stefan-winter.de/Changes-2.4.0.txt>. | 32 | <http://www.stefan-winter.de/Changes-2.4.0.txt>. |
33 | 33 | ||
34 | Last updated: October 29th, 2002 | ||
35 | |||
36 | Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). | 34 | Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). |
37 | 35 | ||
38 | Current Minimal Requirements | 36 | Current Minimal Requirements |
@@ -48,7 +46,7 @@ necessary on all systems; obviously, if you don't have any ISDN | |||
48 | hardware, for example, you probably needn't concern yourself with | 46 | hardware, for example, you probably needn't concern yourself with |
49 | isdn4k-utils. | 47 | isdn4k-utils. |
50 | 48 | ||
51 | o Gnu C 2.95.3 # gcc --version | 49 | o Gnu C 3.2 # gcc --version |
52 | o Gnu make 3.79.1 # make --version | 50 | o Gnu make 3.79.1 # make --version |
53 | o binutils 2.12 # ld -v | 51 | o binutils 2.12 # ld -v |
54 | o util-linux 2.10o # fdformat --version | 52 | o util-linux 2.10o # fdformat --version |
@@ -74,26 +72,7 @@ GCC | |||
74 | --- | 72 | --- |
75 | 73 | ||
76 | The gcc version requirements may vary depending on the type of CPU in your | 74 | The gcc version requirements may vary depending on the type of CPU in your |
77 | computer. The next paragraph applies to users of x86 CPUs, but not | 75 | computer. |
78 | necessarily to users of other CPUs. Users of other CPUs should obtain | ||
79 | information about their gcc version requirements from another source. | ||
80 | |||
81 | The recommended compiler for the kernel is gcc 2.95.x (x >= 3), and it | ||
82 | should be used when you need absolute stability. You may use gcc 3.0.x | ||
83 | instead if you wish, although it may cause problems. Later versions of gcc | ||
84 | have not received much testing for Linux kernel compilation, and there are | ||
85 | almost certainly bugs (mainly, but not exclusively, in the kernel) that | ||
86 | will need to be fixed in order to use these compilers. In any case, using | ||
87 | pgcc instead of plain gcc is just asking for trouble. | ||
88 | |||
89 | The Red Hat gcc 2.96 compiler subtree can also be used to build this tree. | ||
90 | You should ensure you use gcc-2.96-74 or later. gcc-2.96-54 will not build | ||
91 | the kernel correctly. | ||
92 | |||
93 | In addition, please pay attention to compiler optimization. Anything | ||
94 | greater than -O2 may not be wise. Similarly, if you choose to use gcc-2.95.x | ||
95 | or derivatives, be sure not to use -fstrict-aliasing (which, depending on | ||
96 | your version of gcc 2.95.x, may necessitate using -fno-strict-aliasing). | ||
97 | 76 | ||
98 | Make | 77 | Make |
99 | ---- | 78 | ---- |
@@ -322,9 +301,9 @@ Getting updated software | |||
322 | Kernel compilation | 301 | Kernel compilation |
323 | ****************** | 302 | ****************** |
324 | 303 | ||
325 | gcc 2.95.3 | 304 | gcc |
326 | ---------- | 305 | --- |
327 | o <ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3.tar.gz> | 306 | o <ftp://ftp.gnu.org/gnu/gcc/> |
328 | 307 | ||
329 | Make | 308 | Make |
330 | ---- | 309 | ---- |
diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle index eb7db3c19227..ce780ef648f1 100644 --- a/Documentation/CodingStyle +++ b/Documentation/CodingStyle | |||
@@ -344,7 +344,7 @@ Remember: if another thread can find your data structure, and you don't | |||
344 | have a reference count on it, you almost certainly have a bug. | 344 | have a reference count on it, you almost certainly have a bug. |
345 | 345 | ||
346 | 346 | ||
347 | Chapter 11: Macros, Enums, Inline functions and RTL | 347 | Chapter 11: Macros, Enums and RTL |
348 | 348 | ||
349 | Names of macros defining constants and labels in enums are capitalized. | 349 | Names of macros defining constants and labels in enums are capitalized. |
350 | 350 | ||
@@ -429,7 +429,35 @@ from void pointer to any other pointer type is guaranteed by the C programming | |||
429 | language. | 429 | language. |
430 | 430 | ||
431 | 431 | ||
432 | Chapter 14: References | 432 | Chapter 14: The inline disease |
433 | |||
434 | There appears to be a common misperception that gcc has a magic "make me | ||
435 | faster" speedup option called "inline". While the use of inlines can be | ||
436 | appropriate (for example as a means of replacing macros, see Chapter 11), it | ||
437 | very often is not. Abundant use of the inline keyword leads to a much bigger | ||
438 | kernel, which in turn slows the system as a whole down, due to a bigger | ||
439 | icache footprint for the CPU and simply because there is less memory | ||
440 | available for the pagecache. Just think about it; a pagecache miss causes a | ||
441 | disk seek, which easily takes 5 miliseconds. There are a LOT of cpu cycles | ||
442 | that can go into these 5 miliseconds. | ||
443 | |||
444 | A reasonable rule of thumb is to not put inline at functions that have more | ||
445 | than 3 lines of code in them. An exception to this rule are the cases where | ||
446 | a parameter is known to be a compiletime constant, and as a result of this | ||
447 | constantness you *know* the compiler will be able to optimize most of your | ||
448 | function away at compile time. For a good example of this later case, see | ||
449 | the kmalloc() inline function. | ||
450 | |||
451 | Often people argue that adding inline to functions that are static and used | ||
452 | only once is always a win since there is no space tradeoff. While this is | ||
453 | technically correct, gcc is capable of inlining these automatically without | ||
454 | help, and the maintenance issue of removing the inline when a second user | ||
455 | appears outweighs the potential value of the hint that tells gcc to do | ||
456 | something it would have done anyway. | ||
457 | |||
458 | |||
459 | |||
460 | Chapter 15: References | ||
433 | 461 | ||
434 | The C Programming Language, Second Edition | 462 | The C Programming Language, Second Edition |
435 | by Brian W. Kernighan and Dennis M. Ritchie. | 463 | by Brian W. Kernighan and Dennis M. Ritchie. |
@@ -444,10 +472,13 @@ ISBN 0-201-61586-X. | |||
444 | URL: http://cm.bell-labs.com/cm/cs/tpop/ | 472 | URL: http://cm.bell-labs.com/cm/cs/tpop/ |
445 | 473 | ||
446 | GNU manuals - where in compliance with K&R and this text - for cpp, gcc, | 474 | GNU manuals - where in compliance with K&R and this text - for cpp, gcc, |
447 | gcc internals and indent, all available from http://www.gnu.org | 475 | gcc internals and indent, all available from http://www.gnu.org/manual/ |
448 | 476 | ||
449 | WG14 is the international standardization working group for the programming | 477 | WG14 is the international standardization working group for the programming |
450 | language C, URL: http://std.dkuug.dk/JTC1/SC22/WG14/ | 478 | language C, URL: http://www.open-std.org/JTC1/SC22/WG14/ |
479 | |||
480 | Kernel CodingStyle, by greg@kroah.com at OLS 2002: | ||
481 | http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/ | ||
451 | 482 | ||
452 | -- | 483 | -- |
453 | Last updated on 16 February 2004 by a community effort on LKML. | 484 | Last updated on 30 December 2005 by a community effort on LKML. |
diff --git a/Documentation/RCU/rcuref.txt b/Documentation/RCU/rcuref.txt index a23fee66064d..3f60db41b2f0 100644 --- a/Documentation/RCU/rcuref.txt +++ b/Documentation/RCU/rcuref.txt | |||
@@ -1,74 +1,67 @@ | |||
1 | Refcounter framework for elements of lists/arrays protected by | 1 | Refcounter design for elements of lists/arrays protected by RCU. |
2 | RCU. | ||
3 | 2 | ||
4 | Refcounting on elements of lists which are protected by traditional | 3 | Refcounting on elements of lists which are protected by traditional |
5 | reader/writer spinlocks or semaphores are straight forward as in: | 4 | reader/writer spinlocks or semaphores are straight forward as in: |
6 | 5 | ||
7 | 1. 2. | 6 | 1. 2. |
8 | add() search_and_reference() | 7 | add() search_and_reference() |
9 | { { | 8 | { { |
10 | alloc_object read_lock(&list_lock); | 9 | alloc_object read_lock(&list_lock); |
11 | ... search_for_element | 10 | ... search_for_element |
12 | atomic_set(&el->rc, 1); atomic_inc(&el->rc); | 11 | atomic_set(&el->rc, 1); atomic_inc(&el->rc); |
13 | write_lock(&list_lock); ... | 12 | write_lock(&list_lock); ... |
14 | add_element read_unlock(&list_lock); | 13 | add_element read_unlock(&list_lock); |
15 | ... ... | 14 | ... ... |
16 | write_unlock(&list_lock); } | 15 | write_unlock(&list_lock); } |
17 | } | 16 | } |
18 | 17 | ||
19 | 3. 4. | 18 | 3. 4. |
20 | release_referenced() delete() | 19 | release_referenced() delete() |
21 | { { | 20 | { { |
22 | ... write_lock(&list_lock); | 21 | ... write_lock(&list_lock); |
23 | atomic_dec(&el->rc, relfunc) ... | 22 | atomic_dec(&el->rc, relfunc) ... |
24 | ... delete_element | 23 | ... delete_element |
25 | } write_unlock(&list_lock); | 24 | } write_unlock(&list_lock); |
26 | ... | 25 | ... |
27 | if (atomic_dec_and_test(&el->rc)) | 26 | if (atomic_dec_and_test(&el->rc)) |
28 | kfree(el); | 27 | kfree(el); |
29 | ... | 28 | ... |
30 | } | 29 | } |
31 | 30 | ||
32 | If this list/array is made lock free using rcu as in changing the | 31 | If this list/array is made lock free using rcu as in changing the |
33 | write_lock in add() and delete() to spin_lock and changing read_lock | 32 | write_lock in add() and delete() to spin_lock and changing read_lock |
34 | in search_and_reference to rcu_read_lock(), the rcuref_get in | 33 | in search_and_reference to rcu_read_lock(), the atomic_get in |
35 | search_and_reference could potentially hold reference to an element which | 34 | search_and_reference could potentially hold reference to an element which |
36 | has already been deleted from the list/array. rcuref_lf_get_rcu takes | 35 | has already been deleted from the list/array. atomic_inc_not_zero takes |
37 | care of this scenario. search_and_reference should look as; | 36 | care of this scenario. search_and_reference should look as; |
38 | 37 | ||
39 | 1. 2. | 38 | 1. 2. |
40 | add() search_and_reference() | 39 | add() search_and_reference() |
41 | { { | 40 | { { |
42 | alloc_object rcu_read_lock(); | 41 | alloc_object rcu_read_lock(); |
43 | ... search_for_element | 42 | ... search_for_element |
44 | atomic_set(&el->rc, 1); if (rcuref_inc_lf(&el->rc)) { | 43 | atomic_set(&el->rc, 1); if (atomic_inc_not_zero(&el->rc)) { |
45 | write_lock(&list_lock); rcu_read_unlock(); | 44 | write_lock(&list_lock); rcu_read_unlock(); |
46 | return FAIL; | 45 | return FAIL; |
47 | add_element } | 46 | add_element } |
48 | ... ... | 47 | ... ... |
49 | write_unlock(&list_lock); rcu_read_unlock(); | 48 | write_unlock(&list_lock); rcu_read_unlock(); |
50 | } } | 49 | } } |
51 | 3. 4. | 50 | 3. 4. |
52 | release_referenced() delete() | 51 | release_referenced() delete() |
53 | { { | 52 | { { |
54 | ... write_lock(&list_lock); | 53 | ... write_lock(&list_lock); |
55 | rcuref_dec(&el->rc, relfunc) ... | 54 | atomic_dec(&el->rc, relfunc) ... |
56 | ... delete_element | 55 | ... delete_element |
57 | } write_unlock(&list_lock); | 56 | } write_unlock(&list_lock); |
58 | ... | 57 | ... |
59 | if (rcuref_dec_and_test(&el->rc)) | 58 | if (atomic_dec_and_test(&el->rc)) |
60 | call_rcu(&el->head, el_free); | 59 | call_rcu(&el->head, el_free); |
61 | ... | 60 | ... |
62 | } | 61 | } |
63 | 62 | ||
64 | Sometimes, reference to the element need to be obtained in the | 63 | Sometimes, reference to the element need to be obtained in the |
65 | update (write) stream. In such cases, rcuref_inc_lf might be an overkill | 64 | update (write) stream. In such cases, atomic_inc_not_zero might be an |
66 | since the spinlock serialising list updates are held. rcuref_inc | 65 | overkill since the spinlock serialising list updates are held. atomic_inc |
67 | is to be used in such cases. | 66 | is to be used in such cases. |
68 | For arches which do not have cmpxchg rcuref_inc_lf | 67 | |
69 | api uses a hashed spinlock implementation and the same hashed spinlock | ||
70 | is acquired in all rcuref_xxx primitives to preserve atomicity. | ||
71 | Note: Use rcuref_inc api only if you need to use rcuref_inc_lf on the | ||
72 | refcounter atleast at one place. Mixing rcuref_inc and atomic_xxx api | ||
73 | might lead to races. rcuref_inc_lf() must be used in lockfree | ||
74 | RCU critical sections only. | ||
diff --git a/Documentation/SubmittingDrivers b/Documentation/SubmittingDrivers index c3cca924e94b..dd311cff1cc3 100644 --- a/Documentation/SubmittingDrivers +++ b/Documentation/SubmittingDrivers | |||
@@ -27,18 +27,17 @@ Who To Submit Drivers To | |||
27 | ------------------------ | 27 | ------------------------ |
28 | 28 | ||
29 | Linux 2.0: | 29 | Linux 2.0: |
30 | No new drivers are accepted for this kernel tree | 30 | No new drivers are accepted for this kernel tree. |
31 | 31 | ||
32 | Linux 2.2: | 32 | Linux 2.2: |
33 | No new drivers are accepted for this kernel tree. | ||
34 | |||
35 | Linux 2.4: | ||
33 | If the code area has a general maintainer then please submit it to | 36 | If the code area has a general maintainer then please submit it to |
34 | the maintainer listed in MAINTAINERS in the kernel file. If the | 37 | the maintainer listed in MAINTAINERS in the kernel file. If the |
35 | maintainer does not respond or you cannot find the appropriate | 38 | maintainer does not respond or you cannot find the appropriate |
36 | maintainer then please contact the 2.2 kernel maintainer: | 39 | maintainer then please contact Marcelo Tosatti |
37 | Marc-Christian Petersen <m.c.p@wolk-project.de>. | 40 | <marcelo.tosatti@cyclades.com>. |
38 | |||
39 | Linux 2.4: | ||
40 | The same rules apply as 2.2. The final contact point for Linux 2.4 | ||
41 | submissions is Marcelo Tosatti <marcelo.tosatti@cyclades.com>. | ||
42 | 41 | ||
43 | Linux 2.6: | 42 | Linux 2.6: |
44 | The same rules apply as 2.4 except that you should follow linux-kernel | 43 | The same rules apply as 2.4 except that you should follow linux-kernel |
@@ -53,6 +52,7 @@ Licensing: The code must be released to us under the | |||
53 | of exclusive GPL licensing, and if you wish the driver | 52 | of exclusive GPL licensing, and if you wish the driver |
54 | to be useful to other communities such as BSD you may well | 53 | to be useful to other communities such as BSD you may well |
55 | wish to release under multiple licenses. | 54 | wish to release under multiple licenses. |
55 | See accepted licenses at include/linux/module.h | ||
56 | 56 | ||
57 | Copyright: The copyright owner must agree to use of GPL. | 57 | Copyright: The copyright owner must agree to use of GPL. |
58 | It's best if the submitter and copyright owner | 58 | It's best if the submitter and copyright owner |
@@ -143,5 +143,13 @@ KernelNewbies: | |||
143 | http://kernelnewbies.org/ | 143 | http://kernelnewbies.org/ |
144 | 144 | ||
145 | Linux USB project: | 145 | Linux USB project: |
146 | http://sourceforge.net/projects/linux-usb/ | 146 | http://linux-usb.sourceforge.net/ |
147 | |||
148 | How to NOT write kernel driver by arjanv@redhat.com | ||
149 | http://people.redhat.com/arjanv/olspaper.pdf | ||
150 | |||
151 | Kernel Janitor: | ||
152 | http://janitor.kernelnewbies.org/ | ||
147 | 153 | ||
154 | -- | ||
155 | Last updated on 17 Nov 2005. | ||
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index 1d47e6c09dc6..6198e5ebcf65 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches | |||
@@ -78,7 +78,9 @@ Randy Dunlap's patch scripts: | |||
78 | http://www.xenotime.net/linux/scripts/patching-scripts-002.tar.gz | 78 | http://www.xenotime.net/linux/scripts/patching-scripts-002.tar.gz |
79 | 79 | ||
80 | Andrew Morton's patch scripts: | 80 | Andrew Morton's patch scripts: |
81 | http://www.zip.com.au/~akpm/linux/patches/patch-scripts-0.20 | 81 | http://www.zip.com.au/~akpm/linux/patches/ |
82 | Instead of these scripts, quilt is the recommended patch management | ||
83 | tool (see above). | ||
82 | 84 | ||
83 | 85 | ||
84 | 86 | ||
@@ -97,7 +99,7 @@ need to split up your patch. See #3, next. | |||
97 | 99 | ||
98 | 3) Separate your changes. | 100 | 3) Separate your changes. |
99 | 101 | ||
100 | Separate each logical change into its own patch. | 102 | Separate _logical changes_ into a single patch file. |
101 | 103 | ||
102 | For example, if your changes include both bug fixes and performance | 104 | For example, if your changes include both bug fixes and performance |
103 | enhancements for a single driver, separate those changes into two | 105 | enhancements for a single driver, separate those changes into two |
@@ -112,6 +114,10 @@ If one patch depends on another patch in order for a change to be | |||
112 | complete, that is OK. Simply note "this patch depends on patch X" | 114 | complete, that is OK. Simply note "this patch depends on patch X" |
113 | in your patch description. | 115 | in your patch description. |
114 | 116 | ||
117 | If you cannot condense your patch set into a smaller set of patches, | ||
118 | then only post say 15 or so at a time and wait for review and integration. | ||
119 | |||
120 | |||
115 | 121 | ||
116 | 4) Select e-mail destination. | 122 | 4) Select e-mail destination. |
117 | 123 | ||
@@ -124,6 +130,10 @@ your patch to the primary Linux kernel developer's mailing list, | |||
124 | linux-kernel@vger.kernel.org. Most kernel developers monitor this | 130 | linux-kernel@vger.kernel.org. Most kernel developers monitor this |
125 | e-mail list, and can comment on your changes. | 131 | e-mail list, and can comment on your changes. |
126 | 132 | ||
133 | |||
134 | Do not send more than 15 patches at once to the vger mailing lists!!! | ||
135 | |||
136 | |||
127 | Linus Torvalds is the final arbiter of all changes accepted into the | 137 | Linus Torvalds is the final arbiter of all changes accepted into the |
128 | Linux kernel. His e-mail address is <torvalds@osdl.org>. He gets | 138 | Linux kernel. His e-mail address is <torvalds@osdl.org>. He gets |
129 | a lot of e-mail, so typically you should do your best to -avoid- sending | 139 | a lot of e-mail, so typically you should do your best to -avoid- sending |
@@ -149,6 +159,9 @@ USB, framebuffer devices, the VFS, the SCSI subsystem, etc. See the | |||
149 | MAINTAINERS file for a mailing list that relates specifically to | 159 | MAINTAINERS file for a mailing list that relates specifically to |
150 | your change. | 160 | your change. |
151 | 161 | ||
162 | Majordomo lists of VGER.KERNEL.ORG at: | ||
163 | <http://vger.kernel.org/vger-lists.html> | ||
164 | |||
152 | If changes affect userland-kernel interfaces, please send | 165 | If changes affect userland-kernel interfaces, please send |
153 | the MAN-PAGES maintainer (as listed in the MAINTAINERS file) | 166 | the MAN-PAGES maintainer (as listed in the MAINTAINERS file) |
154 | a man-pages patch, or at least a notification of the change, | 167 | a man-pages patch, or at least a notification of the change, |
@@ -373,27 +386,14 @@ a diffstat, to show what files have changed, and the number of inserted | |||
373 | and deleted lines per file. A diffstat is especially useful on bigger | 386 | and deleted lines per file. A diffstat is especially useful on bigger |
374 | patches. Other comments relevant only to the moment or the maintainer, | 387 | patches. Other comments relevant only to the moment or the maintainer, |
375 | not suitable for the permanent changelog, should also go here. | 388 | not suitable for the permanent changelog, should also go here. |
389 | Use diffstat options "-p 1 -w 70" so that filenames are listed from the | ||
390 | top of the kernel source tree and don't use too much horizontal space | ||
391 | (easily fit in 80 columns, maybe with some indentation). | ||
376 | 392 | ||
377 | See more details on the proper patch format in the following | 393 | See more details on the proper patch format in the following |
378 | references. | 394 | references. |
379 | 395 | ||
380 | 396 | ||
381 | 13) More references for submitting patches | ||
382 | |||
383 | Andrew Morton, "The perfect patch" (tpp). | ||
384 | <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt> | ||
385 | |||
386 | Jeff Garzik, "Linux kernel patch submission format." | ||
387 | <http://linux.yyz.us/patch-format.html> | ||
388 | |||
389 | Greg KH, "How to piss off a kernel subsystem maintainer" | ||
390 | <http://www.kroah.com/log/2005/03/31/> | ||
391 | |||
392 | Kernel Documentation/CodingStyle | ||
393 | <http://sosdg.org/~coywolf/lxr/source/Documentation/CodingStyle> | ||
394 | |||
395 | Linus Torvald's mail on the canonical patch format: | ||
396 | <http://lkml.org/lkml/2005/4/7/183> | ||
397 | 397 | ||
398 | 398 | ||
399 | ----------------------------------- | 399 | ----------------------------------- |
@@ -466,3 +466,30 @@ and 'extern __inline__'. | |||
466 | Don't try to anticipate nebulous future cases which may or may not | 466 | Don't try to anticipate nebulous future cases which may or may not |
467 | be useful: "Make it as simple as you can, and no simpler." | 467 | be useful: "Make it as simple as you can, and no simpler." |
468 | 468 | ||
469 | |||
470 | |||
471 | ---------------------- | ||
472 | SECTION 3 - REFERENCES | ||
473 | ---------------------- | ||
474 | |||
475 | Andrew Morton, "The perfect patch" (tpp). | ||
476 | <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt> | ||
477 | |||
478 | Jeff Garzik, "Linux kernel patch submission format." | ||
479 | <http://linux.yyz.us/patch-format.html> | ||
480 | |||
481 | Greg Kroah, "How to piss off a kernel subsystem maintainer". | ||
482 | <http://www.kroah.com/log/2005/03/31/> | ||
483 | <http://www.kroah.com/log/2005/07/08/> | ||
484 | <http://www.kroah.com/log/2005/10/19/> | ||
485 | |||
486 | NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!. | ||
487 | <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2> | ||
488 | |||
489 | Kernel Documentation/CodingStyle | ||
490 | <http://sosdg.org/~coywolf/lxr/source/Documentation/CodingStyle> | ||
491 | |||
492 | Linus Torvald's mail on the canonical patch format: | ||
493 | <http://lkml.org/lkml/2005/4/7/183> | ||
494 | -- | ||
495 | Last updated on 17 Nov 2005. | ||
diff --git a/Documentation/applying-patches.txt b/Documentation/applying-patches.txt index 681e426e2482..05a08c2c1889 100644 --- a/Documentation/applying-patches.txt +++ b/Documentation/applying-patches.txt | |||
@@ -2,7 +2,8 @@ | |||
2 | Applying Patches To The Linux Kernel | 2 | Applying Patches To The Linux Kernel |
3 | ------------------------------------ | 3 | ------------------------------------ |
4 | 4 | ||
5 | (Written by Jesper Juhl, August 2005) | 5 | Original by: Jesper Juhl, August 2005 |
6 | Last update: 2005-12-02 | ||
6 | 7 | ||
7 | 8 | ||
8 | 9 | ||
@@ -118,7 +119,7 @@ wrong. | |||
118 | 119 | ||
119 | When patch encounters a change that it can't fix up with fuzz it rejects it | 120 | When patch encounters a change that it can't fix up with fuzz it rejects it |
120 | outright and leaves a file with a .rej extension (a reject file). You can | 121 | outright and leaves a file with a .rej extension (a reject file). You can |
121 | read this file to see exactely what change couldn't be applied, so you can | 122 | read this file to see exactly what change couldn't be applied, so you can |
122 | go fix it up by hand if you wish. | 123 | go fix it up by hand if you wish. |
123 | 124 | ||
124 | If you don't have any third party patches applied to your kernel source, but | 125 | If you don't have any third party patches applied to your kernel source, but |
@@ -127,7 +128,7 @@ and have made no modifications yourself to the source files, then you should | |||
127 | never see a fuzz or reject message from patch. If you do see such messages | 128 | never see a fuzz or reject message from patch. If you do see such messages |
128 | anyway, then there's a high risk that either your local source tree or the | 129 | anyway, then there's a high risk that either your local source tree or the |
129 | patch file is corrupted in some way. In that case you should probably try | 130 | patch file is corrupted in some way. In that case you should probably try |
130 | redownloading the patch and if things are still not OK then you'd be advised | 131 | re-downloading the patch and if things are still not OK then you'd be advised |
131 | to start with a fresh tree downloaded in full from kernel.org. | 132 | to start with a fresh tree downloaded in full from kernel.org. |
132 | 133 | ||
133 | Let's look a bit more at some of the messages patch can produce. | 134 | Let's look a bit more at some of the messages patch can produce. |
@@ -180,9 +181,11 @@ wish to apply. | |||
180 | 181 | ||
181 | Are there any alternatives to `patch'? | 182 | Are there any alternatives to `patch'? |
182 | --- | 183 | --- |
183 | Yes there are alternatives. You can use the `interdiff' program | 184 | Yes there are alternatives. |
184 | (http://cyberelk.net/tim/patchutils/) to generate a patch representing the | 185 | |
185 | differences between two patches and then apply the result. | 186 | You can use the `interdiff' program (http://cyberelk.net/tim/patchutils/) to |
187 | generate a patch representing the differences between two patches and then | ||
188 | apply the result. | ||
186 | This will let you move from something like 2.6.12.2 to 2.6.12.3 in a single | 189 | This will let you move from something like 2.6.12.2 to 2.6.12.3 in a single |
187 | step. The -z flag to interdiff will even let you feed it patches in gzip or | 190 | step. The -z flag to interdiff will even let you feed it patches in gzip or |
188 | bzip2 compressed form directly without the use of zcat or bzcat or manual | 191 | bzip2 compressed form directly without the use of zcat or bzcat or manual |
@@ -197,7 +200,7 @@ do the additional steps since interdiff can get things wrong in some cases. | |||
197 | Another alternative is `ketchup', which is a python script for automatic | 200 | Another alternative is `ketchup', which is a python script for automatic |
198 | downloading and applying of patches (http://www.selenic.com/ketchup/). | 201 | downloading and applying of patches (http://www.selenic.com/ketchup/). |
199 | 202 | ||
200 | Other nice tools are diffstat which shows a summary of changes made by a | 203 | Other nice tools are diffstat which shows a summary of changes made by a |
201 | patch, lsdiff which displays a short listing of affected files in a patch | 204 | patch, lsdiff which displays a short listing of affected files in a patch |
202 | file, along with (optionally) the line numbers of the start of each patch | 205 | file, along with (optionally) the line numbers of the start of each patch |
203 | and grepdiff which displays a list of the files modified by a patch where | 206 | and grepdiff which displays a list of the files modified by a patch where |
@@ -258,7 +261,7 @@ $ patch -p1 -R < ../patch-2.6.11.1 # revert the 2.6.11.1 patch | |||
258 | # source dir is now 2.6.11 | 261 | # source dir is now 2.6.11 |
259 | $ patch -p1 < ../patch-2.6.12 # apply new 2.6.12 patch | 262 | $ patch -p1 < ../patch-2.6.12 # apply new 2.6.12 patch |
260 | $ cd .. | 263 | $ cd .. |
261 | $ mv linux-2.6.11.1 inux-2.6.12 # rename source dir | 264 | $ mv linux-2.6.11.1 linux-2.6.12 # rename source dir |
262 | 265 | ||
263 | 266 | ||
264 | The 2.6.x.y kernels | 267 | The 2.6.x.y kernels |
@@ -433,7 +436,11 @@ $ cd .. | |||
433 | $ mv linux-2.6.12-mm1 linux-2.6.13-rc3-mm3 # rename the source dir | 436 | $ mv linux-2.6.12-mm1 linux-2.6.13-rc3-mm3 # rename the source dir |
434 | 437 | ||
435 | 438 | ||
436 | This concludes this list of explanations of the various kernel trees and I | 439 | This concludes this list of explanations of the various kernel trees. |
437 | hope you are now crystal clear on how to apply the various patches and help | 440 | I hope you are now clear on how to apply the various patches and help testing |
438 | testing the kernel. | 441 | the kernel. |
442 | |||
443 | Thank you's to Randy Dunlap, Rolf Eike Beer, Linus Torvalds, Bodo Eggert, | ||
444 | Johannes Stezenbach, Grant Coady, Pavel Machek and others that I may have | ||
445 | forgotten for their reviews and contributions to this document. | ||
439 | 446 | ||
diff --git a/Documentation/block/stat.txt b/Documentation/block/stat.txt new file mode 100644 index 000000000000..0dbc946de2ea --- /dev/null +++ b/Documentation/block/stat.txt | |||
@@ -0,0 +1,82 @@ | |||
1 | Block layer statistics in /sys/block/<dev>/stat | ||
2 | =============================================== | ||
3 | |||
4 | This file documents the contents of the /sys/block/<dev>/stat file. | ||
5 | |||
6 | The stat file provides several statistics about the state of block | ||
7 | device <dev>. | ||
8 | |||
9 | Q. Why are there multiple statistics in a single file? Doesn't sysfs | ||
10 | normally contain a single value per file? | ||
11 | A. By having a single file, the kernel can guarantee that the statistics | ||
12 | represent a consistent snapshot of the state of the device. If the | ||
13 | statistics were exported as multiple files containing one statistic | ||
14 | each, it would be impossible to guarantee that a set of readings | ||
15 | represent a single point in time. | ||
16 | |||
17 | The stat file consists of a single line of text containing 11 decimal | ||
18 | values separated by whitespace. The fields are summarized in the | ||
19 | following table, and described in more detail below. | ||
20 | |||
21 | Name units description | ||
22 | ---- ----- ----------- | ||
23 | read I/Os requests number of read I/Os processed | ||
24 | read merges requests number of read I/Os merged with in-queue I/O | ||
25 | read sectors sectors number of sectors read | ||
26 | read ticks milliseconds total wait time for read requests | ||
27 | write I/Os requests number of write I/Os processed | ||
28 | write merges requests number of write I/Os merged with in-queue I/O | ||
29 | write sectors sectors number of sectors written | ||
30 | write ticks milliseconds total wait time for write requests | ||
31 | in_flight requests number of I/Os currently in flight | ||
32 | io_ticks milliseconds total time this block device has been active | ||
33 | time_in_queue milliseconds total wait time for all requests | ||
34 | |||
35 | read I/Os, write I/Os | ||
36 | ===================== | ||
37 | |||
38 | These values increment when an I/O request completes. | ||
39 | |||
40 | read merges, write merges | ||
41 | ========================= | ||
42 | |||
43 | These values increment when an I/O request is merged with an | ||
44 | already-queued I/O request. | ||
45 | |||
46 | read sectors, write sectors | ||
47 | =========================== | ||
48 | |||
49 | These values count the number of sectors read from or written to this | ||
50 | block device. The "sectors" in question are the standard UNIX 512-byte | ||
51 | sectors, not any device- or filesystem-specific block size. The | ||
52 | counters are incremented when the I/O completes. | ||
53 | |||
54 | read ticks, write ticks | ||
55 | ======================= | ||
56 | |||
57 | These values count the number of milliseconds that I/O requests have | ||
58 | waited on this block device. If there are multiple I/O requests waiting, | ||
59 | these values will increase at a rate greater than 1000/second; for | ||
60 | example, if 60 read requests wait for an average of 30 ms, the read_ticks | ||
61 | field will increase by 60*30 = 1800. | ||
62 | |||
63 | in_flight | ||
64 | ========= | ||
65 | |||
66 | This value counts the number of I/O requests that have been issued to | ||
67 | the device driver but have not yet completed. It does not include I/O | ||
68 | requests that are in the queue but not yet issued to the device driver. | ||
69 | |||
70 | io_ticks | ||
71 | ======== | ||
72 | |||
73 | This value counts the number of milliseconds during which the device has | ||
74 | had I/O requests queued. | ||
75 | |||
76 | time_in_queue | ||
77 | ============= | ||
78 | |||
79 | This value counts the number of milliseconds that I/O requests have waited | ||
80 | on this block device. If there are multiple I/O requests waiting, this | ||
81 | value will increase as the product of the number of milliseconds times the | ||
82 | number of requests waiting (see "read ticks" above for an example). | ||
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt new file mode 100644 index 000000000000..08c5d04f3086 --- /dev/null +++ b/Documentation/cpu-hotplug.txt | |||
@@ -0,0 +1,357 @@ | |||
1 | CPU hotplug Support in Linux(tm) Kernel | ||
2 | |||
3 | Maintainers: | ||
4 | CPU Hotplug Core: | ||
5 | Rusty Russell <rusty@rustycorp.com.au> | ||
6 | Srivatsa Vaddagiri <vatsa@in.ibm.com> | ||
7 | i386: | ||
8 | Zwane Mwaikambo <zwane@arm.linux.org.uk> | ||
9 | ppc64: | ||
10 | Nathan Lynch <nathanl@austin.ibm.com> | ||
11 | Joel Schopp <jschopp@austin.ibm.com> | ||
12 | ia64/x86_64: | ||
13 | Ashok Raj <ashok.raj@intel.com> | ||
14 | |||
15 | Authors: Ashok Raj <ashok.raj@intel.com> | ||
16 | Lots of feedback: Nathan Lynch <nathanl@austin.ibm.com>, | ||
17 | Joel Schopp <jschopp@austin.ibm.com> | ||
18 | |||
19 | Introduction | ||
20 | |||
21 | Modern advances in system architectures have introduced advanced error | ||
22 | reporting and correction capabilities in processors. CPU architectures permit | ||
23 | partitioning support, where compute resources of a single CPU could be made | ||
24 | available to virtual machine environments. There are couple OEMS that | ||
25 | support NUMA hardware which are hot pluggable as well, where physical | ||
26 | node insertion and removal require support for CPU hotplug. | ||
27 | |||
28 | Such advances require CPUs available to a kernel to be removed either for | ||
29 | provisioning reasons, or for RAS purposes to keep an offending CPU off | ||
30 | system execution path. Hence the need for CPU hotplug support in the | ||
31 | Linux kernel. | ||
32 | |||
33 | A more novel use of CPU-hotplug support is its use today in suspend | ||
34 | resume support for SMP. Dual-core and HT support makes even | ||
35 | a laptop run SMP kernels which didn't support these methods. SMP support | ||
36 | for suspend/resume is a work in progress. | ||
37 | |||
38 | General Stuff about CPU Hotplug | ||
39 | -------------------------------- | ||
40 | |||
41 | Command Line Switches | ||
42 | --------------------- | ||
43 | maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using | ||
44 | maxcpus=2 will only boot 2. You can choose to bring the | ||
45 | other cpus later online, read FAQ's for more info. | ||
46 | |||
47 | additional_cpus=n [x86_64 only] use this to limit hotpluggable cpus. | ||
48 | This option sets | ||
49 | cpu_possible_map = cpu_present_map + additional_cpus | ||
50 | |||
51 | CPU maps and such | ||
52 | ----------------- | ||
53 | [More on cpumaps and primitive to manipulate, please check | ||
54 | include/linux/cpumask.h that has more descriptive text.] | ||
55 | |||
56 | cpu_possible_map: Bitmap of possible CPUs that can ever be available in the | ||
57 | system. This is used to allocate some boot time memory for per_cpu variables | ||
58 | that aren't designed to grow/shrink as CPUs are made available or removed. | ||
59 | Once set during boot time discovery phase, the map is static, i.e no bits | ||
60 | are added or removed anytime. Trimming it accurately for your system needs | ||
61 | upfront can save some boot time memory. See below for how we use heuristics | ||
62 | in x86_64 case to keep this under check. | ||
63 | |||
64 | cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up() | ||
65 | after a cpu is available for kernel scheduling and ready to receive | ||
66 | interrupts from devices. Its cleared when a cpu is brought down using | ||
67 | __cpu_disable(), before which all OS services including interrupts are | ||
68 | migrated to another target CPU. | ||
69 | |||
70 | cpu_present_map: Bitmap of CPUs currently present in the system. Not all | ||
71 | of them may be online. When physical hotplug is processed by the relevant | ||
72 | subsystem (e.g ACPI) can change and new bit either be added or removed | ||
73 | from the map depending on the event is hot-add/hot-remove. There are currently | ||
74 | no locking rules as of now. Typical usage is to init topology during boot, | ||
75 | at which time hotplug is disabled. | ||
76 | |||
77 | You really dont need to manipulate any of the system cpu maps. They should | ||
78 | be read-only for most use. When setting up per-cpu resources almost always use | ||
79 | cpu_possible_map/for_each_cpu() to iterate. | ||
80 | |||
81 | Never use anything other than cpumask_t to represent bitmap of CPUs. | ||
82 | |||
83 | #include <linux/cpumask.h> | ||
84 | |||
85 | for_each_cpu - Iterate over cpu_possible_map | ||
86 | for_each_online_cpu - Iterate over cpu_online_map | ||
87 | for_each_present_cpu - Iterate over cpu_present_map | ||
88 | for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. | ||
89 | |||
90 | #include <linux/cpu.h> | ||
91 | lock_cpu_hotplug() and unlock_cpu_hotplug(): | ||
92 | |||
93 | The above calls are used to inhibit cpu hotplug operations. While holding the | ||
94 | cpucontrol mutex, cpu_online_map will not change. If you merely need to avoid | ||
95 | cpus going away, you could also use preempt_disable() and preempt_enable() | ||
96 | for those sections. Just remember the critical section cannot call any | ||
97 | function that can sleep or schedule this process away. The preempt_disable() | ||
98 | will work as long as stop_machine_run() is used to take a cpu down. | ||
99 | |||
100 | CPU Hotplug - Frequently Asked Questions. | ||
101 | |||
102 | Q: How to i enable my kernel to support CPU hotplug? | ||
103 | A: When doing make defconfig, Enable CPU hotplug support | ||
104 | |||
105 | "Processor type and Features" -> Support for Hotpluggable CPUs | ||
106 | |||
107 | Make sure that you have CONFIG_HOTPLUG, and CONFIG_SMP turned on as well. | ||
108 | |||
109 | You would need to enable CONFIG_HOTPLUG_CPU for SMP suspend/resume support | ||
110 | as well. | ||
111 | |||
112 | Q: What architectures support CPU hotplug? | ||
113 | A: As of 2.6.14, the following architectures support CPU hotplug. | ||
114 | |||
115 | i386 (Intel), ppc, ppc64, parisc, s390, ia64 and x86_64 | ||
116 | |||
117 | Q: How to test if hotplug is supported on the newly built kernel? | ||
118 | A: You should now notice an entry in sysfs. | ||
119 | |||
120 | Check if sysfs is mounted, using the "mount" command. You should notice | ||
121 | an entry as shown below in the output. | ||
122 | |||
123 | .... | ||
124 | none on /sys type sysfs (rw) | ||
125 | .... | ||
126 | |||
127 | if this is not mounted, do the following. | ||
128 | |||
129 | #mkdir /sysfs | ||
130 | #mount -t sysfs sys /sys | ||
131 | |||
132 | now you should see entries for all present cpu, the following is an example | ||
133 | in a 8-way system. | ||
134 | |||
135 | #pwd | ||
136 | #/sys/devices/system/cpu | ||
137 | #ls -l | ||
138 | total 0 | ||
139 | drwxr-xr-x 10 root root 0 Sep 19 07:44 . | ||
140 | drwxr-xr-x 13 root root 0 Sep 19 07:45 .. | ||
141 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu0 | ||
142 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu1 | ||
143 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu2 | ||
144 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu3 | ||
145 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu4 | ||
146 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu5 | ||
147 | drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu6 | ||
148 | drwxr-xr-x 3 root root 0 Sep 19 07:48 cpu7 | ||
149 | |||
150 | Under each directory you would find an "online" file which is the control | ||
151 | file to logically online/offline a processor. | ||
152 | |||
153 | Q: Does hot-add/hot-remove refer to physical add/remove of cpus? | ||
154 | A: The usage of hot-add/remove may not be very consistently used in the code. | ||
155 | CONFIG_CPU_HOTPLUG enables logical online/offline capability in the kernel. | ||
156 | To support physical addition/removal, one would need some BIOS hooks and | ||
157 | the platform should have something like an attention button in PCI hotplug. | ||
158 | CONFIG_ACPI_HOTPLUG_CPU enables ACPI support for physical add/remove of CPUs. | ||
159 | |||
160 | Q: How do i logically offline a CPU? | ||
161 | A: Do the following. | ||
162 | |||
163 | #echo 0 > /sys/devices/system/cpu/cpuX/online | ||
164 | |||
165 | once the logical offline is successful, check | ||
166 | |||
167 | #cat /proc/interrupts | ||
168 | |||
169 | you should now not see the CPU that you removed. Also online file will report | ||
170 | the state as 0 when a cpu if offline and 1 when its online. | ||
171 | |||
172 | #To display the current cpu state. | ||
173 | #cat /sys/devices/system/cpu/cpuX/online | ||
174 | |||
175 | Q: Why cant i remove CPU0 on some systems? | ||
176 | A: Some architectures may have some special dependency on a certain CPU. | ||
177 | |||
178 | For e.g in IA64 platforms we have ability to sent platform interrupts to the | ||
179 | OS. a.k.a Corrected Platform Error Interrupts (CPEI). In current ACPI | ||
180 | specifications, we didn't have a way to change the target CPU. Hence if the | ||
181 | current ACPI version doesn't support such re-direction, we disable that CPU | ||
182 | by making it not-removable. | ||
183 | |||
184 | In such cases you will also notice that the online file is missing under cpu0. | ||
185 | |||
186 | Q: How do i find out if a particular CPU is not removable? | ||
187 | A: Depending on the implementation, some architectures may show this by the | ||
188 | absence of the "online" file. This is done if it can be determined ahead of | ||
189 | time that this CPU cannot be removed. | ||
190 | |||
191 | In some situations, this can be a run time check, i.e if you try to remove the | ||
192 | last CPU, this will not be permitted. You can find such failures by | ||
193 | investigating the return value of the "echo" command. | ||
194 | |||
195 | Q: What happens when a CPU is being logically offlined? | ||
196 | A: The following happen, listed in no particular order :-) | ||
197 | |||
198 | - A notification is sent to in-kernel registered modules by sending an event | ||
199 | CPU_DOWN_PREPARE | ||
200 | - All process is migrated away from this outgoing CPU to a new CPU | ||
201 | - All interrupts targeted to this CPU is migrated to a new CPU | ||
202 | - timers/bottom half/task lets are also migrated to a new CPU | ||
203 | - Once all services are migrated, kernel calls an arch specific routine | ||
204 | __cpu_disable() to perform arch specific cleanup. | ||
205 | - Once this is successful, an event for successful cleanup is sent by an event | ||
206 | CPU_DEAD. | ||
207 | |||
208 | "It is expected that each service cleans up when the CPU_DOWN_PREPARE | ||
209 | notifier is called, when CPU_DEAD is called its expected there is nothing | ||
210 | running on behalf of this CPU that was offlined" | ||
211 | |||
212 | Q: If i have some kernel code that needs to be aware of CPU arrival and | ||
213 | departure, how to i arrange for proper notification? | ||
214 | A: This is what you would need in your kernel code to receive notifications. | ||
215 | |||
216 | #include <linux/cpu.h> | ||
217 | static int __cpuinit foobar_cpu_callback(struct notifier_block *nfb, | ||
218 | unsigned long action, void *hcpu) | ||
219 | { | ||
220 | unsigned int cpu = (unsigned long)hcpu; | ||
221 | |||
222 | switch (action) { | ||
223 | case CPU_ONLINE: | ||
224 | foobar_online_action(cpu); | ||
225 | break; | ||
226 | case CPU_DEAD: | ||
227 | foobar_dead_action(cpu); | ||
228 | break; | ||
229 | } | ||
230 | return NOTIFY_OK; | ||
231 | } | ||
232 | |||
233 | static struct notifier_block foobar_cpu_notifer = | ||
234 | { | ||
235 | .notifier_call = foobar_cpu_callback, | ||
236 | }; | ||
237 | |||
238 | |||
239 | In your init function, | ||
240 | |||
241 | register_cpu_notifier(&foobar_cpu_notifier); | ||
242 | |||
243 | You can fail PREPARE notifiers if something doesn't work to prepare resources. | ||
244 | This will stop the activity and send a following CANCELED event back. | ||
245 | |||
246 | CPU_DEAD should not be failed, its just a goodness indication, but bad | ||
247 | things will happen if a notifier in path sent a BAD notify code. | ||
248 | |||
249 | Q: I don't see my action being called for all CPUs already up and running? | ||
250 | A: Yes, CPU notifiers are called only when new CPUs are on-lined or offlined. | ||
251 | If you need to perform some action for each cpu already in the system, then | ||
252 | |||
253 | for_each_online_cpu(i) { | ||
254 | foobar_cpu_callback(&foobar_cpu_notifier, CPU_UP_PREPARE, i); | ||
255 | foobar_cpu_callback(&foobar-cpu_notifier, CPU_ONLINE, i); | ||
256 | } | ||
257 | |||
258 | Q: If i would like to develop cpu hotplug support for a new architecture, | ||
259 | what do i need at a minimum? | ||
260 | A: The following are what is required for CPU hotplug infrastructure to work | ||
261 | correctly. | ||
262 | |||
263 | - Make sure you have an entry in Kconfig to enable CONFIG_HOTPLUG_CPU | ||
264 | - __cpu_up() - Arch interface to bring up a CPU | ||
265 | - __cpu_disable() - Arch interface to shutdown a CPU, no more interrupts | ||
266 | can be handled by the kernel after the routine | ||
267 | returns. Including local APIC timers etc are | ||
268 | shutdown. | ||
269 | - __cpu_die() - This actually supposed to ensure death of the CPU. | ||
270 | Actually look at some example code in other arch | ||
271 | that implement CPU hotplug. The processor is taken | ||
272 | down from the idle() loop for that specific | ||
273 | architecture. __cpu_die() typically waits for some | ||
274 | per_cpu state to be set, to ensure the processor | ||
275 | dead routine is called to be sure positively. | ||
276 | |||
277 | Q: I need to ensure that a particular cpu is not removed when there is some | ||
278 | work specific to this cpu is in progress. | ||
279 | A: First switch the current thread context to preferred cpu | ||
280 | |||
281 | int my_func_on_cpu(int cpu) | ||
282 | { | ||
283 | cpumask_t saved_mask, new_mask = CPU_MASK_NONE; | ||
284 | int curr_cpu, err = 0; | ||
285 | |||
286 | saved_mask = current->cpus_allowed; | ||
287 | cpu_set(cpu, new_mask); | ||
288 | err = set_cpus_allowed(current, new_mask); | ||
289 | |||
290 | if (err) | ||
291 | return err; | ||
292 | |||
293 | /* | ||
294 | * If we got scheduled out just after the return from | ||
295 | * set_cpus_allowed() before running the work, this ensures | ||
296 | * we stay locked. | ||
297 | */ | ||
298 | curr_cpu = get_cpu(); | ||
299 | |||
300 | if (curr_cpu != cpu) { | ||
301 | err = -EAGAIN; | ||
302 | goto ret; | ||
303 | } else { | ||
304 | /* | ||
305 | * Do work : But cant sleep, since get_cpu() disables preempt | ||
306 | */ | ||
307 | } | ||
308 | ret: | ||
309 | put_cpu(); | ||
310 | set_cpus_allowed(current, saved_mask); | ||
311 | return err; | ||
312 | } | ||
313 | |||
314 | |||
315 | Q: How do we determine how many CPUs are available for hotplug. | ||
316 | A: There is no clear spec defined way from ACPI that can give us that | ||
317 | information today. Based on some input from Natalie of Unisys, | ||
318 | that the ACPI MADT (Multiple APIC Description Tables) marks those possible | ||
319 | CPUs in a system with disabled status. | ||
320 | |||
321 | Andi implemented some simple heuristics that count the number of disabled | ||
322 | CPUs in MADT as hotpluggable CPUS. In the case there are no disabled CPUS | ||
323 | we assume 1/2 the number of CPUs currently present can be hotplugged. | ||
324 | |||
325 | Caveat: Today's ACPI MADT can only provide 256 entries since the apicid field | ||
326 | in MADT is only 8 bits. | ||
327 | |||
328 | User Space Notification | ||
329 | |||
330 | Hotplug support for devices is common in Linux today. Its being used today to | ||
331 | support automatic configuration of network, usb and pci devices. A hotplug | ||
332 | event can be used to invoke an agent script to perform the configuration task. | ||
333 | |||
334 | You can add /etc/hotplug/cpu.agent to handle hotplug notification user space | ||
335 | scripts. | ||
336 | |||
337 | #!/bin/bash | ||
338 | # $Id: cpu.agent | ||
339 | # Kernel hotplug params include: | ||
340 | #ACTION=%s [online or offline] | ||
341 | #DEVPATH=%s | ||
342 | # | ||
343 | cd /etc/hotplug | ||
344 | . ./hotplug.functions | ||
345 | |||
346 | case $ACTION in | ||
347 | online) | ||
348 | echo `date` ":cpu.agent" add cpu >> /tmp/hotplug.txt | ||
349 | ;; | ||
350 | offline) | ||
351 | echo `date` ":cpu.agent" remove cpu >>/tmp/hotplug.txt | ||
352 | ;; | ||
353 | *) | ||
354 | debug_mesg CPU $ACTION event not supported | ||
355 | exit 1 | ||
356 | ;; | ||
357 | esac | ||
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt index a09a8eb80665..9e49b1c35729 100644 --- a/Documentation/cpusets.txt +++ b/Documentation/cpusets.txt | |||
@@ -14,7 +14,10 @@ CONTENTS: | |||
14 | 1.1 What are cpusets ? | 14 | 1.1 What are cpusets ? |
15 | 1.2 Why are cpusets needed ? | 15 | 1.2 Why are cpusets needed ? |
16 | 1.3 How are cpusets implemented ? | 16 | 1.3 How are cpusets implemented ? |
17 | 1.4 How do I use cpusets ? | 17 | 1.4 What are exclusive cpusets ? |
18 | 1.5 What does notify_on_release do ? | ||
19 | 1.6 What is memory_pressure ? | ||
20 | 1.7 How do I use cpusets ? | ||
18 | 2. Usage Examples and Syntax | 21 | 2. Usage Examples and Syntax |
19 | 2.1 Basic Usage | 22 | 2.1 Basic Usage |
20 | 2.2 Adding/removing cpus | 23 | 2.2 Adding/removing cpus |
@@ -49,29 +52,6 @@ its cpus_allowed vector, and the kernel page allocator will not | |||
49 | allocate a page on a node that is not allowed in the requesting tasks | 52 | allocate a page on a node that is not allowed in the requesting tasks |
50 | mems_allowed vector. | 53 | mems_allowed vector. |
51 | 54 | ||
52 | If a cpuset is cpu or mem exclusive, no other cpuset, other than a direct | ||
53 | ancestor or descendent, may share any of the same CPUs or Memory Nodes. | ||
54 | A cpuset that is cpu exclusive has a sched domain associated with it. | ||
55 | The sched domain consists of all cpus in the current cpuset that are not | ||
56 | part of any exclusive child cpusets. | ||
57 | This ensures that the scheduler load balacing code only balances | ||
58 | against the cpus that are in the sched domain as defined above and not | ||
59 | all of the cpus in the system. This removes any overhead due to | ||
60 | load balancing code trying to pull tasks outside of the cpu exclusive | ||
61 | cpuset only to be prevented by the tasks' cpus_allowed mask. | ||
62 | |||
63 | A cpuset that is mem_exclusive restricts kernel allocations for | ||
64 | page, buffer and other data commonly shared by the kernel across | ||
65 | multiple users. All cpusets, whether mem_exclusive or not, restrict | ||
66 | allocations of memory for user space. This enables configuring a | ||
67 | system so that several independent jobs can share common kernel | ||
68 | data, such as file system pages, while isolating each jobs user | ||
69 | allocation in its own cpuset. To do this, construct a large | ||
70 | mem_exclusive cpuset to hold all the jobs, and construct child, | ||
71 | non-mem_exclusive cpusets for each individual job. Only a small | ||
72 | amount of typical kernel memory, such as requests from interrupt | ||
73 | handlers, is allowed to be taken outside even a mem_exclusive cpuset. | ||
74 | |||
75 | User level code may create and destroy cpusets by name in the cpuset | 55 | User level code may create and destroy cpusets by name in the cpuset |
76 | virtual file system, manage the attributes and permissions of these | 56 | virtual file system, manage the attributes and permissions of these |
77 | cpusets and which CPUs and Memory Nodes are assigned to each cpuset, | 57 | cpusets and which CPUs and Memory Nodes are assigned to each cpuset, |
@@ -192,9 +172,15 @@ containing the following files describing that cpuset: | |||
192 | 172 | ||
193 | - cpus: list of CPUs in that cpuset | 173 | - cpus: list of CPUs in that cpuset |
194 | - mems: list of Memory Nodes in that cpuset | 174 | - mems: list of Memory Nodes in that cpuset |
175 | - memory_migrate flag: if set, move pages to cpusets nodes | ||
195 | - cpu_exclusive flag: is cpu placement exclusive? | 176 | - cpu_exclusive flag: is cpu placement exclusive? |
196 | - mem_exclusive flag: is memory placement exclusive? | 177 | - mem_exclusive flag: is memory placement exclusive? |
197 | - tasks: list of tasks (by pid) attached to that cpuset | 178 | - tasks: list of tasks (by pid) attached to that cpuset |
179 | - notify_on_release flag: run /sbin/cpuset_release_agent on exit? | ||
180 | - memory_pressure: measure of how much paging pressure in cpuset | ||
181 | |||
182 | In addition, the root cpuset only has the following file: | ||
183 | - memory_pressure_enabled flag: compute memory_pressure? | ||
198 | 184 | ||
199 | New cpusets are created using the mkdir system call or shell | 185 | New cpusets are created using the mkdir system call or shell |
200 | command. The properties of a cpuset, such as its flags, allowed | 186 | command. The properties of a cpuset, such as its flags, allowed |
@@ -228,7 +214,108 @@ exclusive cpuset. Also, the use of a Linux virtual file system (vfs) | |||
228 | to represent the cpuset hierarchy provides for a familiar permission | 214 | to represent the cpuset hierarchy provides for a familiar permission |
229 | and name space for cpusets, with a minimum of additional kernel code. | 215 | and name space for cpusets, with a minimum of additional kernel code. |
230 | 216 | ||
231 | 1.4 How do I use cpusets ? | 217 | |
218 | 1.4 What are exclusive cpusets ? | ||
219 | -------------------------------- | ||
220 | |||
221 | If a cpuset is cpu or mem exclusive, no other cpuset, other than | ||
222 | a direct ancestor or descendent, may share any of the same CPUs or | ||
223 | Memory Nodes. | ||
224 | |||
225 | A cpuset that is cpu_exclusive has a scheduler (sched) domain | ||
226 | associated with it. The sched domain consists of all CPUs in the | ||
227 | current cpuset that are not part of any exclusive child cpusets. | ||
228 | This ensures that the scheduler load balancing code only balances | ||
229 | against the CPUs that are in the sched domain as defined above and | ||
230 | not all of the CPUs in the system. This removes any overhead due to | ||
231 | load balancing code trying to pull tasks outside of the cpu_exclusive | ||
232 | cpuset only to be prevented by the tasks' cpus_allowed mask. | ||
233 | |||
234 | A cpuset that is mem_exclusive restricts kernel allocations for | ||
235 | page, buffer and other data commonly shared by the kernel across | ||
236 | multiple users. All cpusets, whether mem_exclusive or not, restrict | ||
237 | allocations of memory for user space. This enables configuring a | ||
238 | system so that several independent jobs can share common kernel data, | ||
239 | such as file system pages, while isolating each jobs user allocation in | ||
240 | its own cpuset. To do this, construct a large mem_exclusive cpuset to | ||
241 | hold all the jobs, and construct child, non-mem_exclusive cpusets for | ||
242 | each individual job. Only a small amount of typical kernel memory, | ||
243 | such as requests from interrupt handlers, is allowed to be taken | ||
244 | outside even a mem_exclusive cpuset. | ||
245 | |||
246 | |||
247 | 1.5 What does notify_on_release do ? | ||
248 | ------------------------------------ | ||
249 | |||
250 | If the notify_on_release flag is enabled (1) in a cpuset, then whenever | ||
251 | the last task in the cpuset leaves (exits or attaches to some other | ||
252 | cpuset) and the last child cpuset of that cpuset is removed, then | ||
253 | the kernel runs the command /sbin/cpuset_release_agent, supplying the | ||
254 | pathname (relative to the mount point of the cpuset file system) of the | ||
255 | abandoned cpuset. This enables automatic removal of abandoned cpusets. | ||
256 | The default value of notify_on_release in the root cpuset at system | ||
257 | boot is disabled (0). The default value of other cpusets at creation | ||
258 | is the current value of their parents notify_on_release setting. | ||
259 | |||
260 | |||
261 | 1.6 What is memory_pressure ? | ||
262 | ----------------------------- | ||
263 | The memory_pressure of a cpuset provides a simple per-cpuset metric | ||
264 | of the rate that the tasks in a cpuset are attempting to free up in | ||
265 | use memory on the nodes of the cpuset to satisfy additional memory | ||
266 | requests. | ||
267 | |||
268 | This enables batch managers monitoring jobs running in dedicated | ||
269 | cpusets to efficiently detect what level of memory pressure that job | ||
270 | is causing. | ||
271 | |||
272 | This is useful both on tightly managed systems running a wide mix of | ||
273 | submitted jobs, which may choose to terminate or re-prioritize jobs that | ||
274 | are trying to use more memory than allowed on the nodes assigned them, | ||
275 | and with tightly coupled, long running, massively parallel scientific | ||
276 | computing jobs that will dramatically fail to meet required performance | ||
277 | goals if they start to use more memory than allowed to them. | ||
278 | |||
279 | This mechanism provides a very economical way for the batch manager | ||
280 | to monitor a cpuset for signs of memory pressure. It's up to the | ||
281 | batch manager or other user code to decide what to do about it and | ||
282 | take action. | ||
283 | |||
284 | ==> Unless this feature is enabled by writing "1" to the special file | ||
285 | /dev/cpuset/memory_pressure_enabled, the hook in the rebalance | ||
286 | code of __alloc_pages() for this metric reduces to simply noticing | ||
287 | that the cpuset_memory_pressure_enabled flag is zero. So only | ||
288 | systems that enable this feature will compute the metric. | ||
289 | |||
290 | Why a per-cpuset, running average: | ||
291 | |||
292 | Because this meter is per-cpuset, rather than per-task or mm, | ||
293 | the system load imposed by a batch scheduler monitoring this | ||
294 | metric is sharply reduced on large systems, because a scan of | ||
295 | the tasklist can be avoided on each set of queries. | ||
296 | |||
297 | Because this meter is a running average, instead of an accumulating | ||
298 | counter, a batch scheduler can detect memory pressure with a | ||
299 | single read, instead of having to read and accumulate results | ||
300 | for a period of time. | ||
301 | |||
302 | Because this meter is per-cpuset rather than per-task or mm, | ||
303 | the batch scheduler can obtain the key information, memory | ||
304 | pressure in a cpuset, with a single read, rather than having to | ||
305 | query and accumulate results over all the (dynamically changing) | ||
306 | set of tasks in the cpuset. | ||
307 | |||
308 | A per-cpuset simple digital filter (requires a spinlock and 3 words | ||
309 | of data per-cpuset) is kept, and updated by any task attached to that | ||
310 | cpuset, if it enters the synchronous (direct) page reclaim code. | ||
311 | |||
312 | A per-cpuset file provides an integer number representing the recent | ||
313 | (half-life of 10 seconds) rate of direct page reclaims caused by | ||
314 | the tasks in the cpuset, in units of reclaims attempted per second, | ||
315 | times 1000. | ||
316 | |||
317 | |||
318 | 1.7 How do I use cpusets ? | ||
232 | -------------------------- | 319 | -------------------------- |
233 | 320 | ||
234 | In order to minimize the impact of cpusets on critical kernel | 321 | In order to minimize the impact of cpusets on critical kernel |
@@ -277,6 +364,30 @@ rewritten to the 'tasks' file of its cpuset. This is done to avoid | |||
277 | impacting the scheduler code in the kernel with a check for changes | 364 | impacting the scheduler code in the kernel with a check for changes |
278 | in a tasks processor placement. | 365 | in a tasks processor placement. |
279 | 366 | ||
367 | Normally, once a page is allocated (given a physical page | ||
368 | of main memory) then that page stays on whatever node it | ||
369 | was allocated, so long as it remains allocated, even if the | ||
370 | cpusets memory placement policy 'mems' subsequently changes. | ||
371 | If the cpuset flag file 'memory_migrate' is set true, then when | ||
372 | tasks are attached to that cpuset, any pages that task had | ||
373 | allocated to it on nodes in its previous cpuset are migrated | ||
374 | to the tasks new cpuset. Depending on the implementation, | ||
375 | this migration may either be done by swapping the page out, | ||
376 | so that the next time the page is referenced, it will be paged | ||
377 | into the tasks new cpuset, usually on the node where it was | ||
378 | referenced, or this migration may be done by directly copying | ||
379 | the pages from the tasks previous cpuset to the new cpuset, | ||
380 | where possible to the same node, relative to the new cpuset, | ||
381 | as the node that held the page, relative to the old cpuset. | ||
382 | Also if 'memory_migrate' is set true, then if that cpusets | ||
383 | 'mems' file is modified, pages allocated to tasks in that | ||
384 | cpuset, that were on nodes in the previous setting of 'mems', | ||
385 | will be moved to nodes in the new setting of 'mems.' Again, | ||
386 | depending on the implementation, this might be done by swapping, | ||
387 | or by direct copying. In either case, pages that were not in | ||
388 | the tasks prior cpuset, or in the cpusets prior 'mems' setting, | ||
389 | will not be moved. | ||
390 | |||
280 | There is an exception to the above. If hotplug functionality is used | 391 | There is an exception to the above. If hotplug functionality is used |
281 | to remove all the CPUs that are currently assigned to a cpuset, | 392 | to remove all the CPUs that are currently assigned to a cpuset, |
282 | then the kernel will automatically update the cpus_allowed of all | 393 | then the kernel will automatically update the cpus_allowed of all |
diff --git a/Documentation/dvb/avermedia.txt b/Documentation/dvb/avermedia.txt index 2dc260b2b0a4..068070ff13cd 100644 --- a/Documentation/dvb/avermedia.txt +++ b/Documentation/dvb/avermedia.txt | |||
@@ -150,7 +150,8 @@ Getting the card going | |||
150 | 150 | ||
151 | The frontend module sp887x.o, requires an external firmware. | 151 | The frontend module sp887x.o, requires an external firmware. |
152 | Please use the command "get_dvb_firmware sp887x" to download | 152 | Please use the command "get_dvb_firmware sp887x" to download |
153 | it. Then copy it to /usr/lib/hotplug/firmware. | 153 | it. Then copy it to /usr/lib/hotplug/firmware or /lib/firmware/ |
154 | (depending on configuration of firmware hotplug). | ||
154 | 155 | ||
155 | Receiving DVB-T in Australia | 156 | Receiving DVB-T in Australia |
156 | 157 | ||
diff --git a/Documentation/dvb/get_dvb_firmware b/Documentation/dvb/get_dvb_firmware index be6eb4c75991..75c28a174092 100644 --- a/Documentation/dvb/get_dvb_firmware +++ b/Documentation/dvb/get_dvb_firmware | |||
@@ -23,7 +23,7 @@ use IO::Handle; | |||
23 | 23 | ||
24 | @components = ( "sp8870", "sp887x", "tda10045", "tda10046", "av7110", "dec2000t", | 24 | @components = ( "sp8870", "sp887x", "tda10045", "tda10046", "av7110", "dec2000t", |
25 | "dec2540t", "dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004", | 25 | "dec2540t", "dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004", |
26 | "or51211", "or51132_qam", "or51132_vsb"); | 26 | "or51211", "or51132_qam", "or51132_vsb", "bluebird"); |
27 | 27 | ||
28 | # Check args | 28 | # Check args |
29 | syntax() if (scalar(@ARGV) != 1); | 29 | syntax() if (scalar(@ARGV) != 1); |
@@ -34,7 +34,11 @@ for ($i=0; $i < scalar(@components); $i++) { | |||
34 | if ($cid eq $components[$i]) { | 34 | if ($cid eq $components[$i]) { |
35 | $outfile = eval($cid); | 35 | $outfile = eval($cid); |
36 | die $@ if $@; | 36 | die $@ if $@; |
37 | print STDERR "Firmware $outfile extracted successfully. Now copy it to either /lib/firmware or /usr/lib/hotplug/firmware/ (depending on your hotplug version).\n"; | 37 | print STDERR <<EOF; |
38 | Firmware $outfile extracted successfully. | ||
39 | Now copy it to either /usr/lib/hotplug/firmware or /lib/firmware | ||
40 | (depending on configuration of firmware hotplug). | ||
41 | EOF | ||
38 | exit(0); | 42 | exit(0); |
39 | } | 43 | } |
40 | } | 44 | } |
@@ -243,7 +247,7 @@ sub nxt2002 { | |||
243 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | 247 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); |
244 | 248 | ||
245 | checkstandard(); | 249 | checkstandard(); |
246 | 250 | ||
247 | wgetfile($sourcefile, $url); | 251 | wgetfile($sourcefile, $url); |
248 | unzip($sourcefile, $tmpdir); | 252 | unzip($sourcefile, $tmpdir); |
249 | verify("$tmpdir/SkyNETU.sys", $hash); | 253 | verify("$tmpdir/SkyNETU.sys", $hash); |
@@ -308,6 +312,19 @@ sub or51132_vsb { | |||
308 | $fwfile; | 312 | $fwfile; |
309 | } | 313 | } |
310 | 314 | ||
315 | sub bluebird { | ||
316 | my $url = "http://www.linuxtv.org/download/dvb/firmware/dvb-usb-bluebird-01.fw"; | ||
317 | my $outfile = "dvb-usb-bluebird-01.fw"; | ||
318 | my $hash = "658397cb9eba9101af9031302671f49d"; | ||
319 | |||
320 | checkstandard(); | ||
321 | |||
322 | wgetfile($outfile, $url); | ||
323 | verify($outfile,$hash); | ||
324 | |||
325 | $outfile; | ||
326 | } | ||
327 | |||
311 | # --------------------------------------------------------------- | 328 | # --------------------------------------------------------------- |
312 | # Utilities | 329 | # Utilities |
313 | 330 | ||
diff --git a/Documentation/dvb/ttusb-dec.txt b/Documentation/dvb/ttusb-dec.txt index 5c1e984c26a7..b2f271cd784b 100644 --- a/Documentation/dvb/ttusb-dec.txt +++ b/Documentation/dvb/ttusb-dec.txt | |||
@@ -41,4 +41,5 @@ Hotplug Firmware Loading for 2.6 kernels | |||
41 | For 2.6 kernels the firmware is loaded at the point that the driver module is | 41 | For 2.6 kernels the firmware is loaded at the point that the driver module is |
42 | loaded. See linux/Documentation/dvb/firmware.txt for more information. | 42 | loaded. See linux/Documentation/dvb/firmware.txt for more information. |
43 | 43 | ||
44 | Copy the three files downloaded above into the /usr/lib/hotplug/firmware directory. | 44 | Copy the three files downloaded above into the /usr/lib/hotplug/firmware or |
45 | /lib/firmware directory (depending on configuration of firmware hotplug). | ||
diff --git a/Documentation/fb/cyblafb/bugs b/Documentation/fb/cyblafb/bugs index f90cc66ea919..9443a6d72cdd 100644 --- a/Documentation/fb/cyblafb/bugs +++ b/Documentation/fb/cyblafb/bugs | |||
@@ -11,4 +11,3 @@ Untested features | |||
11 | 11 | ||
12 | All LCD stuff is untested. If it worked in tridentfb, it should work in | 12 | All LCD stuff is untested. If it worked in tridentfb, it should work in |
13 | cyblafb. Please test and report the results to Knut_Petersen@t-online.de. | 13 | cyblafb. Please test and report the results to Knut_Petersen@t-online.de. |
14 | |||
diff --git a/Documentation/fb/cyblafb/fb.modes b/Documentation/fb/cyblafb/fb.modes index cf4351fc32ff..fe0e5223ba86 100644 --- a/Documentation/fb/cyblafb/fb.modes +++ b/Documentation/fb/cyblafb/fb.modes | |||
@@ -14,142 +14,141 @@ | |||
14 | # | 14 | # |
15 | 15 | ||
16 | mode "640x480-50" | 16 | mode "640x480-50" |
17 | geometry 640 480 640 3756 8 | 17 | geometry 640 480 2048 4096 8 |
18 | timings 47619 4294967256 24 17 0 216 3 | 18 | timings 47619 4294967256 24 17 0 216 3 |
19 | endmode | 19 | endmode |
20 | 20 | ||
21 | mode "640x480-60" | 21 | mode "640x480-60" |
22 | geometry 640 480 640 3756 8 | 22 | geometry 640 480 2048 4096 8 |
23 | timings 39682 4294967256 24 17 0 216 3 | 23 | timings 39682 4294967256 24 17 0 216 3 |
24 | endmode | 24 | endmode |
25 | 25 | ||
26 | mode "640x480-70" | 26 | mode "640x480-70" |
27 | geometry 640 480 640 3756 8 | 27 | geometry 640 480 2048 4096 8 |
28 | timings 34013 4294967256 24 17 0 216 3 | 28 | timings 34013 4294967256 24 17 0 216 3 |
29 | endmode | 29 | endmode |
30 | 30 | ||
31 | mode "640x480-72" | 31 | mode "640x480-72" |
32 | geometry 640 480 640 3756 8 | 32 | geometry 640 480 2048 4096 8 |
33 | timings 33068 4294967256 24 17 0 216 3 | 33 | timings 33068 4294967256 24 17 0 216 3 |
34 | endmode | 34 | endmode |
35 | 35 | ||
36 | mode "640x480-75" | 36 | mode "640x480-75" |
37 | geometry 640 480 640 3756 8 | 37 | geometry 640 480 2048 4096 8 |
38 | timings 31746 4294967256 24 17 0 216 3 | 38 | timings 31746 4294967256 24 17 0 216 3 |
39 | endmode | 39 | endmode |
40 | 40 | ||
41 | mode "640x480-80" | 41 | mode "640x480-80" |
42 | geometry 640 480 640 3756 8 | 42 | geometry 640 480 2048 4096 8 |
43 | timings 29761 4294967256 24 17 0 216 3 | 43 | timings 29761 4294967256 24 17 0 216 3 |
44 | endmode | 44 | endmode |
45 | 45 | ||
46 | mode "640x480-85" | 46 | mode "640x480-85" |
47 | geometry 640 480 640 3756 8 | 47 | geometry 640 480 2048 4096 8 |
48 | timings 28011 4294967256 24 17 0 216 3 | 48 | timings 28011 4294967256 24 17 0 216 3 |
49 | endmode | 49 | endmode |
50 | 50 | ||
51 | mode "800x600-50" | 51 | mode "800x600-50" |
52 | geometry 800 600 800 3221 8 | 52 | geometry 800 600 2048 4096 8 |
53 | timings 30303 96 24 14 0 136 11 | 53 | timings 30303 96 24 14 0 136 11 |
54 | endmode | 54 | endmode |
55 | 55 | ||
56 | mode "800x600-60" | 56 | mode "800x600-60" |
57 | geometry 800 600 800 3221 8 | 57 | geometry 800 600 2048 4096 8 |
58 | timings 25252 96 24 14 0 136 11 | 58 | timings 25252 96 24 14 0 136 11 |
59 | endmode | 59 | endmode |
60 | 60 | ||
61 | mode "800x600-70" | 61 | mode "800x600-70" |
62 | geometry 800 600 800 3221 8 | 62 | geometry 800 600 2048 4096 8 |
63 | timings 21645 96 24 14 0 136 11 | 63 | timings 21645 96 24 14 0 136 11 |
64 | endmode | 64 | endmode |
65 | 65 | ||
66 | mode "800x600-72" | 66 | mode "800x600-72" |
67 | geometry 800 600 800 3221 8 | 67 | geometry 800 600 2048 4096 8 |
68 | timings 21043 96 24 14 0 136 11 | 68 | timings 21043 96 24 14 0 136 11 |
69 | endmode | 69 | endmode |
70 | 70 | ||
71 | mode "800x600-75" | 71 | mode "800x600-75" |
72 | geometry 800 600 800 3221 8 | 72 | geometry 800 600 2048 4096 8 |
73 | timings 20202 96 24 14 0 136 11 | 73 | timings 20202 96 24 14 0 136 11 |
74 | endmode | 74 | endmode |
75 | 75 | ||
76 | mode "800x600-80" | 76 | mode "800x600-80" |
77 | geometry 800 600 800 3221 8 | 77 | geometry 800 600 2048 4096 8 |
78 | timings 18939 96 24 14 0 136 11 | 78 | timings 18939 96 24 14 0 136 11 |
79 | endmode | 79 | endmode |
80 | 80 | ||
81 | mode "800x600-85" | 81 | mode "800x600-85" |
82 | geometry 800 600 800 3221 8 | 82 | geometry 800 600 2048 4096 8 |
83 | timings 17825 96 24 14 0 136 11 | 83 | timings 17825 96 24 14 0 136 11 |
84 | endmode | 84 | endmode |
85 | 85 | ||
86 | mode "1024x768-50" | 86 | mode "1024x768-50" |
87 | geometry 1024 768 1024 2815 8 | 87 | geometry 1024 768 2048 4096 8 |
88 | timings 19054 144 24 29 0 120 3 | 88 | timings 19054 144 24 29 0 120 3 |
89 | endmode | 89 | endmode |
90 | 90 | ||
91 | mode "1024x768-60" | 91 | mode "1024x768-60" |
92 | geometry 1024 768 1024 2815 8 | 92 | geometry 1024 768 2048 4096 8 |
93 | timings 15880 144 24 29 0 120 3 | 93 | timings 15880 144 24 29 0 120 3 |
94 | endmode | 94 | endmode |
95 | 95 | ||
96 | mode "1024x768-70" | 96 | mode "1024x768-70" |
97 | geometry 1024 768 1024 2815 8 | 97 | geometry 1024 768 2048 4096 8 |
98 | timings 13610 144 24 29 0 120 3 | 98 | timings 13610 144 24 29 0 120 3 |
99 | endmode | 99 | endmode |
100 | 100 | ||
101 | mode "1024x768-72" | 101 | mode "1024x768-72" |
102 | geometry 1024 768 1024 2815 8 | 102 | geometry 1024 768 2048 4096 8 |
103 | timings 13232 144 24 29 0 120 3 | 103 | timings 13232 144 24 29 0 120 3 |
104 | endmode | 104 | endmode |
105 | 105 | ||
106 | mode "1024x768-75" | 106 | mode "1024x768-75" |
107 | geometry 1024 768 1024 2815 8 | 107 | geometry 1024 768 2048 4096 8 |
108 | timings 12703 144 24 29 0 120 3 | 108 | timings 12703 144 24 29 0 120 3 |
109 | endmode | 109 | endmode |
110 | 110 | ||
111 | mode "1024x768-80" | 111 | mode "1024x768-80" |
112 | geometry 1024 768 1024 2815 8 | 112 | geometry 1024 768 2048 4096 8 |
113 | timings 11910 144 24 29 0 120 3 | 113 | timings 11910 144 24 29 0 120 3 |
114 | endmode | 114 | endmode |
115 | 115 | ||
116 | mode "1024x768-85" | 116 | mode "1024x768-85" |
117 | geometry 1024 768 1024 2815 8 | 117 | geometry 1024 768 2048 4096 8 |
118 | timings 11209 144 24 29 0 120 3 | 118 | timings 11209 144 24 29 0 120 3 |
119 | endmode | 119 | endmode |
120 | 120 | ||
121 | mode "1280x1024-50" | 121 | mode "1280x1024-50" |
122 | geometry 1280 1024 1280 2662 8 | 122 | geometry 1280 1024 2048 4096 8 |
123 | timings 11114 232 16 39 0 160 3 | 123 | timings 11114 232 16 39 0 160 3 |
124 | endmode | 124 | endmode |
125 | 125 | ||
126 | mode "1280x1024-60" | 126 | mode "1280x1024-60" |
127 | geometry 1280 1024 1280 2662 8 | 127 | geometry 1280 1024 2048 4096 8 |
128 | timings 9262 232 16 39 0 160 3 | 128 | timings 9262 232 16 39 0 160 3 |
129 | endmode | 129 | endmode |
130 | 130 | ||
131 | mode "1280x1024-70" | 131 | mode "1280x1024-70" |
132 | geometry 1280 1024 1280 2662 8 | 132 | geometry 1280 1024 2048 4096 8 |
133 | timings 7939 232 16 39 0 160 3 | 133 | timings 7939 232 16 39 0 160 3 |
134 | endmode | 134 | endmode |
135 | 135 | ||
136 | mode "1280x1024-72" | 136 | mode "1280x1024-72" |
137 | geometry 1280 1024 1280 2662 8 | 137 | geometry 1280 1024 2048 4096 8 |
138 | timings 7719 232 16 39 0 160 3 | 138 | timings 7719 232 16 39 0 160 3 |
139 | endmode | 139 | endmode |
140 | 140 | ||
141 | mode "1280x1024-75" | 141 | mode "1280x1024-75" |
142 | geometry 1280 1024 1280 2662 8 | 142 | geometry 1280 1024 2048 4096 8 |
143 | timings 7410 232 16 39 0 160 3 | 143 | timings 7410 232 16 39 0 160 3 |
144 | endmode | 144 | endmode |
145 | 145 | ||
146 | mode "1280x1024-80" | 146 | mode "1280x1024-80" |
147 | geometry 1280 1024 1280 2662 8 | 147 | geometry 1280 1024 2048 4096 8 |
148 | timings 6946 232 16 39 0 160 3 | 148 | timings 6946 232 16 39 0 160 3 |
149 | endmode | 149 | endmode |
150 | 150 | ||
151 | mode "1280x1024-85" | 151 | mode "1280x1024-85" |
152 | geometry 1280 1024 1280 2662 8 | 152 | geometry 1280 1024 2048 4096 8 |
153 | timings 6538 232 16 39 0 160 3 | 153 | timings 6538 232 16 39 0 160 3 |
154 | endmode | 154 | endmode |
155 | |||
diff --git a/Documentation/fb/cyblafb/performance b/Documentation/fb/cyblafb/performance index eb4e47a9cea6..8d15d5dfc6b3 100644 --- a/Documentation/fb/cyblafb/performance +++ b/Documentation/fb/cyblafb/performance | |||
@@ -77,4 +77,3 @@ patch that speeds up kernel bitblitting a lot ( > 20%). | |||
77 | | | | | | | 77 | | | | | | |
78 | | | | | | | 78 | | | | | | |
79 | +-----------+-----------------+-----------------+-----------------+ | 79 | +-----------+-----------------+-----------------+-----------------+ |
80 | |||
diff --git a/Documentation/fb/cyblafb/todo b/Documentation/fb/cyblafb/todo index 80fb2f89b6c1..c5f6d0eae545 100644 --- a/Documentation/fb/cyblafb/todo +++ b/Documentation/fb/cyblafb/todo | |||
@@ -22,11 +22,10 @@ accelerated color blitting Who needs it? The console driver does use color | |||
22 | everything else is done using color expanding | 22 | everything else is done using color expanding |
23 | blitting of 1bpp character bitmaps. | 23 | blitting of 1bpp character bitmaps. |
24 | 24 | ||
25 | xpanning Who needs it? | ||
26 | |||
27 | ioctls Who needs it? | 25 | ioctls Who needs it? |
28 | 26 | ||
29 | TV-out Will be done later | 27 | TV-out Will be done later. Use "vga= " at boot time |
28 | to set a suitable video mode. | ||
30 | 29 | ||
31 | ??? Feel free to contact me if you have any | 30 | ??? Feel free to contact me if you have any |
32 | feature requests | 31 | feature requests |
diff --git a/Documentation/fb/cyblafb/usage b/Documentation/fb/cyblafb/usage index e627c8f54211..a39bb3d402a2 100644 --- a/Documentation/fb/cyblafb/usage +++ b/Documentation/fb/cyblafb/usage | |||
@@ -40,6 +40,16 @@ Selecting Modes | |||
40 | None of the modes possible to select as startup modes are affected by | 40 | None of the modes possible to select as startup modes are affected by |
41 | the problems described at the end of the next subsection. | 41 | the problems described at the end of the next subsection. |
42 | 42 | ||
43 | For all startup modes cyblafb chooses a virtual x resolution of 2048, | ||
44 | the only exception is mode 1280x1024 in combination with 32 bpp. This | ||
45 | allows ywrap scrolling for all those modes if rotation is 0 or 2, and | ||
46 | also fast scrolling if rotation is 1 or 3. The default virtual y reso- | ||
47 | lution is 4096 for bpp == 8, 2048 for bpp==16 and 1024 for bpp == 32, | ||
48 | again with the only exception of 1280x1024 at 32 bpp. | ||
49 | |||
50 | Please do set your video memory size to 8 Mb in the Bios setup. Other | ||
51 | values will work, but performace is decreased for a lot of modes. | ||
52 | |||
43 | Mode changes using fbset | 53 | Mode changes using fbset |
44 | ======================== | 54 | ======================== |
45 | 55 | ||
@@ -54,20 +64,26 @@ Selecting Modes | |||
54 | - if a flat panel is found, cyblafb does not allow you | 64 | - if a flat panel is found, cyblafb does not allow you |
55 | to program a resolution higher than the physical | 65 | to program a resolution higher than the physical |
56 | resolution of the flat panel monitor | 66 | resolution of the flat panel monitor |
57 | - cyblafb does not allow xres to differ from xres_virtual | ||
58 | - cyblafb does not allow vclk to exceed 230 MHz. As 32 bpp | 67 | - cyblafb does not allow vclk to exceed 230 MHz. As 32 bpp |
59 | and (currently) 24 bit modes use a doubled vclk internally, | 68 | and (currently) 24 bit modes use a doubled vclk internally, |
60 | the dotclock limit as seen by fbset is 115 MHz for those | 69 | the dotclock limit as seen by fbset is 115 MHz for those |
61 | modes and 230 MHz for 8 and 16 bpp modes. | 70 | modes and 230 MHz for 8 and 16 bpp modes. |
71 | - cyblafb will allow you to select very high resolutions as | ||
72 | long as the hardware can be programmed to these modes. The | ||
73 | documented limit 1600x1200 is not enforced, but don't expect | ||
74 | perfect signal quality. | ||
62 | 75 | ||
63 | Any request that violates the rules given above will be ignored and | 76 | Any request that violates the rules given above will be either changed |
64 | fbset will return an error. | 77 | to something the hardware supports or an error value will be returned. |
65 | 78 | ||
66 | If you program a virtual y resolution higher than the hardware limit, | 79 | If you program a virtual y resolution higher than the hardware limit, |
67 | cyblafb will silently decrease that value to the highest possible | 80 | cyblafb will silently decrease that value to the highest possible |
68 | value. | 81 | value. The same is true for a virtual x resolution that is not |
82 | supported by the hardware. Cyblafb tries to adapt vyres first because | ||
83 | vxres decides if ywrap scrolling is possible or not. | ||
69 | 84 | ||
70 | Attempts to disable acceleration are ignored. | 85 | Attempts to disable acceleration are ignored, I believe that this is |
86 | safe. | ||
71 | 87 | ||
72 | Some video modes that should work do not work as expected. If you use | 88 | Some video modes that should work do not work as expected. If you use |
73 | the standard fb.modes, fbset 640x480-60 will program that mode, but | 89 | the standard fb.modes, fbset 640x480-60 will program that mode, but |
@@ -129,10 +145,6 @@ mode 640x480 or 800x600 or 1024x768 or 1280x1024 | |||
129 | verbosity 0 is the default, increase to at least 2 for every | 145 | verbosity 0 is the default, increase to at least 2 for every |
130 | bug report! | 146 | bug report! |
131 | 147 | ||
132 | vesafb allows cyblafb to be loaded after vesafb has been | ||
133 | loaded. See sections "Module unloading ...". | ||
134 | |||
135 | |||
136 | Development hints | 148 | Development hints |
137 | ================= | 149 | ================= |
138 | 150 | ||
@@ -195,7 +207,7 @@ a graphics mode. | |||
195 | After booting, load cyblafb without any mode and bpp parameter and assign | 207 | After booting, load cyblafb without any mode and bpp parameter and assign |
196 | cyblafb to individual ttys using con2fb, e.g.: | 208 | cyblafb to individual ttys using con2fb, e.g.: |
197 | 209 | ||
198 | modprobe cyblafb vesafb=1 | 210 | modprobe cyblafb |
199 | con2fb /dev/fb1 /dev/tty1 | 211 | con2fb /dev/fb1 /dev/tty1 |
200 | 212 | ||
201 | Unloading cyblafb works without problems after you assign vesafb to all | 213 | Unloading cyblafb works without problems after you assign vesafb to all |
@@ -203,4 +215,3 @@ ttys again, e.g.: | |||
203 | 215 | ||
204 | con2fb /dev/fb0 /dev/tty1 | 216 | con2fb /dev/fb0 /dev/tty1 |
205 | rmmod cyblafb | 217 | rmmod cyblafb |
206 | |||
diff --git a/Documentation/fb/cyblafb/whatsnew b/Documentation/fb/cyblafb/whatsnew new file mode 100644 index 000000000000..76c07a26e044 --- /dev/null +++ b/Documentation/fb/cyblafb/whatsnew | |||
@@ -0,0 +1,29 @@ | |||
1 | 0.62 | ||
2 | ==== | ||
3 | |||
4 | - the vesafb parameter has been removed as I decided to allow the | ||
5 | feature without any special parameter. | ||
6 | |||
7 | - Cyblafb does not use the vga style of panning any longer, now the | ||
8 | "right view" register in the graphics engine IO space is used. Without | ||
9 | that change it was impossible to use all available memory, and without | ||
10 | access to all available memory it is impossible to ywrap. | ||
11 | |||
12 | - The imageblit function now uses hardware acceleration for all font | ||
13 | widths. Hardware blitting across pixel column 2048 is broken in the | ||
14 | cyberblade/i1 graphics core, but we work around that hardware bug. | ||
15 | |||
16 | - modes with vxres != xres are supported now. | ||
17 | |||
18 | - ywrap scrolling is supported now and the default. This is a big | ||
19 | performance gain. | ||
20 | |||
21 | - default video modes use vyres > yres and vxres > xres to allow | ||
22 | almost optimal scrolling speed for normal and rotated screens | ||
23 | |||
24 | - some features mainly usefull for debugging the upper layers of the | ||
25 | framebuffer system have been added, have a look at the code | ||
26 | |||
27 | - fixed: Oops after unloading cyblafb when reading /proc/io* | ||
28 | |||
29 | - we work around some bugs of the higher framebuffer layers. | ||
diff --git a/Documentation/filesystems/ext3.txt b/Documentation/filesystems/ext3.txt index 9840d5b8d5b9..22e4040564d5 100644 --- a/Documentation/filesystems/ext3.txt +++ b/Documentation/filesystems/ext3.txt | |||
@@ -22,6 +22,11 @@ journal=inum When a journal already exists, this option is | |||
22 | the inode which will represent the ext3 file | 22 | the inode which will represent the ext3 file |
23 | system's journal file. | 23 | system's journal file. |
24 | 24 | ||
25 | journal_dev=devnum When the external journal device's major/minor numbers | ||
26 | have changed, this option allows to specify the new | ||
27 | journal location. The journal device is identified | ||
28 | through its new major/minor numbers encoded in devnum. | ||
29 | |||
25 | noload Don't load the journal on mounting. | 30 | noload Don't load the journal on mounting. |
26 | 31 | ||
27 | data=journal All data are committed into the journal prior | 32 | data=journal All data are committed into the journal prior |
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index d4773565ea2f..a4dcf42c2fd9 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -1302,6 +1302,23 @@ VM has token based thrashing control mechanism and uses the token to prevent | |||
1302 | unnecessary page faults in thrashing situation. The unit of the value is | 1302 | unnecessary page faults in thrashing situation. The unit of the value is |
1303 | second. The value would be useful to tune thrashing behavior. | 1303 | second. The value would be useful to tune thrashing behavior. |
1304 | 1304 | ||
1305 | drop_caches | ||
1306 | ----------- | ||
1307 | |||
1308 | Writing to this will cause the kernel to drop clean caches, dentries and | ||
1309 | inodes from memory, causing that memory to become free. | ||
1310 | |||
1311 | To free pagecache: | ||
1312 | echo 1 > /proc/sys/vm/drop_caches | ||
1313 | To free dentries and inodes: | ||
1314 | echo 2 > /proc/sys/vm/drop_caches | ||
1315 | To free pagecache, dentries and inodes: | ||
1316 | echo 3 > /proc/sys/vm/drop_caches | ||
1317 | |||
1318 | As this is a non-destructive operation and dirty objects are not freeable, the | ||
1319 | user should run `sync' first. | ||
1320 | |||
1321 | |||
1305 | 2.5 /proc/sys/dev - Device specific parameters | 1322 | 2.5 /proc/sys/dev - Device specific parameters |
1306 | ---------------------------------------------- | 1323 | ---------------------------------------------- |
1307 | 1324 | ||
diff --git a/Documentation/filesystems/ramfs-rootfs-initramfs.txt b/Documentation/filesystems/ramfs-rootfs-initramfs.txt index b3404a032596..60ab61e54e8a 100644 --- a/Documentation/filesystems/ramfs-rootfs-initramfs.txt +++ b/Documentation/filesystems/ramfs-rootfs-initramfs.txt | |||
@@ -143,12 +143,26 @@ as the following example: | |||
143 | dir /mnt 755 0 0 | 143 | dir /mnt 755 0 0 |
144 | file /init initramfs/init.sh 755 0 0 | 144 | file /init initramfs/init.sh 755 0 0 |
145 | 145 | ||
146 | Run "usr/gen_init_cpio" (after the kernel build) to get a usage message | ||
147 | documenting the above file format. | ||
148 | |||
146 | One advantage of the text file is that root access is not required to | 149 | One advantage of the text file is that root access is not required to |
147 | set permissions or create device nodes in the new archive. (Note that those | 150 | set permissions or create device nodes in the new archive. (Note that those |
148 | two example "file" entries expect to find files named "init.sh" and "busybox" in | 151 | two example "file" entries expect to find files named "init.sh" and "busybox" in |
149 | a directory called "initramfs", under the linux-2.6.* directory. See | 152 | a directory called "initramfs", under the linux-2.6.* directory. See |
150 | Documentation/early-userspace/README for more details.) | 153 | Documentation/early-userspace/README for more details.) |
151 | 154 | ||
155 | The kernel does not depend on external cpio tools, gen_init_cpio is created | ||
156 | from usr/gen_init_cpio.c which is entirely self-contained, and the kernel's | ||
157 | boot-time extractor is also (obviously) self-contained. However, if you _do_ | ||
158 | happen to have cpio installed, the following command line can extract the | ||
159 | generated cpio image back into its component files: | ||
160 | |||
161 | cpio -i -d -H newc -F initramfs_data.cpio --no-absolute-filenames | ||
162 | |||
163 | Contents of initramfs: | ||
164 | ---------------------- | ||
165 | |||
152 | If you don't already understand what shared libraries, devices, and paths | 166 | If you don't already understand what shared libraries, devices, and paths |
153 | you need to get a minimal root filesystem up and running, here are some | 167 | you need to get a minimal root filesystem up and running, here are some |
154 | references: | 168 | references: |
@@ -161,13 +175,69 @@ designed to be a tiny C library to statically link early userspace | |||
161 | code against, along with some related utilities. It is BSD licensed. | 175 | code against, along with some related utilities. It is BSD licensed. |
162 | 176 | ||
163 | I use uClibc (http://www.uclibc.org) and busybox (http://www.busybox.net) | 177 | I use uClibc (http://www.uclibc.org) and busybox (http://www.busybox.net) |
164 | myself. These are LGPL and GPL, respectively. | 178 | myself. These are LGPL and GPL, respectively. (A self-contained initramfs |
179 | package is planned for the busybox 1.2 release.) | ||
165 | 180 | ||
166 | In theory you could use glibc, but that's not well suited for small embedded | 181 | In theory you could use glibc, but that's not well suited for small embedded |
167 | uses like this. (A "hello world" program statically linked against glibc is | 182 | uses like this. (A "hello world" program statically linked against glibc is |
168 | over 400k. With uClibc it's 7k. Also note that glibc dlopens libnss to do | 183 | over 400k. With uClibc it's 7k. Also note that glibc dlopens libnss to do |
169 | name lookups, even when otherwise statically linked.) | 184 | name lookups, even when otherwise statically linked.) |
170 | 185 | ||
186 | Why cpio rather than tar? | ||
187 | ------------------------- | ||
188 | |||
189 | This decision was made back in December, 2001. The discussion started here: | ||
190 | |||
191 | http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1538.html | ||
192 | |||
193 | And spawned a second thread (specifically on tar vs cpio), starting here: | ||
194 | |||
195 | http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1587.html | ||
196 | |||
197 | The quick and dirty summary version (which is no substitute for reading | ||
198 | the above threads) is: | ||
199 | |||
200 | 1) cpio is a standard. It's decades old (from the AT&T days), and already | ||
201 | widely used on Linux (inside RPM, Red Hat's device driver disks). Here's | ||
202 | a Linux Journal article about it from 1996: | ||
203 | |||
204 | http://www.linuxjournal.com/article/1213 | ||
205 | |||
206 | It's not as popular as tar because the traditional cpio command line tools | ||
207 | require _truly_hideous_ command line arguments. But that says nothing | ||
208 | either way about the archive format, and there are alternative tools, | ||
209 | such as: | ||
210 | |||
211 | http://freshmeat.net/projects/afio/ | ||
212 | |||
213 | 2) The cpio archive format chosen by the kernel is simpler and cleaner (and | ||
214 | thus easier to create and parse) than any of the (literally dozens of) | ||
215 | various tar archive formats. The complete initramfs archive format is | ||
216 | explained in buffer-format.txt, created in usr/gen_init_cpio.c, and | ||
217 | extracted in init/initramfs.c. All three together come to less than 26k | ||
218 | total of human-readable text. | ||
219 | |||
220 | 3) The GNU project standardizing on tar is approximately as relevant as | ||
221 | Windows standardizing on zip. Linux is not part of either, and is free | ||
222 | to make its own technical decisions. | ||
223 | |||
224 | 4) Since this is a kernel internal format, it could easily have been | ||
225 | something brand new. The kernel provides its own tools to create and | ||
226 | extract this format anyway. Using an existing standard was preferable, | ||
227 | but not essential. | ||
228 | |||
229 | 5) Al Viro made the decision (quote: "tar is ugly as hell and not going to be | ||
230 | supported on the kernel side"): | ||
231 | |||
232 | http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1540.html | ||
233 | |||
234 | explained his reasoning: | ||
235 | |||
236 | http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1550.html | ||
237 | http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1638.html | ||
238 | |||
239 | and, most importantly, designed and implemented the initramfs code. | ||
240 | |||
171 | Future directions: | 241 | Future directions: |
172 | ------------------ | 242 | ------------------ |
173 | 243 | ||
diff --git a/Documentation/filesystems/relayfs.txt b/Documentation/filesystems/relayfs.txt index d803abed29f0..5832377b7340 100644 --- a/Documentation/filesystems/relayfs.txt +++ b/Documentation/filesystems/relayfs.txt | |||
@@ -44,30 +44,41 @@ relayfs can operate in a mode where it will overwrite data not yet | |||
44 | collected by userspace, and not wait for it to consume it. | 44 | collected by userspace, and not wait for it to consume it. |
45 | 45 | ||
46 | relayfs itself does not provide for communication of such data between | 46 | relayfs itself does not provide for communication of such data between |
47 | userspace and kernel, allowing the kernel side to remain simple and not | 47 | userspace and kernel, allowing the kernel side to remain simple and |
48 | impose a single interface on userspace. It does provide a separate | 48 | not impose a single interface on userspace. It does provide a set of |
49 | helper though, described below. | 49 | examples and a separate helper though, described below. |
50 | |||
51 | klog and relay-apps example code | ||
52 | ================================ | ||
53 | |||
54 | relayfs itself is ready to use, but to make things easier, a couple | ||
55 | simple utility functions and a set of examples are provided. | ||
56 | |||
57 | The relay-apps example tarball, available on the relayfs sourceforge | ||
58 | site, contains a set of self-contained examples, each consisting of a | ||
59 | pair of .c files containing boilerplate code for each of the user and | ||
60 | kernel sides of a relayfs application; combined these two sets of | ||
61 | boilerplate code provide glue to easily stream data to disk, without | ||
62 | having to bother with mundane housekeeping chores. | ||
63 | |||
64 | The 'klog debugging functions' patch (klog.patch in the relay-apps | ||
65 | tarball) provides a couple of high-level logging functions to the | ||
66 | kernel which allow writing formatted text or raw data to a channel, | ||
67 | regardless of whether a channel to write into exists or not, or | ||
68 | whether relayfs is compiled into the kernel or is configured as a | ||
69 | module. These functions allow you to put unconditional 'trace' | ||
70 | statements anywhere in the kernel or kernel modules; only when there | ||
71 | is a 'klog handler' registered will data actually be logged (see the | ||
72 | klog and kleak examples for details). | ||
73 | |||
74 | It is of course possible to use relayfs from scratch i.e. without | ||
75 | using any of the relay-apps example code or klog, but you'll have to | ||
76 | implement communication between userspace and kernel, allowing both to | ||
77 | convey the state of buffers (full, empty, amount of padding). | ||
78 | |||
79 | klog and the relay-apps examples can be found in the relay-apps | ||
80 | tarball on http://relayfs.sourceforge.net | ||
50 | 81 | ||
51 | klog, relay-app & librelay | ||
52 | ========================== | ||
53 | |||
54 | relayfs itself is ready to use, but to make things easier, two | ||
55 | additional systems are provided. klog is a simple wrapper to make | ||
56 | writing formatted text or raw data to a channel simpler, regardless of | ||
57 | whether a channel to write into exists or not, or whether relayfs is | ||
58 | compiled into the kernel or is configured as a module. relay-app is | ||
59 | the kernel counterpart of userspace librelay.c, combined these two | ||
60 | files provide glue to easily stream data to disk, without having to | ||
61 | bother with housekeeping. klog and relay-app can be used together, | ||
62 | with klog providing high-level logging functions to the kernel and | ||
63 | relay-app taking care of kernel-user control and disk-logging chores. | ||
64 | |||
65 | It is possible to use relayfs without relay-app & librelay, but you'll | ||
66 | have to implement communication between userspace and kernel, allowing | ||
67 | both to convey the state of buffers (full, empty, amount of padding). | ||
68 | |||
69 | klog, relay-app and librelay can be found in the relay-apps tarball on | ||
70 | http://relayfs.sourceforge.net | ||
71 | 82 | ||
72 | The relayfs user space API | 83 | The relayfs user space API |
73 | ========================== | 84 | ========================== |
@@ -125,6 +136,8 @@ Here's a summary of the API relayfs provides to in-kernel clients: | |||
125 | relay_reset(chan) | 136 | relay_reset(chan) |
126 | relayfs_create_dir(name, parent) | 137 | relayfs_create_dir(name, parent) |
127 | relayfs_remove_dir(dentry) | 138 | relayfs_remove_dir(dentry) |
139 | relayfs_create_file(name, parent, mode, fops, data) | ||
140 | relayfs_remove_file(dentry) | ||
128 | 141 | ||
129 | channel management typically called on instigation of userspace: | 142 | channel management typically called on instigation of userspace: |
130 | 143 | ||
@@ -141,6 +154,8 @@ Here's a summary of the API relayfs provides to in-kernel clients: | |||
141 | subbuf_start(buf, subbuf, prev_subbuf, prev_padding) | 154 | subbuf_start(buf, subbuf, prev_subbuf, prev_padding) |
142 | buf_mapped(buf, filp) | 155 | buf_mapped(buf, filp) |
143 | buf_unmapped(buf, filp) | 156 | buf_unmapped(buf, filp) |
157 | create_buf_file(filename, parent, mode, buf, is_global) | ||
158 | remove_buf_file(dentry) | ||
144 | 159 | ||
145 | helper functions: | 160 | helper functions: |
146 | 161 | ||
@@ -320,6 +335,71 @@ forces a sub-buffer switch on all the channel buffers, and can be used | |||
320 | to finalize and process the last sub-buffers before the channel is | 335 | to finalize and process the last sub-buffers before the channel is |
321 | closed. | 336 | closed. |
322 | 337 | ||
338 | Creating non-relay files | ||
339 | ------------------------ | ||
340 | |||
341 | relay_open() automatically creates files in the relayfs filesystem to | ||
342 | represent the per-cpu kernel buffers; it's often useful for | ||
343 | applications to be able to create their own files alongside the relay | ||
344 | files in the relayfs filesystem as well e.g. 'control' files much like | ||
345 | those created in /proc or debugfs for similar purposes, used to | ||
346 | communicate control information between the kernel and user sides of a | ||
347 | relayfs application. For this purpose the relayfs_create_file() and | ||
348 | relayfs_remove_file() API functions exist. For relayfs_create_file(), | ||
349 | the caller passes in a set of user-defined file operations to be used | ||
350 | for the file and an optional void * to a user-specified data item, | ||
351 | which will be accessible via inode->u.generic_ip (see the relay-apps | ||
352 | tarball for examples). The file_operations are a required parameter | ||
353 | to relayfs_create_file() and thus the semantics of these files are | ||
354 | completely defined by the caller. | ||
355 | |||
356 | See the relay-apps tarball at http://relayfs.sourceforge.net for | ||
357 | examples of how these non-relay files are meant to be used. | ||
358 | |||
359 | Creating relay files in other filesystems | ||
360 | ----------------------------------------- | ||
361 | |||
362 | By default of course, relay_open() creates relay files in the relayfs | ||
363 | filesystem. Because relay_file_operations is exported, however, it's | ||
364 | also possible to create and use relay files in other pseudo-filesytems | ||
365 | such as debugfs. | ||
366 | |||
367 | For this purpose, two callback functions are provided, | ||
368 | create_buf_file() and remove_buf_file(). create_buf_file() is called | ||
369 | once for each per-cpu buffer from relay_open() to allow the client to | ||
370 | create a file to be used to represent the corresponding buffer; if | ||
371 | this callback is not defined, the default implementation will create | ||
372 | and return a file in the relayfs filesystem to represent the buffer. | ||
373 | The callback should return the dentry of the file created to represent | ||
374 | the relay buffer. Note that the parent directory passed to | ||
375 | relay_open() (and passed along to the callback), if specified, must | ||
376 | exist in the same filesystem the new relay file is created in. If | ||
377 | create_buf_file() is defined, remove_buf_file() must also be defined; | ||
378 | it's responsible for deleting the file(s) created in create_buf_file() | ||
379 | and is called during relay_close(). | ||
380 | |||
381 | The create_buf_file() implementation can also be defined in such a way | ||
382 | as to allow the creation of a single 'global' buffer instead of the | ||
383 | default per-cpu set. This can be useful for applications interested | ||
384 | mainly in seeing the relative ordering of system-wide events without | ||
385 | the need to bother with saving explicit timestamps for the purpose of | ||
386 | merging/sorting per-cpu files in a postprocessing step. | ||
387 | |||
388 | To have relay_open() create a global buffer, the create_buf_file() | ||
389 | implementation should set the value of the is_global outparam to a | ||
390 | non-zero value in addition to creating the file that will be used to | ||
391 | represent the single buffer. In the case of a global buffer, | ||
392 | create_buf_file() and remove_buf_file() will be called only once. The | ||
393 | normal channel-writing functions e.g. relay_write() can still be used | ||
394 | - writes from any cpu will transparently end up in the global buffer - | ||
395 | but since it is a global buffer, callers should make sure they use the | ||
396 | proper locking for such a buffer, either by wrapping writes in a | ||
397 | spinlock, or by copying a write function from relayfs_fs.h and | ||
398 | creating a local version that internally does the proper locking. | ||
399 | |||
400 | See the 'exported-relayfile' examples in the relay-apps tarball for | ||
401 | examples of creating and using relay files in debugfs. | ||
402 | |||
323 | Misc | 403 | Misc |
324 | ---- | 404 | ---- |
325 | 405 | ||
diff --git a/Documentation/filesystems/spufs.txt b/Documentation/filesystems/spufs.txt new file mode 100644 index 000000000000..8edc3952eff4 --- /dev/null +++ b/Documentation/filesystems/spufs.txt | |||
@@ -0,0 +1,521 @@ | |||
1 | SPUFS(2) Linux Programmer's Manual SPUFS(2) | ||
2 | |||
3 | |||
4 | |||
5 | NAME | ||
6 | spufs - the SPU file system | ||
7 | |||
8 | |||
9 | DESCRIPTION | ||
10 | The SPU file system is used on PowerPC machines that implement the Cell | ||
11 | Broadband Engine Architecture in order to access Synergistic Processor | ||
12 | Units (SPUs). | ||
13 | |||
14 | The file system provides a name space similar to posix shared memory or | ||
15 | message queues. Users that have write permissions on the file system | ||
16 | can use spu_create(2) to establish SPU contexts in the spufs root. | ||
17 | |||
18 | Every SPU context is represented by a directory containing a predefined | ||
19 | set of files. These files can be used for manipulating the state of the | ||
20 | logical SPU. Users can change permissions on those files, but not actu- | ||
21 | ally add or remove files. | ||
22 | |||
23 | |||
24 | MOUNT OPTIONS | ||
25 | uid=<uid> | ||
26 | set the user owning the mount point, the default is 0 (root). | ||
27 | |||
28 | gid=<gid> | ||
29 | set the group owning the mount point, the default is 0 (root). | ||
30 | |||
31 | |||
32 | FILES | ||
33 | The files in spufs mostly follow the standard behavior for regular sys- | ||
34 | tem calls like read(2) or write(2), but often support only a subset of | ||
35 | the operations supported on regular file systems. This list details the | ||
36 | supported operations and the deviations from the behaviour in the | ||
37 | respective man pages. | ||
38 | |||
39 | All files that support the read(2) operation also support readv(2) and | ||
40 | all files that support the write(2) operation also support writev(2). | ||
41 | All files support the access(2) and stat(2) family of operations, but | ||
42 | only the st_mode, st_nlink, st_uid and st_gid fields of struct stat | ||
43 | contain reliable information. | ||
44 | |||
45 | All files support the chmod(2)/fchmod(2) and chown(2)/fchown(2) opera- | ||
46 | tions, but will not be able to grant permissions that contradict the | ||
47 | possible operations, e.g. read access on the wbox file. | ||
48 | |||
49 | The current set of files is: | ||
50 | |||
51 | |||
52 | /mem | ||
53 | the contents of the local storage memory of the SPU. This can be | ||
54 | accessed like a regular shared memory file and contains both code and | ||
55 | data in the address space of the SPU. The possible operations on an | ||
56 | open mem file are: | ||
57 | |||
58 | read(2), pread(2), write(2), pwrite(2), lseek(2) | ||
59 | These operate as documented, with the exception that seek(2), | ||
60 | write(2) and pwrite(2) are not supported beyond the end of the | ||
61 | file. The file size is the size of the local storage of the SPU, | ||
62 | which normally is 256 kilobytes. | ||
63 | |||
64 | mmap(2) | ||
65 | Mapping mem into the process address space gives access to the | ||
66 | SPU local storage within the process address space. Only | ||
67 | MAP_SHARED mappings are allowed. | ||
68 | |||
69 | |||
70 | /mbox | ||
71 | The first SPU to CPU communication mailbox. This file is read-only and | ||
72 | can be read in units of 32 bits. The file can only be used in non- | ||
73 | blocking mode and it even poll() will not block on it. The possible | ||
74 | operations on an open mbox file are: | ||
75 | |||
76 | read(2) | ||
77 | If a count smaller than four is requested, read returns -1 and | ||
78 | sets errno to EINVAL. If there is no data available in the mail | ||
79 | box, the return value is set to -1 and errno becomes EAGAIN. | ||
80 | When data has been read successfully, four bytes are placed in | ||
81 | the data buffer and the value four is returned. | ||
82 | |||
83 | |||
84 | /ibox | ||
85 | The second SPU to CPU communication mailbox. This file is similar to | ||
86 | the first mailbox file, but can be read in blocking I/O mode, and the | ||
87 | poll familiy of system calls can be used to wait for it. The possible | ||
88 | operations on an open ibox file are: | ||
89 | |||
90 | read(2) | ||
91 | If a count smaller than four is requested, read returns -1 and | ||
92 | sets errno to EINVAL. If there is no data available in the mail | ||
93 | box and the file descriptor has been opened with O_NONBLOCK, the | ||
94 | return value is set to -1 and errno becomes EAGAIN. | ||
95 | |||
96 | If there is no data available in the mail box and the file | ||
97 | descriptor has been opened without O_NONBLOCK, the call will | ||
98 | block until the SPU writes to its interrupt mailbox channel. | ||
99 | When data has been read successfully, four bytes are placed in | ||
100 | the data buffer and the value four is returned. | ||
101 | |||
102 | poll(2) | ||
103 | Poll on the ibox file returns (POLLIN | POLLRDNORM) whenever | ||
104 | data is available for reading. | ||
105 | |||
106 | |||
107 | /wbox | ||
108 | The CPU to SPU communation mailbox. It is write-only can can be written | ||
109 | in units of 32 bits. If the mailbox is full, write() will block and | ||
110 | poll can be used to wait for it becoming empty again. The possible | ||
111 | operations on an open wbox file are: write(2) If a count smaller than | ||
112 | four is requested, write returns -1 and sets errno to EINVAL. If there | ||
113 | is no space available in the mail box and the file descriptor has been | ||
114 | opened with O_NONBLOCK, the return value is set to -1 and errno becomes | ||
115 | EAGAIN. | ||
116 | |||
117 | If there is no space available in the mail box and the file descriptor | ||
118 | has been opened without O_NONBLOCK, the call will block until the SPU | ||
119 | reads from its PPE mailbox channel. When data has been read success- | ||
120 | fully, four bytes are placed in the data buffer and the value four is | ||
121 | returned. | ||
122 | |||
123 | poll(2) | ||
124 | Poll on the ibox file returns (POLLOUT | POLLWRNORM) whenever | ||
125 | space is available for writing. | ||
126 | |||
127 | |||
128 | /mbox_stat | ||
129 | /ibox_stat | ||
130 | /wbox_stat | ||
131 | Read-only files that contain the length of the current queue, i.e. how | ||
132 | many words can be read from mbox or ibox or how many words can be | ||
133 | written to wbox without blocking. The files can be read only in 4-byte | ||
134 | units and return a big-endian binary integer number. The possible | ||
135 | operations on an open *box_stat file are: | ||
136 | |||
137 | read(2) | ||
138 | If a count smaller than four is requested, read returns -1 and | ||
139 | sets errno to EINVAL. Otherwise, a four byte value is placed in | ||
140 | the data buffer, containing the number of elements that can be | ||
141 | read from (for mbox_stat and ibox_stat) or written to (for | ||
142 | wbox_stat) the respective mail box without blocking or resulting | ||
143 | in EAGAIN. | ||
144 | |||
145 | |||
146 | /npc | ||
147 | /decr | ||
148 | /decr_status | ||
149 | /spu_tag_mask | ||
150 | /event_mask | ||
151 | /srr0 | ||
152 | Internal registers of the SPU. The representation is an ASCII string | ||
153 | with the numeric value of the next instruction to be executed. These | ||
154 | can be used in read/write mode for debugging, but normal operation of | ||
155 | programs should not rely on them because access to any of them except | ||
156 | npc requires an SPU context save and is therefore very inefficient. | ||
157 | |||
158 | The contents of these files are: | ||
159 | |||
160 | npc Next Program Counter | ||
161 | |||
162 | decr SPU Decrementer | ||
163 | |||
164 | decr_status Decrementer Status | ||
165 | |||
166 | spu_tag_mask MFC tag mask for SPU DMA | ||
167 | |||
168 | event_mask Event mask for SPU interrupts | ||
169 | |||
170 | srr0 Interrupt Return address register | ||
171 | |||
172 | |||
173 | The possible operations on an open npc, decr, decr_status, | ||
174 | spu_tag_mask, event_mask or srr0 file are: | ||
175 | |||
176 | read(2) | ||
177 | When the count supplied to the read call is shorter than the | ||
178 | required length for the pointer value plus a newline character, | ||
179 | subsequent reads from the same file descriptor will result in | ||
180 | completing the string, regardless of changes to the register by | ||
181 | a running SPU task. When a complete string has been read, all | ||
182 | subsequent read operations will return zero bytes and a new file | ||
183 | descriptor needs to be opened to read the value again. | ||
184 | |||
185 | write(2) | ||
186 | A write operation on the file results in setting the register to | ||
187 | the value given in the string. The string is parsed from the | ||
188 | beginning to the first non-numeric character or the end of the | ||
189 | buffer. Subsequent writes to the same file descriptor overwrite | ||
190 | the previous setting. | ||
191 | |||
192 | |||
193 | /fpcr | ||
194 | This file gives access to the Floating Point Status and Control Regis- | ||
195 | ter as a four byte long file. The operations on the fpcr file are: | ||
196 | |||
197 | read(2) | ||
198 | If a count smaller than four is requested, read returns -1 and | ||
199 | sets errno to EINVAL. Otherwise, a four byte value is placed in | ||
200 | the data buffer, containing the current value of the fpcr regis- | ||
201 | ter. | ||
202 | |||
203 | write(2) | ||
204 | If a count smaller than four is requested, write returns -1 and | ||
205 | sets errno to EINVAL. Otherwise, a four byte value is copied | ||
206 | from the data buffer, updating the value of the fpcr register. | ||
207 | |||
208 | |||
209 | /signal1 | ||
210 | /signal2 | ||
211 | The two signal notification channels of an SPU. These are read-write | ||
212 | files that operate on a 32 bit word. Writing to one of these files | ||
213 | triggers an interrupt on the SPU. The value writting to the signal | ||
214 | files can be read from the SPU through a channel read or from host user | ||
215 | space through the file. After the value has been read by the SPU, it | ||
216 | is reset to zero. The possible operations on an open signal1 or sig- | ||
217 | nal2 file are: | ||
218 | |||
219 | read(2) | ||
220 | If a count smaller than four is requested, read returns -1 and | ||
221 | sets errno to EINVAL. Otherwise, a four byte value is placed in | ||
222 | the data buffer, containing the current value of the specified | ||
223 | signal notification register. | ||
224 | |||
225 | write(2) | ||
226 | If a count smaller than four is requested, write returns -1 and | ||
227 | sets errno to EINVAL. Otherwise, a four byte value is copied | ||
228 | from the data buffer, updating the value of the specified signal | ||
229 | notification register. The signal notification register will | ||
230 | either be replaced with the input data or will be updated to the | ||
231 | bitwise OR or the old value and the input data, depending on the | ||
232 | contents of the signal1_type, or signal2_type respectively, | ||
233 | file. | ||
234 | |||
235 | |||
236 | /signal1_type | ||
237 | /signal2_type | ||
238 | These two files change the behavior of the signal1 and signal2 notifi- | ||
239 | cation files. The contain a numerical ASCII string which is read as | ||
240 | either "1" or "0". In mode 0 (overwrite), the hardware replaces the | ||
241 | contents of the signal channel with the data that is written to it. in | ||
242 | mode 1 (logical OR), the hardware accumulates the bits that are subse- | ||
243 | quently written to it. The possible operations on an open signal1_type | ||
244 | or signal2_type file are: | ||
245 | |||
246 | read(2) | ||
247 | When the count supplied to the read call is shorter than the | ||
248 | required length for the digit plus a newline character, subse- | ||
249 | quent reads from the same file descriptor will result in com- | ||
250 | pleting the string. When a complete string has been read, all | ||
251 | subsequent read operations will return zero bytes and a new file | ||
252 | descriptor needs to be opened to read the value again. | ||
253 | |||
254 | write(2) | ||
255 | A write operation on the file results in setting the register to | ||
256 | the value given in the string. The string is parsed from the | ||
257 | beginning to the first non-numeric character or the end of the | ||
258 | buffer. Subsequent writes to the same file descriptor overwrite | ||
259 | the previous setting. | ||
260 | |||
261 | |||
262 | EXAMPLES | ||
263 | /etc/fstab entry | ||
264 | none /spu spufs gid=spu 0 0 | ||
265 | |||
266 | |||
267 | AUTHORS | ||
268 | Arnd Bergmann <arndb@de.ibm.com>, Mark Nutter <mnutter@us.ibm.com>, | ||
269 | Ulrich Weigand <Ulrich.Weigand@de.ibm.com> | ||
270 | |||
271 | SEE ALSO | ||
272 | capabilities(7), close(2), spu_create(2), spu_run(2), spufs(7) | ||
273 | |||
274 | |||
275 | |||
276 | Linux 2005-09-28 SPUFS(2) | ||
277 | |||
278 | ------------------------------------------------------------------------------ | ||
279 | |||
280 | SPU_RUN(2) Linux Programmer's Manual SPU_RUN(2) | ||
281 | |||
282 | |||
283 | |||
284 | NAME | ||
285 | spu_run - execute an spu context | ||
286 | |||
287 | |||
288 | SYNOPSIS | ||
289 | #include <sys/spu.h> | ||
290 | |||
291 | int spu_run(int fd, unsigned int *npc, unsigned int *event); | ||
292 | |||
293 | DESCRIPTION | ||
294 | The spu_run system call is used on PowerPC machines that implement the | ||
295 | Cell Broadband Engine Architecture in order to access Synergistic Pro- | ||
296 | cessor Units (SPUs). It uses the fd that was returned from spu_cre- | ||
297 | ate(2) to address a specific SPU context. When the context gets sched- | ||
298 | uled to a physical SPU, it starts execution at the instruction pointer | ||
299 | passed in npc. | ||
300 | |||
301 | Execution of SPU code happens synchronously, meaning that spu_run does | ||
302 | not return while the SPU is still running. If there is a need to exe- | ||
303 | cute SPU code in parallel with other code on either the main CPU or | ||
304 | other SPUs, you need to create a new thread of execution first, e.g. | ||
305 | using the pthread_create(3) call. | ||
306 | |||
307 | When spu_run returns, the current value of the SPU instruction pointer | ||
308 | is written back to npc, so you can call spu_run again without updating | ||
309 | the pointers. | ||
310 | |||
311 | event can be a NULL pointer or point to an extended status code that | ||
312 | gets filled when spu_run returns. It can be one of the following con- | ||
313 | stants: | ||
314 | |||
315 | SPE_EVENT_DMA_ALIGNMENT | ||
316 | A DMA alignment error | ||
317 | |||
318 | SPE_EVENT_SPE_DATA_SEGMENT | ||
319 | A DMA segmentation error | ||
320 | |||
321 | SPE_EVENT_SPE_DATA_STORAGE | ||
322 | A DMA storage error | ||
323 | |||
324 | If NULL is passed as the event argument, these errors will result in a | ||
325 | signal delivered to the calling process. | ||
326 | |||
327 | RETURN VALUE | ||
328 | spu_run returns the value of the spu_status register or -1 to indicate | ||
329 | an error and set errno to one of the error codes listed below. The | ||
330 | spu_status register value contains a bit mask of status codes and | ||
331 | optionally a 14 bit code returned from the stop-and-signal instruction | ||
332 | on the SPU. The bit masks for the status codes are: | ||
333 | |||
334 | 0x02 SPU was stopped by stop-and-signal. | ||
335 | |||
336 | 0x04 SPU was stopped by halt. | ||
337 | |||
338 | 0x08 SPU is waiting for a channel. | ||
339 | |||
340 | 0x10 SPU is in single-step mode. | ||
341 | |||
342 | 0x20 SPU has tried to execute an invalid instruction. | ||
343 | |||
344 | 0x40 SPU has tried to access an invalid channel. | ||
345 | |||
346 | 0x3fff0000 | ||
347 | The bits masked with this value contain the code returned from | ||
348 | stop-and-signal. | ||
349 | |||
350 | There are always one or more of the lower eight bits set or an error | ||
351 | code is returned from spu_run. | ||
352 | |||
353 | ERRORS | ||
354 | EAGAIN or EWOULDBLOCK | ||
355 | fd is in non-blocking mode and spu_run would block. | ||
356 | |||
357 | EBADF fd is not a valid file descriptor. | ||
358 | |||
359 | EFAULT npc is not a valid pointer or status is neither NULL nor a valid | ||
360 | pointer. | ||
361 | |||
362 | EINTR A signal occured while spu_run was in progress. The npc value | ||
363 | has been updated to the new program counter value if necessary. | ||
364 | |||
365 | EINVAL fd is not a file descriptor returned from spu_create(2). | ||
366 | |||
367 | ENOMEM Insufficient memory was available to handle a page fault result- | ||
368 | ing from an MFC direct memory access. | ||
369 | |||
370 | ENOSYS the functionality is not provided by the current system, because | ||
371 | either the hardware does not provide SPUs or the spufs module is | ||
372 | not loaded. | ||
373 | |||
374 | |||
375 | NOTES | ||
376 | spu_run is meant to be used from libraries that implement a more | ||
377 | abstract interface to SPUs, not to be used from regular applications. | ||
378 | See http://www.bsc.es/projects/deepcomputing/linuxoncell/ for the rec- | ||
379 | ommended libraries. | ||
380 | |||
381 | |||
382 | CONFORMING TO | ||
383 | This call is Linux specific and only implemented by the ppc64 architec- | ||
384 | ture. Programs using this system call are not portable. | ||
385 | |||
386 | |||
387 | BUGS | ||
388 | The code does not yet fully implement all features lined out here. | ||
389 | |||
390 | |||
391 | AUTHOR | ||
392 | Arnd Bergmann <arndb@de.ibm.com> | ||
393 | |||
394 | SEE ALSO | ||
395 | capabilities(7), close(2), spu_create(2), spufs(7) | ||
396 | |||
397 | |||
398 | |||
399 | Linux 2005-09-28 SPU_RUN(2) | ||
400 | |||
401 | ------------------------------------------------------------------------------ | ||
402 | |||
403 | SPU_CREATE(2) Linux Programmer's Manual SPU_CREATE(2) | ||
404 | |||
405 | |||
406 | |||
407 | NAME | ||
408 | spu_create - create a new spu context | ||
409 | |||
410 | |||
411 | SYNOPSIS | ||
412 | #include <sys/types.h> | ||
413 | #include <sys/spu.h> | ||
414 | |||
415 | int spu_create(const char *pathname, int flags, mode_t mode); | ||
416 | |||
417 | DESCRIPTION | ||
418 | The spu_create system call is used on PowerPC machines that implement | ||
419 | the Cell Broadband Engine Architecture in order to access Synergistic | ||
420 | Processor Units (SPUs). It creates a new logical context for an SPU in | ||
421 | pathname and returns a handle to associated with it. pathname must | ||
422 | point to a non-existing directory in the mount point of the SPU file | ||
423 | system (spufs). When spu_create is successful, a directory gets cre- | ||
424 | ated on pathname and it is populated with files. | ||
425 | |||
426 | The returned file handle can only be passed to spu_run(2) or closed, | ||
427 | other operations are not defined on it. When it is closed, all associ- | ||
428 | ated directory entries in spufs are removed. When the last file handle | ||
429 | pointing either inside of the context directory or to this file | ||
430 | descriptor is closed, the logical SPU context is destroyed. | ||
431 | |||
432 | The parameter flags can be zero or any bitwise or'd combination of the | ||
433 | following constants: | ||
434 | |||
435 | SPU_RAWIO | ||
436 | Allow mapping of some of the hardware registers of the SPU into | ||
437 | user space. This flag requires the CAP_SYS_RAWIO capability, see | ||
438 | capabilities(7). | ||
439 | |||
440 | The mode parameter specifies the permissions used for creating the new | ||
441 | directory in spufs. mode is modified with the user's umask(2) value | ||
442 | and then used for both the directory and the files contained in it. The | ||
443 | file permissions mask out some more bits of mode because they typically | ||
444 | support only read or write access. See stat(2) for a full list of the | ||
445 | possible mode values. | ||
446 | |||
447 | |||
448 | RETURN VALUE | ||
449 | spu_create returns a new file descriptor. It may return -1 to indicate | ||
450 | an error condition and set errno to one of the error codes listed | ||
451 | below. | ||
452 | |||
453 | |||
454 | ERRORS | ||
455 | EACCESS | ||
456 | The current user does not have write access on the spufs mount | ||
457 | point. | ||
458 | |||
459 | EEXIST An SPU context already exists at the given path name. | ||
460 | |||
461 | EFAULT pathname is not a valid string pointer in the current address | ||
462 | space. | ||
463 | |||
464 | EINVAL pathname is not a directory in the spufs mount point. | ||
465 | |||
466 | ELOOP Too many symlinks were found while resolving pathname. | ||
467 | |||
468 | EMFILE The process has reached its maximum open file limit. | ||
469 | |||
470 | ENAMETOOLONG | ||
471 | pathname was too long. | ||
472 | |||
473 | ENFILE The system has reached the global open file limit. | ||
474 | |||
475 | ENOENT Part of pathname could not be resolved. | ||
476 | |||
477 | ENOMEM The kernel could not allocate all resources required. | ||
478 | |||
479 | ENOSPC There are not enough SPU resources available to create a new | ||
480 | context or the user specific limit for the number of SPU con- | ||
481 | texts has been reached. | ||
482 | |||
483 | ENOSYS the functionality is not provided by the current system, because | ||
484 | either the hardware does not provide SPUs or the spufs module is | ||
485 | not loaded. | ||
486 | |||
487 | ENOTDIR | ||
488 | A part of pathname is not a directory. | ||
489 | |||
490 | |||
491 | |||
492 | NOTES | ||
493 | spu_create is meant to be used from libraries that implement a more | ||
494 | abstract interface to SPUs, not to be used from regular applications. | ||
495 | See http://www.bsc.es/projects/deepcomputing/linuxoncell/ for the rec- | ||
496 | ommended libraries. | ||
497 | |||
498 | |||
499 | FILES | ||
500 | pathname must point to a location beneath the mount point of spufs. By | ||
501 | convention, it gets mounted in /spu. | ||
502 | |||
503 | |||
504 | CONFORMING TO | ||
505 | This call is Linux specific and only implemented by the ppc64 architec- | ||
506 | ture. Programs using this system call are not portable. | ||
507 | |||
508 | |||
509 | BUGS | ||
510 | The code does not yet fully implement all features lined out here. | ||
511 | |||
512 | |||
513 | AUTHOR | ||
514 | Arnd Bergmann <arndb@de.ibm.com> | ||
515 | |||
516 | SEE ALSO | ||
517 | capabilities(7), close(2), spu_run(2), spufs(7) | ||
518 | |||
519 | |||
520 | |||
521 | Linux 2005-09-28 SPU_CREATE(2) | ||
diff --git a/Documentation/keys-request-key.txt b/Documentation/keys-request-key.txt index 5f2b9c5edbb5..22488d791168 100644 --- a/Documentation/keys-request-key.txt +++ b/Documentation/keys-request-key.txt | |||
@@ -56,10 +56,12 @@ A request proceeds in the following manner: | |||
56 | (4) request_key() then forks and executes /sbin/request-key with a new session | 56 | (4) request_key() then forks and executes /sbin/request-key with a new session |
57 | keyring that contains a link to auth key V. | 57 | keyring that contains a link to auth key V. |
58 | 58 | ||
59 | (5) /sbin/request-key execs an appropriate program to perform the actual | 59 | (5) /sbin/request-key assumes the authority associated with key U. |
60 | |||
61 | (6) /sbin/request-key execs an appropriate program to perform the actual | ||
60 | instantiation. | 62 | instantiation. |
61 | 63 | ||
62 | (6) The program may want to access another key from A's context (say a | 64 | (7) The program may want to access another key from A's context (say a |
63 | Kerberos TGT key). It just requests the appropriate key, and the keyring | 65 | Kerberos TGT key). It just requests the appropriate key, and the keyring |
64 | search notes that the session keyring has auth key V in its bottom level. | 66 | search notes that the session keyring has auth key V in its bottom level. |
65 | 67 | ||
@@ -67,19 +69,19 @@ A request proceeds in the following manner: | |||
67 | UID, GID, groups and security info of process A as if it was process A, | 69 | UID, GID, groups and security info of process A as if it was process A, |
68 | and come up with key W. | 70 | and come up with key W. |
69 | 71 | ||
70 | (7) The program then does what it must to get the data with which to | 72 | (8) The program then does what it must to get the data with which to |
71 | instantiate key U, using key W as a reference (perhaps it contacts a | 73 | instantiate key U, using key W as a reference (perhaps it contacts a |
72 | Kerberos server using the TGT) and then instantiates key U. | 74 | Kerberos server using the TGT) and then instantiates key U. |
73 | 75 | ||
74 | (8) Upon instantiating key U, auth key V is automatically revoked so that it | 76 | (9) Upon instantiating key U, auth key V is automatically revoked so that it |
75 | may not be used again. | 77 | may not be used again. |
76 | 78 | ||
77 | (9) The program then exits 0 and request_key() deletes key V and returns key | 79 | (10) The program then exits 0 and request_key() deletes key V and returns key |
78 | U to the caller. | 80 | U to the caller. |
79 | 81 | ||
80 | This also extends further. If key W (step 5 above) didn't exist, key W would be | 82 | This also extends further. If key W (step 7 above) didn't exist, key W would be |
81 | created uninstantiated, another auth key (X) would be created [as per step 3] | 83 | created uninstantiated, another auth key (X) would be created (as per step 3) |
82 | and another copy of /sbin/request-key spawned [as per step 4]; but the context | 84 | and another copy of /sbin/request-key spawned (as per step 4); but the context |
83 | specified by auth key X will still be process A, as it was in auth key V. | 85 | specified by auth key X will still be process A, as it was in auth key V. |
84 | 86 | ||
85 | This is because process A's keyrings can't simply be attached to | 87 | This is because process A's keyrings can't simply be attached to |
@@ -138,8 +140,8 @@ until one succeeds: | |||
138 | 140 | ||
139 | (3) The process's session keyring is searched. | 141 | (3) The process's session keyring is searched. |
140 | 142 | ||
141 | (4) If the process has a request_key() authorisation key in its session | 143 | (4) If the process has assumed the authority associated with a request_key() |
142 | keyring then: | 144 | authorisation key then: |
143 | 145 | ||
144 | (a) If extant, the calling process's thread keyring is searched. | 146 | (a) If extant, the calling process's thread keyring is searched. |
145 | 147 | ||
diff --git a/Documentation/keys.txt b/Documentation/keys.txt index 6304db59bfe4..aaa01b0e3ee9 100644 --- a/Documentation/keys.txt +++ b/Documentation/keys.txt | |||
@@ -308,6 +308,8 @@ process making the call: | |||
308 | KEY_SPEC_USER_KEYRING -4 UID-specific keyring | 308 | KEY_SPEC_USER_KEYRING -4 UID-specific keyring |
309 | KEY_SPEC_USER_SESSION_KEYRING -5 UID-session keyring | 309 | KEY_SPEC_USER_SESSION_KEYRING -5 UID-session keyring |
310 | KEY_SPEC_GROUP_KEYRING -6 GID-specific keyring | 310 | KEY_SPEC_GROUP_KEYRING -6 GID-specific keyring |
311 | KEY_SPEC_REQKEY_AUTH_KEY -7 assumed request_key() | ||
312 | authorisation key | ||
311 | 313 | ||
312 | 314 | ||
313 | The main syscalls are: | 315 | The main syscalls are: |
@@ -498,7 +500,11 @@ The keyctl syscall functions are: | |||
498 | keyring is full, error ENFILE will result. | 500 | keyring is full, error ENFILE will result. |
499 | 501 | ||
500 | The link procedure checks the nesting of the keyrings, returning ELOOP if | 502 | The link procedure checks the nesting of the keyrings, returning ELOOP if |
501 | it appears to deep or EDEADLK if the link would introduce a cycle. | 503 | it appears too deep or EDEADLK if the link would introduce a cycle. |
504 | |||
505 | Any links within the keyring to keys that match the new key in terms of | ||
506 | type and description will be discarded from the keyring as the new one is | ||
507 | added. | ||
502 | 508 | ||
503 | 509 | ||
504 | (*) Unlink a key or keyring from another keyring: | 510 | (*) Unlink a key or keyring from another keyring: |
@@ -628,6 +634,41 @@ The keyctl syscall functions are: | |||
628 | there is one, otherwise the user default session keyring. | 634 | there is one, otherwise the user default session keyring. |
629 | 635 | ||
630 | 636 | ||
637 | (*) Set the timeout on a key. | ||
638 | |||
639 | long keyctl(KEYCTL_SET_TIMEOUT, key_serial_t key, unsigned timeout); | ||
640 | |||
641 | This sets or clears the timeout on a key. The timeout can be 0 to clear | ||
642 | the timeout or a number of seconds to set the expiry time that far into | ||
643 | the future. | ||
644 | |||
645 | The process must have attribute modification access on a key to set its | ||
646 | timeout. Timeouts may not be set with this function on negative, revoked | ||
647 | or expired keys. | ||
648 | |||
649 | |||
650 | (*) Assume the authority granted to instantiate a key | ||
651 | |||
652 | long keyctl(KEYCTL_ASSUME_AUTHORITY, key_serial_t key); | ||
653 | |||
654 | This assumes or divests the authority required to instantiate the | ||
655 | specified key. Authority can only be assumed if the thread has the | ||
656 | authorisation key associated with the specified key in its keyrings | ||
657 | somewhere. | ||
658 | |||
659 | Once authority is assumed, searches for keys will also search the | ||
660 | requester's keyrings using the requester's security label, UID, GID and | ||
661 | groups. | ||
662 | |||
663 | If the requested authority is unavailable, error EPERM will be returned, | ||
664 | likewise if the authority has been revoked because the target key is | ||
665 | already instantiated. | ||
666 | |||
667 | If the specified key is 0, then any assumed authority will be divested. | ||
668 | |||
669 | The assumed authorititive key is inherited across fork and exec. | ||
670 | |||
671 | |||
631 | =============== | 672 | =============== |
632 | KERNEL SERVICES | 673 | KERNEL SERVICES |
633 | =============== | 674 | =============== |
diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt index 0541fe1de704..0ea5a0c6e827 100644 --- a/Documentation/kprobes.txt +++ b/Documentation/kprobes.txt | |||
@@ -411,7 +411,8 @@ int init_module(void) | |||
411 | printk("Couldn't find %s to plant kprobe\n", "do_fork"); | 411 | printk("Couldn't find %s to plant kprobe\n", "do_fork"); |
412 | return -1; | 412 | return -1; |
413 | } | 413 | } |
414 | if ((ret = register_kprobe(&kp) < 0)) { | 414 | ret = register_kprobe(&kp); |
415 | if (ret < 0) { | ||
415 | printk("register_kprobe failed, returned %d\n", ret); | 416 | printk("register_kprobe failed, returned %d\n", ret); |
416 | return -1; | 417 | return -1; |
417 | } | 418 | } |
diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt index b0fe41da007b..8d8b4e5ea184 100644 --- a/Documentation/networking/bonding.txt +++ b/Documentation/networking/bonding.txt | |||
@@ -945,7 +945,6 @@ bond0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 | |||
945 | collisions:0 txqueuelen:0 | 945 | collisions:0 txqueuelen:0 |
946 | 946 | ||
947 | eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 | 947 | eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 |
948 | inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0 | ||
949 | UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 | 948 | UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 |
950 | RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0 | 949 | RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0 |
951 | TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0 | 950 | TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0 |
@@ -953,7 +952,6 @@ eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 | |||
953 | Interrupt:10 Base address:0x1080 | 952 | Interrupt:10 Base address:0x1080 |
954 | 953 | ||
955 | eth1 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 | 954 | eth1 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 |
956 | inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0 | ||
957 | UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 | 955 | UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 |
958 | RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0 | 956 | RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0 |
959 | TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0 | 957 | TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0 |
diff --git a/Documentation/powerpc/00-INDEX b/Documentation/powerpc/00-INDEX index e7bea0a407b4..d6d65b9bcfe3 100644 --- a/Documentation/powerpc/00-INDEX +++ b/Documentation/powerpc/00-INDEX | |||
@@ -8,12 +8,18 @@ please mail me. | |||
8 | cpu_features.txt | 8 | cpu_features.txt |
9 | - info on how we support a variety of CPUs with minimal compile-time | 9 | - info on how we support a variety of CPUs with minimal compile-time |
10 | options. | 10 | options. |
11 | eeh-pci-error-recovery.txt | ||
12 | - info on PCI Bus EEH Error Recovery | ||
13 | hvcs.txt | ||
14 | - IBM "Hypervisor Virtual Console Server" Installation Guide | ||
15 | mpc52xx.txt | ||
16 | - Linux 2.6.x on MPC52xx family | ||
11 | ppc_htab.txt | 17 | ppc_htab.txt |
12 | - info about the Linux/PPC /proc/ppc_htab entry | 18 | - info about the Linux/PPC /proc/ppc_htab entry |
13 | smp.txt | ||
14 | - use and state info about Linux/PPC on MP machines | ||
15 | SBC8260_memory_mapping.txt | 19 | SBC8260_memory_mapping.txt |
16 | - EST SBC8260 board info | 20 | - EST SBC8260 board info |
21 | smp.txt | ||
22 | - use and state info about Linux/PPC on MP machines | ||
17 | sound.txt | 23 | sound.txt |
18 | - info on sound support under Linux/PPC | 24 | - info on sound support under Linux/PPC |
19 | zImage_layout.txt | 25 | zImage_layout.txt |
diff --git a/Documentation/sysctl/vm.txt b/Documentation/sysctl/vm.txt index 2f1aae32a5d9..6910c0136f8d 100644 --- a/Documentation/sysctl/vm.txt +++ b/Documentation/sysctl/vm.txt | |||
@@ -26,12 +26,13 @@ Currently, these files are in /proc/sys/vm: | |||
26 | - min_free_kbytes | 26 | - min_free_kbytes |
27 | - laptop_mode | 27 | - laptop_mode |
28 | - block_dump | 28 | - block_dump |
29 | - drop-caches | ||
29 | 30 | ||
30 | ============================================================== | 31 | ============================================================== |
31 | 32 | ||
32 | dirty_ratio, dirty_background_ratio, dirty_expire_centisecs, | 33 | dirty_ratio, dirty_background_ratio, dirty_expire_centisecs, |
33 | dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode, | 34 | dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode, |
34 | block_dump, swap_token_timeout: | 35 | block_dump, swap_token_timeout, drop-caches: |
35 | 36 | ||
36 | See Documentation/filesystems/proc.txt | 37 | See Documentation/filesystems/proc.txt |
37 | 38 | ||
@@ -102,3 +103,20 @@ This is used to force the Linux VM to keep a minimum number | |||
102 | of kilobytes free. The VM uses this number to compute a pages_min | 103 | of kilobytes free. The VM uses this number to compute a pages_min |
103 | value for each lowmem zone in the system. Each lowmem zone gets | 104 | value for each lowmem zone in the system. Each lowmem zone gets |
104 | a number of reserved free pages based proportionally on its size. | 105 | a number of reserved free pages based proportionally on its size. |
106 | |||
107 | ============================================================== | ||
108 | |||
109 | percpu_pagelist_fraction | ||
110 | |||
111 | This is the fraction of pages at most (high mark pcp->high) in each zone that | ||
112 | are allocated for each per cpu page list. The min value for this is 8. It | ||
113 | means that we don't allow more than 1/8th of pages in each zone to be | ||
114 | allocated in any single per_cpu_pagelist. This entry only changes the value | ||
115 | of hot per cpu pagelists. User can specify a number like 100 to allocate | ||
116 | 1/100th of each zone to each per cpu page list. | ||
117 | |||
118 | The batch value of each per cpu pagelist is also updated as a result. It is | ||
119 | set to pcp->high/4. The upper limit of batch is (PAGE_SHIFT * 8) | ||
120 | |||
121 | The initial value is zero. Kernel does not use this value at boot time to set | ||
122 | the high water marks for each per cpu page list. | ||
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv index 330246ac80f8..74fb085e178b 100644 --- a/Documentation/video4linux/CARDLIST.bttv +++ b/Documentation/video4linux/CARDLIST.bttv | |||
@@ -141,3 +141,4 @@ | |||
141 | 140 -> Osprey 440 [0070:ff07] | 141 | 140 -> Osprey 440 [0070:ff07] |
142 | 141 -> Asound Skyeye PCTV | 142 | 141 -> Asound Skyeye PCTV |
143 | 142 -> Sabrent TV-FM (bttv version) | 143 | 142 -> Sabrent TV-FM (bttv version) |
144 | 143 -> Hauppauge ImpactVCB (bt878) [0070:13eb] | ||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index a1017d1a85d4..34b6e59f2968 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -16,7 +16,7 @@ | |||
16 | 15 -> DViCO FusionHDTV DVB-T1 [18ac:db00] | 16 | 15 -> DViCO FusionHDTV DVB-T1 [18ac:db00] |
17 | 16 -> KWorld LTV883RF | 17 | 16 -> KWorld LTV883RF |
18 | 17 -> DViCO FusionHDTV 3 Gold-Q [18ac:d810] | 18 | 17 -> DViCO FusionHDTV 3 Gold-Q [18ac:d810] |
19 | 18 -> Hauppauge Nova-T DVB-T [0070:9002] | 19 | 18 -> Hauppauge Nova-T DVB-T [0070:9002,0070:9001] |
20 | 19 -> Conexant DVB-T reference design [14f1:0187] | 20 | 19 -> Conexant DVB-T reference design [14f1:0187] |
21 | 20 -> Provideo PV259 [1540:2580] | 21 | 20 -> Provideo PV259 [1540:2580] |
22 | 21 -> DViCO FusionHDTV DVB-T Plus [18ac:db10] | 22 | 21 -> DViCO FusionHDTV DVB-T Plus [18ac:db10] |
@@ -35,3 +35,11 @@ | |||
35 | 34 -> ATI HDTV Wonder [1002:a101] | 35 | 34 -> ATI HDTV Wonder [1002:a101] |
36 | 35 -> WinFast DTV1000-T [107d:665f] | 36 | 35 -> WinFast DTV1000-T [107d:665f] |
37 | 36 -> AVerTV 303 (M126) [1461:000a] | 37 | 36 -> AVerTV 303 (M126) [1461:000a] |
38 | 37 -> Hauppauge Nova-S-Plus DVB-S [0070:9201,0070:9202] | ||
39 | 38 -> Hauppauge Nova-SE2 DVB-S [0070:9200] | ||
40 | 39 -> KWorld DVB-S 100 [17de:08b2] | ||
41 | 40 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid [0070:9400,0070:9402] | ||
42 | 41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802] | ||
43 | 42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025] | ||
44 | 43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1] | ||
45 | 44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50] | ||
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index efb708ec116a..cb3a59bbeb17 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -56,7 +56,7 @@ | |||
56 | 55 -> LifeView FlyDVB-T DUO [5168:0502,5168:0306] | 56 | 55 -> LifeView FlyDVB-T DUO [5168:0502,5168:0306] |
57 | 56 -> Avermedia AVerTV 307 [1461:a70a] | 57 | 56 -> Avermedia AVerTV 307 [1461:a70a] |
58 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] | 58 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] |
59 | 58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0370,1421:1370] | 59 | 58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0351,1421:0370,1421:1370] |
60 | 59 -> Kworld/Tevion V-Stream Xpert TV PVR7134 | 60 | 59 -> Kworld/Tevion V-Stream Xpert TV PVR7134 |
61 | 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502] | 61 | 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502] |
62 | 61 -> Philips TOUGH DVB-T reference design [1131:2004] | 62 | 61 -> Philips TOUGH DVB-T reference design [1131:2004] |
@@ -81,4 +81,5 @@ | |||
81 | 80 -> ASUS Digimatrix TV [1043:0210] | 81 | 80 -> ASUS Digimatrix TV [1043:0210] |
82 | 81 -> Philips Tiger reference design [1131:2018] | 82 | 81 -> Philips Tiger reference design [1131:2018] |
83 | 82 -> MSI TV@Anywhere plus [1462:6231] | 83 | 82 -> MSI TV@Anywhere plus [1462:6231] |
84 | 84 | 83 -> Terratec Cinergy 250 PCI TV [153b:1160] | |
85 | 84 -> LifeView FlyDVB Trio [5168:0319] | ||
diff --git a/Documentation/video4linux/CARDLIST.tuner b/Documentation/video4linux/CARDLIST.tuner index 9d6544ea9f41..0bf3d5bf9ef8 100644 --- a/Documentation/video4linux/CARDLIST.tuner +++ b/Documentation/video4linux/CARDLIST.tuner | |||
@@ -40,7 +40,7 @@ tuner=38 - Philips PAL/SECAM multi (FM1216ME MK3) | |||
40 | tuner=39 - LG NTSC (newer TAPC series) | 40 | tuner=39 - LG NTSC (newer TAPC series) |
41 | tuner=40 - HITACHI V7-J180AT | 41 | tuner=40 - HITACHI V7-J180AT |
42 | tuner=41 - Philips PAL_MK (FI1216 MK) | 42 | tuner=41 - Philips PAL_MK (FI1216 MK) |
43 | tuner=42 - Philips 1236D ATSC/NTSC daul in | 43 | tuner=42 - Philips 1236D ATSC/NTSC dual in |
44 | tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F) | 44 | tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F) |
45 | tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant) | 45 | tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant) |
46 | tuner=45 - Microtune 4049 FM5 | 46 | tuner=45 - Microtune 4049 FM5 |
@@ -50,7 +50,7 @@ tuner=48 - Tenna TNF 8831 BGFF) | |||
50 | tuner=49 - Microtune 4042 FI5 ATSC/NTSC dual in | 50 | tuner=49 - Microtune 4042 FI5 ATSC/NTSC dual in |
51 | tuner=50 - TCL 2002N | 51 | tuner=50 - TCL 2002N |
52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) | 52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) |
53 | tuner=52 - Thomson DDT 7610 (ATSC/NTSC) | 53 | tuner=52 - Thomson DTT 7610 (ATSC/NTSC) |
54 | tuner=53 - Philips FQ1286 | 54 | tuner=53 - Philips FQ1286 |
55 | tuner=54 - tda8290+75 | 55 | tuner=54 - tda8290+75 |
56 | tuner=55 - TCL 2002MB | 56 | tuner=55 - TCL 2002MB |
@@ -58,7 +58,7 @@ tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) | |||
58 | tuner=57 - Philips FQ1236A MK4 | 58 | tuner=57 - Philips FQ1236A MK4 |
59 | tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF | 59 | tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF |
60 | tuner=59 - Ymec TVision TVF-5533MF | 60 | tuner=59 - Ymec TVision TVF-5533MF |
61 | tuner=60 - Thomson DDT 7611 (ATSC/NTSC) | 61 | tuner=60 - Thomson DTT 761X (ATSC/NTSC) |
62 | tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF | 62 | tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF |
63 | tuner=62 - Philips TEA5767HN FM Radio | 63 | tuner=62 - Philips TEA5767HN FM Radio |
64 | tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner | 64 | tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner |