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

Commit 7b88ed67 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
  [SCSI] mpt: fix disable lsi sas to use msi as default
  [SCSI] fix ABORTED_COMMAND looping forever problem
  [SCSI] sd: revive sd_index_lock
  [SCSI] cxgb3i: update the driver version to 1.0.1
  [SCSI] cxgb3i: Fix spelling errors in documentation
  [SCSI] cxgb3i: added missing include in cxgb3i_ddp.h
  [SCSI] cxgb3i: Outgoing pdus need to observe skb's MAX_SKB_FRAGS
  [SCSI] cxgb3i: added per-task data to track transmit progress
  [SCSI] cxgb3i: transmit work-request fixes
  [SCSI] hptiop: Add new PCI device ID
parents 5b101740 5ce7868e
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ Introduction
============

The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
series of products) supports iSCSI acceleration and iSCSI Direct Data Placement
series of products) support iSCSI acceleration and iSCSI Direct Data Placement
(DDP) where the hardware handles the expensive byte touching operations, such
as CRC computation and verification, and direct DMA to the final host memory
destination:
@@ -31,9 +31,9 @@ destination:
	  the TCP segments onto the wire. It handles TCP retransmission if
	  needed.

	  On receving, S3 h/w recovers the iSCSI PDU by reassembling TCP
	  On receiving, S3 h/w recovers the iSCSI PDU by reassembling TCP
	  segments, separating the header and data, calculating and verifying
	  the digests, then forwards the header to the host. The payload data,
	  the digests, then forwarding the header to the host. The payload data,
	  if possible, will be directly placed into the pre-posted host DDP
	  buffer. Otherwise, the payload data will be sent to the host too.

@@ -68,9 +68,8 @@ The following steps need to be taken to accelerates the open-iscsi initiator:
	sure the ip address is unique in the network.

3. edit /etc/iscsi/iscsid.conf
   The default setting for MaxRecvDataSegmentLength (131072) is too big,
   replace "node.conn[0].iscsi.MaxRecvDataSegmentLength" to be a value no
   bigger than 15360 (for example 8192):
   The default setting for MaxRecvDataSegmentLength (131072) is too big;
   replace with a value no bigger than 15360 (for example 8192):

	node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192

+2 −2
Original line number Diff line number Diff line
@@ -91,9 +91,9 @@ MODULE_PARM_DESC(mpt_msi_enable_fc, " Enable MSI Support for FC \
		controllers (default=0)");

static int mpt_msi_enable_sas;
module_param(mpt_msi_enable_sas, int, 1);
module_param(mpt_msi_enable_sas, int, 0);
MODULE_PARM_DESC(mpt_msi_enable_sas, " Enable MSI Support for SAS \
		controllers (default=1)");
		controllers (default=0)");


static int mpt_channel_mapping;
+21 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/list.h>
#include <linux/netdevice.h>
#include <linux/scatterlist.h>
#include <linux/skbuff.h>
#include <scsi/libiscsi_tcp.h>

/* from cxgb3 LLD */
@@ -113,6 +114,26 @@ struct cxgb3i_endpoint {
	struct cxgb3i_conn *cconn;
};

/**
 * struct cxgb3i_task_data - private iscsi task data
 *
 * @nr_frags:	# of coalesced page frags (from scsi sgl)
 * @frags:	coalesced page frags (from scsi sgl)
 * @skb:	tx pdu skb
 * @offset:	data offset for the next pdu
 * @count:	max. possible pdu payload
 * @sgoffset:	offset to the first sg entry for a given offset
 */
#define MAX_PDU_FRAGS	((ULP2_MAX_PDU_PAYLOAD + 512 - 1) / 512)
struct cxgb3i_task_data {
	unsigned short nr_frags;
	skb_frag_t frags[MAX_PDU_FRAGS];
	struct sk_buff *skb;
	unsigned int offset;
	unsigned int count;
	unsigned int sgoffset;
};

int cxgb3i_iscsi_init(void);
void cxgb3i_iscsi_cleanup(void);

+11 −8
Original line number Diff line number Diff line
@@ -639,10 +639,11 @@ static int ddp_init(struct t3cdev *tdev)
	write_unlock(&cxgb3i_ddp_rwlock);

	ddp_log_info("nppods %u (0x%x ~ 0x%x), bits %u, mask 0x%x,0x%x "
			"pkt %u,%u.\n",
			"pkt %u/%u, %u/%u.\n",
			ppmax, ddp->llimit, ddp->ulimit, ddp->idx_bits,
			ddp->idx_mask, ddp->rsvd_tag_mask,
			ddp->max_txsz, ddp->max_rxsz);
			ddp->max_txsz, uinfo.max_txsz,
			ddp->max_rxsz, uinfo.max_rxsz);
	return 0;

free_ddp_map:
@@ -654,8 +655,8 @@ static int ddp_init(struct t3cdev *tdev)
 * cxgb3i_adapter_ddp_init - initialize the adapter's ddp resource
 * @tdev: t3cdev adapter
 * @tformat: tag format
 * @txsz: max tx pkt size, filled in by this func.
 * @rxsz: max rx pkt size, filled in by this func.
 * @txsz: max tx pdu payload size, filled in by this func.
 * @rxsz: max rx pdu payload size, filled in by this func.
 * initialize the ddp pagepod manager for a given adapter if needed and
 * setup the tag format for a given iscsi entity
 */
@@ -685,10 +686,12 @@ int cxgb3i_adapter_ddp_init(struct t3cdev *tdev,
		      tformat->sw_bits, tformat->rsvd_bits,
		      tformat->rsvd_shift, tformat->rsvd_mask);

	*txsz = ddp->max_txsz;
	*rxsz = ddp->max_rxsz;
	ddp_log_info("ddp max pkt size: %u, %u.\n",
		     ddp->max_txsz, ddp->max_rxsz);
	*txsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD,
			ddp->max_txsz - ISCSI_PDU_NONPAYLOAD_LEN);
	*rxsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD,
			ddp->max_rxsz - ISCSI_PDU_NONPAYLOAD_LEN);
	ddp_log_info("max payload size: %u/%u, %u/%u.\n",
		     *txsz, ddp->max_txsz, *rxsz, ddp->max_rxsz);
	return 0;
}
EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_init);
+4 −1
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@
#ifndef __CXGB3I_ULP2_DDP_H__
#define __CXGB3I_ULP2_DDP_H__

#include <linux/vmalloc.h>

/**
 * struct cxgb3i_tag_format - cxgb3i ulp tag format for an iscsi entity
 *
@@ -85,8 +87,9 @@ struct cxgb3i_ddp_info {
	struct sk_buff **gl_skb;
};

#define ISCSI_PDU_NONPAYLOAD_LEN	312 /* bhs(48) + ahs(256) + digest(8) */
#define ULP2_MAX_PKT_SIZE	16224
#define ULP2_MAX_PDU_PAYLOAD	(ULP2_MAX_PKT_SIZE - ISCSI_PDU_NONPAYLOAD_MAX)
#define ULP2_MAX_PDU_PAYLOAD	(ULP2_MAX_PKT_SIZE - ISCSI_PDU_NONPAYLOAD_LEN)
#define PPOD_PAGES_MAX		4
#define PPOD_PAGES_SHIFT	2	/* 4 pages per pod */

Loading