Skip to contentSkip to conversation

MVSAS:Optimization for DMA buffer

PATCH In review Andy Yan 2 participants 2 messages Nov 9, 2009 – Nov 14, 2009 SCSI

lore
Share & tools
lore

Andy Yan

author
#0 lore raw

PATCH 5/7 MVSAS:Optimization for DMA buffer

Quoted 2 lines

From 0b428877eecefb91b7ec7e9f1a087e5ccf2b0445 Mon Sep 17 00:00:00 2001

From: Andy <[email protected]>
Date: Fri, 6 Nov 2009 17:25:08 +0800
Subject: [PATCH 5/7] optimization for DMA buffer
optimization for DMA buffer allocation to get better compatbility with different OS distribution

---
 drivers/scsi/mvsas/mv_94xx.h |    2 +-
 drivers/scsi/mvsas/mv_defs.h |    7 +++--
 drivers/scsi/mvsas/mv_init.c |   57 +++++++++++++++++++++++++++++------------
 drivers/scsi/mvsas/mv_sas.c  |    9 ++++--
 drivers/scsi/mvsas/mv_sas.h  |    2 +
 5 files changed, 53 insertions(+), 24 deletions(-)
drivers/scsi/mvsas/mv_94xx.h +1 -1
index 1df38a9..d0b081a 100644
@@ -187,7 +187,7 @@ struct mvs_prd_imt {
 
 struct mvs_prd {
 	/* 64-bit buffer address */
-	__le64			addr;
+	__le64		addr;
 	/* 22-bit length */
 	__le32		im_len;
 } __attribute__ ((packed));
drivers/scsi/mvsas/mv_defs.h +4 -3
index 5096de8..f39f16a 100644
@@ -40,7 +40,6 @@ enum chip_flavors {
 
 /* driver compile-time configuration */
 enum driver_configuration {
-	MVS_SLOTS		= 512,	/* command slots */
 	MVS_TX_RING_SZ		= 1024,	/* TX ring size (12-bit) */
 	MVS_RX_RING_SZ		= 1024, /* RX ring size (12-bit) */
 					/* software requires power-of-2
@@ -53,8 +52,8 @@ enum driver_configuration {
 	MVS_SSP_CMD_SZ		= 64,	/* SSP command table buffer size */
 	MVS_ATA_CMD_SZ		= 96,	/* SATA command table buffer size */
 	MVS_OAF_SZ		= 64,	/* Open address frame buffer size */
-	MVS_QUEUE_SIZE	= 32,	/* Support Queue depth */
-	MVS_CAN_QUEUE		= MVS_SLOTS - 2,	/* SCSI Queue depth */
+	MVS_QUEUE_SIZE	= 64,	/* Support Queue depth */
+	MVS_CAN_QUEUE		= MVS_QUEUE_SIZE - 2,	/* SCSI Queue depth */
 	MVS_SOC_CAN_QUEUE	= MVS_SOC_SLOTS - 2,
 };
 
@@ -397,6 +396,7 @@ enum mvs_event_flags {
 	PHY_PLUG_EVENT	= (3U),
 	PHY_PLUG_IN		= (1U << 0),	/* phy plug in */
 	PHY_PLUG_OUT		= (1U << 1),	/* phy plug out */
+	EXP_BRCT_CHG		= (1U << 2),    /* broadcast change */
 };
 
 enum mvs_port_type {
@@ -507,4 +507,5 @@ enum pci_cfg_comm_registers {
 	PCR_CMD		= 0x04,
 	PCR_MSI_CTRL 	= 0x50,
 };
+
 #endif
drivers/scsi/mvsas/mv_init.c +40 -17

104 lines not on this page · raw message

drivers/scsi/mvsas/mv_sas.c +6 -3
index 7423fc9..09023d7 100644
@@ -719,9 +719,12 @@ static int mvs_task_prep_ata(struct mvs_info *mvi,
 	/* fill in PRD (scatter/gather) table, if any */
 	MVS_CHIP_DISP->make_prd(task->scatter, tei->n_elem, buf_prd);
 #ifndef DISABLE_HOTPLUG_DMA_FIX
-	if (task->data_dir == DMA_FROM_DEVICE)
-		MVS_CHIP_DISP->dma_fix(mvi->bulk_buffer_dma,
-				TRASH_BUCKET_SIZE, tei->n_elem, buf_prd);
+	if (task->data_dir == DMA_FROM_DEVICE) {
+		dma_addr_t _dmaAddr = ((phy_mask <= 0x08) ?
+			mvi->bulk_buffer_dma : mvi->bulk_buffer_dma1);
+		MVS_CHIP_DISP->dma_fix(_dmaAddr, TRASH_BUCKET_SIZE,
+			tei->n_elem, buf_prd);
+	}
 #endif
 	return 0;
 }
drivers/scsi/mvsas/mv_sas.h +2 -0
index ffddace..b0f43e7 100644
@@ -340,6 +340,8 @@ struct mvs_info {
 #ifndef DISABLE_HOTPLUG_DMA_FIX
 	void *bulk_buffer;
 	dma_addr_t bulk_buffer_dma;
+	void *bulk_buffer1;
+	dma_addr_t bulk_buffer_dma1;
 #define TRASH_BUCKET_SIZE    	0x20000
 #endif
 	struct mvs_slot_info slot_info[0];
Signature · 1 line
1.6.2.2
#1 lore raw

drivers/scsi/mvsas/mv_init.c static int pci_go_64(struct pci_dev *pdev) · line 452

Quoted 4 lines · Andy Yan
drivers/scsi/mvsas/mv_init.c +2 -2
-       if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
-               rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
+       if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
+               rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);

So I might not agree with the people who pointlessly churn our interfaces while adding no value but the old form now warns, so you can't just revert this change any more:

drivers/scsi/mvsas/mv_init.c: In function 'pci_go_64':
drivers/scsi/mvsas/mv_init.c:460: warning: 'DMA_nnBIT_MASK' is deprecated drivers/scsi/mvsas/mv_init.c:461: warning: 'DMA_nnBIT_MASK' is deprecated drivers/scsi/mvsas/mv_init.c:463: warning: 'DMA_nnBIT_MASK' is deprecated drivers/scsi/mvsas/mv_init.c:471: warning: 'DMA_nnBIT_MASK' is deprecated drivers/scsi/mvsas/mv_init.c:477: warning: 'DMA_nnBIT_MASK' is deprecated

Please remove this reversion from the diff.

Thanks,

James