aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ieee1394/sbp2.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ieee1394/sbp2.c')
-rw-r--r--drivers/ieee1394/sbp2.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
index b91142b8482..2b889d91e67 100644
--- a/drivers/ieee1394/sbp2.c
+++ b/drivers/ieee1394/sbp2.c
@@ -51,6 +51,7 @@
51 * Grep for inline FIXME comments below. 51 * Grep for inline FIXME comments below.
52 */ 52 */
53 53
54#include <linux/blkdev.h>
54#include <linux/compiler.h> 55#include <linux/compiler.h>
55#include <linux/delay.h> 56#include <linux/delay.h>
56#include <linux/device.h> 57#include <linux/device.h>
@@ -127,17 +128,21 @@ MODULE_PARM_DESC(serialize_io, "Serialize requests coming from SCSI drivers "
127 "(default = Y, faster but buggy = N)"); 128 "(default = Y, faster but buggy = N)");
128 129
129/* 130/*
130 * Bump up max_sectors if you'd like to support very large sized 131 * Adjust max_sectors if you'd like to influence how many sectors each SCSI
131 * transfers. Please note that some older sbp2 bridge chips are broken for 132 * command can transfer at most. Please note that some older SBP-2 bridge
132 * transfers greater or equal to 128KB. Default is a value of 255 133 * chips are broken for transfers greater or equal to 128KB, therefore
133 * sectors, or just under 128KB (at 512 byte sector size). I can note that 134 * max_sectors used to be a safe 255 sectors for many years. We now have a
134 * the Oxsemi sbp2 chipsets have no problems supporting very large 135 * default of 0 here which means that we let the SCSI stack choose a limit.
135 * transfer sizes. 136 *
137 * The SBP2_WORKAROUND_128K_MAX_TRANS flag, if set either in the workarounds
138 * module parameter or in the sbp2_workarounds_table[], will override the
139 * value of max_sectors. We should use sbp2_workarounds_table[] to cover any
140 * bridge chip which becomes known to need the 255 sectors limit.
136 */ 141 */
137static int sbp2_max_sectors = SBP2_MAX_SECTORS; 142static int sbp2_max_sectors;
138module_param_named(max_sectors, sbp2_max_sectors, int, 0444); 143module_param_named(max_sectors, sbp2_max_sectors, int, 0444);
139MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported " 144MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported "
140 "(default = " __stringify(SBP2_MAX_SECTORS) ")"); 145 "(default = 0 = use SCSI stack's default)");
141 146
142/* 147/*
143 * Exclusive login to sbp2 device? In most cases, the sbp2 driver should 148 * Exclusive login to sbp2 device? In most cases, the sbp2 driver should
@@ -1985,6 +1990,8 @@ static int sbp2scsi_slave_configure(struct scsi_device *sdev)
1985 sdev->skip_ms_page_8 = 1; 1990 sdev->skip_ms_page_8 = 1;
1986 if (lu->workarounds & SBP2_WORKAROUND_FIX_CAPACITY) 1991 if (lu->workarounds & SBP2_WORKAROUND_FIX_CAPACITY)
1987 sdev->fix_capacity = 1; 1992 sdev->fix_capacity = 1;
1993 if (lu->workarounds & SBP2_WORKAROUND_128K_MAX_TRANS)
1994 blk_queue_max_sectors(sdev->request_queue, 128 * 1024 / 512);
1988 return 0; 1995 return 0;
1989} 1996}
1990 1997
@@ -2091,9 +2098,6 @@ static int sbp2_module_init(void)
2091 sbp2_shost_template.cmd_per_lun = 1; 2098 sbp2_shost_template.cmd_per_lun = 1;
2092 } 2099 }
2093 2100
2094 if (sbp2_default_workarounds & SBP2_WORKAROUND_128K_MAX_TRANS &&
2095 (sbp2_max_sectors * 512) > (128 * 1024))
2096 sbp2_max_sectors = 128 * 1024 / 512;
2097 sbp2_shost_template.max_sectors = sbp2_max_sectors; 2101 sbp2_shost_template.max_sectors = sbp2_max_sectors;
2098 2102
2099 hpsb_register_highlevel(&sbp2_highlevel); 2103 hpsb_register_highlevel(&sbp2_highlevel);