mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
[SCSI] sym53c8xx: Remove tag_ctrl module parameter
With sysfs making these options tunable at runtime, there's no justification for keeping this horrendously complex specification string around. Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
8637baa360
commit
a44131b35e
3 changed files with 8 additions and 80 deletions
|
@ -449,25 +449,14 @@ options as above.
|
||||||
cmd_per_lun=#tags (#tags > 1) tagged command queuing enabled
|
cmd_per_lun=#tags (#tags > 1) tagged command queuing enabled
|
||||||
#tags will be truncated to the max queued commands configuration parameter.
|
#tags will be truncated to the max queued commands configuration parameter.
|
||||||
|
|
||||||
10.2.2 Detailed control of tagged commands
|
10.2.2 Burst max
|
||||||
This option allows you to specify a command queue depth for each device
|
|
||||||
that supports tagged command queueing.
|
|
||||||
Example:
|
|
||||||
tag_ctrl=10/t2t3q16-t5q24/t1u2q32
|
|
||||||
will set devices queue depth as follow:
|
|
||||||
- controller #0 target #2 and target #3 -> 16 commands,
|
|
||||||
- controller #0 target #5 -> 24 commands,
|
|
||||||
- controller #1 target #1 logical unit #2 -> 32 commands,
|
|
||||||
- all other logical units (all targets, all controllers) -> 10 commands.
|
|
||||||
|
|
||||||
10.2.3 Burst max
|
|
||||||
burst=0 burst disabled
|
burst=0 burst disabled
|
||||||
burst=255 get burst length from initial IO register settings.
|
burst=255 get burst length from initial IO register settings.
|
||||||
burst=#x burst enabled (1<<#x burst transfers max)
|
burst=#x burst enabled (1<<#x burst transfers max)
|
||||||
#x is an integer value which is log base 2 of the burst transfers max.
|
#x is an integer value which is log base 2 of the burst transfers max.
|
||||||
By default the driver uses the maximum value supported by the chip.
|
By default the driver uses the maximum value supported by the chip.
|
||||||
|
|
||||||
10.2.4 LED support
|
10.2.3 LED support
|
||||||
led=1 enable LED support
|
led=1 enable LED support
|
||||||
led=0 disable LED support
|
led=0 disable LED support
|
||||||
Do not enable LED support if your scsi board does not use SDMS BIOS.
|
Do not enable LED support if your scsi board does not use SDMS BIOS.
|
||||||
|
@ -560,9 +549,9 @@ Previously, the sym2 driver accepted arguments of the form
|
||||||
sym53c8xx=tags:4,sync:10,debug:0x200
|
sym53c8xx=tags:4,sync:10,debug:0x200
|
||||||
|
|
||||||
As a result of the new module parameters, this is no longer available.
|
As a result of the new module parameters, this is no longer available.
|
||||||
Most of the options have remained the same, but tags has split into
|
Most of the options have remained the same, but tags has become
|
||||||
cmd_per_lun and tag_ctrl for its two different purposes. The sample above
|
cmd_per_lun to reflect its different purposes. The sample above would
|
||||||
would be specified as:
|
be specified as:
|
||||||
modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
|
modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
|
||||||
|
|
||||||
or on the kernel boot line as:
|
or on the kernel boot line as:
|
||||||
|
|
|
@ -127,7 +127,6 @@ struct sym_driver_setup {
|
||||||
u_char settle_delay;
|
u_char settle_delay;
|
||||||
u_char use_nvram;
|
u_char use_nvram;
|
||||||
u_long excludes[8];
|
u_long excludes[8];
|
||||||
char tag_ctrl[100];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SYM_SETUP_MAX_TAG sym_driver_setup.max_tag
|
#define SYM_SETUP_MAX_TAG sym_driver_setup.max_tag
|
||||||
|
|
|
@ -63,7 +63,6 @@ unsigned int sym_debug_flags = 0;
|
||||||
static char *excl_string;
|
static char *excl_string;
|
||||||
static char *safe_string;
|
static char *safe_string;
|
||||||
module_param_named(cmd_per_lun, sym_driver_setup.max_tag, ushort, 0);
|
module_param_named(cmd_per_lun, sym_driver_setup.max_tag, ushort, 0);
|
||||||
module_param_string(tag_ctrl, sym_driver_setup.tag_ctrl, 100, 0);
|
|
||||||
module_param_named(burst, sym_driver_setup.burst_order, byte, 0);
|
module_param_named(burst, sym_driver_setup.burst_order, byte, 0);
|
||||||
module_param_named(led, sym_driver_setup.scsi_led, byte, 0);
|
module_param_named(led, sym_driver_setup.scsi_led, byte, 0);
|
||||||
module_param_named(diff, sym_driver_setup.scsi_diff, byte, 0);
|
module_param_named(diff, sym_driver_setup.scsi_diff, byte, 0);
|
||||||
|
@ -78,7 +77,6 @@ module_param_named(excl, excl_string, charp, 0);
|
||||||
module_param_named(safe, safe_string, charp, 0);
|
module_param_named(safe, safe_string, charp, 0);
|
||||||
|
|
||||||
MODULE_PARM_DESC(cmd_per_lun, "The maximum number of tags to use by default");
|
MODULE_PARM_DESC(cmd_per_lun, "The maximum number of tags to use by default");
|
||||||
MODULE_PARM_DESC(tag_ctrl, "More detailed control over tags per LUN");
|
|
||||||
MODULE_PARM_DESC(burst, "Maximum burst. 0 to disable, 255 to read from registers");
|
MODULE_PARM_DESC(burst, "Maximum burst. 0 to disable, 255 to read from registers");
|
||||||
MODULE_PARM_DESC(led, "Set to 1 to enable LED support");
|
MODULE_PARM_DESC(led, "Set to 1 to enable LED support");
|
||||||
MODULE_PARM_DESC(diff, "0 for no differential mode, 1 for BIOS, 2 for always, 3 for not GPIO3");
|
MODULE_PARM_DESC(diff, "0 for no differential mode, 1 for BIOS, 2 for always, 3 for not GPIO3");
|
||||||
|
@ -744,59 +742,6 @@ static void sym_tune_dev_queuing(struct sym_tcb *tp, int lun, u_short reqtags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Linux select queue depths function
|
|
||||||
*/
|
|
||||||
#define DEF_DEPTH (sym_driver_setup.max_tag)
|
|
||||||
#define ALL_TARGETS -2
|
|
||||||
#define NO_TARGET -1
|
|
||||||
#define ALL_LUNS -2
|
|
||||||
#define NO_LUN -1
|
|
||||||
|
|
||||||
static int device_queue_depth(struct sym_hcb *np, int target, int lun)
|
|
||||||
{
|
|
||||||
int c, h, t, u, v;
|
|
||||||
char *p = sym_driver_setup.tag_ctrl;
|
|
||||||
char *ep;
|
|
||||||
|
|
||||||
h = -1;
|
|
||||||
t = NO_TARGET;
|
|
||||||
u = NO_LUN;
|
|
||||||
while ((c = *p++) != 0) {
|
|
||||||
v = simple_strtoul(p, &ep, 0);
|
|
||||||
switch(c) {
|
|
||||||
case '/':
|
|
||||||
++h;
|
|
||||||
t = ALL_TARGETS;
|
|
||||||
u = ALL_LUNS;
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
if (t != target)
|
|
||||||
t = (target == v) ? v : NO_TARGET;
|
|
||||||
u = ALL_LUNS;
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
if (u != lun)
|
|
||||||
u = (lun == v) ? v : NO_LUN;
|
|
||||||
break;
|
|
||||||
case 'q':
|
|
||||||
if (h == np->s.unit &&
|
|
||||||
(t == ALL_TARGETS || t == target) &&
|
|
||||||
(u == ALL_LUNS || u == lun))
|
|
||||||
return v;
|
|
||||||
break;
|
|
||||||
case '-':
|
|
||||||
t = ALL_TARGETS;
|
|
||||||
u = ALL_LUNS;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
p = ep;
|
|
||||||
}
|
|
||||||
return DEF_DEPTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sym53c8xx_slave_alloc(struct scsi_device *sdev)
|
static int sym53c8xx_slave_alloc(struct scsi_device *sdev)
|
||||||
{
|
{
|
||||||
struct sym_hcb *np = sym_get_hcb(sdev->host);
|
struct sym_hcb *np = sym_get_hcb(sdev->host);
|
||||||
|
@ -861,21 +806,16 @@ static int sym53c8xx_slave_configure(struct scsi_device *sdev)
|
||||||
* Use at least 2.
|
* Use at least 2.
|
||||||
* Donnot use more than our maximum.
|
* Donnot use more than our maximum.
|
||||||
*/
|
*/
|
||||||
reqtags = device_queue_depth(np, sdev->id, sdev->lun);
|
reqtags = sym_driver_setup.max_tag;
|
||||||
if (reqtags > tp->usrtags)
|
if (reqtags > tp->usrtags)
|
||||||
reqtags = tp->usrtags;
|
reqtags = tp->usrtags;
|
||||||
if (!sdev->tagged_supported)
|
if (!sdev->tagged_supported)
|
||||||
reqtags = 0;
|
reqtags = 0;
|
||||||
#if 1 /* Avoid to locally queue commands for no good reasons */
|
|
||||||
if (reqtags > SYM_CONF_MAX_TAG)
|
if (reqtags > SYM_CONF_MAX_TAG)
|
||||||
reqtags = SYM_CONF_MAX_TAG;
|
reqtags = SYM_CONF_MAX_TAG;
|
||||||
depth_to_use = (reqtags ? reqtags : 2);
|
depth_to_use = reqtags ? reqtags : 2;
|
||||||
#else
|
|
||||||
depth_to_use = (reqtags ? SYM_CONF_MAX_TAG : 2);
|
|
||||||
#endif
|
|
||||||
scsi_adjust_queue_depth(sdev,
|
scsi_adjust_queue_depth(sdev,
|
||||||
(sdev->tagged_supported ?
|
sdev->tagged_supported ? MSG_SIMPLE_TAG : 0,
|
||||||
MSG_SIMPLE_TAG : 0),
|
|
||||||
depth_to_use);
|
depth_to_use);
|
||||||
lp->s.scdev_depth = depth_to_use;
|
lp->s.scdev_depth = depth_to_use;
|
||||||
sym_tune_dev_queuing(tp, sdev->lun, reqtags);
|
sym_tune_dev_queuing(tp, sdev->lun, reqtags);
|
||||||
|
|
Loading…
Reference in a new issue