diff options
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/BUG-HUNTING | 113 | ||||
-rw-r--r-- | Documentation/dvb/get_dvb_firmware | 2 | ||||
-rw-r--r-- | Documentation/filesystems/isofs.txt | 4 | ||||
-rw-r--r-- | Documentation/filesystems/jfs.txt | 2 | ||||
-rw-r--r-- | Documentation/filesystems/vfat.txt | 6 | ||||
-rw-r--r-- | Documentation/spinlocks.txt | 2 |
6 files changed, 121 insertions, 8 deletions
diff --git a/Documentation/BUG-HUNTING b/Documentation/BUG-HUNTING index ca29242dbc38..65b97e1dbf70 100644 --- a/Documentation/BUG-HUNTING +++ b/Documentation/BUG-HUNTING | |||
@@ -1,3 +1,56 @@ | |||
1 | Table of contents | ||
2 | ================= | ||
3 | |||
4 | Last updated: 20 December 2005 | ||
5 | |||
6 | Contents | ||
7 | ======== | ||
8 | |||
9 | - Introduction | ||
10 | - Devices not appearing | ||
11 | - Finding patch that caused a bug | ||
12 | -- Finding using git-bisect | ||
13 | -- Finding it the old way | ||
14 | - Fixing the bug | ||
15 | |||
16 | Introduction | ||
17 | ============ | ||
18 | |||
19 | Always try the latest kernel from kernel.org and build from source. If you are | ||
20 | not confident in doing that please report the bug to your distribution vendor | ||
21 | instead of to a kernel developer. | ||
22 | |||
23 | Finding bugs is not always easy. Have a go though. If you can't find it don't | ||
24 | give up. Report as much as you have found to the relevant maintainer. See | ||
25 | MAINTAINERS for who that is for the subsystem you have worked on. | ||
26 | |||
27 | Before you submit a bug report read REPORTING-BUGS. | ||
28 | |||
29 | Devices not appearing | ||
30 | ===================== | ||
31 | |||
32 | Often this is caused by udev. Check that first before blaming it on the | ||
33 | kernel. | ||
34 | |||
35 | Finding patch that caused a bug | ||
36 | =============================== | ||
37 | |||
38 | |||
39 | |||
40 | Finding using git-bisect | ||
41 | ------------------------ | ||
42 | |||
43 | Using the provided tools with git makes finding bugs easy provided the bug is | ||
44 | reproducible. | ||
45 | |||
46 | Steps to do it: | ||
47 | - start using git for the kernel source | ||
48 | - read the man page for git-bisect | ||
49 | - have fun | ||
50 | |||
51 | Finding it the old way | ||
52 | ---------------------- | ||
53 | |||
1 | [Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)] | 54 | [Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)] |
2 | 55 | ||
3 | This is how to track down a bug if you know nothing about kernel hacking. | 56 | This is how to track down a bug if you know nothing about kernel hacking. |
@@ -90,3 +143,63 @@ it does work and it lets non-hackers help fix bugs. And it is cool | |||
90 | because Linux snapshots will let you do this - something that you can't | 143 | because Linux snapshots will let you do this - something that you can't |
91 | do with vendor supplied releases. | 144 | do with vendor supplied releases. |
92 | 145 | ||
146 | Fixing the bug | ||
147 | ============== | ||
148 | |||
149 | Nobody is going to tell you how to fix bugs. Seriously. You need to work it | ||
150 | out. But below are some hints on how to use the tools. | ||
151 | |||
152 | To debug a kernel, use objdump and look for the hex offset from the crash | ||
153 | output to find the valid line of code/assembler. Without debug symbols, you | ||
154 | will see the assembler code for the routine shown, but if your kernel has | ||
155 | debug symbols the C code will also be available. (Debug symbols can be enabled | ||
156 | in the kernel hacking menu of the menu configuration.) For example: | ||
157 | |||
158 | objdump -r -S -l --disassemble net/dccp/ipv4.o | ||
159 | |||
160 | NB.: you need to be at the top level of the kernel tree for this to pick up | ||
161 | your C files. | ||
162 | |||
163 | If you don't have access to the code you can also debug on some crash dumps | ||
164 | e.g. crash dump output as shown by Dave Miller. | ||
165 | |||
166 | > EIP is at ip_queue_xmit+0x14/0x4c0 | ||
167 | > ... | ||
168 | > Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00 | ||
169 | > 00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08 | ||
170 | > <8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85 | ||
171 | > | ||
172 | > Put the bytes into a "foo.s" file like this: | ||
173 | > | ||
174 | > .text | ||
175 | > .globl foo | ||
176 | > foo: | ||
177 | > .byte .... /* bytes from Code: part of OOPS dump */ | ||
178 | > | ||
179 | > Compile it with "gcc -c -o foo.o foo.s" then look at the output of | ||
180 | > "objdump --disassemble foo.o". | ||
181 | > | ||
182 | > Output: | ||
183 | > | ||
184 | > ip_queue_xmit: | ||
185 | > push %ebp | ||
186 | > push %edi | ||
187 | > push %esi | ||
188 | > push %ebx | ||
189 | > sub $0xbc, %esp | ||
190 | > mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb) | ||
191 | > mov 0x8(%ebp), %ebx ! %ebx = skb->sk | ||
192 | > mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt | ||
193 | |||
194 | Another very useful option of the Kernel Hacking section in menuconfig is | ||
195 | Debug memory allocations. This will help you see whether data has been | ||
196 | initialised and not set before use etc. To see the values that get assigned | ||
197 | with this look at mm/slab.c and search for POISON_INUSE. When using this an | ||
198 | Oops will often show the poisoned data instead of zero which is the default. | ||
199 | |||
200 | Once you have worked out a fix please submit it upstream. After all open | ||
201 | source is about sharing what you do and don't you want to be recognised for | ||
202 | your genius? | ||
203 | |||
204 | Please do read Documentation/SubmittingPatches though to help your code get | ||
205 | accepted. | ||
diff --git a/Documentation/dvb/get_dvb_firmware b/Documentation/dvb/get_dvb_firmware index bb55f49f2745..15fc8fbef67e 100644 --- a/Documentation/dvb/get_dvb_firmware +++ b/Documentation/dvb/get_dvb_firmware | |||
@@ -246,7 +246,7 @@ sub vp7041 { | |||
246 | } | 246 | } |
247 | 247 | ||
248 | sub dibusb { | 248 | sub dibusb { |
249 | my $url = "http://www.linuxtv.org/downloads/firmware/dvb-dibusb-5.0.0.11.fw"; | 249 | my $url = "http://www.linuxtv.org/downloads/firmware/dvb-usb-dibusb-5.0.0.11.fw"; |
250 | my $outfile = "dvb-dibusb-5.0.0.11.fw"; | 250 | my $outfile = "dvb-dibusb-5.0.0.11.fw"; |
251 | my $hash = "fa490295a527360ca16dcdf3224ca243"; | 251 | my $hash = "fa490295a527360ca16dcdf3224ca243"; |
252 | 252 | ||
diff --git a/Documentation/filesystems/isofs.txt b/Documentation/filesystems/isofs.txt index 424585ff6ea1..758e50401c16 100644 --- a/Documentation/filesystems/isofs.txt +++ b/Documentation/filesystems/isofs.txt | |||
@@ -9,9 +9,9 @@ when using discs encoded using Microsoft's Joliet extensions. | |||
9 | iocharset=name Character set to use for converting from Unicode to | 9 | iocharset=name Character set to use for converting from Unicode to |
10 | ASCII. Joliet filenames are stored in Unicode format, but | 10 | ASCII. Joliet filenames are stored in Unicode format, but |
11 | Unix for the most part doesn't know how to deal with Unicode. | 11 | Unix for the most part doesn't know how to deal with Unicode. |
12 | There is also an option of doing UTF8 translations with the | 12 | There is also an option of doing UTF-8 translations with the |
13 | utf8 option. | 13 | utf8 option. |
14 | utf8 Encode Unicode names in UTF8 format. Default is no. | 14 | utf8 Encode Unicode names in UTF-8 format. Default is no. |
15 | 15 | ||
16 | Mount options unique to the isofs filesystem. | 16 | Mount options unique to the isofs filesystem. |
17 | block=512 Set the block size for the disk to 512 bytes | 17 | block=512 Set the block size for the disk to 512 bytes |
diff --git a/Documentation/filesystems/jfs.txt b/Documentation/filesystems/jfs.txt index 3e992daf99ad..bae128663748 100644 --- a/Documentation/filesystems/jfs.txt +++ b/Documentation/filesystems/jfs.txt | |||
@@ -6,7 +6,7 @@ The following mount options are supported: | |||
6 | 6 | ||
7 | iocharset=name Character set to use for converting from Unicode to | 7 | iocharset=name Character set to use for converting from Unicode to |
8 | ASCII. The default is to do no conversion. Use | 8 | ASCII. The default is to do no conversion. Use |
9 | iocharset=utf8 for UTF8 translations. This requires | 9 | iocharset=utf8 for UTF-8 translations. This requires |
10 | CONFIG_NLS_UTF8 to be set in the kernel .config file. | 10 | CONFIG_NLS_UTF8 to be set in the kernel .config file. |
11 | iocharset=none specifies the default behavior explicitly. | 11 | iocharset=none specifies the default behavior explicitly. |
12 | 12 | ||
diff --git a/Documentation/filesystems/vfat.txt b/Documentation/filesystems/vfat.txt index 5ead20c6c744..2001abbc60e6 100644 --- a/Documentation/filesystems/vfat.txt +++ b/Documentation/filesystems/vfat.txt | |||
@@ -28,16 +28,16 @@ iocharset=name -- Character set to use for converting between the | |||
28 | know how to deal with Unicode. | 28 | know how to deal with Unicode. |
29 | By default, FAT_DEFAULT_IOCHARSET setting is used. | 29 | By default, FAT_DEFAULT_IOCHARSET setting is used. |
30 | 30 | ||
31 | There is also an option of doing UTF8 translations | 31 | There is also an option of doing UTF-8 translations |
32 | with the utf8 option. | 32 | with the utf8 option. |
33 | 33 | ||
34 | NOTE: "iocharset=utf8" is not recommended. If unsure, | 34 | NOTE: "iocharset=utf8" is not recommended. If unsure, |
35 | you should consider the following option instead. | 35 | you should consider the following option instead. |
36 | 36 | ||
37 | utf8=<bool> -- UTF8 is the filesystem safe version of Unicode that | 37 | utf8=<bool> -- UTF-8 is the filesystem safe version of Unicode that |
38 | is used by the console. It can be be enabled for the | 38 | is used by the console. It can be be enabled for the |
39 | filesystem with this option. If 'uni_xlate' gets set, | 39 | filesystem with this option. If 'uni_xlate' gets set, |
40 | UTF8 gets disabled. | 40 | UTF-8 gets disabled. |
41 | 41 | ||
42 | uni_xlate=<bool> -- Translate unhandled Unicode characters to special | 42 | uni_xlate=<bool> -- Translate unhandled Unicode characters to special |
43 | escaped sequences. This would let you backup and | 43 | escaped sequences. This would let you backup and |
diff --git a/Documentation/spinlocks.txt b/Documentation/spinlocks.txt index c2122996631e..a661d684768e 100644 --- a/Documentation/spinlocks.txt +++ b/Documentation/spinlocks.txt | |||
@@ -9,7 +9,7 @@ removed soon. So for any new code dynamic initialization should be used: | |||
9 | static int __init xxx_init(void) | 9 | static int __init xxx_init(void) |
10 | { | 10 | { |
11 | spin_lock_init(&xxx_lock); | 11 | spin_lock_init(&xxx_lock); |
12 | rw_lock_init(&xxx_rw_lock); | 12 | rwlock_init(&xxx_rw_lock); |
13 | ... | 13 | ... |
14 | } | 14 | } |
15 | 15 | ||