Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 10 Jun 2018 20:01:12 +0000 (13:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 10 Jun 2018 20:01:12 +0000 (13:01 -0700)
Pull SCSI updates from James Bottomley:
 "This is mostly updates to the usual drivers: ufs, qedf, mpt3sas, lpfc,
  xfcp, hisi_sas, cxlflash, qla2xxx.

  In the absence of Nic, we're also taking target updates which are
  mostly minor except for the tcmu refactor.

  The only real core change to worry about is the removal of high page
  bouncing (in sas, storvsc and iscsi). This has been well tested and no
  problems have shown up so far"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (268 commits)
  scsi: lpfc: update driver version to 12.0.0.4
  scsi: lpfc: Fix port initialization failure.
  scsi: lpfc: Fix 16gb hbas failing cq create.
  scsi: lpfc: Fix crash in blk_mq layer when executing modprobe -r lpfc
  scsi: lpfc: correct oversubscription of nvme io requests for an adapter
  scsi: lpfc: Fix MDS diagnostics failure (Rx < Tx)
  scsi: hisi_sas: Mark PHY as in reset for nexus reset
  scsi: hisi_sas: Fix return value when get_free_slot() failed
  scsi: hisi_sas: Terminate STP reject quickly for v2 hw
  scsi: hisi_sas: Add v2 hw force PHY function for internal ATA command
  scsi: hisi_sas: Include TMF elements in struct hisi_sas_slot
  scsi: hisi_sas: Try wait commands before before controller reset
  scsi: hisi_sas: Init disks after controller reset
  scsi: hisi_sas: Create a scsi_host_template per HW module
  scsi: hisi_sas: Reset disks when discovered
  scsi: hisi_sas: Add LED feature for v3 hw
  scsi: hisi_sas: Change common allocation mode of device id
  scsi: hisi_sas: change slot index allocation mode
  scsi: hisi_sas: Introduce hisi_sas_phy_set_linkrate()
  scsi: hisi_sas: fix a typo in hisi_sas_task_prep()
  ...

36 files changed:
1  2 
Documentation/driver-api/index.rst
Documentation/ioctl/ioctl-number.txt
MAINTAINERS
drivers/ata/libata-scsi.c
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptsas.c
drivers/net/hyperv/hyperv_net.h
drivers/net/hyperv/netvsc.c
drivers/net/hyperv/netvsc_drv.c
drivers/s390/scsi/zfcp_dbf.c
drivers/s390/scsi/zfcp_ext.h
drivers/s390/scsi/zfcp_scsi.c
drivers/scsi/Makefile
drivers/scsi/megaraid.c
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/megaraid/megaraid_sas_fusion.c
drivers/scsi/mvumi.c
drivers/scsi/osd/osd_initiator.c
drivers/scsi/qedf/qedf.h
drivers/scsi/qedf/qedf_debugfs.c
drivers/scsi/qedf/qedf_fip.c
drivers/scsi/qedf/qedf_io.c
drivers/scsi/qedf/qedf_main.c
drivers/scsi/scsi_error.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_transport_sas.c
drivers/scsi/sd_zbc.c
drivers/scsi/sg.c
drivers/scsi/st.c
drivers/scsi/storvsc_drv.c
drivers/scsi/ufs/ufshcd.c
drivers/target/target_core_pscsi.c
drivers/target/target_core_user.c
include/linux/hyperv.h
include/linux/libata.h
kernel/workqueue.c

Simple merge
Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -501,9 -499,8 +504,10 @@@ extern int qedf_post_io_req(struct qedf
  extern void qedf_process_seq_cleanup_compl(struct qedf_ctx *qedf,
        struct fcoe_cqe *cqe, struct qedf_ioreq *io_req);
  extern int qedf_send_flogi(struct qedf_ctx *qedf);
 +extern void qedf_get_protocol_tlv_data(void *dev, void *data);
  extern void qedf_fp_io_handler(struct work_struct *work);
 +extern void qedf_get_generic_tlv_data(void *dev, struct qed_generic_tlvs *data);
+ extern void qedf_wq_grcdump(struct work_struct *work);
  
  #define FCOE_WORD_TO_BYTE  4
  #define QEDF_MAX_TASK_NUM     0xFFFF
Simple merge
Simple merge
Simple merge
@@@ -3398,104 -3450,15 +3456,113 @@@ static void qedf_remove(struct pci_dev 
        __qedf_remove(pdev, QEDF_MODE_NORMAL);
  }
  
+ void qedf_wq_grcdump(struct work_struct *work)
+ {
+       struct qedf_ctx *qedf =
+           container_of(work, struct qedf_ctx, grcdump_work.work);
+       QEDF_ERR(&(qedf->dbg_ctx), "Collecting GRC dump.\n");
+       qedf_capture_grc_dump(qedf);
+ }
 +/*
 + * Protocol TLV handler
 + */
 +void qedf_get_protocol_tlv_data(void *dev, void *data)
 +{
 +      struct qedf_ctx *qedf = dev;
 +      struct qed_mfw_tlv_fcoe *fcoe = data;
 +      struct fc_lport *lport = qedf->lport;
 +      struct Scsi_Host *host = lport->host;
 +      struct fc_host_attrs *fc_host = shost_to_fc_host(host);
 +      struct fc_host_statistics *hst;
 +
 +      /* Force a refresh of the fc_host stats including offload stats */
 +      hst = qedf_fc_get_host_stats(host);
 +
 +      fcoe->qos_pri_set = true;
 +      fcoe->qos_pri = 3; /* Hard coded to 3 in driver */
 +
 +      fcoe->ra_tov_set = true;
 +      fcoe->ra_tov = lport->r_a_tov;
 +
 +      fcoe->ed_tov_set = true;
 +      fcoe->ed_tov = lport->e_d_tov;
 +
 +      fcoe->npiv_state_set = true;
 +      fcoe->npiv_state = 1; /* NPIV always enabled */
 +
 +      fcoe->num_npiv_ids_set = true;
 +      fcoe->num_npiv_ids = fc_host->npiv_vports_inuse;
 +
 +      /* Certain attributes we only want to set if we've selected an FCF */
 +      if (qedf->ctlr.sel_fcf) {
 +              fcoe->switch_name_set = true;
 +              u64_to_wwn(qedf->ctlr.sel_fcf->switch_name, fcoe->switch_name);
 +      }
 +
 +      fcoe->port_state_set = true;
 +      /* For qedf we're either link down or fabric attach */
 +      if (lport->link_up)
 +              fcoe->port_state = QED_MFW_TLV_PORT_STATE_FABRIC;
 +      else
 +              fcoe->port_state = QED_MFW_TLV_PORT_STATE_OFFLINE;
 +
 +      fcoe->link_failures_set = true;
 +      fcoe->link_failures = (u16)hst->link_failure_count;
 +
 +      fcoe->fcoe_txq_depth_set = true;
 +      fcoe->fcoe_rxq_depth_set = true;
 +      fcoe->fcoe_rxq_depth = FCOE_PARAMS_NUM_TASKS;
 +      fcoe->fcoe_txq_depth = FCOE_PARAMS_NUM_TASKS;
 +
 +      fcoe->fcoe_rx_frames_set = true;
 +      fcoe->fcoe_rx_frames = hst->rx_frames;
 +
 +      fcoe->fcoe_tx_frames_set = true;
 +      fcoe->fcoe_tx_frames = hst->tx_frames;
 +
 +      fcoe->fcoe_rx_bytes_set = true;
 +      fcoe->fcoe_rx_bytes = hst->fcp_input_megabytes * 1000000;
 +
 +      fcoe->fcoe_tx_bytes_set = true;
 +      fcoe->fcoe_tx_bytes = hst->fcp_output_megabytes * 1000000;
 +
 +      fcoe->crc_count_set = true;
 +      fcoe->crc_count = hst->invalid_crc_count;
 +
 +      fcoe->tx_abts_set = true;
 +      fcoe->tx_abts = hst->fcp_packet_aborts;
 +
 +      fcoe->tx_lun_rst_set = true;
 +      fcoe->tx_lun_rst = qedf->lun_resets;
 +
 +      fcoe->abort_task_sets_set = true;
 +      fcoe->abort_task_sets = qedf->packet_aborts;
 +
 +      fcoe->scsi_busy_set = true;
 +      fcoe->scsi_busy = qedf->busy;
 +
 +      fcoe->scsi_tsk_full_set = true;
 +      fcoe->scsi_tsk_full = qedf->task_set_fulls;
 +}
 +
 +/* Generic TLV data callback */
 +void qedf_get_generic_tlv_data(void *dev, struct qed_generic_tlvs *data)
 +{
 +      struct qedf_ctx *qedf;
 +
 +      if (!dev) {
 +              QEDF_INFO(NULL, QEDF_LOG_EVT,
 +                        "dev is NULL so ignoring get_generic_tlv_data request.\n");
 +              return;
 +      }
 +      qedf = (struct qedf_ctx *)dev;
 +
 +      memset(data, 0, sizeof(struct qed_generic_tlvs));
 +      ether_addr_copy(data->mac[0], qedf->mac);
 +}
 +
  /*
   * Module Init/Remove
   */
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1727,13 -1764,12 +1765,14 @@@ static int storvsc_probe(struct hv_devi
                 * The number of sub-channels offerred is based on the number of
                 * VCPUs in the guest.
                 */
 -              max_sub_channels = (num_cpus / storvsc_vcpus_per_sub_channel);
 +              if (!dev_is_ide)
 +                      max_sub_channels =
 +                              (num_cpus - 1) / storvsc_vcpus_per_sub_channel;
        }
  
-       scsi_driver.can_queue = (max_outstanding_req_per_channel *
-                                (max_sub_channels + 1));
+       scsi_driver.can_queue = max_outstanding_req_per_channel *
+                               (max_sub_channels + 1) *
+                               (100 - ring_avail_percent_lowater) / 100;
  
        host = scsi_host_alloc(&scsi_driver,
                               sizeof(struct hv_host_device));
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -4360,8 -4347,10 +4360,9 @@@ void set_worker_desc(const char *fmt, .
                va_start(args, fmt);
                vsnprintf(worker->desc, sizeof(worker->desc), fmt, args);
                va_end(args);
 -              worker->desc_valid = true;
        }
  }
+ EXPORT_SYMBOL_GPL(set_worker_desc);
  
  /**
   * print_worker_info - print out worker information and description