diff options
author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-09-23 13:40:40 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-10-24 06:12:35 -0400 |
commit | 9f4b9ec63cff0048aae43b0119e64f10a7887836 (patch) | |
tree | 89197ca2450aed44260e9b33a6d12145591e4875 | |
parent | 503c5bf9fa4622195bef0b46ebcc0ab6afeefed8 (diff) |
Documentation/oops-tracing.txt: convert to ReST markup
- Add a document title;
- use .. note:: markup;
- use quote blocks where needed;
- use monotonic fonts for config options and file names;
- adjust whitespaces and blank lines;
- replace _foo_ by **foo**;
- while here, remove whitespaces at the end of paragraph;
- add it to the user's book.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r-- | Documentation/oops-tracing.txt | 255 |
1 files changed, 138 insertions, 117 deletions
diff --git a/Documentation/oops-tracing.txt b/Documentation/oops-tracing.txt index f3ac05cc23e4..3e25ea7349ee 100644 --- a/Documentation/oops-tracing.txt +++ b/Documentation/oops-tracing.txt | |||
@@ -1,7 +1,13 @@ | |||
1 | NOTE: ksymoops is useless on 2.6. Please use the Oops in its original format | 1 | OOPS tracing |
2 | (from dmesg, etc). Ignore any references in this or other docs to "decoding | 2 | ============ |
3 | the Oops" or "running it through ksymoops". If you post an Oops from 2.6 that | 3 | |
4 | has been run through ksymoops, people will just tell you to repost it. | 4 | .. note:: |
5 | |||
6 | ``ksymoops`` is useless on 2.6 or upper. Please use the Oops in its original | ||
7 | format (from ``dmesg``, etc). Ignore any references in this or other docs to | ||
8 | "decoding the Oops" or "running it through ksymoops". | ||
9 | If you post an Oops from 2.6+ that has been run through ``ksymoops``, | ||
10 | people will just tell you to repost it. | ||
5 | 11 | ||
6 | Quick Summary | 12 | Quick Summary |
7 | ------------- | 13 | ------------- |
@@ -12,7 +18,7 @@ If you are unsure send it to the person responsible for the code relevant to | |||
12 | what you were doing. If it occurs repeatably try and describe how to recreate | 18 | what you were doing. If it occurs repeatably try and describe how to recreate |
13 | it. That's worth even more than the oops. | 19 | it. That's worth even more than the oops. |
14 | 20 | ||
15 | If you are totally stumped as to whom to send the report, send it to | 21 | If you are totally stumped as to whom to send the report, send it to |
16 | linux-kernel@vger.kernel.org. Thanks for your help in making Linux as | 22 | linux-kernel@vger.kernel.org. Thanks for your help in making Linux as |
17 | stable as humanly possible. | 23 | stable as humanly possible. |
18 | 24 | ||
@@ -20,24 +26,25 @@ Where is the Oops? | |||
20 | ---------------------- | 26 | ---------------------- |
21 | 27 | ||
22 | Normally the Oops text is read from the kernel buffers by klogd and | 28 | Normally the Oops text is read from the kernel buffers by klogd and |
23 | handed to syslogd which writes it to a syslog file, typically | 29 | handed to ``syslogd`` which writes it to a syslog file, typically |
24 | /var/log/messages (depends on /etc/syslog.conf). Sometimes klogd dies, | 30 | ``/var/log/messages`` (depends on ``/etc/syslog.conf``). Sometimes ``klogd`` |
25 | in which case you can run dmesg > file to read the data from the kernel | 31 | dies, in which case you can run ``dmesg > file`` to read the data from the |
26 | buffers and save it. Or you can cat /proc/kmsg > file, however you | 32 | kernel buffers and save it. Or you can ``cat /proc/kmsg > file``, however you |
27 | have to break in to stop the transfer, kmsg is a "never ending file". | 33 | have to break in to stop the transfer, ``kmsg`` is a "never ending file". |
28 | If the machine has crashed so badly that you cannot enter commands or | 34 | If the machine has crashed so badly that you cannot enter commands or |
29 | the disk is not available then you have three options :- | 35 | the disk is not available then you have three options : |
30 | 36 | ||
31 | (1) Hand copy the text from the screen and type it in after the machine | 37 | (1) Hand copy the text from the screen and type it in after the machine |
32 | has restarted. Messy but it is the only option if you have not | 38 | has restarted. Messy but it is the only option if you have not |
33 | planned for a crash. Alternatively, you can take a picture of | 39 | planned for a crash. Alternatively, you can take a picture of |
34 | the screen with a digital camera - not nice, but better than | 40 | the screen with a digital camera - not nice, but better than |
35 | nothing. If the messages scroll off the top of the console, you | 41 | nothing. If the messages scroll off the top of the console, you |
36 | may find that booting with a higher resolution (eg, vga=791) | 42 | may find that booting with a higher resolution (eg, ``vga=791``) |
37 | will allow you to read more of the text. (Caveat: This needs vesafb, | 43 | will allow you to read more of the text. (Caveat: This needs ``vesafb``, |
38 | so won't help for 'early' oopses) | 44 | so won't help for 'early' oopses) |
39 | 45 | ||
40 | (2) Boot with a serial console (see Documentation/serial-console.txt), | 46 | (2) Boot with a serial console (see |
47 | :ref:`Documentation/serial-console.txt <serial_console>`), | ||
41 | run a null modem to a second machine and capture the output there | 48 | run a null modem to a second machine and capture the output there |
42 | using your favourite communication program. Minicom works well. | 49 | using your favourite communication program. Minicom works well. |
43 | 50 | ||
@@ -49,117 +56,126 @@ the disk is not available then you have three options :- | |||
49 | Full Information | 56 | Full Information |
50 | ---------------- | 57 | ---------------- |
51 | 58 | ||
52 | NOTE: the message from Linus below applies to 2.4 kernel. I have preserved it | 59 | .. note:: |
53 | for historical reasons, and because some of the information in it still | 60 | |
54 | applies. Especially, please ignore any references to ksymoops. | 61 | the message from Linus below applies to 2.4 kernel. I have preserved it |
62 | for historical reasons, and because some of the information in it still | ||
63 | applies. Especially, please ignore any references to ksymoops. | ||
55 | 64 | ||
56 | From: Linus Torvalds <torvalds@osdl.org> | 65 | :: |
57 | 66 | ||
58 | How to track down an Oops.. [originally a mail to linux-kernel] | 67 | From: Linus Torvalds <torvalds@osdl.org> |
59 | 68 | ||
60 | The main trick is having 5 years of experience with those pesky oops | 69 | How to track down an Oops.. [originally a mail to linux-kernel] |
61 | messages ;-) | ||
62 | 70 | ||
63 | Actually, there are things you can do that make this easier. I have two | 71 | The main trick is having 5 years of experience with those pesky oops |
64 | separate approaches: | 72 | messages ;-) |
73 | |||
74 | Actually, there are things you can do that make this easier. I have two | ||
75 | separate approaches:: | ||
65 | 76 | ||
66 | gdb /usr/src/linux/vmlinux | 77 | gdb /usr/src/linux/vmlinux |
67 | gdb> disassemble <offending_function> | 78 | gdb> disassemble <offending_function> |
68 | 79 | ||
69 | That's the easy way to find the problem, at least if the bug-report is | 80 | That's the easy way to find the problem, at least if the bug-report is |
70 | well made (like this one was - run through ksymoops to get the | 81 | well made (like this one was - run through ``ksymoops`` to get the |
71 | information of which function and the offset in the function that it | 82 | information of which function and the offset in the function that it |
72 | happened in). | 83 | happened in). |
73 | 84 | ||
74 | Oh, it helps if the report happens on a kernel that is compiled with the | 85 | Oh, it helps if the report happens on a kernel that is compiled with the |
75 | same compiler and similar setups. | 86 | same compiler and similar setups. |
76 | 87 | ||
77 | The other thing to do is disassemble the "Code:" part of the bug report: | 88 | The other thing to do is disassemble the "Code:" part of the bug report: |
78 | ksymoops will do this too with the correct tools, but if you don't have | 89 | ksymoops will do this too with the correct tools, but if you don't have |
79 | the tools you can just do a silly program: | 90 | the tools you can just do a silly program:: |
80 | 91 | ||
81 | char str[] = "\xXX\xXX\xXX..."; | 92 | char str[] = "\xXX\xXX\xXX..."; |
82 | main(){} | 93 | main(){} |
83 | 94 | ||
84 | and compile it with gcc -g and then do "disassemble str" (where the "XX" | 95 | and compile it with ``gcc -g`` and then do ``disassemble str`` (where the ``XX`` |
85 | stuff are the values reported by the Oops - you can just cut-and-paste | 96 | stuff are the values reported by the Oops - you can just cut-and-paste |
86 | and do a replace of spaces to "\x" - that's what I do, as I'm too lazy | 97 | and do a replace of spaces to ``\x`` - that's what I do, as I'm too lazy |
87 | to write a program to automate this all). | 98 | to write a program to automate this all). |
88 | 99 | ||
89 | Alternatively, you can use the shell script in scripts/decodecode. | 100 | Alternatively, you can use the shell script in ``scripts/decodecode``. |
90 | Its usage is: decodecode < oops.txt | 101 | Its usage is:: |
102 | |||
103 | decodecode < oops.txt | ||
91 | 104 | ||
92 | The hex bytes that follow "Code:" may (in some architectures) have a series | 105 | The hex bytes that follow "Code:" may (in some architectures) have a series |
93 | of bytes that precede the current instruction pointer as well as bytes at and | 106 | of bytes that precede the current instruction pointer as well as bytes at and |
94 | following the current instruction pointer. In some cases, one instruction | 107 | following the current instruction pointer. In some cases, one instruction |
95 | byte or word is surrounded by <> or (), as in "<86>" or "(f00d)". These | 108 | byte or word is surrounded by ``<>`` or ``()``, as in ``<86>`` or ``(f00d)``. |
96 | <> or () markings indicate the current instruction pointer. Example from | 109 | These ``<>`` or ``()`` markings indicate the current instruction pointer. |
97 | i386, split into multiple lines for readability: | 110 | |
111 | Example from i386, split into multiple lines for readability:: | ||
98 | 112 | ||
99 | Code: f9 0f 8d f9 00 00 00 8d 42 0c e8 dd 26 11 c7 a1 60 ea 2b f9 8b 50 08 a1 | 113 | Code: f9 0f 8d f9 00 00 00 8d 42 0c e8 dd 26 11 c7 a1 60 ea 2b f9 8b 50 08 a1 |
100 | 64 ea 2b f9 8d 34 82 8b 1e 85 db 74 6d 8b 15 60 ea 2b f9 <8b> 43 04 39 42 54 | 114 | 64 ea 2b f9 8d 34 82 8b 1e 85 db 74 6d 8b 15 60 ea 2b f9 <8b> 43 04 39 42 54 |
101 | 7e 04 40 89 42 54 8b 43 04 3b 05 00 f6 52 c0 | 115 | 7e 04 40 89 42 54 8b 43 04 3b 05 00 f6 52 c0 |
102 | 116 | ||
103 | Finally, if you want to see where the code comes from, you can do | 117 | Finally, if you want to see where the code comes from, you can do:: |
104 | 118 | ||
105 | cd /usr/src/linux | 119 | cd /usr/src/linux |
106 | make fs/buffer.s # or whatever file the bug happened in | 120 | make fs/buffer.s # or whatever file the bug happened in |
107 | 121 | ||
108 | and then you get a better idea of what happens than with the gdb | 122 | and then you get a better idea of what happens than with the gdb |
109 | disassembly. | 123 | disassembly. |
110 | 124 | ||
111 | Now, the trick is just then to combine all the data you have: the C | 125 | Now, the trick is just then to combine all the data you have: the C |
112 | sources (and general knowledge of what it _should_ do), the assembly | 126 | sources (and general knowledge of what it **should** do), the assembly |
113 | listing and the code disassembly (and additionally the register dump you | 127 | listing and the code disassembly (and additionally the register dump you |
114 | also get from the "oops" message - that can be useful to see _what_ the | 128 | also get from the "oops" message - that can be useful to see **what** the |
115 | corrupted pointers were, and when you have the assembler listing you can | 129 | corrupted pointers were, and when you have the assembler listing you can |
116 | also match the other registers to whatever C expressions they were used | 130 | also match the other registers to whatever C expressions they were used |
117 | for). | 131 | for). |
118 | 132 | ||
119 | Essentially, you just look at what doesn't match (in this case it was the | 133 | Essentially, you just look at what doesn't match (in this case it was the |
120 | "Code" disassembly that didn't match with what the compiler generated). | 134 | "Code" disassembly that didn't match with what the compiler generated). |
121 | Then you need to find out _why_ they don't match. Often it's simple - you | 135 | Then you need to find out **why** they don't match. Often it's simple - you |
122 | see that the code uses a NULL pointer and then you look at the code and | 136 | see that the code uses a NULL pointer and then you look at the code and |
123 | wonder how the NULL pointer got there, and if it's a valid thing to do | 137 | wonder how the NULL pointer got there, and if it's a valid thing to do |
124 | you just check against it.. | 138 | you just check against it.. |
125 | 139 | ||
126 | Now, if somebody gets the idea that this is time-consuming and requires | 140 | Now, if somebody gets the idea that this is time-consuming and requires |
127 | some small amount of concentration, you're right. Which is why I will | 141 | some small amount of concentration, you're right. Which is why I will |
128 | mostly just ignore any panic reports that don't have the symbol table | 142 | mostly just ignore any panic reports that don't have the symbol table |
129 | info etc looked up: it simply gets too hard to look it up (I have some | 143 | info etc looked up: it simply gets too hard to look it up (I have some |
130 | programs to search for specific patterns in the kernel code segment, and | 144 | programs to search for specific patterns in the kernel code segment, and |
131 | sometimes I have been able to look up those kinds of panics too, but | 145 | sometimes I have been able to look up those kinds of panics too, but |
132 | that really requires pretty good knowledge of the kernel just to be able | 146 | that really requires pretty good knowledge of the kernel just to be able |
133 | to pick out the right sequences etc..) | 147 | to pick out the right sequences etc..) |
134 | 148 | ||
135 | _Sometimes_ it happens that I just see the disassembled code sequence | 149 | **Sometimes** it happens that I just see the disassembled code sequence |
136 | from the panic, and I know immediately where it's coming from. That's when | 150 | from the panic, and I know immediately where it's coming from. That's when |
137 | I get worried that I've been doing this for too long ;-) | 151 | I get worried that I've been doing this for too long ;-) |
138 | 152 | ||
139 | Linus | 153 | Linus |
140 | 154 | ||
141 | 155 | ||
142 | --------------------------------------------------------------------------- | 156 | --------------------------------------------------------------------------- |
143 | Notes on Oops tracing with klogd: | 157 | |
158 | Notes on Oops tracing with ``klogd`` | ||
159 | ------------------------------------ | ||
144 | 160 | ||
145 | In order to help Linus and the other kernel developers there has been | 161 | In order to help Linus and the other kernel developers there has been |
146 | substantial support incorporated into klogd for processing protection | 162 | substantial support incorporated into ``klogd`` for processing protection |
147 | faults. In order to have full support for address resolution at least | 163 | faults. In order to have full support for address resolution at least |
148 | version 1.3-pl3 of the sysklogd package should be used. | 164 | version 1.3-pl3 of the ``sysklogd`` package should be used. |
149 | 165 | ||
150 | When a protection fault occurs the klogd daemon automatically | 166 | When a protection fault occurs the ``klogd`` daemon automatically |
151 | translates important addresses in the kernel log messages to their | 167 | translates important addresses in the kernel log messages to their |
152 | symbolic equivalents. This translated kernel message is then | 168 | symbolic equivalents. This translated kernel message is then |
153 | forwarded through whatever reporting mechanism klogd is using. The | 169 | forwarded through whatever reporting mechanism ``klogd`` is using. The |
154 | protection fault message can be simply cut out of the message files | 170 | protection fault message can be simply cut out of the message files |
155 | and forwarded to the kernel developers. | 171 | and forwarded to the kernel developers. |
156 | 172 | ||
157 | Two types of address resolution are performed by klogd. The first is | 173 | Two types of address resolution are performed by ``klogd``. The first is |
158 | static translation and the second is dynamic translation. Static | 174 | static translation and the second is dynamic translation. Static |
159 | translation uses the System.map file in much the same manner that | 175 | translation uses the System.map file in much the same manner that |
160 | ksymoops does. In order to do static translation the klogd daemon | 176 | ksymoops does. In order to do static translation the ``klogd`` daemon |
161 | must be able to find a system map file at daemon initialization time. | 177 | must be able to find a system map file at daemon initialization time. |
162 | See the klogd man page for information on how klogd searches for map | 178 | See the klogd man page for information on how ``klogd`` searches for map |
163 | files. | 179 | files. |
164 | 180 | ||
165 | Dynamic address translation is important when kernel loadable modules | 181 | Dynamic address translation is important when kernel loadable modules |
@@ -178,101 +194,106 @@ information available if the developer of the loadable module chose to | |||
178 | export symbol information from the module. | 194 | export symbol information from the module. |
179 | 195 | ||
180 | Since the kernel module environment can be dynamic there must be a | 196 | Since the kernel module environment can be dynamic there must be a |
181 | mechanism for notifying the klogd daemon when a change in module | 197 | mechanism for notifying the ``klogd`` daemon when a change in module |
182 | environment occurs. There are command line options available which | 198 | environment occurs. There are command line options available which |
183 | allow klogd to signal the currently executing daemon that symbol | 199 | allow klogd to signal the currently executing daemon that symbol |
184 | information should be refreshed. See the klogd manual page for more | 200 | information should be refreshed. See the ``klogd`` manual page for more |
185 | information. | 201 | information. |
186 | 202 | ||
187 | A patch is included with the sysklogd distribution which modifies the | 203 | A patch is included with the sysklogd distribution which modifies the |
188 | modules-2.0.0 package to automatically signal klogd whenever a module | 204 | ``modules-2.0.0`` package to automatically signal klogd whenever a module |
189 | is loaded or unloaded. Applying this patch provides essentially | 205 | is loaded or unloaded. Applying this patch provides essentially |
190 | seamless support for debugging protection faults which occur with | 206 | seamless support for debugging protection faults which occur with |
191 | kernel loadable modules. | 207 | kernel loadable modules. |
192 | 208 | ||
193 | The following is an example of a protection fault in a loadable module | 209 | The following is an example of a protection fault in a loadable module |
194 | processed by klogd: | 210 | processed by ``klogd``:: |
195 | --------------------------------------------------------------------------- | 211 | |
196 | Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc | 212 | Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc |
197 | Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 | 213 | Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 |
198 | Aug 29 09:51:01 blizard kernel: *pde = 00000000 | 214 | Aug 29 09:51:01 blizard kernel: *pde = 00000000 |
199 | Aug 29 09:51:01 blizard kernel: Oops: 0002 | 215 | Aug 29 09:51:01 blizard kernel: Oops: 0002 |
200 | Aug 29 09:51:01 blizard kernel: CPU: 0 | 216 | Aug 29 09:51:01 blizard kernel: CPU: 0 |
201 | Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] | 217 | Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] |
202 | Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 | 218 | Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 |
203 | Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c | 219 | Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c |
204 | Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c | 220 | Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c |
205 | Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 | 221 | Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 |
206 | Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) | 222 | Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) |
207 | Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 | 223 | Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 |
208 | Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 | 224 | Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 |
209 | Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 | 225 | Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 |
210 | Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] | 226 | Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] |
211 | Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3 | 227 | Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3 |
228 | |||
212 | --------------------------------------------------------------------------- | 229 | --------------------------------------------------------------------------- |
213 | 230 | ||
214 | Dr. G.W. Wettstein Oncology Research Div. Computing Facility | 231 | :: |
215 | Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com | 232 | |
216 | 820 4th St. N. | 233 | Dr. G.W. Wettstein Oncology Research Div. Computing Facility |
217 | Fargo, ND 58122 | 234 | Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com |
218 | Phone: 701-234-7556 | 235 | 820 4th St. N. |
236 | Fargo, ND 58122 | ||
237 | Phone: 701-234-7556 | ||
219 | 238 | ||
220 | 239 | ||
221 | --------------------------------------------------------------------------- | 240 | --------------------------------------------------------------------------- |
222 | Tainted kernels: | ||
223 | 241 | ||
224 | Some oops reports contain the string 'Tainted: ' after the program | 242 | Tainted kernels |
243 | --------------- | ||
244 | |||
245 | Some oops reports contain the string **'Tainted: '** after the program | ||
225 | counter. This indicates that the kernel has been tainted by some | 246 | counter. This indicates that the kernel has been tainted by some |
226 | mechanism. The string is followed by a series of position-sensitive | 247 | mechanism. The string is followed by a series of position-sensitive |
227 | characters, each representing a particular tainted value. | 248 | characters, each representing a particular tainted value. |
228 | 249 | ||
229 | 1: 'G' if all modules loaded have a GPL or compatible license, 'P' if | 250 | 1) 'G' if all modules loaded have a GPL or compatible license, 'P' if |
230 | any proprietary module has been loaded. Modules without a | 251 | any proprietary module has been loaded. Modules without a |
231 | MODULE_LICENSE or with a MODULE_LICENSE that is not recognised by | 252 | MODULE_LICENSE or with a MODULE_LICENSE that is not recognised by |
232 | insmod as GPL compatible are assumed to be proprietary. | 253 | insmod as GPL compatible are assumed to be proprietary. |
233 | 254 | ||
234 | 2: 'F' if any module was force loaded by "insmod -f", ' ' if all | 255 | 2) ``F`` if any module was force loaded by ``insmod -f``, ``' '`` if all |
235 | modules were loaded normally. | 256 | modules were loaded normally. |
236 | 257 | ||
237 | 3: 'S' if the oops occurred on an SMP kernel running on hardware that | 258 | 3) ``S`` if the oops occurred on an SMP kernel running on hardware that |
238 | hasn't been certified as safe to run multiprocessor. | 259 | hasn't been certified as safe to run multiprocessor. |
239 | Currently this occurs only on various Athlons that are not | 260 | Currently this occurs only on various Athlons that are not |
240 | SMP capable. | 261 | SMP capable. |
241 | 262 | ||
242 | 4: 'R' if a module was force unloaded by "rmmod -f", ' ' if all | 263 | 4) ``R`` if a module was force unloaded by ``rmmod -f``, ``' '`` if all |
243 | modules were unloaded normally. | 264 | modules were unloaded normally. |
244 | 265 | ||
245 | 5: 'M' if any processor has reported a Machine Check Exception, | 266 | 5) ``M`` if any processor has reported a Machine Check Exception, |
246 | ' ' if no Machine Check Exceptions have occurred. | 267 | ``' '`` if no Machine Check Exceptions have occurred. |
247 | 268 | ||
248 | 6: 'B' if a page-release function has found a bad page reference or | 269 | 6) ``B`` if a page-release function has found a bad page reference or |
249 | some unexpected page flags. | 270 | some unexpected page flags. |
250 | 271 | ||
251 | 7: 'U' if a user or user application specifically requested that the | 272 | 7) ``U`` if a user or user application specifically requested that the |
252 | Tainted flag be set, ' ' otherwise. | 273 | Tainted flag be set, ``' '`` otherwise. |
253 | 274 | ||
254 | 8: 'D' if the kernel has died recently, i.e. there was an OOPS or BUG. | 275 | 8) ``D`` if the kernel has died recently, i.e. there was an OOPS or BUG. |
255 | 276 | ||
256 | 9: 'A' if the ACPI table has been overridden. | 277 | 9) ``A`` if the ACPI table has been overridden. |
257 | 278 | ||
258 | 10: 'W' if a warning has previously been issued by the kernel. | 279 | 10) ``W`` if a warning has previously been issued by the kernel. |
259 | (Though some warnings may set more specific taint flags.) | 280 | (Though some warnings may set more specific taint flags.) |
260 | 281 | ||
261 | 11: 'C' if a staging driver has been loaded. | 282 | 11) ``C`` if a staging driver has been loaded. |
262 | 283 | ||
263 | 12: 'I' if the kernel is working around a severe bug in the platform | 284 | 12) ``I`` if the kernel is working around a severe bug in the platform |
264 | firmware (BIOS or similar). | 285 | firmware (BIOS or similar). |
265 | 286 | ||
266 | 13: 'O' if an externally-built ("out-of-tree") module has been loaded. | 287 | 13) ``O`` if an externally-built ("out-of-tree") module has been loaded. |
267 | 288 | ||
268 | 14: 'E' if an unsigned module has been loaded in a kernel supporting | 289 | 14) ``E`` if an unsigned module has been loaded in a kernel supporting |
269 | module signature. | 290 | module signature. |
270 | 291 | ||
271 | 15: 'L' if a soft lockup has previously occurred on the system. | 292 | 15) ``L`` if a soft lockup has previously occurred on the system. |
272 | 293 | ||
273 | 16: 'K' if the kernel has been live patched. | 294 | 16) ``K`` if the kernel has been live patched. |
274 | 295 | ||
275 | The primary reason for the 'Tainted: ' string is to tell kernel | 296 | The primary reason for the **'Tainted: '** string is to tell kernel |
276 | debuggers if this is a clean kernel or if anything unusual has | 297 | debuggers if this is a clean kernel or if anything unusual has |
277 | occurred. Tainting is permanent: even if an offending module is | 298 | occurred. Tainting is permanent: even if an offending module is |
278 | unloaded, the tainted value remains to indicate that the kernel is not | 299 | unloaded, the tainted value remains to indicate that the kernel is not |