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