Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7930851e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI fixes from James Bottomley:
 "Six fixes, all of which appear to have user visible consequences.

  The DMA one is a regression fix from the merge window and of the
  others, four are driver specific and one specific to the target code"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: ufs: Use explicit access size in ufshcd_dump_regs
  scsi: tcmu: fix use after free
  scsi: csiostor: fix NULL pointer dereference in csio_vport_set_state()
  scsi: lpfc: nvmet: avoid hang / use-after-free when destroying targetport
  scsi: lpfc: nvme: avoid hang / use-after-free when destroying localport
  scsi: communicate max segment size to the DMA mapping code
parents 6b8f9159 d6724756
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -915,6 +915,10 @@ static struct scsi_host_template pata_macio_sht = {
	.sg_tablesize		= MAX_DCMDS,
	/* We may not need that strict one */
	.dma_boundary		= ATA_DMA_BOUNDARY,
	/* Not sure what the real max is but we know it's less than 64K, let's
	 * use 64K minus 256
	 */
	.max_segment_size	= MAX_DBDMA_SEG,
	.slave_configure	= pata_macio_slave_config,
};

@@ -1044,11 +1048,6 @@ static int pata_macio_common_init(struct pata_macio_priv *priv,
	/* Make sure we have sane initial timings in the cache */
	pata_macio_default_timings(priv);

	/* Not sure what the real max is but we know it's less than 64K, let's
	 * use 64K minus 256
	 */
	dma_set_max_seg_size(priv->dev, MAX_DBDMA_SEG);

	/* Allocate libata host for 1 port */
	memset(&pinfo, 0, sizeof(struct ata_port_info));
	pmac_macio_calc_timing_masks(priv, &pinfo);
+9 −13
Original line number Diff line number Diff line
@@ -246,7 +246,14 @@ struct inic_port_priv {
static struct scsi_host_template inic_sht = {
	ATA_BASE_SHT(DRV_NAME),
	.sg_tablesize		= LIBATA_MAX_PRD, /* maybe it can be larger? */

	/*
	 * This controller is braindamaged.  dma_boundary is 0xffff like others
	 * but it will lock up the whole machine HARD if 65536 byte PRD entry
	 * is fed.  Reduce maximum segment size.
	 */
	.dma_boundary		= INIC_DMA_BOUNDARY,
	.max_segment_size	= 65536 - 512,
};

static const int scr_map[] = {
@@ -868,17 +875,6 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
		return rc;
	}

	/*
	 * This controller is braindamaged.  dma_boundary is 0xffff
	 * like others but it will lock up the whole machine HARD if
	 * 65536 byte PRD entry is fed. Reduce maximum segment size.
	 */
	rc = dma_set_max_seg_size(&pdev->dev, 65536 - 512);
	if (rc) {
		dev_err(&pdev->dev, "failed to set the maximum segment size\n");
		return rc;
	}

	rc = init_controller(hpriv->mmio_base, hpriv->cached_hctl);
	if (rc) {
		dev_err(&pdev->dev, "failed to initialize controller\n");
+1 −4
Original line number Diff line number Diff line
@@ -1144,10 +1144,6 @@ static int sbp2_probe(struct fw_unit *unit, const struct ieee1394_device_id *id)
	if (device->is_local)
		return -ENODEV;

	if (dma_get_max_seg_size(device->card->device) > SBP2_MAX_SEG_SIZE)
		WARN_ON(dma_set_max_seg_size(device->card->device,
					     SBP2_MAX_SEG_SIZE));

	shost = scsi_host_alloc(&scsi_driver_template, sizeof(*tgt));
	if (shost == NULL)
		return -ENOMEM;
@@ -1610,6 +1606,7 @@ static struct scsi_host_template scsi_driver_template = {
	.eh_abort_handler	= sbp2_scsi_abort,
	.this_id		= -1,
	.sg_tablesize		= SG_ALL,
	.max_segment_size	= SBP2_MAX_SEG_SIZE,
	.can_queue		= 1,
	.sdev_attrs		= sbp2_scsi_sysfs_attrs,
};
+4 −5
Original line number Diff line number Diff line
@@ -1747,11 +1747,10 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
		shost->max_sectors = (shost->sg_tablesize * 8) + 112;
	}

	error = dma_set_max_seg_size(&pdev->dev,
		(aac->adapter_info.options & AAC_OPT_NEW_COMM) ?
			(shost->max_sectors << 9) : 65536);
	if (error)
		goto out_deinit;
	if (aac->adapter_info.options & AAC_OPT_NEW_COMM)
		shost->max_segment_size = shost->max_sectors << 9;
	else
		shost->max_segment_size = 65536;

	/*
	 * Firmware printf works only with older firmware.
+1 −1
Original line number Diff line number Diff line
@@ -594,12 +594,12 @@ csio_vport_create(struct fc_vport *fc_vport, bool disable)
	}

	fc_vport_set_state(fc_vport, FC_VPORT_INITIALIZING);
	ln->fc_vport = fc_vport;

	if (csio_fcoe_alloc_vnp(hw, ln))
		goto error;

	*(struct csio_lnode **)fc_vport->dd_data = ln;
	ln->fc_vport = fc_vport;
	if (!fc_vport->node_name)
		fc_vport->node_name = wwn_to_u64(csio_ln_wwnn(ln));
	if (!fc_vport->port_name)
Loading