Commit 4e6343a1 authored by Stefan Richter's avatar Stefan Richter

ieee1394: sbp2: raise default transfer size limit

This patch speeds up sbp2 a little bit --- but more importantly, it
brings the behavior of sbp2 and fw-sbp2 closer to each other.  Like
fw-sbp2, sbp2 now does not limit the size of single transfers to 255
sectors anymore, unless told so by a blacklist flag or by module load
parameters.

Only very old bridge chips have been known to need the 255 sectors
limit, and we have got one such chip in our hardwired blacklist.  There
certainly is a danger that more bridges need that limit; but I prefer to
have this issue present in both fw-sbp2 and sbp2 rather than just one of
them.

An OXUF922 with 400GB 7200RPM disk on an S400 controller is sped up by
this patch from 22.9 to 23.5 MB/s according to hdparm.  The same effect
could be achieved before by setting a higher max_sectors module
parameter.  On buses which use 1394b beta mode, sbp2 and fw-sbp2 will
now achieve virtually the same bandwidth.  Fw-sbp2 only remains faster
on 1394a buses due to fw-core's gap count optimization.
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 3e75b493
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
* Grep for inline FIXME comments below. * Grep for inline FIXME comments below.
*/ */
#include <linux/blkdev.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/device.h> #include <linux/device.h>
...@@ -127,17 +128,21 @@ MODULE_PARM_DESC(serialize_io, "Serialize requests coming from SCSI drivers " ...@@ -127,17 +128,21 @@ MODULE_PARM_DESC(serialize_io, "Serialize requests coming from SCSI drivers "
"(default = Y, faster but buggy = N)"); "(default = Y, faster but buggy = N)");
/* /*
* Bump up max_sectors if you'd like to support very large sized * Adjust max_sectors if you'd like to influence how many sectors each SCSI
* transfers. Please note that some older sbp2 bridge chips are broken for * command can transfer at most. Please note that some older SBP-2 bridge
* transfers greater or equal to 128KB. Default is a value of 255 * chips are broken for transfers greater or equal to 128KB, therefore
* sectors, or just under 128KB (at 512 byte sector size). I can note that * max_sectors used to be a safe 255 sectors for many years. We now have a
* the Oxsemi sbp2 chipsets have no problems supporting very large * default of 0 here which means that we let the SCSI stack choose a limit.
* transfer sizes. *
* The SBP2_WORKAROUND_128K_MAX_TRANS flag, if set either in the workarounds
* module parameter or in the sbp2_workarounds_table[], will override the
* value of max_sectors. We should use sbp2_workarounds_table[] to cover any
* bridge chip which becomes known to need the 255 sectors limit.
*/ */
static int sbp2_max_sectors = SBP2_MAX_SECTORS; static int sbp2_max_sectors;
module_param_named(max_sectors, sbp2_max_sectors, int, 0444); module_param_named(max_sectors, sbp2_max_sectors, int, 0444);
MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported " MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported "
"(default = " __stringify(SBP2_MAX_SECTORS) ")"); "(default = 0 = use SCSI stack's default)");
/* /*
* Exclusive login to sbp2 device? In most cases, the sbp2 driver should * 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,6 +1990,8 @@ static int sbp2scsi_slave_configure(struct scsi_device *sdev)
sdev->skip_ms_page_8 = 1; sdev->skip_ms_page_8 = 1;
if (lu->workarounds & SBP2_WORKAROUND_FIX_CAPACITY) if (lu->workarounds & SBP2_WORKAROUND_FIX_CAPACITY)
sdev->fix_capacity = 1; sdev->fix_capacity = 1;
if (lu->workarounds & SBP2_WORKAROUND_128K_MAX_TRANS)
blk_queue_max_sectors(sdev->request_queue, 128 * 1024 / 512);
return 0; return 0;
} }
...@@ -2091,9 +2098,6 @@ static int sbp2_module_init(void) ...@@ -2091,9 +2098,6 @@ static int sbp2_module_init(void)
sbp2_shost_template.cmd_per_lun = 1; sbp2_shost_template.cmd_per_lun = 1;
} }
if (sbp2_default_workarounds & SBP2_WORKAROUND_128K_MAX_TRANS &&
(sbp2_max_sectors * 512) > (128 * 1024))
sbp2_max_sectors = 128 * 1024 / 512;
sbp2_shost_template.max_sectors = sbp2_max_sectors; sbp2_shost_template.max_sectors = sbp2_max_sectors;
hpsb_register_highlevel(&sbp2_highlevel); hpsb_register_highlevel(&sbp2_highlevel);
......
...@@ -222,7 +222,6 @@ struct sbp2_status_block { ...@@ -222,7 +222,6 @@ struct sbp2_status_block {
*/ */
#define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000 #define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000
#define SBP2_MAX_SECTORS 255
/* There is no real limitation of the queue depth (i.e. length of the linked /* There is no real limitation of the queue depth (i.e. length of the linked
* list of command ORBs) at the target. The chosen depth is merely an * list of command ORBs) at the target. The chosen depth is merely an
* implementation detail of the sbp2 driver. */ * implementation detail of the sbp2 driver. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment