Commit 938edb8a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI updates from James Bottomley:
 "This is mostly update of the usual drivers: smarpqi, lpfc, qedi,
  megaraid_sas, libsas, zfcp, mpt3sas, hisi_sas.

  Additionally, we have a pile of annotation, unused variable and minor
  updates.

  The big API change is the updates for Christoph's DMA rework which
  include removing the DISABLE_CLUSTERING flag.

  And finally there are a couple of target tree updates"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (259 commits)
  scsi: isci: request: mark expected switch fall-through
  scsi: isci: remote_node_context: mark expected switch fall-throughs
  scsi: isci: remote_device: Mark expected switch fall-throughs
  scsi: isci: phy: Mark expected switch fall-through
  scsi: iscsi: Capture iscsi debug messages using tracepoints
  scsi: myrb: Mark expected switch fall-throughs
  scsi: megaraid: fix out-of-bound array accesses
  scsi: mpt3sas: mpt3sas_scsih: Mark expected switch fall-through
  scsi: fcoe: remove set but not used variable 'port'
  scsi: smartpqi: call pqi_free_interrupts() in pqi_shutdown()
  scsi: smartpqi: fix build warnings
  scsi: smartpqi: update driver version
  scsi: smartpqi: add ofa support
  scsi: smartpqi: increase fw status register read timeout
  scsi: smartpqi: bump driver version
  scsi: smartpqi: add smp_utils support
  scsi: smartpqi: correct lun reset issues
  scsi: smartpqi: correct volume status
  scsi: smartpqi: do not offline disks for transient did no connect conditions
  scsi: smartpqi: allow for larger raid maps
  ...
parents af7ddd8a da790309
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
* Cadence Universal Flash Storage (UFS) Controller

UFS nodes are defined to describe on-chip UFS host controllers.
Each UFS controller instance should have its own node.
Please see the ufshcd-pltfrm.txt for a list of all available properties.

Required properties:
- compatible	: Compatible list, contains the following controller:
			"cdns,ufshc"
		  complemented with the JEDEC version:
			"jedec,ufs-2.0"

- reg		: Address and length of the UFS register set.
- interrupts	: One interrupt mapping.
- freq-table-hz	: Clock frequency table.
		  See the ufshcd-pltfrm.txt for details.
- clocks	: List of phandle and clock specifier pairs.
- clock-names	: List of clock input name strings sorted in the same
		  order as the clocks property. "core_clk" is mandatory.
		  Depending on a type of a PHY,
		  the "phy_clk" clock can also be added, if needed.

Example:
	ufs@fd030000 {
		compatible = "cdns,ufshc", "jedec,ufs-2.0";
		reg = <0xfd030000 0x10000>;
		interrupts = <0 1 IRQ_TYPE_LEVEL_HIGH>;
		freq-table-hz = <0 0>, <0 0>;
		clocks = <&ufs_core_clk>, <&ufs_phy_clk>;
		clock-names = "core_clk", "phy_clk";
	};
+6 −0
Original line number Diff line number Diff line
@@ -33,6 +33,12 @@ Optional properties:
- clocks                : List of phandle and clock specifier pairs
- clock-names           : List of clock input name strings sorted in the same
                          order as the clocks property.
			  "ref_clk" indicates reference clock frequency.
			  UFS host supplies reference clock to UFS device and UFS device
			  specification allows host to provide one of the 4 frequencies (19.2 MHz,
			  26 MHz, 38.4 MHz, 52MHz) for reference clock. This "ref_clk" entry is
			  parsed and used to update the reference clock setting in device.
			  Defaults to 26 MHz(as per specification) if not specified by host.
- freq-table-hz		: Array of <min max> operating frequencies stored in the same
                          order as the clocks property. If this property is not
			  defined or a value in the array is "0" then it is assumed
+0 −2
Original line number Diff line number Diff line
@@ -1098,8 +1098,6 @@ of interest:
    unchecked_isa_dma - 1=>only use bottom 16 MB of ram (ISA DMA addressing
                   restriction), 0=>can use full 32 bit (or better) DMA
                   address space
    use_clustering - 1=>SCSI commands in mid level's queue can be merged,
                     0=>disallow SCSI command merging
    no_async_abort - 1=>Asynchronous aborts are not supported
                     0=>Timed-out commands will be aborted asynchronously
    hostt        - pointer to driver's struct scsi_host_template from which
+1 −1
Original line number Diff line number Diff line
@@ -347,7 +347,7 @@ static struct scsi_host_template driver_template = {
	.sg_tablesize		= SG_ALL,
	.max_sectors		= 1024,
	.cmd_per_lun		= SIMSCSI_REQ_QUEUE_LEN,
	.use_clustering		= DISABLE_CLUSTERING,
	.dma_boundary		= PAGE_SIZE - 1,
};

static int __init
+7 −11
Original line number Diff line number Diff line
@@ -195,7 +195,7 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
			goto split;
		}

		if (bvprvp && blk_queue_cluster(q)) {
		if (bvprvp) {
			if (seg_size + bv.bv_len > queue_max_segment_size(q))
				goto new_segment;
			if (!biovec_phys_mergeable(q, bvprvp, &bv))
@@ -295,7 +295,7 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
					     bool no_sg_merge)
{
	struct bio_vec bv, bvprv = { NULL };
	int cluster, prev = 0;
	int prev = 0;
	unsigned int seg_size, nr_phys_segs;
	struct bio *fbio, *bbio;
	struct bvec_iter iter;
@@ -313,7 +313,6 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
	}

	fbio = bio;
	cluster = blk_queue_cluster(q);
	seg_size = 0;
	nr_phys_segs = 0;
	for_each_bio(bio) {
@@ -325,7 +324,7 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
			if (no_sg_merge)
				goto new_segment;

			if (prev && cluster) {
			if (prev) {
				if (seg_size + bv.bv_len
				    > queue_max_segment_size(q))
					goto new_segment;
@@ -395,9 +394,6 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
{
	struct bio_vec end_bv = { NULL }, nxt_bv;

	if (!blk_queue_cluster(q))
		return 0;

	if (bio->bi_seg_back_size + nxt->bi_seg_front_size >
	    queue_max_segment_size(q))
		return 0;
@@ -414,12 +410,12 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
static inline void
__blk_segment_map_sg(struct request_queue *q, struct bio_vec *bvec,
		     struct scatterlist *sglist, struct bio_vec *bvprv,
		     struct scatterlist **sg, int *nsegs, int *cluster)
		     struct scatterlist **sg, int *nsegs)
{

	int nbytes = bvec->bv_len;

	if (*sg && *cluster) {
	if (*sg) {
		if ((*sg)->length + nbytes > queue_max_segment_size(q))
			goto new_segment;
		if (!biovec_phys_mergeable(q, bvprv, bvec))
@@ -465,12 +461,12 @@ static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio,
{
	struct bio_vec bvec, bvprv = { NULL };
	struct bvec_iter iter;
	int cluster = blk_queue_cluster(q), nsegs = 0;
	int nsegs = 0;

	for_each_bio(bio)
		bio_for_each_segment(bvec, bio, iter)
			__blk_segment_map_sg(q, &bvec, sglist, &bvprv, sg,
					     &nsegs, &cluster);
					     &nsegs);

	return nsegs;
}
Loading