mirror of https://gitee.com/openkylin/linux.git
ieee1394: sbp2: add INQUIRY delay workaround
Add the same workaround as found in fw-sbp2 for feature parity and compatibility of the workarounds module parameter. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Jarod Wilson <jwilson@redhat.com>
This commit is contained in:
parent
9220f19462
commit
d94a983526
|
@ -183,6 +183,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
|
||||||
* Avoids access beyond actual disk limits on devices with an off-by-one bug.
|
* Avoids access beyond actual disk limits on devices with an off-by-one bug.
|
||||||
* Don't use this with devices which don't have this bug.
|
* Don't use this with devices which don't have this bug.
|
||||||
*
|
*
|
||||||
|
* - delay inquiry
|
||||||
|
* Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
|
||||||
|
*
|
||||||
* - override internal blacklist
|
* - override internal blacklist
|
||||||
* Instead of adding to the built-in blacklist, use only the workarounds
|
* Instead of adding to the built-in blacklist, use only the workarounds
|
||||||
* specified in the module load parameter.
|
* specified in the module load parameter.
|
||||||
|
@ -195,6 +198,7 @@ MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
|
||||||
", 36 byte inquiry = " __stringify(SBP2_WORKAROUND_INQUIRY_36)
|
", 36 byte inquiry = " __stringify(SBP2_WORKAROUND_INQUIRY_36)
|
||||||
", skip mode page 8 = " __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
|
", skip mode page 8 = " __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
|
||||||
", fix capacity = " __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
|
", fix capacity = " __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
|
||||||
|
", delay inquiry = " __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
|
||||||
", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
|
", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
|
||||||
", or a combination)");
|
", or a combination)");
|
||||||
|
|
||||||
|
@ -357,6 +361,11 @@ static const struct {
|
||||||
.workarounds = SBP2_WORKAROUND_INQUIRY_36 |
|
.workarounds = SBP2_WORKAROUND_INQUIRY_36 |
|
||||||
SBP2_WORKAROUND_MODE_SENSE_8,
|
SBP2_WORKAROUND_MODE_SENSE_8,
|
||||||
},
|
},
|
||||||
|
/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
|
||||||
|
.firmware_revision = 0x002800,
|
||||||
|
.model_id = 0x000000,
|
||||||
|
.workarounds = SBP2_WORKAROUND_DELAY_INQUIRY,
|
||||||
|
},
|
||||||
/* Initio bridges, actually only needed for some older ones */ {
|
/* Initio bridges, actually only needed for some older ones */ {
|
||||||
.firmware_revision = 0x000200,
|
.firmware_revision = 0x000200,
|
||||||
.model_id = SBP2_ROM_VALUE_WILDCARD,
|
.model_id = SBP2_ROM_VALUE_WILDCARD,
|
||||||
|
@ -914,6 +923,9 @@ static int sbp2_start_device(struct sbp2_lu *lu)
|
||||||
sbp2_agent_reset(lu, 1);
|
sbp2_agent_reset(lu, 1);
|
||||||
sbp2_max_speed_and_size(lu);
|
sbp2_max_speed_and_size(lu);
|
||||||
|
|
||||||
|
if (lu->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
|
||||||
|
ssleep(SBP2_INQUIRY_DELAY);
|
||||||
|
|
||||||
error = scsi_add_device(lu->shost, 0, lu->ud->id, 0);
|
error = scsi_add_device(lu->shost, 0, lu->ud->id, 0);
|
||||||
if (error) {
|
if (error) {
|
||||||
SBP2_ERR("scsi_add_device failed");
|
SBP2_ERR("scsi_add_device failed");
|
||||||
|
|
|
@ -343,6 +343,8 @@ enum sbp2lu_state_types {
|
||||||
#define SBP2_WORKAROUND_INQUIRY_36 0x2
|
#define SBP2_WORKAROUND_INQUIRY_36 0x2
|
||||||
#define SBP2_WORKAROUND_MODE_SENSE_8 0x4
|
#define SBP2_WORKAROUND_MODE_SENSE_8 0x4
|
||||||
#define SBP2_WORKAROUND_FIX_CAPACITY 0x8
|
#define SBP2_WORKAROUND_FIX_CAPACITY 0x8
|
||||||
|
#define SBP2_WORKAROUND_DELAY_INQUIRY 0x10
|
||||||
|
#define SBP2_INQUIRY_DELAY 12
|
||||||
#define SBP2_WORKAROUND_OVERRIDE 0x100
|
#define SBP2_WORKAROUND_OVERRIDE 0x100
|
||||||
|
|
||||||
#endif /* SBP2_H */
|
#endif /* SBP2_H */
|
||||||
|
|
Loading…
Reference in New Issue