Hi all, I met the crash this afternoon in 2.6.31.3 on JZ4750 when I tried to use lrz/sz to transfer files between board and PC by serial port . I had modified the code to use workqueue instead of tasklet in u_serial.c.It looks fine.This crash has not got fixed in 2.6.32. I have checked the newest code. It there any better way we can try to handle this issue? 2010/1/13 Cliff Cai <cliffcai.sh@xxxxxxxxx>: > On Tue, Jan 12, 2010 at 8:14 PM, Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> wrote: >> On Tue, 12 Jan 2010 11:39:41 +0800 >> Cliff Cai <cliffcai.sh@xxxxxxxxx> wrote: >> >>> Hi all, >>> >>> Recently, I ran into a problem of running g_serial,that is kernel >>> crashes when running "cat myfile > /dev/ttyGS0" >> >> Which kernel, which architecture, what kind of crash, what diagnostics >> are displayed when it crashes ? > > Kernel:2.6.32,arch:Blackfin,see the crash information. > the test works fine with 2.6.28. > on 2.6.32,echoing character string to /dev/ttyGS0 works, I've tried to > echo out a 200 characters string. > and also catting a small file to /dev/ttyGS0 works. > but if cat a big file,it will cause the crash. > >> >>> When low_latency is disabled,tty_flip_buffer_push(tty) will hire a >>> work queue to push the buffer,obviously,this is a deferred job. >>> So, it's not proper to wake up the read thread right after calling >>> tty_flip_buffer_push().I have few knowledge about tty stuff. >>> Does anyone here could give some hints on this problem? >> >> low_latency should only be set if >> - You are queuing data from a context that can sleep >> - Your queueing path can cope with callbacks into your transmit path > > g_serial calls tty_flip_buffer_push(tty) in a tasklet context,So > low_latency should not be set. > otherwise there will be a "scheduling while atomic" error. > > Cliff > > root:/> cat /etc/boa.conf > /dev/ttyGS0 > NULL pointer access > Kernel OOPS in progress > Deferred Exception context > CURRENT PROCESS: > COMM=events/0 PID=5 CPU=0 > invalid mm > return address: [0x02c2181a]; contents of: > 0x02c217f0: 0c00 1807 e14a 001f e10a 62b0 9110 0040 > 0x02c21800: 6c66 0127 0538 0010 3210 0578 0167 6fa6 > 0x02c21810: e512 0041 0037 61f8 0040 [9110] 0c00 181a > 0x02c21820: 304a e120 0048 e14a 02c2 5001 e10a 0148 > > ADSP-BF527-0.0 525(MHz CCLK) 131(MHz SCLK) (mpu off) > Linux version 2.6.32.3-ADI-2010R1-pre-svn8127 (cliff@debiancliff) (gcc > version 4.1.2 (ADI svn)) #1136 Wed Jan 13 23:24:33 CST0 > > SEQUENCER STATUS: Not tainted > SEQSTAT: 00000027 IPEND: 8008 IMASK: 003f SYSCFG: 0006 > Peripheral interrupts masked off > Kernel interrupts masked off > EXCAUSE : 0x27 > physical IVG3 asserted : <0xffa00698> { _trap + 0x0 } > physical IVG15 asserted : <0xffa00ec4> { _evt_system_call + 0x0 } > logical irq 6 mapped : <0xffa00334> { _bfin_coretmr_interrupt + 0x0 } > logical irq 13 mapped : <0x000a0c40> { _bfin_t350mcqb_irq_error + 0x0 } > logical irq 15 mapped : <0x00114150> { _err_handler + 0x0 } > logical irq 21 mapped : <0x000e6880> { _bfin_rtc_interrupt + 0x0 } > logical irq 23 mapped : <0x001133d4> { _rx_handler + 0x0 } > logical irq 24 mapped : <0x00113370> { _tx_handler + 0x0 } > logical irq 27 mapped : <0x000e909c> { _bfin_twi_interrupt_entry + 0x0 } > logical irq 31 mapped : <0x000ad7fc> { _bfin_serial_dma_rx_int + 0x0 } > logical irq 32 mapped : <0x000ade8c> { _bfin_serial_dma_tx_int + 0x0 } > logical irq 35 mapped : <0x000c9560> { _bfin_mac_interrupt + 0x0 } > logical irq 59 mapped : <0x000dfd20> { _blackfin_interrupt + 0x0 } > RETE: <0x00000000> /* Maybe null pointer? */ > RETN: <0x02027e54> /* kernel dynamic memory (maybe user-space) */ > RETX: <0x00000480> /* Maybe fixed code section */ > RETS: <0x000a5520> { _process_echoes + 0x38 } > PC : <0x02c2181a> { :g_serial:_usb_gadget_get_string + 0x5f6 } > DCPLB_FAULT_ADDR: <0x00000000> /* Maybe null pointer? */ > ICPLB_FAULT_ADDR: <0x02c2181a> { :g_serial:_usb_gadget_get_string + 0x5f6 } > PROCESSOR STATE: > R0 : 0000003f R1 : 0000ffc0 R2 : 00000000 R3 : 00000000 > R4 : 00000000 R5 : 00000000 R6 : 00000073 R7 : 0000ffff > P0 : ffa008f0 P1 : 02bd5c00 P2 : 00000000 P3 : 02c26536 > P4 : 02bd5c00 P5 : 02bd5c00 FP : 02027e74 SP : 02027d78 > LB0: 0009544c LT0: 0009544a LC0: 00000000 > LB1: 00036356 LT1: 000362da LC1: 0000000b > B0 : 00000000 L0 : 00000000 M0 : ffffffac I0 : 00000008 > B1 : 00000000 L1 : 00000000 M1 : 00000000 I1 : 02bd9940 > B2 : 00000000 L2 : 00000000 M2 : 00000000 I2 : 00000000 > B3 : 00000000 L3 : 00000000 M3 : 00000000 I3 : 00000000 > A0.w: 00000008 A0.x: 00000000 A1.w: 00000008 A1.x: 00000000 > USP : 00000000 ASTAT: 02003005 > > Hardware Trace: > 0 Target : <0x00004f24> { _trap_c + 0x0 } > Source : <0xffa0062c> { _exception_to_level5 + 0xa4 } CALL pcrel > 1 Target : <0xffa00588> { _exception_to_level5 + 0x0 } > Source : <0xffa0043c> { _bfin_return_from_exception + 0x18 } RTX > 2 Target : <0xffa00424> { _bfin_return_from_exception + 0x0 } > Source : <0xffa004e0> { _ex_trap_c + 0x74 } JUMP.S > 3 Target : <0xffa0046c> { _ex_trap_c + 0x0 } > Source : <0xffa006f2> { _trap + 0x5a } JUMP (P4) > 4 Target : <0xffa00698> { _trap + 0x0 } > Source : <0x02c21818> { :g_serial:_usb_gadget_get_string + 0x5f4 } STI R0 > 5 Target : <0x02c21808> { :g_serial:_usb_gadget_get_string + 0x5e4 } > Source : <0x000a726a> { _tty_write_room + 0xa } JUMP (P2) > 6 Target : <0x000a7260> { _tty_write_room + 0x0 } > Source : <0x000a551c> { _process_echoes + 0x34 } CALL pcrel > 7 Target : <0x000a551a> { _process_echoes + 0x32 } > Source : <0x00163e80> { _mutex_lock + 0x38 } RTS > 8 Target : <0x00163e54> { _mutex_lock + 0xc } > Source : <0x00163676> { __cond_resched + 0x1a } RTS > 9 Target : <0x0016365c> { __cond_resched + 0x0 } > Source : <0x00163e50> { _mutex_lock + 0x8 } CALL pcrel > 10 Target : <0x00163e48> { _mutex_lock + 0x0 } > Source : <0x000a5516> { _process_echoes + 0x2e } CALL pcrel > 11 Target : <0x000a550e> { _process_echoes + 0x26 } > Source : <0x00163e80> { _mutex_lock + 0x38 } RTS > 12 Target : <0x00163e54> { _mutex_lock + 0xc } > Source : <0x00163676> { __cond_resched + 0x1a } RTS > 13 Target : <0x0016365c> { __cond_resched + 0x0 } > Source : <0x00163e50> { _mutex_lock + 0x8 } CALL pcrel > 14 Target : <0x00163e48> { _mutex_lock + 0x0 } > Source : <0x000a550a> { _process_echoes + 0x22 } CALL pcrel > 15 Target : <0x000a5502> { _process_echoes + 0x1a } > Source : <0x000a54f6> { _process_echoes + 0xe } IF !CC JUMP > Kernel Stack > Stack info: > SP: [0x02027dd8] <0x02027dd8> /* kernel dynamic memory (maybe user-space) */ > FP: (0x02027e3c) > Memory from 0x02027dd0 to 02028000 > 02027dd0: 00000000 00000000 [00000000] 00000000 00000000 00000000 > 00000000 00000000 > 02027df0: 00000000 ffffffac 00000000 00000000 02bd9940 00000008 > 00000000 02027e74 > 02027e10: 02bd5c00 02bd5c00 02c26536 00000000 02bd5c00 ffa008f0 > 0000ffff 00000073 > 02027e30: 00000000 00000000 00000000 (00000000)<0000ffc0> 0000003f > 0000003f ffa008f0 > 02027e50: 00000006 ffffffc0 00000000 02c26435 <000a5520> 000000b6 > 0000000a 02c26535 > 02027e70: 00000073 02c26435 <000a6590> 02bd5c00 0000000a 02c26536 > 000000b6 00000073 > 02027e90: 00000000 029357cf 0009544c 029357ce 0009544a 00000000 > 00000000 00000008 > 02027eb0: 00000000 00000008 00000000 00000000 00000000 00000000 > 00000000 00000000 > 02027ed0: 00000000 00000000 00000000 00000000 00000000 00000000 > ffffffac 00000000 > 02027ef0: 00000000 02bd7150 02c1ffed 00000000 02026000 02bd5c00 > 02001a60 02c285e0 > 02027f10: 000a6294 02001a60 02001a60 02c2691c 0000ffff 02026000 > <000a8dba> 02bd5c00 > 02027f30: 02001a60 02c285e0 02c2651c 0000ffff 00000000 00000000 > 02c1ffed 00000000 > 02027f50: 00000000 000000cf <0001e340> 02bd5ca4 02001a60 000a8cbc > 001f62b0 02027fa4 > 02027f70: 02027fa4 00000000 00000000 00000000 00000000 <0001e822> > 02001a60 0001e7ac > 02027f90: 00000000 02001a68 0000ffff 02026000 02026000 00000000 > 02018040 00021014 > 02027fb0: 02027fb0 02027fb0 <00020e5e> 0201bf40 02001a60 00000000 > 00000000 00020e04 > 02027fd0: 00001490 00000000 00000000 02027fdc 02027fdc <00001496> > 00000000 00000000 > 02027ff0: 00000000 00000000 ffffffff 00000006 > Return addresses in stack: > frame 1 : <0x0000ffc0> { _copy_mm + 0x1c } > address : <0x000a5520> { _process_echoes + 0x38 } > address : <0x000a6590> { _n_tty_receive_buf + 0x2fc } > address : <0x000a8dba> { _flush_to_ldisc + 0xfe } > address : <0x0001e340> { _run_workqueue + 0x6c } > address : <0x0001e822> { _worker_thread + 0x76 } > address : <0x00020e5e> { _kthread + 0x5a } > address : <0x00001496> { _kernel_thread_helper + 0x6 } > Modules linked in: g_serial > Kernel panic - not syncing: Kernel exception > Hardware Trace: > Stack info: > SP: [0x02027c90] <0x02027c90> /* kernel dynamic memory (maybe user-space) */ > FP: (0x02027d4c) > Memory from 0x02027c90 to 02028000 > 02027c90:[001a5bfc]<00011324> 02027d78 001a5bfc 001e84ce 001e84ce > 001e84ce 02027ccc > 02027cb0: 02027ccc <0000529a> 02027d78 ffe02014 02c26536 001a56cc > <0003185e> 0000003f > 02027cd0: ffffffff 00000100 02c26535 0003000b <00031a54> 001fb7b4 > <00031ac8> 001ecdec > 02027cf0: 00000024 02026000 00000001 00000024 00000100 00000101 > 00000004 00000100 > 02027d10:<0001589c><0002ee0a> 0000000a 02c26533 0000ffff <000304dc> > 001f9330 02027e74 > 02027d30:<ffa002ee> 001fd74c 02bd5c00 02c26535 00000006 00000000 > 00000000 (00000000) > 02027d50:<00015cee><ffa00630> 001e5000 00008008 00000027 00000000 > 00000000 0000003b > 02027d70:<ffa00b68> 00000480 00000480 00008008 00000027 00000000 > 02027e54 00000480 > 02027d90: 02c2181a <000a5520> 0000003f 02003005 00036356 0009544c > 000362da 0009544a > 02027db0: 0000000b 00000000 00000008 00000000 00000008 00000000 > 00000000 00000000 > 02027dd0: 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 > 02027df0: 00000000 ffffffac 00000000 00000000 02bd9940 00000008 > 00000000 02027e74 > 02027e10: 02bd5c00 02bd5c00 02c26536 00000000 02bd5c00 ffa008f0 > 0000ffff 00000073 > 02027e30: 00000000 00000000 00000000 00000000 <0000ffc0> 0000003f > 0000003f ffa008f0 > 02027e50: 00000006 ffffffc0 00000000 02c26435 <000a5520> 000000b6 > 0000000a 02c26535 > 02027e70: 00000073 02c26435 <000a6590> 02bd5c00 0000000a 02c26536 > 000000b6 00000073 > 02027e90: 00000000 029357cf 0009544c 029357ce 0009544a 00000000 > 00000000 00000008 > 02027eb0: 00000000 00000008 00000000 00000000 00000000 00000000 > 00000000 00000000 > 02027ed0: 00000000 00000000 00000000 00000000 00000000 00000000 > ffffffac 00000000 > 02027ef0: 00000000 02bd7150 02c1ffed 00000000 02026000 02bd5c00 > 02001a60 02c285e0 > 02027f10: 000a6294 02001a60 02001a60 02c2691c 0000ffff 02026000 > <000a8dba> 02bd5c00 > 02027f30: 02001a60 02c285e0 02c2651c 0000ffff 00000000 00000000 > 02c1ffed 00000000 > 02027f50: 00000000 000000cf <0001e340> 02bd5ca4 02001a60 000a8cbc > 001f62b0 02027fa4 > 02027f70: 02027fa4 00000000 00000000 00000000 00000000 <0001e822> > 02001a60 0001e7ac > 02027f90: 00000000 02001a68 0000ffff 02026000 02026000 00000000 > 02018040 00021014 > 02027fb0: 02027fb0 02027fb0 <00020e5e> 0201bf40 02001a60 00000000 > 00000000 00020e04 > 02027fd0: 00001490 00000000 00000000 02027fdc 02027fdc <00001496> > 00000000 00000000 > 02027ff0: 00000000 00000000 ffffffff 00000006 > Return addresses in stack: > address : <0x00011324> { _panic + 0x48 } > address : <0x0000529a> { _trap_c + 0x376 } > address : <0x0003185e> { _rcu_check_quiescent_state + 0xe } > address : <0x00031a54> { ___rcu_process_callbacks + 0x38 } > address : <0x00031ac8> { _rcu_process_callbacks + 0x2c } > address : <0x0001589c> { ___do_softirq + 0x7c } > address : <0x0002ee0a> { _handle_IRQ_event + 0x3e } > address : <0x000304dc> { _handle_simple_irq + 0x68 } > address : <0xffa002ee> { _asm_do_IRQ + 0x36 } > frame 1 : <0x00015cee> { _irq_enter + 0xa } > address : <0xffa00630> { _exception_to_level5 + 0xa8 } > address : <0xffa00b68> { __common_int_entry + 0x64 } > address : <0x000a5520> { _process_echoes + 0x38 } > address : <0x0000ffc0> { _copy_mm + 0x1c } > address : <0x000a5520> { _process_echoes + 0x38 } > address : <0x000a6590> { _n_tty_receive_buf + 0x2fc } > address : <0x000a8dba> { _flush_to_ldisc + 0xfe } > address : <0x0001e340> { _run_workqueue + 0x6c } > address : <0x0001e822> { _worker_thread + 0x76 } > address : <0x00020e5e> { _kthread + 0x5a } > address : <0x00001496> { _kernel_thread_helper + 0x6 } > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html