Linux SCSI中断处理

1791阅读 0评论2008-10-07 xiegang112
分类:LINUX

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 ()
 
 
 
上一篇:Linux SCSI中断处理
下一篇:SCSI Lun Probe 调用栈