Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial
* git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial: fixed path to moved file in include/linux/device.h Fix spelling in E1000_DISABLE_PACKET_SPLIT Kconfig description Documentation/dvb/get_dvb_firmware: fix firmware URL Documentation: Update to BUG-HUNTING Remove superfluous NOTIFY_COOKIE_LEN define add "tags" to .gitignore Fix "frist", "fisrt", typos fix rwlock usage example It's UTF-8
This commit is contained in:
commit
8b4b6707ee
1
.gitignore
vendored
1
.gitignore
vendored
@ -16,6 +16,7 @@
|
|||||||
#
|
#
|
||||||
# Top-level generic files
|
# Top-level generic files
|
||||||
#
|
#
|
||||||
|
tags
|
||||||
vmlinux*
|
vmlinux*
|
||||||
System.map
|
System.map
|
||||||
Module.symvers
|
Module.symvers
|
||||||
|
@ -1,3 +1,56 @@
|
|||||||
|
Table of contents
|
||||||
|
=================
|
||||||
|
|
||||||
|
Last updated: 20 December 2005
|
||||||
|
|
||||||
|
Contents
|
||||||
|
========
|
||||||
|
|
||||||
|
- Introduction
|
||||||
|
- Devices not appearing
|
||||||
|
- Finding patch that caused a bug
|
||||||
|
-- Finding using git-bisect
|
||||||
|
-- Finding it the old way
|
||||||
|
- Fixing the bug
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
Always try the latest kernel from kernel.org and build from source. If you are
|
||||||
|
not confident in doing that please report the bug to your distribution vendor
|
||||||
|
instead of to a kernel developer.
|
||||||
|
|
||||||
|
Finding bugs is not always easy. Have a go though. If you can't find it don't
|
||||||
|
give up. Report as much as you have found to the relevant maintainer. See
|
||||||
|
MAINTAINERS for who that is for the subsystem you have worked on.
|
||||||
|
|
||||||
|
Before you submit a bug report read REPORTING-BUGS.
|
||||||
|
|
||||||
|
Devices not appearing
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Often this is caused by udev. Check that first before blaming it on the
|
||||||
|
kernel.
|
||||||
|
|
||||||
|
Finding patch that caused a bug
|
||||||
|
===============================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Finding using git-bisect
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Using the provided tools with git makes finding bugs easy provided the bug is
|
||||||
|
reproducible.
|
||||||
|
|
||||||
|
Steps to do it:
|
||||||
|
- start using git for the kernel source
|
||||||
|
- read the man page for git-bisect
|
||||||
|
- have fun
|
||||||
|
|
||||||
|
Finding it the old way
|
||||||
|
----------------------
|
||||||
|
|
||||||
[Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)]
|
[Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)]
|
||||||
|
|
||||||
This is how to track down a bug if you know nothing about kernel hacking.
|
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
|
|||||||
because Linux snapshots will let you do this - something that you can't
|
because Linux snapshots will let you do this - something that you can't
|
||||||
do with vendor supplied releases.
|
do with vendor supplied releases.
|
||||||
|
|
||||||
|
Fixing the bug
|
||||||
|
==============
|
||||||
|
|
||||||
|
Nobody is going to tell you how to fix bugs. Seriously. You need to work it
|
||||||
|
out. But below are some hints on how to use the tools.
|
||||||
|
|
||||||
|
To debug a kernel, use objdump and look for the hex offset from the crash
|
||||||
|
output to find the valid line of code/assembler. Without debug symbols, you
|
||||||
|
will see the assembler code for the routine shown, but if your kernel has
|
||||||
|
debug symbols the C code will also be available. (Debug symbols can be enabled
|
||||||
|
in the kernel hacking menu of the menu configuration.) For example:
|
||||||
|
|
||||||
|
objdump -r -S -l --disassemble net/dccp/ipv4.o
|
||||||
|
|
||||||
|
NB.: you need to be at the top level of the kernel tree for this to pick up
|
||||||
|
your C files.
|
||||||
|
|
||||||
|
If you don't have access to the code you can also debug on some crash dumps
|
||||||
|
e.g. crash dump output as shown by Dave Miller.
|
||||||
|
|
||||||
|
> EIP is at ip_queue_xmit+0x14/0x4c0
|
||||||
|
> ...
|
||||||
|
> Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00
|
||||||
|
> 00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08
|
||||||
|
> <8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85
|
||||||
|
>
|
||||||
|
> Put the bytes into a "foo.s" file like this:
|
||||||
|
>
|
||||||
|
> .text
|
||||||
|
> .globl foo
|
||||||
|
> foo:
|
||||||
|
> .byte .... /* bytes from Code: part of OOPS dump */
|
||||||
|
>
|
||||||
|
> Compile it with "gcc -c -o foo.o foo.s" then look at the output of
|
||||||
|
> "objdump --disassemble foo.o".
|
||||||
|
>
|
||||||
|
> Output:
|
||||||
|
>
|
||||||
|
> ip_queue_xmit:
|
||||||
|
> push %ebp
|
||||||
|
> push %edi
|
||||||
|
> push %esi
|
||||||
|
> push %ebx
|
||||||
|
> sub $0xbc, %esp
|
||||||
|
> mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb)
|
||||||
|
> mov 0x8(%ebp), %ebx ! %ebx = skb->sk
|
||||||
|
> mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt
|
||||||
|
|
||||||
|
Another very useful option of the Kernel Hacking section in menuconfig is
|
||||||
|
Debug memory allocations. This will help you see whether data has been
|
||||||
|
initialised and not set before use etc. To see the values that get assigned
|
||||||
|
with this look at mm/slab.c and search for POISON_INUSE. When using this an
|
||||||
|
Oops will often show the poisoned data instead of zero which is the default.
|
||||||
|
|
||||||
|
Once you have worked out a fix please submit it upstream. After all open
|
||||||
|
source is about sharing what you do and don't you want to be recognised for
|
||||||
|
your genius?
|
||||||
|
|
||||||
|
Please do read Documentation/SubmittingPatches though to help your code get
|
||||||
|
accepted.
|
||||||
|
@ -246,7 +246,7 @@ sub vp7041 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub dibusb {
|
sub dibusb {
|
||||||
my $url = "http://www.linuxtv.org/downloads/firmware/dvb-dibusb-5.0.0.11.fw";
|
my $url = "http://www.linuxtv.org/downloads/firmware/dvb-usb-dibusb-5.0.0.11.fw";
|
||||||
my $outfile = "dvb-dibusb-5.0.0.11.fw";
|
my $outfile = "dvb-dibusb-5.0.0.11.fw";
|
||||||
my $hash = "fa490295a527360ca16dcdf3224ca243";
|
my $hash = "fa490295a527360ca16dcdf3224ca243";
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@ when using discs encoded using Microsoft's Joliet extensions.
|
|||||||
iocharset=name Character set to use for converting from Unicode to
|
iocharset=name Character set to use for converting from Unicode to
|
||||||
ASCII. Joliet filenames are stored in Unicode format, but
|
ASCII. Joliet filenames are stored in Unicode format, but
|
||||||
Unix for the most part doesn't know how to deal with Unicode.
|
Unix for the most part doesn't know how to deal with Unicode.
|
||||||
There is also an option of doing UTF8 translations with the
|
There is also an option of doing UTF-8 translations with the
|
||||||
utf8 option.
|
utf8 option.
|
||||||
utf8 Encode Unicode names in UTF8 format. Default is no.
|
utf8 Encode Unicode names in UTF-8 format. Default is no.
|
||||||
|
|
||||||
Mount options unique to the isofs filesystem.
|
Mount options unique to the isofs filesystem.
|
||||||
block=512 Set the block size for the disk to 512 bytes
|
block=512 Set the block size for the disk to 512 bytes
|
||||||
|
@ -6,7 +6,7 @@ The following mount options are supported:
|
|||||||
|
|
||||||
iocharset=name Character set to use for converting from Unicode to
|
iocharset=name Character set to use for converting from Unicode to
|
||||||
ASCII. The default is to do no conversion. Use
|
ASCII. The default is to do no conversion. Use
|
||||||
iocharset=utf8 for UTF8 translations. This requires
|
iocharset=utf8 for UTF-8 translations. This requires
|
||||||
CONFIG_NLS_UTF8 to be set in the kernel .config file.
|
CONFIG_NLS_UTF8 to be set in the kernel .config file.
|
||||||
iocharset=none specifies the default behavior explicitly.
|
iocharset=none specifies the default behavior explicitly.
|
||||||
|
|
||||||
|
@ -28,16 +28,16 @@ iocharset=name -- Character set to use for converting between the
|
|||||||
know how to deal with Unicode.
|
know how to deal with Unicode.
|
||||||
By default, FAT_DEFAULT_IOCHARSET setting is used.
|
By default, FAT_DEFAULT_IOCHARSET setting is used.
|
||||||
|
|
||||||
There is also an option of doing UTF8 translations
|
There is also an option of doing UTF-8 translations
|
||||||
with the utf8 option.
|
with the utf8 option.
|
||||||
|
|
||||||
NOTE: "iocharset=utf8" is not recommended. If unsure,
|
NOTE: "iocharset=utf8" is not recommended. If unsure,
|
||||||
you should consider the following option instead.
|
you should consider the following option instead.
|
||||||
|
|
||||||
utf8=<bool> -- UTF8 is the filesystem safe version of Unicode that
|
utf8=<bool> -- UTF-8 is the filesystem safe version of Unicode that
|
||||||
is used by the console. It can be be enabled for the
|
is used by the console. It can be be enabled for the
|
||||||
filesystem with this option. If 'uni_xlate' gets set,
|
filesystem with this option. If 'uni_xlate' gets set,
|
||||||
UTF8 gets disabled.
|
UTF-8 gets disabled.
|
||||||
|
|
||||||
uni_xlate=<bool> -- Translate unhandled Unicode characters to special
|
uni_xlate=<bool> -- Translate unhandled Unicode characters to special
|
||||||
escaped sequences. This would let you backup and
|
escaped sequences. This would let you backup and
|
||||||
|
@ -9,7 +9,7 @@ removed soon. So for any new code dynamic initialization should be used:
|
|||||||
static int __init xxx_init(void)
|
static int __init xxx_init(void)
|
||||||
{
|
{
|
||||||
spin_lock_init(&xxx_lock);
|
spin_lock_init(&xxx_lock);
|
||||||
rw_lock_init(&xxx_rw_lock);
|
rwlock_init(&xxx_rw_lock);
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ EXPORT_SYMBOL_GPL(platform_device_register);
|
|||||||
* platform_device_unregister - unregister a platform-level device
|
* platform_device_unregister - unregister a platform-level device
|
||||||
* @pdev: platform device we're unregistering
|
* @pdev: platform device we're unregistering
|
||||||
*
|
*
|
||||||
* Unregistration is done in 2 steps. Fisrt we release all resources
|
* Unregistration is done in 2 steps. First we release all resources
|
||||||
* and remove it from the subsystem, then we drop reference count by
|
* and remove it from the subsystem, then we drop reference count by
|
||||||
* calling platform_device_put().
|
* calling platform_device_put().
|
||||||
*/
|
*/
|
||||||
|
@ -2137,7 +2137,7 @@ static void start_io( ctlr_info_t *h)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the frist entry from the Request Q */
|
/* Get the first entry from the Request Q */
|
||||||
removeQ(&(h->reqQ), c);
|
removeQ(&(h->reqQ), c);
|
||||||
h->Qdepth--;
|
h->Qdepth--;
|
||||||
|
|
||||||
|
@ -1914,7 +1914,7 @@ config E1000_DISABLE_PACKET_SPLIT
|
|||||||
depends on E1000
|
depends on E1000
|
||||||
help
|
help
|
||||||
Say Y here if you want to use the legacy receive path for PCI express
|
Say Y here if you want to use the legacy receive path for PCI express
|
||||||
hadware.
|
hardware.
|
||||||
|
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
|
@ -1404,7 +1404,7 @@ add_claw_reads(struct net_device *dev, struct ccwbk* p_first,
|
|||||||
|
|
||||||
if ( privptr-> p_read_active_first ==NULL ) {
|
if ( privptr-> p_read_active_first ==NULL ) {
|
||||||
#ifdef DEBUGMSG
|
#ifdef DEBUGMSG
|
||||||
printk(KERN_INFO "%s:%s p_read_active_frist == NULL \n",
|
printk(KERN_INFO "%s:%s p_read_active_first == NULL \n",
|
||||||
dev->name,__FUNCTION__);
|
dev->name,__FUNCTION__);
|
||||||
printk(KERN_INFO "%s:%s Read active first/last changed \n",
|
printk(KERN_INFO "%s:%s Read active first/last changed \n",
|
||||||
dev->name,__FUNCTION__);
|
dev->name,__FUNCTION__);
|
||||||
|
@ -902,7 +902,7 @@ static int megasas_reset_bus_host(struct scsi_cmnd *scmd)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Frist wait for all commands to complete
|
* First wait for all commands to complete
|
||||||
*/
|
*/
|
||||||
ret = megasas_generic_reset(scmd);
|
ret = megasas_generic_reset(scmd);
|
||||||
|
|
||||||
|
@ -561,7 +561,7 @@ befs_utf2nls(struct super_block *sb, const char *in,
|
|||||||
* @sb: Superblock
|
* @sb: Superblock
|
||||||
* @src: Input string buffer in NLS format
|
* @src: Input string buffer in NLS format
|
||||||
* @srclen: Length of input string in bytes
|
* @srclen: Length of input string in bytes
|
||||||
* @dest: The output string in UTF8 format
|
* @dest: The output string in UTF-8 format
|
||||||
* @destlen: Length of the output buffer
|
* @destlen: Length of the output buffer
|
||||||
*
|
*
|
||||||
* Converts input string @src, which is in the format of the loaded NLS map,
|
* Converts input string @src, which is in the format of the loaded NLS map,
|
||||||
|
@ -160,7 +160,7 @@ improperly zeroed buffer in CIFS Unix extensions set times call.
|
|||||||
Version 1.25
|
Version 1.25
|
||||||
------------
|
------------
|
||||||
Fix internationalization problem in cifs readdir with filenames that map to
|
Fix internationalization problem in cifs readdir with filenames that map to
|
||||||
longer UTF8 strings than the string on the wire was in Unicode. Add workaround
|
longer UTF-8 strings than the string on the wire was in Unicode. Add workaround
|
||||||
for readdir to netapp servers. Fix search rewind (seek into readdir to return
|
for readdir to netapp servers. Fix search rewind (seek into readdir to return
|
||||||
non-consecutive entries). Do not do readdir when server negotiates
|
non-consecutive entries). Do not do readdir when server negotiates
|
||||||
buffer size to small to fit filename. Add support for reading POSIX ACLs from
|
buffer size to small to fit filename. Add support for reading POSIX ACLs from
|
||||||
|
@ -114,7 +114,7 @@ static inline int fat_get_entry(struct inode *dir, loff_t *pos,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert Unicode 16 to UTF8, translated Unicode, or ASCII.
|
* Convert Unicode 16 to UTF-8, translated Unicode, or ASCII.
|
||||||
* If uni_xlate is enabled and we can't get a 1:1 conversion, use a
|
* If uni_xlate is enabled and we can't get a 1:1 conversion, use a
|
||||||
* colon as an escape character since it is normally invalid on the vfat
|
* colon as an escape character since it is normally invalid on the vfat
|
||||||
* filesystem. The following four characters are the hexadecimal digits
|
* filesystem. The following four characters are the hexadecimal digits
|
||||||
|
@ -1101,7 +1101,7 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* UTF8 doesn't provide FAT semantics */
|
/* UTF-8 doesn't provide FAT semantics */
|
||||||
if (!strcmp(opts->iocharset, "utf8")) {
|
if (!strcmp(opts->iocharset, "utf8")) {
|
||||||
printk(KERN_ERR "FAT: utf8 is not a recommended IO charset"
|
printk(KERN_ERR "FAT: utf8 is not a recommended IO charset"
|
||||||
" for FAT filesystems, filesystem will be case sensitive!\n");
|
" for FAT filesystems, filesystem will be case sensitive!\n");
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "isofs.h"
|
#include "isofs.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert Unicode 16 to UTF8 or ASCII.
|
* Convert Unicode 16 to UTF-8 or ASCII.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
uni16_to_x8(unsigned char *ascii, u16 *uni, int len, struct nls_table *nls)
|
uni16_to_x8(unsigned char *ascii, u16 *uni, int len, struct nls_table *nls)
|
||||||
|
@ -491,7 +491,7 @@ config NLS_KOI8_U
|
|||||||
(koi8-u) and Belarusian (koi8-ru) character sets.
|
(koi8-u) and Belarusian (koi8-ru) character sets.
|
||||||
|
|
||||||
config NLS_UTF8
|
config NLS_UTF8
|
||||||
tristate "NLS UTF8"
|
tristate "NLS UTF-8"
|
||||||
depends on NLS
|
depends on NLS
|
||||||
help
|
help
|
||||||
If you want to display filenames with native language characters
|
If you want to display filenames with native language characters
|
||||||
|
@ -77,7 +77,7 @@ struct termios {
|
|||||||
#define IXANY 0004000 /* Any character will restart after stop. */
|
#define IXANY 0004000 /* Any character will restart after stop. */
|
||||||
#define IXOFF 0010000 /* Enable start/stop input control. */
|
#define IXOFF 0010000 /* Enable start/stop input control. */
|
||||||
#define IMAXBEL 0020000 /* Ring bell when input queue is full. */
|
#define IMAXBEL 0020000 /* Ring bell when input queue is full. */
|
||||||
#define IUTF8 0040000 /* Input is UTF8 */
|
#define IUTF8 0040000 /* Input is UTF-8 */
|
||||||
|
|
||||||
/* c_oflag bits */
|
/* c_oflag bits */
|
||||||
#define OPOST 0000001 /* Perform output processing. */
|
#define OPOST 0000001 /* Perform output processing. */
|
||||||
|
@ -400,7 +400,7 @@ extern struct device * get_device(struct device * dev);
|
|||||||
extern void put_device(struct device * dev);
|
extern void put_device(struct device * dev);
|
||||||
|
|
||||||
|
|
||||||
/* drivers/base/power.c */
|
/* drivers/base/power/shutdown.c */
|
||||||
extern void device_shutdown(void);
|
extern void device_shutdown(void);
|
||||||
|
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ struct fat_mount_options {
|
|||||||
sys_immutable:1, /* set = system files are immutable */
|
sys_immutable:1, /* set = system files are immutable */
|
||||||
dotsOK:1, /* set = hidden and system files are named '.filename' */
|
dotsOK:1, /* set = hidden and system files are named '.filename' */
|
||||||
isvfat:1, /* 0=no vfat long filename support, 1=vfat support */
|
isvfat:1, /* 0=no vfat long filename support, 1=vfat support */
|
||||||
utf8:1, /* Use of UTF8 character set (Default) */
|
utf8:1, /* Use of UTF-8 character set (Default) */
|
||||||
unicode_xlate:1, /* create escape sequences for unhandled Unicode */
|
unicode_xlate:1, /* create escape sequences for unhandled Unicode */
|
||||||
numtail:1, /* Does first alias have a numeric '~1' type tail? */
|
numtail:1, /* Does first alias have a numeric '~1' type tail? */
|
||||||
atari:1, /* Use Atari GEMDOS variation of MS-DOS fs */
|
atari:1, /* Use Atari GEMDOS variation of MS-DOS fs */
|
||||||
|
@ -51,7 +51,6 @@
|
|||||||
#define HARD_MSGMAX (131072/sizeof(void*))
|
#define HARD_MSGMAX (131072/sizeof(void*))
|
||||||
#define DFLT_MSGSIZEMAX 8192 /* max message size */
|
#define DFLT_MSGSIZEMAX 8192 /* max message size */
|
||||||
|
|
||||||
#define NOTIFY_COOKIE_LEN 32
|
|
||||||
|
|
||||||
struct ext_wait_queue { /* queue of sleeping tasks */
|
struct ext_wait_queue { /* queue of sleeping tasks */
|
||||||
struct task_struct *task;
|
struct task_struct *task;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user