Trace

14 messages, 4 authors, 2008-09-04 · open the first message on its own page

Trace

From: Sébastien Chrétien <hidden>
Date: 2008-09-01 09:16:07

Hello,

I am triying to write a tty_driver under ppc. And I get a kernel panic.
Can somebody explain me how finding the source of the error with a kernel
panic trace :
thanks

Unable to handle kernel paging request for data at address 0x575555f9
Faulting instruction address: 0xc0110ddc
Oops: Kernel access of bad area, sig: 11 [#1]
Modules linked in:
NIP: c0110ddc LR: c011118c CTR: 00000000
REGS: cf01bcb0 TRAP: 0300   Not tainted  (2.6.26)
MSR: 00009032 <EE,ME,IR,DR>  CR: 44002022  XER: 20000000
DAR: 575555f9, DSISR: 40000000
TASK = cf01c000[1] 'swapper' THREAD: cf01a000
GPR00: 0000000c cf01bd60 cf01c000 cf04c300 ffffffff cf01bdbc 00000000
c01d0000
GPR08: 00001249 fffffffc 00000000 cf000420 84002022 00000000 10000b00
007fff00
GPR16: 0fffa1d0 00000000 00000004 cf01bdbc 007ffec0 00000000 00000000
00800000
GPR24: 00000000 c01b7650 00000002 c01d0000 ffffffff ce4a6700 cf04c300
57555541
NIP [c0110ddc] init_dev+0x2bc/0x584
LR [c011118c] tty_open+0xe8/0x3e0
Call Trace:
[cf01bd60] [cf01bd78] 0xcf01bd78 (unreliable)
[cf01bdb0] [c011118c] tty_open+0xe8/0x3e0
[cf01bde0] [c00742c8] chrdev_open+0x114/0x1b0
[cf01be10] [c006fb5c] __dentry_open+0x190/0x2e8
[cf01be40] [c006fdac] nameidata_to_filp+0x38/0x70
[cf01be60] [c007bc60] do_filp_open+0x200/0x7d0
[cf01bf10] [c00700b4] do_sys_open+0x74/0x114
[cf01bf40] [c0003c94] init_post+0x34/0x258
[cf01bf60] [c019ca64] kernel_init+0x258/0x270
[cf01bff0] [c0011b3c] kernel_thread+0x44/0x60
Instruction dump:
7d808120 4e800020 7c832378 4bfa9ea9 7c7f1b79 418201f0 a81e0062 2f800001
409efd98 83ff00d0 2c1f0000 4182fd90 <801f00b8> 70090080 408201b0 801e0060

4 more lines

Re: Trace

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2008-09-01 09:24:00

On Mon, 2008-09-01 at 11:16 +0200, Sébastien Chrétien wrote:
Hello,

I am triying to write a tty_driver under ppc. And I get a kernel
panic.
Can somebody explain me how finding the source of the error with a
kernel panic trace : 
thanks
What kind of device are you writing a tty driver for ?

I don't see anything much relevant in your backtrace, you went through a
crap pointer in init_dev, could be anything at this stage...

Can you post your driver to the list ?

Ben.
Unable to handle kernel paging request for data at address 0x575555f9
Faulting instruction address: 0xc0110ddc
Oops: Kernel access of bad area, sig: 11 [#1]
Modules linked in:
NIP: c0110ddc LR: c011118c CTR: 00000000
REGS: cf01bcb0 TRAP: 0300   Not tainted  (2.6.26)
MSR: 00009032 <EE,ME,IR,DR>  CR: 44002022  XER: 20000000
DAR: 575555f9, DSISR: 40000000
TASK = cf01c000[1] 'swapper' THREAD: cf01a000
GPR00: 0000000c cf01bd60 cf01c000 cf04c300 ffffffff cf01bdbc 00000000
c01d0000 
GPR08: 00001249 fffffffc 00000000 cf000420 84002022 00000000 10000b00
007fff00 
GPR16: 0fffa1d0 00000000 00000004 cf01bdbc 007ffec0 00000000 00000000
00800000 
GPR24: 00000000 c01b7650 00000002 c01d0000 ffffffff ce4a6700 cf04c300
57555541 
NIP [c0110ddc] init_dev+0x2bc/0x584
LR [c011118c] tty_open+0xe8/0x3e0
Call Trace:
[cf01bd60] [cf01bd78] 0xcf01bd78 (unreliable)
[cf01bdb0] [c011118c] tty_open+0xe8/0x3e0
[cf01bde0] [c00742c8] chrdev_open+0x114/0x1b0
[cf01be10] [c006fb5c] __dentry_open+0x190/0x2e8
[cf01be40] [c006fdac] nameidata_to_filp+0x38/0x70
[cf01be60] [c007bc60] do_filp_open+0x200/0x7d0
[cf01bf10] [c00700b4] do_sys_open+0x74/0x114
[cf01bf40] [c0003c94] init_post+0x34/0x258
[cf01bf60] [c019ca64] kernel_init+0x258/0x270
[cf01bff0] [c0011b3c] kernel_thread+0x44/0x60
Instruction dump:
7d808120 4e800020 7c832378 4bfa9ea9 7c7f1b79 418201f0 a81e0062
2f800001 
409efd98 83ff00d0 2c1f0000 4182fd90 <801f00b8> 70090080 408201b0
801e0060 
---[ end trace b7795a387aeb7786 ]---
Kernel panic - not syncing: Attempted to kill init!
allocation failed: out of vmalloc space - use vmalloc=<size> to
increase size.
_______________________________________________

3 more quoted lines

RE: Trace

From: Jenkins, Clive <hidden>
Date: 2008-09-01 10:14:04

The instruction that caused the fault is at this address:
NIP [c0110ddc] init_dev+0x2bc/0x584
The hex value of the instruction is also highlighted between <> here:
Instruction dump:
7d808120 4e800020 7c832378 4bfa9ea9 7c7f1b79 418201f0 a81e0062 =
2f800001=20
409efd98 83ff00d0 2c1f0000 4182fd90 <801f00b8> 70090080 408201b0 =
801e0060=20

Disassemble your kernel and look at offset 0x2BC relative to the label =
init_dev
=20
________________________________

From: <redacted> =
[mailto:linuxppc-dev-bounces+clive.jenkins=3Dxerox.com@ozlabs.org] On =
Behalf Of S=E9bastien Chr=E9tien
Sent: 01 September 2008 10:16
To: <redacted>
Subject: Trace


Hello,

I am triying to write a tty_driver under ppc. And I get a kernel panic.
Can somebody explain me how finding the source of the error with a =
kernel panic trace :=20
thanks

Unable to handle kernel paging request for data at address 0x575555f9
Faulting instruction address: 0xc0110ddc
Oops: Kernel access of bad area, sig: 11 [#1]
Modules linked in:
NIP: c0110ddc LR: c011118c CTR: 00000000
REGS: cf01bcb0 TRAP: 0300   Not tainted  (2.6.26)
MSR: 00009032 <EE,ME,IR,DR>  CR: 44002022  XER: 20000000
DAR: 575555f9, DSISR: 40000000
TASK =3D cf01c000[1] 'swapper' THREAD: cf01a000
GPR00: 0000000c cf01bd60 cf01c000 cf04c300 ffffffff cf01bdbc 00000000 =
c01d0000=20
GPR08: 00001249 fffffffc 00000000 cf000420 84002022 00000000 10000b00 =
007fff00=20
GPR16: 0fffa1d0 00000000 00000004 cf01bdbc 007ffec0 00000000 00000000 =
00800000=20
GPR24: 00000000 c01b7650 00000002 c01d0000 ffffffff ce4a6700 cf04c300 =
57555541=20
NIP [c0110ddc] init_dev+0x2bc/0x584

20 more lines

Re: Trace

From: Sébastien Chrétien <hidden>
Date: 2008-09-01 12:25:32

I found where is the failure with your advices
In init_dev (tty_io.c), init_dev calls "tty = driver->ttys[idx]"
after this call, tty value is : tty = 0x57555541

Have I to initialize driver->ttys in my driver. If yes, how have I to
Initialize this ?

The driver tty is used in order to have a console on my serial port.
Thanks for your help


2008/9/1, Jenkins, Clive [off-list ref]:
The instruction that caused the fault is at this address:
quoted
NIP [c0110ddc] init_dev+0x2bc/0x584

The hex value of the instruction is also highlighted between <> here:
quoted
Instruction dump:
7d808120 4e800020 7c832378 4bfa9ea9 7c7f1b79 418201f0 a81e0062 2f800001
409efd98 83ff00d0 2c1f0000 4182fd90 <801f00b8> 70090080 408201b0 801e0060

Disassemble your kernel and look at offset 0x2BC relative to the label
init_dev

________________________________

From: <redacted> [mailto:
linuxppc-dev-bounces+clive.jenkins <linuxppc-dev-bounces%2Bclive.jenkins>=
xerox.com@ozlabs.org] On Behalf Of Sébastien Chrétien
Sent: 01 September 2008 10:16
To: <redacted>
Subject: Trace



Hello,

I am triying to write a tty_driver under ppc. And I get a kernel panic.
Can somebody explain me how finding the source of the error with a kernel
panic trace :
thanks

Unable to handle kernel paging request for data at address 0x575555f9
Faulting instruction address: 0xc0110ddc
Oops: Kernel access of bad area, sig: 11 [#1]
Modules linked in:
NIP: c0110ddc LR: c011118c CTR: 00000000
REGS: cf01bcb0 TRAP: 0300   Not tainted  (2.6.26)

33 more quoted lines

RE: Trace

From: Jenkins, Clive <hidden>
Date: 2008-09-01 13:54:27

I'm not sure that is a failure. Why can't tty have value 0x57555541 ?

I think the code in tty_io.c initialises driver->ttys and you shouldn't =
need to do anything in your driver.
=20
If you are not already aware, a useful way to explore kernel code is to =
use LXR:
http://lxr.linux.no/linux+v2.6.26/include/linux/tty_driver.h#L212
This may help you understand the tty code.
=20
Good luck!
=20
________________________________

From: S=E9bastien Chr=E9tien =
[mailto:sebastien.chretien.enseirb@gmail.com]=20
Sent: 01 September 2008 13:25
To: Jenkins, Clive
Cc: <redacted>
Subject: Re: Trace


I found where is the failure with your advices=20
In init_dev (tty_io.c), init_dev calls "tty =3D driver->ttys[idx]"
after this call, tty value is : tty =3D 0x57555541

Have I to initialize driver->ttys in my driver. If yes, how have I to =
Initialize this ?

The driver tty is used in order to have a console on my serial port.
Thanks for your help



2008/9/1, Jenkins, Clive [off-list ref]:=20

	The instruction that caused the fault is at this address:
=09
	> NIP [c0110ddc] init_dev+0x2bc/0x584
=09

72 more lines

RE: Trace

From: Jenkins, Clive <hidden>
Date: 2008-09-01 13:58:47

 Why can't tty have value 0x57555541 ?
To answer my own question, because it ends in 1 and is not word-aligned!

-----Original Message-----
From: <redacted> =
[mailto:linuxppc-dev-bounces+clive.jenkins=3Dxerox.com@ozlabs.org] On =
Behalf Of Jenkins, Clive
Sent: 01 September 2008 14:54
To: S=E9bastien Chr=E9tien
Cc: <redacted>
Subject: RE: Trace

I'm not sure that is a failure. Why can't tty have value 0x57555541 ?

I think the code in tty_io.c initialises driver->ttys and you shouldn't =
need to do anything in your driver.
=20
If you are not already aware, a useful way to explore kernel code is to =
use LXR:
http://lxr.linux.no/linux+v2.6.26/include/linux/tty_driver.h#L212
This may help you understand the tty code.
=20
Good luck!
=20
________________________________

From: S=E9bastien Chr=E9tien =
[mailto:sebastien.chretien.enseirb@gmail.com]=20
Sent: 01 September 2008 13:25
To: Jenkins, Clive
Cc: <redacted>
Subject: Re: Trace


I found where is the failure with your advices=20
In init_dev (tty_io.c), init_dev calls "tty =3D driver->ttys[idx]"
after this call, tty value is : tty =3D 0x57555541

Have I to initialize driver->ttys in my driver. If yes, how have I to =
Initialize this ?

89 more lines

Re: Trace

From: Sébastien Chrétien <hidden>
Date: 2008-09-01 16:48:38

Thanks for your answer.
Your analyse of ttys is very well. It was not my answer. All adresses in system.map begin with 0xc... So I think it is the case for ttys too.

I found the mistake. It came from my board_device function in struct console(console ->device). It didn't change the value of the parameter int* index.
So Linux loaded a tty_structure which was in tiny_ttys[-1]

console.h is not very well documented about this.

Thanks
Sébastien Chrétien

Jenkins, Clive a écrit :
quoted
 Why can't tty have value 0x57555541 ?
    
To answer my own question, because it ends in 1 and is not word-aligned!

-----Original Message-----
From: <redacted> [mailto:<redacted>] On Behalf Of Jenkins, Clive
Sent: 01 September 2008 14:54
To: Sébastien Chrétien
Cc: <redacted>
Subject: RE: Trace

I'm not sure that is a failure. Why can't tty have value 0x57555541 ?

I think the code in tty_io.c initialises driver->ttys and you shouldn't need to do anything in your driver.
 
If you are not already aware, a useful way to explore kernel code is to use LXR:
http://lxr.linux.no/linux+v2.6.26/include/linux/tty_driver.h#L212
This may help you understand the tty code.
 
Good luck!
 
________________________________

From: Sébastien Chrétien [mailto:<redacted>] Sent: 01 September 2008 13:25
To: Jenkins, Clive
Cc: <redacted>
Subject: Re: Trace


I found where is the failure with your advices In init_dev (tty_io.c), init_dev calls "tty = driver->ttys[idx]"
after this call, tty value is : tty = 0x57555541

Have I to initialize driver->ttys in my driver. If yes, how have I to Initialize this ?

The driver tty is used in order to have a console on my serial port.
Thanks for your help



2008/9/1, Jenkins, Clive [off-list ref]:

73 more quoted lines

Re: Trace

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2008-09-02 00:13:12

On Mon, 2008-09-01 at 18:33 +0200, Sébastien Chrétien wrote:
Thanks for your answer.
Your analyse of ttys is very well. It was not my answer. All adresses in 
system.map begin with 0xc... So I think it is the case for ttys too.

I found the mistake. It came from my board_device function in struct 
console(console ->device). It didn't change the value of the parameter 
int* index.
So Linux loaded a tty_structure which was in tiny_ttys[-1]

console.h is not very well documented about this.
You have a custom serial port ? Why not use the framework in
drivers/serial ? Or are you using it ?

Cheers,
Ben.
Thanks
Sébastien Chrétien

Jenkins, Clive a écrit :
quoted
quoted
 Why can't tty have value 0x57555541 ?
    
To answer my own question, because it ends in 1 and is not word-aligned!

-----Original Message-----
From: <redacted> [mailto:<redacted>] On Behalf Of Jenkins, Clive
Sent: 01 September 2008 14:54
To: Sébastien Chrétien
Cc: <redacted>
Subject: RE: Trace

I'm not sure that is a failure. Why can't tty have value 0x57555541 ?

I think the code in tty_io.c initialises driver->ttys and you shouldn't need to do anything in your driver.
 
If you are not already aware, a useful way to explore kernel code is to use LXR:
http://lxr.linux.no/linux+v2.6.26/include/linux/tty_driver.h#L212
This may help you understand the tty code.
 
Good luck!
 
________________________________

From: Sébastien Chrétien [mailto:<redacted>] 
Sent: 01 September 2008 13:25
To: Jenkins, Clive
Cc: <redacted>
Subject: Re: Trace


I found where is the failure with your advices 
In init_dev (tty_io.c), init_dev calls "tty = driver->ttys[idx]"
after this call, tty value is : tty = 0x57555541

Have I to initialize driver->ttys in my driver. If yes, how have I to Initialize this ?

83 more quoted lines

Re: Trace

From: Sébastien CHRETIEN <hidden>
Date: 2008-09-02 05:30:54

My board has only a uart device on a FPGA. I don't use the serial layer because it isn't documented in Linux Device Driver 3rd. Only the tty layer is documented

Benjamin Herrenschmidt a écrit :
On Mon, 2008-09-01 at 18:33 +0200, Sébastien Chrétien wrote:
  
quoted
Thanks for your answer.
Your analyse of ttys is very well. It was not my answer. All adresses in system.map begin with 0xc... So I think it is the case for ttys too.

I found the mistake. It came from my board_device function in struct console(console ->device). It didn't change the value of the parameter int* index.
So Linux loaded a tty_structure which was in tiny_ttys[-1]

console.h is not very well documented about this.
    
You have a custom serial port ? Why not use the framework in
drivers/serial ? Or are you using it ?

Cheers,
Ben.

  
quoted
Thanks
Sébastien Chrétien

Jenkins, Clive a écrit :
    
quoted
quoted
 Why can't tty have value 0x57555541 ?
    
        
To answer my own question, because it ends in 1 and is not word-aligned!

-----Original Message-----
From: <redacted> [mailto:<redacted>] On Behalf Of Jenkins, Clive
Sent: 01 September 2008 14:54
To: Sébastien Chrétien
Cc: <redacted>
Subject: RE: Trace

I'm not sure that is a failure. Why can't tty have value 0x57555541 ?

I think the code in tty_io.c initialises driver->ttys and you shouldn't need to do anything in your driver.
 
If you are not already aware, a useful way to explore kernel code is to use LXR:

106 more quoted lines

Re: Trace

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2008-09-02 05:45:26

On Tue, 2008-09-02 at 07:13 +0200, Sébastien CHRETIEN wrote:
My board has only a uart device on a FPGA. I don't use the serial layer 
because it isn't documented in Linux Device Driver 3rd. Only the tty 
layer is documented
You won't go very far in linux kernel dev. with using books like
that :-)

Look at other drivers in drivers/serial that should give you all the
information you need :-0

Cheers,
Ben.

Re: Trace

From: Sébastien Chrétien <hidden>
Date: 2008-09-02 07:34:41

ok is it a bad way to write a tty driver ? why ?

2008/9/2, Benjamin Herrenschmidt [off-list ref]:
On Tue, 2008-09-02 at 07:13 +0200, Sébastien CHRETIEN wrote:
quoted
My board has only a uart device on a FPGA. I don't use the serial layer
because it isn't documented in Linux Device Driver 3rd. Only the tty
layer is documented

You won't go very far in linux kernel dev. with using books like
that :-)

Look at other drivers in drivers/serial that should give you all the
information you need :-0

Cheers,
Ben.

Re: Trace

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2008-09-02 08:20:01

On Tue, 2008-09-02 at 09:34 +0200, Sébastien Chrétien wrote:
ok is it a bad way to write a tty driver ? why ?
Not necessarily, it's just overkill. The UART layer handles a lot
of stuff for you. The tty layer is tricky to get right.

Cheers,
Ben.

Re: Trace

From: Sébastien Chrétien <hidden>
Date: 2008-09-02 08:44:13

ok. I will try the serial layer

2008/9/2, Benjamin Herrenschmidt [off-list ref]:
On Tue, 2008-09-02 at 09:34 +0200, Sébastien Chrétien wrote:
quoted
ok is it a bad way to write a tty driver ? why ?

Not necessarily, it's just overkill. The UART layer handles a lot
of stuff for you. The tty layer is tricky to get right.

Cheers,
Ben.

Re: Trace

From: Sébastien Chrétien <hidden>
Date: 2008-09-04 20:20:12

I followed your advice : I used the UART layer.
It is easier.
Thanks


Benjamin Herrenschmidt a écrit :
On Tue, 2008-09-02 at 09:34 +0200, Sébastien Chrétien wrote:
  
quoted
ok is it a bad way to write a tty driver ? why ?
    
Not necessarily, it's just overkill. The UART layer handles a lot
of stuff for you. The tty layer is tricky to get right.

Cheers,
Ben.


  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help