Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
71efa38c
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
71efa38c
编写于
3月 01, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
上级
96789ac4
e2482fa1
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
90 addition
and
80 deletion
+90
-80
drivers/scsi/aha152x.c
drivers/scsi/aha152x.c
+52
-33
drivers/scsi/aha152x.h
drivers/scsi/aha152x.h
+1
-1
drivers/scsi/jazz_esp.c
drivers/scsi/jazz_esp.c
+0
-21
drivers/scsi/megaraid/megaraid_sas.c
drivers/scsi/megaraid/megaraid_sas.c
+15
-14
drivers/scsi/pcmcia/aha152x_stub.c
drivers/scsi/pcmcia/aha152x_stub.c
+1
-3
drivers/scsi/scsi_error.c
drivers/scsi/scsi_error.c
+2
-2
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_lib.c
+1
-1
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_scan.c
+14
-2
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_fc.c
+1
-2
drivers/scsi/sg.c
drivers/scsi/sg.c
+1
-1
drivers/scsi/sym53c8xx_2/sym_hipd.c
drivers/scsi/sym53c8xx_2/sym_hipd.c
+2
-0
未找到文件。
drivers/scsi/aha152x.c
浏览文件 @
71efa38c
...
...
@@ -1260,16 +1260,15 @@ static void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs)
* Reset the bus
*
*/
static
int
aha152x_bus_reset
(
Scsi_Cmnd
*
SC
pnt
)
static
int
aha152x_bus_reset
_host
(
struct
Scsi_Host
*
sh
pnt
)
{
struct
Scsi_Host
*
shpnt
=
SCpnt
->
device
->
host
;
unsigned
long
flags
;
DO_LOCK
(
flags
);
#if defined(AHA152X_DEBUG)
if
(
HOSTDATA
(
shpnt
)
->
debug
&
debug_eh
)
{
printk
(
DEBUG_LEAD
"aha152x_bus_reset(%p)"
,
CMDINFO
(
SCpnt
),
SCpnt
);
printk
(
KERN_DEBUG
"scsi%d: bus reset"
,
shpnt
->
host_no
);
show_queues
(
shpnt
);
}
#endif
...
...
@@ -1277,14 +1276,14 @@ static int aha152x_bus_reset(Scsi_Cmnd *SCpnt)
free_hard_reset_SCs
(
shpnt
,
&
ISSUE_SC
);
free_hard_reset_SCs
(
shpnt
,
&
DISCONNECTED_SC
);
DPRINTK
(
debug_eh
,
DEBUG_LEAD
"resetting bus
\n
"
,
CMDINFO
(
SCpnt
)
);
DPRINTK
(
debug_eh
,
KERN_DEBUG
"scsi%d: resetting bus
\n
"
,
shpnt
->
host_no
);
SETPORT
(
SCSISEQ
,
SCSIRSTO
);
mdelay
(
256
);
SETPORT
(
SCSISEQ
,
0
);
mdelay
(
DELAY
);
DPRINTK
(
debug_eh
,
DEBUG_LEAD
"bus resetted
\n
"
,
CMDINFO
(
SCpnt
)
);
DPRINTK
(
debug_eh
,
KERN_DEBUG
"scsi%d: bus resetted
\n
"
,
shpnt
->
host_no
);
setup_expected_interrupts
(
shpnt
);
if
(
HOSTDATA
(
shpnt
)
->
commands
==
0
)
...
...
@@ -1295,6 +1294,14 @@ static int aha152x_bus_reset(Scsi_Cmnd *SCpnt)
return
SUCCESS
;
}
/*
* Reset the bus
*
*/
static
int
aha152x_bus_reset
(
Scsi_Cmnd
*
SCpnt
)
{
return
aha152x_bus_reset_host
(
SCpnt
->
device
->
host
);
}
/*
* Restore default values to the AIC-6260 registers and reset the fifos
...
...
@@ -1337,22 +1344,27 @@ static void reset_ports(struct Scsi_Host *shpnt)
* Reset the host (bus and controller)
*
*/
int
aha152x_host_reset
(
Scsi_Cmnd
*
SC
pnt
)
int
aha152x_host_reset
_host
(
struct
Scsi_Host
*
sh
pnt
)
{
#if defined(AHA152X_DEBUG)
struct
Scsi_Host
*
shpnt
=
SCpnt
->
device
->
host
;
#endif
DPRINTK
(
debug_eh
,
DEBUG_LEAD
"aha152x_host_reset(%p)
\n
"
,
CMDINFO
(
SCpnt
),
SCpnt
);
DPRINTK
(
debug_eh
,
KERN_DEBUG
"scsi%d: host reset
\n
"
,
shpnt
->
host_no
);
aha152x_bus_reset
(
SC
pnt
);
aha152x_bus_reset
_host
(
sh
pnt
);
DPRINTK
(
debug_eh
,
DEBUG_LEAD
"resetting ports
\n
"
,
CMDINFO
(
SCpnt
)
);
reset_ports
(
SCpnt
->
device
->
hos
t
);
DPRINTK
(
debug_eh
,
KERN_DEBUG
"scsi%d: resetting ports
\n
"
,
shpnt
->
host_no
);
reset_ports
(
shpn
t
);
return
SUCCESS
;
}
/*
* Reset the host (bus and controller)
*
*/
static
int
aha152x_host_reset
(
Scsi_Cmnd
*
SCpnt
)
{
return
aha152x_host_reset_host
(
SCpnt
->
device
->
host
);
}
/*
* Return the "logical geometry"
*
...
...
@@ -1431,22 +1443,18 @@ static void run(void)
{
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
aha152x_host
);
i
++
)
{
struct
Scsi_Host
*
shpnt
=
aha152x_host
[
i
];
if
(
shpnt
&&
HOSTDATA
(
shpnt
)
->
service
)
{
HOSTDATA
(
shpnt
)
->
service
=
0
;
is_complete
(
shpnt
);
}
is_complete
(
aha152x_host
[
i
]);
}
}
/*
*
Interrupts
handler
*
Interrupt
handler
*
*/
static
irqreturn_t
intr
(
int
irqno
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
Scsi_Host
*
shpnt
=
lookup_irq
(
irqno
);
unsigned
long
flags
;
unsigned
char
rev
,
dmacntrl0
;
if
(
!
shpnt
)
{
...
...
@@ -1472,23 +1480,23 @@ static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs)
if
((
rev
==
0xFF
)
&&
(
dmacntrl0
==
0xFF
))
return
IRQ_NONE
;
if
(
TESTLO
(
DMASTAT
,
INTSTAT
)
)
return
IRQ_NONE
;
/* no more interrupts from the controller, while we're busy.
INTEN is restored by the BH handler */
CLRBITS
(
DMACNTRL0
,
INTEN
);
#if 0
/* check if there is already something to be
serviced; should not happen */
if(HOSTDATA(shpnt)->service) {
printk(KERN_ERR "aha152x%d: lost interrupt (%d)\n", HOSTNO, HOSTDATA(shpnt)->service);
show_queues(shpnt);
DO_LOCK
(
flags
);
if
(
HOSTDATA
(
shpnt
)
->
service
==
0
)
{
HOSTDATA
(
shpnt
)
->
service
=
1
;
/* Poke the BH handler */
INIT_WORK
(
&
aha152x_tq
,
(
void
*
)
run
,
NULL
);
schedule_work
(
&
aha152x_tq
);
}
#endif
/* Poke the BH handler */
HOSTDATA
(
shpnt
)
->
service
++
;
INIT_WORK
(
&
aha152x_tq
,
(
void
*
)
run
,
NULL
);
schedule_work
(
&
aha152x_tq
);
DO_UNLOCK
(
flags
);
return
IRQ_HANDLED
;
}
...
...
@@ -2527,7 +2535,18 @@ static void is_complete(struct Scsi_Host *shpnt)
unsigned
long
flags
;
int
pending
;
if
(
!
shpnt
)
return
;
DO_LOCK
(
flags
);
if
(
HOSTDATA
(
shpnt
)
->
service
==
0
)
{
DO_UNLOCK
(
flags
);
return
;
}
HOSTDATA
(
shpnt
)
->
service
=
0
;
if
(
HOSTDATA
(
shpnt
)
->
in_intr
)
{
DO_UNLOCK
(
flags
);
/* aha152x_error never returns.. */
...
...
drivers/scsi/aha152x.h
浏览文件 @
71efa38c
...
...
@@ -332,6 +332,6 @@ struct aha152x_setup {
struct
Scsi_Host
*
aha152x_probe_one
(
struct
aha152x_setup
*
);
void
aha152x_release
(
struct
Scsi_Host
*
);
int
aha152x_host_reset
(
Scsi_Cmnd
*
);
int
aha152x_host_reset
_host
(
struct
Scsi_Host
*
);
#endif
/* _AHA152X_H */
drivers/scsi/jazz_esp.c
浏览文件 @
71efa38c
...
...
@@ -65,27 +65,6 @@ static int jazz_esp_release(struct Scsi_Host *shost)
return
0
;
}
static
struct
scsi_host_template
driver_template
=
{
.
proc_name
=
"jazz_esp"
,
.
proc_info
=
&
esp_proc_info
,
.
name
=
"ESP 100/100a/200"
,
.
detect
=
jazz_esp_detect
,
.
slave_alloc
=
esp_slave_alloc
,
.
slave_destroy
=
esp_slave_destroy
,
.
release
=
jazz_esp_release
,
.
info
=
esp_info
,
.
queuecommand
=
esp_queue
,
.
eh_abort_handler
=
esp_abort
,
.
eh_bus_reset_handler
=
esp_reset
,
.
can_queue
=
7
,
.
this_id
=
7
,
.
sg_tablesize
=
SG_ALL
,
.
cmd_per_lun
=
1
,
.
use_clustering
=
DISABLE_CLUSTERING
,
};
#include "scsi_module.c"
/***************************************************************** Detection */
static
int
jazz_esp_detect
(
struct
scsi_host_template
*
tpnt
)
{
...
...
drivers/scsi/megaraid/megaraid_sas.c
浏览文件 @
71efa38c
...
...
@@ -793,6 +793,20 @@ megasas_queue_command(struct scsi_cmnd *scmd, void (*done) (struct scsi_cmnd *))
return
0
;
}
static
int
megasas_slave_configure
(
struct
scsi_device
*
sdev
)
{
/*
* Don't export physical disk devices to the disk driver.
*
* FIXME: Currently we don't export them to the midlayer at all.
* That will be fixed once LSI engineers have audited the
* firmware for possible issues.
*/
if
(
sdev
->
channel
<
MEGASAS_MAX_PD_CHANNELS
&&
sdev
->
type
==
TYPE_DISK
)
return
-
ENXIO
;
return
0
;
}
/**
* megasas_wait_for_outstanding - Wait for all outstanding cmds
* @instance: Adapter soft state
...
...
@@ -943,6 +957,7 @@ static struct scsi_host_template megasas_template = {
.
module
=
THIS_MODULE
,
.
name
=
"LSI Logic SAS based MegaRAID driver"
,
.
proc_name
=
"megaraid_sas"
,
.
slave_configure
=
megasas_slave_configure
,
.
queuecommand
=
megasas_queue_command
,
.
eh_device_reset_handler
=
megasas_reset_device
,
.
eh_bus_reset_handler
=
megasas_reset_bus_host
,
...
...
@@ -1071,20 +1086,6 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
break
;
}
/*
* Don't export physical disk devices to mid-layer.
*/
if
(
!
MEGASAS_IS_LOGICAL
(
cmd
->
scmd
)
&&
(
hdr
->
cmd_status
==
MFI_STAT_OK
)
&&
(
cmd
->
scmd
->
cmnd
[
0
]
==
INQUIRY
))
{
if
(((
*
(
u8
*
)
cmd
->
scmd
->
request_buffer
)
&
0x1F
)
==
TYPE_DISK
)
{
cmd
->
scmd
->
result
=
DID_BAD_TARGET
<<
16
;
exception
=
1
;
}
}
case
MFI_CMD_LD_READ
:
case
MFI_CMD_LD_WRITE
:
...
...
drivers/scsi/pcmcia/aha152x_stub.c
浏览文件 @
71efa38c
...
...
@@ -275,10 +275,8 @@ static int aha152x_resume(struct pcmcia_device *dev)
link
->
state
&=
~
DEV_SUSPEND
;
if
(
link
->
state
&
DEV_CONFIG
)
{
Scsi_Cmnd
tmp
;
pcmcia_request_configuration
(
link
->
handle
,
&
link
->
conf
);
tmp
.
device
->
host
=
info
->
host
;
aha152x_host_reset
(
&
tmp
);
aha152x_host_reset_host
(
info
->
host
);
}
return
0
;
...
...
drivers/scsi/scsi_error.c
浏览文件 @
71efa38c
...
...
@@ -1308,7 +1308,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
* the request was not marked fast fail. Note that above,
* even if the request is marked fast fail, we still requeue
* for queue congestion conditions (QUEUE_FULL or BUSY) */
if
((
++
scmd
->
retries
)
<
scmd
->
allowed
if
((
++
scmd
->
retries
)
<
=
scmd
->
allowed
&&
!
blk_noretry_request
(
scmd
->
request
))
{
return
NEEDS_RETRY
;
}
else
{
...
...
@@ -1433,7 +1433,7 @@ static void scsi_eh_flush_done_q(struct list_head *done_q)
list_del_init
(
&
scmd
->
eh_entry
);
if
(
scsi_device_online
(
scmd
->
device
)
&&
!
blk_noretry_request
(
scmd
->
request
)
&&
(
++
scmd
->
retries
<
scmd
->
allowed
))
{
(
++
scmd
->
retries
<
=
scmd
->
allowed
))
{
SCSI_LOG_ERROR_RECOVERY
(
3
,
printk
(
"%s: flush"
" retry cmd: %p
\n
"
,
current
->
comm
,
...
...
drivers/scsi/scsi_lib.c
浏览文件 @
71efa38c
...
...
@@ -1498,7 +1498,7 @@ static void scsi_kill_request(struct request *req, request_queue_t *q)
static
void
scsi_softirq_done
(
struct
request
*
rq
)
{
struct
scsi_cmnd
*
cmd
=
rq
->
completion_data
;
unsigned
long
wait_for
=
cmd
->
allowed
*
cmd
->
timeout_per_command
;
unsigned
long
wait_for
=
(
cmd
->
allowed
+
1
)
*
cmd
->
timeout_per_command
;
int
disposition
;
INIT_LIST_HEAD
(
&
cmd
->
eh_entry
);
...
...
drivers/scsi/scsi_scan.c
浏览文件 @
71efa38c
...
...
@@ -752,8 +752,20 @@ static int scsi_add_lun(struct scsi_device *sdev, char *inq_result, int *bflags)
transport_configure_device
(
&
sdev
->
sdev_gendev
);
if
(
sdev
->
host
->
hostt
->
slave_configure
)
sdev
->
host
->
hostt
->
slave_configure
(
sdev
);
if
(
sdev
->
host
->
hostt
->
slave_configure
)
{
int
ret
=
sdev
->
host
->
hostt
->
slave_configure
(
sdev
);
if
(
ret
)
{
/*
* if LLDD reports slave not present, don't clutter
* console with alloc failure messages
*/
if
(
ret
!=
-
ENXIO
)
{
sdev_printk
(
KERN_ERR
,
sdev
,
"failed to configure device
\n
"
);
}
return
SCSI_SCAN_NO_RESPONSE
;
}
}
/*
* Ok, the device is now all set up, we can
...
...
drivers/scsi/scsi_transport_fc.c
浏览文件 @
71efa38c
...
...
@@ -1498,8 +1498,7 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel,
}
/* Search the bindings array */
if
(
likely
((
ids
->
roles
&
FC_RPORT_ROLE_FCP_TARGET
)
&&
(
fc_host_tgtid_bind_type
(
shost
)
!=
FC_TGTID_BIND_NONE
)))
{
if
(
fc_host_tgtid_bind_type
(
shost
)
!=
FC_TGTID_BIND_NONE
)
{
/* search for a matching consistent binding */
...
...
drivers/scsi/sg.c
浏览文件 @
71efa38c
...
...
@@ -2162,7 +2162,7 @@ sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
srp
->
res_used
=
1
;
SCSI_LOG_TIMEOUT
(
4
,
printk
(
"sg_link_reserve: size=%d
\n
"
,
size
));
rem
=
size
=
(
size
+
1
)
&
(
~
1
);
/* round to even for aha1542 */
rem
=
size
;
for
(
k
=
0
;
k
<
rsv_schp
->
k_use_sg
;
++
k
,
++
sg
)
{
num
=
sg
->
length
;
...
...
drivers/scsi/sym53c8xx_2/sym_hipd.c
浏览文件 @
71efa38c
...
...
@@ -919,6 +919,8 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru
tp
->
usrflags
|=
(
SYM_DISC_ENABLED
|
SYM_TAGS_ENABLED
);
tp
->
usrtags
=
SYM_SETUP_MAX_TAG
;
tp
->
usr_width
=
np
->
maxwide
;
tp
->
usr_period
=
9
;
sym_nvram_setup_target
(
tp
,
i
,
nvram
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录