From: Webb Scales <webbnh@hp.com>
To: Hannes Reinecke <hare@suse.de>,
James Bottomley <jbottomley@parallels.com>
Cc: Christoph Hellwig <hch@infradead.org>, linux-scsi@vger.kernel.org
Subject: Re: [PATCH] megaraid_sas: Enable shared tag map
Date: Wed, 01 Oct 2014 14:51:31 -0400 [thread overview]
Message-ID: <542C4D33.2030401@hp.com> (raw)
In-Reply-To: <1411991272-129962-1-git-send-email-hare@suse.de>
Hannes,
In megasas_change_queue_type(), is it possible for sdev->queue_depth to
be greater than 256?
Unless I'm misunderstanding the SCSI code, we can request a
queue-depth/tag-map-size which is greater than 256, but, since the
scsi_cmnd::tag field is an unsigned char, depths greater than 256 may
overflow the field when high-numbered tags are used...do I have that right?
Thanks,
Webb
On 9/29/14 7:47 AM, Hannes Reinecke wrote:
> Megaraid_sas uses a shared pool of commands per HBA, so we
> should be enabling a shared tag map.
> This will allow the I/O scheduler to make better scheduling
> decisions and will avoid BUSY states in the driver.
>
> Signed-off-by: Hannes Reinecke <hare@suse.de>
> ---
> drivers/scsi/megaraid/megaraid_sas_base.c | 34 ++++++++++++++++++++++++++++++-
> 1 file changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
> index f6a69a3..996fa9a 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -1659,7 +1659,7 @@ static int megasas_slave_configure(struct scsi_device *sdev)
> */
> blk_queue_rq_timeout(sdev->request_queue,
> MEGASAS_DEFAULT_CMD_TIMEOUT * HZ);
> -
> + sdev->tagged_supported = 1;
> return 0;
> }
>
> @@ -1667,6 +1667,10 @@ static int megasas_slave_alloc(struct scsi_device *sdev)
> {
> u16 pd_index = 0;
> struct megasas_instance *instance ;
> +
> + /* We have a shared tag map, so TCQ is always supported */
> + sdev->tagged_supported = 1;
> +
> instance = megasas_lookup_instance(sdev->host->host_no);
> if (sdev->channel < MEGASAS_MAX_PD_CHANNELS) {
> /*
> @@ -1677,13 +1681,20 @@ static int megasas_slave_alloc(struct scsi_device *sdev)
> sdev->id;
> if (instance->pd_list[pd_index].driveState ==
> MR_PD_STATE_SYSTEM) {
> + scsi_activate_tcq(sdev, MEGASAS_DEFAULT_CMD_PER_LUN);
> return 0;
> }
> return -ENXIO;
> }
> + scsi_activate_tcq(sdev, MEGASAS_DEFAULT_CMD_PER_LUN);
> return 0;
> }
>
> +static void megasas_slave_destroy(struct scsi_device *sdev)
> +{
> + scsi_deactivate_tcq(sdev, 1);
> +}
> +
> void megaraid_sas_kill_hba(struct megasas_instance *instance)
> {
> if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) ||
> @@ -2746,6 +2757,21 @@ struct device_attribute *megaraid_host_attrs[] = {
> NULL,
> };
>
> +static int megasas_change_queue_type(struct scsi_device *sdev, int tag_type)
> +{
> + if (sdev->host->bqt && sdev->tagged_supported) {
> + scsi_set_tag_type(sdev, tag_type);
> +
> + if (tag_type)
> + scsi_activate_tcq(sdev, sdev->queue_depth);
> + else
> + scsi_deactivate_tcq(sdev, sdev->queue_depth);
> + } else
> + tag_type = 0;
> +
> + return tag_type;
> +}
> +
> /*
> * Scsi host template for megaraid_sas driver
> */
> @@ -2756,6 +2782,7 @@ static struct scsi_host_template megasas_template = {
> .proc_name = "megaraid_sas",
> .slave_configure = megasas_slave_configure,
> .slave_alloc = megasas_slave_alloc,
> + .slave_destroy = megasas_slave_destroy,
> .queuecommand = megasas_queue_command,
> .eh_device_reset_handler = megasas_reset_device,
> .eh_bus_reset_handler = megasas_reset_bus_host,
> @@ -2765,6 +2792,7 @@ static struct scsi_host_template megasas_template = {
> .bios_param = megasas_bios_param,
> .use_clustering = ENABLE_CLUSTERING,
> .change_queue_depth = megasas_change_queue_depth,
> + .change_queue_type = megasas_change_queue_type,
> .no_write_same = 1,
> };
>
> @@ -4909,6 +4937,10 @@ static int megasas_io_attach(struct megasas_instance *instance)
> host->this_id = instance->init_id;
> host->sg_tablesize = instance->max_num_sge;
>
> + if (!scsi_init_shared_tag_map(host, host->can_queue))
> + printk(KERN_WARNING "megasas: enable TCQ support, depth %d",
> + host->can_queue);
> +
> if (instance->fw_support_ieee)
> instance->max_sectors_per_req = MEGASAS_MAX_SECTORS_IEEE;
>
next prev parent reply other threads:[~2014-10-01 18:51 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-29 11:47 [PATCH] megaraid_sas: Enable shared tag map Hannes Reinecke
2014-09-29 16:52 ` Webb Scales
2014-09-29 17:08 ` James Bottomley
2014-09-30 7:43 ` Christoph Hellwig
2014-09-30 9:08 ` Hannes Reinecke
2014-10-01 18:51 ` Webb Scales [this message]
2014-10-01 21:10 ` Christoph Hellwig
2014-10-02 6:51 ` Hannes Reinecke
2014-10-02 9:19 ` Christoph Hellwig
2014-10-02 9:50 ` Hannes Reinecke
2014-10-02 11:36 ` Christoph Hellwig
2014-10-02 12:00 ` Hannes Reinecke
2014-10-02 14:32 ` Christoph Hellwig
2014-10-02 12:05 ` James Bottomley
2014-10-02 12:14 ` Hannes Reinecke
2014-10-02 13:06 ` James Bottomley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=542C4D33.2030401@hp.com \
--to=webbnh@hp.com \
--cc=hare@suse.de \
--cc=hch@infradead.org \
--cc=jbottomley@parallels.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox