SCSI中断调用栈:
#0 blk_complete_request (req=0xc7613298) at block/ll_rw_blk.c:3640
#1 0xc01967a8 in __scsi_done (cmd=)
at drivers/scsi/scsi.c:654
#2 0xc01967dc in scsi_done (cmd=0xc761dcc0) at drivers/scsi/scsi.c:629
#3 0xc01a64c4 in sym_xpt_done (np=, cmd=0xc761dcc0)
at drivers/scsi/sym53c8xx_2/sym_glue.c:149
#4 0xc01ab544 in sym_interrupt (shost=0xc7495000)
at drivers/scsi/sym53c8xx_2/sym_hipd.c:5484
#5 0xc01a6580 in sym53c8xx_intr (irq=, dev_id=0x20000113)
at drivers/scsi/sym53c8xx_2/sym_glue.c:556
#6 0xc0066fd0 in handle_IRQ_event (irq=27, action=0xc740d300)
at kernel/irq/handle.c:140
#7 0xc00688d4 in handle_level_irq (irq=27, desc=0xc03276c4)
at kernel/irq/chip.c:356
#8 0xc0024048 in asm_do_IRQ (irq=27, regs=)
at include/asm/mach/irq.h:29
#9 0xc0024a54 in __irq_svc ()
在blk_complete_request中触发BLOCK_SOFTIRQ软中断:
raise_softirq_irqoff(BLOCK_SOFTIRQ);
其中,在blk_dev_init中,把BLOCK_SOFTIRQ软中断的处理函数初始化为blk_done_softirq。
blk_done_softirq中,调用request queue的softirq_done_fn:
rq->q->softirq_done_fn(rq);
该方法是在scsi_alloc_queue分配请求队列时初始化的:
blk_queue_softirq_done(q, scsi_softirq_done);
软中断调用栈:
#0 end_that_request_last (req=0xc7613298, uptodate=-11377)
at block/ll_rw_blk.c:3688
#1 0xc019b3bc in scsi_end_request (cmd=0xc761dcc0, uptodate=1,
bytes=, requeue=)
at drivers/scsi/scsi_lib.c:689
#2 0xc019b71c in scsi_io_completion (cmd=0xc761dcc0, good_bytes=4096)
at drivers/scsi/scsi_lib.c:988
#3 0xc0196720 in scsi_finish_command (cmd=0xc761dcc0)
at drivers/scsi/scsi.c:707
#4 0xc019bfc0 in scsi_softirq_done (rq=)
at drivers/scsi/scsi_lib.c:1482
#5 0xc01419d4 in blk_done_softirq (h=)
at block/ll_rw_blk.c:3594
#6 0xc004a15c in __do_softirq () at kernel/softirq.c:232
#7 0xc004a4fc in irq_exit () at kernel/softirq.c:303
#8 0xc002404c in asm_do_IRQ (irq=27, regs=)
at arch/arm/kernel/irq.c:130
#9 0xc0024a54 in __irq_svc ()
阅读(1125) | 评论(0) | 转发(0) |