lkml.org 
[lkml]   [2020]   [Dec]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 11/17] ibmvfc: set and track hw queue in ibmvfc_event struct
    Date
    Extract the hwq id from a SCSI command and store it in the ibmvfc_event
    structure to identify which Sub-CRQ to send the command down when
    channels are being utilized.

    Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
    Reviewed-by: Brian King <brking@linux.vnet.ibm.com>
    ---
    drivers/scsi/ibmvscsi/ibmvfc.c | 5 +++++
    drivers/scsi/ibmvscsi/ibmvfc.h | 1 +
    2 files changed, 6 insertions(+)

    diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
    index 0e6c9e55a221..4555775ea74b 100644
    --- a/drivers/scsi/ibmvscsi/ibmvfc.c
    +++ b/drivers/scsi/ibmvscsi/ibmvfc.c
    @@ -1397,6 +1397,7 @@ static void ibmvfc_init_event(struct ibmvfc_event *evt,
    evt->crq.format = format;
    evt->done = done;
    evt->eh_comp = NULL;
    + evt->hwq = 0;
    }

    /**
    @@ -1748,6 +1749,8 @@ static int ibmvfc_queuecommand_lck(struct scsi_cmnd *cmnd,
    struct ibmvfc_cmd *vfc_cmd;
    struct ibmvfc_fcp_cmd_iu *iu;
    struct ibmvfc_event *evt;
    + u32 tag_and_hwq = blk_mq_unique_tag(cmnd->request);
    + u16 hwq = blk_mq_unique_tag_to_hwq(tag_and_hwq);
    int rc;

    if (unlikely((rc = fc_remote_port_chkready(rport))) ||
    @@ -1775,6 +1778,8 @@ static int ibmvfc_queuecommand_lck(struct scsi_cmnd *cmnd,
    }

    vfc_cmd->correlation = cpu_to_be64(evt);
    + if (vhost->using_channels)
    + evt->hwq = hwq % vhost->scsi_scrqs.active_queues;

    if (likely(!(rc = ibmvfc_map_sg_data(cmnd, evt, vfc_cmd, vhost->dev))))
    return ibmvfc_send_event(evt, vhost, 0);
    diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
    index dff26dbd912c..e0ffb0416223 100644
    --- a/drivers/scsi/ibmvscsi/ibmvfc.h
    +++ b/drivers/scsi/ibmvscsi/ibmvfc.h
    @@ -781,6 +781,7 @@ struct ibmvfc_event {
    struct completion comp;
    struct completion *eh_comp;
    struct timer_list timer;
    + u16 hwq;
    };

    /* a pool of event structs for use */
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-12-02 01:57    [W:2.348 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site