diff --git a/openpower/linux/linux-0009-aacraid-Tune-response-path-if-IsFastPath-bit-set.patch b/openpower/linux/linux-0009-aacraid-Tune-response-path-if-IsFastPath-bit-set.patch
new file mode 100644
index 0000000..81d0dcf
--- /dev/null
+++ b/openpower/linux/linux-0009-aacraid-Tune-response-path-if-IsFastPath-bit-set.patch
@@ -0,0 +1,319 @@
+From abcbb5d7d8e9e6144487bfcc22d14efe3f76de40 Mon Sep 17 00:00:00 2001
+From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
+Date: Fri, 28 Aug 2015 06:38:37 -0400
+Subject: [PATCH 09/15] aacraid: Tune response path if IsFastPath bit set
+
+If 'IsFastPath' bit is set, then response path assumes no error and skips error check.
+
+Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com>
+Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com>
+Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ drivers/scsi/aacraid/aachba.c | 259 ++++++++++++++++++++++--------------------
+ 1 file changed, 137 insertions(+), 122 deletions(-)
+
+diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
+index 05f2a0295f4d..e4c243748a97 100644
+--- a/drivers/scsi/aacraid/aachba.c
++++ b/drivers/scsi/aacraid/aachba.c
+@@ -2977,11 +2977,16 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
+ 		return;
+ 
+ 	BUG_ON(fibptr == NULL);
+-
+ 	dev = fibptr->dev;
+ 
+-	srbreply = (struct aac_srb_reply *) fib_data(fibptr);
++	scsi_dma_unmap(scsicmd);
+ 
++	/* expose physical device if expose_physicald flag is on */
++	if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01)
++	  && expose_physicals > 0)
++		aac_expose_phy_device(scsicmd);
++
++	srbreply = (struct aac_srb_reply *) fib_data(fibptr);
+ 	scsicmd->sense_buffer[0] = '\0';  /* Initialize sense valid flag to false */
+ 
+ 	if (fibptr->flags & FIB_CONTEXT_FLAG_FASTRESP) {
+@@ -2994,147 +2999,157 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
+ 		 */
+ 		scsi_set_resid(scsicmd, scsi_bufflen(scsicmd)
+ 				   - le32_to_cpu(srbreply->data_xfer_length));
+-	}
+-
+-	scsi_dma_unmap(scsicmd);
+-
+-	/* expose physical device if expose_physicald flag is on */
+-	if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01)
+-	  && expose_physicals > 0)
+-		aac_expose_phy_device(scsicmd);
++		/*
++		 * First check the fib status
++		 */
+ 
+-	/*
+-	 * First check the fib status
+-	 */
++		if (le32_to_cpu(srbreply->status) != ST_OK) {
++			int len;
+ 
+-	if (le32_to_cpu(srbreply->status) != ST_OK){
+-		int len;
+-		printk(KERN_WARNING "aac_srb_callback: srb failed, status = %d\n", le32_to_cpu(srbreply->status));
+-		len = min_t(u32, le32_to_cpu(srbreply->sense_data_size),
+-			    SCSI_SENSE_BUFFERSIZE);
+-		scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
+-		memcpy(scsicmd->sense_buffer, srbreply->sense_data, len);
+-	}
++			printk(KERN_WARNING "aac_srb_callback: srb failed, status = %d\n", le32_to_cpu(srbreply->status));
++			len = min_t(u32, le32_to_cpu(srbreply->sense_data_size),
++				    SCSI_SENSE_BUFFERSIZE);
++			scsicmd->result = DID_ERROR << 16
++						| COMMAND_COMPLETE << 8
++						| SAM_STAT_CHECK_CONDITION;
++			memcpy(scsicmd->sense_buffer,
++					srbreply->sense_data, len);
++		}
+ 
+-	/*
+-	 * Next check the srb status
+-	 */
+-	switch( (le32_to_cpu(srbreply->srb_status))&0x3f){
+-	case SRB_STATUS_ERROR_RECOVERY:
+-	case SRB_STATUS_PENDING:
+-	case SRB_STATUS_SUCCESS:
+-		scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
+-		break;
+-	case SRB_STATUS_DATA_OVERRUN:
+-		switch(scsicmd->cmnd[0]){
+-		case  READ_6:
+-		case  WRITE_6:
+-		case  READ_10:
+-		case  WRITE_10:
+-		case  READ_12:
+-		case  WRITE_12:
+-		case  READ_16:
+-		case  WRITE_16:
+-			if (le32_to_cpu(srbreply->data_xfer_length) < scsicmd->underflow) {
+-				printk(KERN_WARNING"aacraid: SCSI CMD underflow\n");
+-			} else {
+-				printk(KERN_WARNING"aacraid: SCSI CMD Data Overrun\n");
++		/*
++		 * Next check the srb status
++		 */
++		switch ((le32_to_cpu(srbreply->srb_status))&0x3f) {
++		case SRB_STATUS_ERROR_RECOVERY:
++		case SRB_STATUS_PENDING:
++		case SRB_STATUS_SUCCESS:
++			scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
++			break;
++		case SRB_STATUS_DATA_OVERRUN:
++			switch (scsicmd->cmnd[0]) {
++			case  READ_6:
++			case  WRITE_6:
++			case  READ_10:
++			case  WRITE_10:
++			case  READ_12:
++			case  WRITE_12:
++			case  READ_16:
++			case  WRITE_16:
++				if (le32_to_cpu(srbreply->data_xfer_length)
++							< scsicmd->underflow)
++					printk(KERN_WARNING"aacraid: SCSI CMD underflow\n");
++				else
++					printk(KERN_WARNING"aacraid: SCSI CMD Data Overrun\n");
++				scsicmd->result = DID_ERROR << 16
++							| COMMAND_COMPLETE << 8;
++				break;
++			case INQUIRY: {
++				scsicmd->result = DID_OK << 16
++							| COMMAND_COMPLETE << 8;
++				break;
++			}
++			default:
++				scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
++				break;
+ 			}
+-			scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8;
+ 			break;
+-		case INQUIRY: {
+-			scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
++		case SRB_STATUS_ABORTED:
++			scsicmd->result = DID_ABORT << 16 | ABORT << 8;
+ 			break;
+-		}
+-		default:
+-			scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
++		case SRB_STATUS_ABORT_FAILED:
++			/*
++			 * Not sure about this one - but assuming the
++			 * hba was trying to abort for some reason
++			 */
++			scsicmd->result = DID_ERROR << 16 | ABORT << 8;
++			break;
++		case SRB_STATUS_PARITY_ERROR:
++			scsicmd->result = DID_PARITY << 16
++						| MSG_PARITY_ERROR << 8;
++			break;
++		case SRB_STATUS_NO_DEVICE:
++		case SRB_STATUS_INVALID_PATH_ID:
++		case SRB_STATUS_INVALID_TARGET_ID:
++		case SRB_STATUS_INVALID_LUN:
++		case SRB_STATUS_SELECTION_TIMEOUT:
++			scsicmd->result = DID_NO_CONNECT << 16
++						| COMMAND_COMPLETE << 8;
+ 			break;
+-		}
+-		break;
+-	case SRB_STATUS_ABORTED:
+-		scsicmd->result = DID_ABORT << 16 | ABORT << 8;
+-		break;
+-	case SRB_STATUS_ABORT_FAILED:
+-		// Not sure about this one - but assuming the hba was trying to abort for some reason
+-		scsicmd->result = DID_ERROR << 16 | ABORT << 8;
+-		break;
+-	case SRB_STATUS_PARITY_ERROR:
+-		scsicmd->result = DID_PARITY << 16 | MSG_PARITY_ERROR << 8;
+-		break;
+-	case SRB_STATUS_NO_DEVICE:
+-	case SRB_STATUS_INVALID_PATH_ID:
+-	case SRB_STATUS_INVALID_TARGET_ID:
+-	case SRB_STATUS_INVALID_LUN:
+-	case SRB_STATUS_SELECTION_TIMEOUT:
+-		scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8;
+-		break;
+ 
+-	case SRB_STATUS_COMMAND_TIMEOUT:
+-	case SRB_STATUS_TIMEOUT:
+-		scsicmd->result = DID_TIME_OUT << 16 | COMMAND_COMPLETE << 8;
+-		break;
++		case SRB_STATUS_COMMAND_TIMEOUT:
++		case SRB_STATUS_TIMEOUT:
++			scsicmd->result = DID_TIME_OUT << 16
++						| COMMAND_COMPLETE << 8;
++			break;
+ 
+-	case SRB_STATUS_BUSY:
+-		scsicmd->result = DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8;
+-		break;
++		case SRB_STATUS_BUSY:
++			scsicmd->result = DID_BUS_BUSY << 16
++						| COMMAND_COMPLETE << 8;
++			break;
+ 
+-	case SRB_STATUS_BUS_RESET:
+-		scsicmd->result = DID_RESET << 16 | COMMAND_COMPLETE << 8;
+-		break;
++		case SRB_STATUS_BUS_RESET:
++			scsicmd->result = DID_RESET << 16
++						| COMMAND_COMPLETE << 8;
++			break;
+ 
+-	case SRB_STATUS_MESSAGE_REJECTED:
+-		scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8;
+-		break;
+-	case SRB_STATUS_REQUEST_FLUSHED:
+-	case SRB_STATUS_ERROR:
+-	case SRB_STATUS_INVALID_REQUEST:
+-	case SRB_STATUS_REQUEST_SENSE_FAILED:
+-	case SRB_STATUS_NO_HBA:
+-	case SRB_STATUS_UNEXPECTED_BUS_FREE:
+-	case SRB_STATUS_PHASE_SEQUENCE_FAILURE:
+-	case SRB_STATUS_BAD_SRB_BLOCK_LENGTH:
+-	case SRB_STATUS_DELAYED_RETRY:
+-	case SRB_STATUS_BAD_FUNCTION:
+-	case SRB_STATUS_NOT_STARTED:
+-	case SRB_STATUS_NOT_IN_USE:
+-	case SRB_STATUS_FORCE_ABORT:
+-	case SRB_STATUS_DOMAIN_VALIDATION_FAIL:
+-	default:
++		case SRB_STATUS_MESSAGE_REJECTED:
++			scsicmd->result = DID_ERROR << 16
++						| MESSAGE_REJECT << 8;
++			break;
++		case SRB_STATUS_REQUEST_FLUSHED:
++		case SRB_STATUS_ERROR:
++		case SRB_STATUS_INVALID_REQUEST:
++		case SRB_STATUS_REQUEST_SENSE_FAILED:
++		case SRB_STATUS_NO_HBA:
++		case SRB_STATUS_UNEXPECTED_BUS_FREE:
++		case SRB_STATUS_PHASE_SEQUENCE_FAILURE:
++		case SRB_STATUS_BAD_SRB_BLOCK_LENGTH:
++		case SRB_STATUS_DELAYED_RETRY:
++		case SRB_STATUS_BAD_FUNCTION:
++		case SRB_STATUS_NOT_STARTED:
++		case SRB_STATUS_NOT_IN_USE:
++		case SRB_STATUS_FORCE_ABORT:
++		case SRB_STATUS_DOMAIN_VALIDATION_FAIL:
++		default:
+ #ifdef AAC_DETAILED_STATUS_INFO
+-		printk("aacraid: SRB ERROR(%u) %s scsi cmd 0x%x - scsi status 0x%x\n",
+-			le32_to_cpu(srbreply->srb_status) & 0x3F,
+-			aac_get_status_string(
+-				le32_to_cpu(srbreply->srb_status) & 0x3F),
+-			scsicmd->cmnd[0],
+-			le32_to_cpu(srbreply->scsi_status));
++			printk(KERN_INFO "aacraid: SRB ERROR(%u) %s scsi cmd 0x%x - scsi status 0x%x\n",
++				le32_to_cpu(srbreply->srb_status) & 0x3F,
++				aac_get_status_string(
++					le32_to_cpu(srbreply->srb_status) & 0x3F),
++				scsicmd->cmnd[0],
++				le32_to_cpu(srbreply->scsi_status));
+ #endif
+-		if ((scsicmd->cmnd[0] == ATA_12)
+-		  || (scsicmd->cmnd[0] == ATA_16)) {
+-			if (scsicmd->cmnd[2] & (0x01 << 5)) {
+-				scsicmd->result = DID_OK << 16
+-						| COMMAND_COMPLETE << 8;
++			if ((scsicmd->cmnd[0] == ATA_12)
++				|| (scsicmd->cmnd[0] == ATA_16)) {
++					if (scsicmd->cmnd[2] & (0x01 << 5)) {
++						scsicmd->result = DID_OK << 16
++							| COMMAND_COMPLETE << 8;
+ 				break;
++				} else {
++					scsicmd->result = DID_ERROR << 16
++						| COMMAND_COMPLETE << 8;
++					break;
++				}
+ 			} else {
+ 				scsicmd->result = DID_ERROR << 16
+-						| COMMAND_COMPLETE << 8;
++					| COMMAND_COMPLETE << 8;
+ 				break;
+ 			}
+-		} else {
+-			scsicmd->result = DID_ERROR << 16
+-					| COMMAND_COMPLETE << 8;
+-			break;
+ 		}
+-	}
+-	if (le32_to_cpu(srbreply->scsi_status) == SAM_STAT_CHECK_CONDITION) {
+-		int len;
+-		scsicmd->result |= SAM_STAT_CHECK_CONDITION;
+-		len = min_t(u32, le32_to_cpu(srbreply->sense_data_size),
+-			    SCSI_SENSE_BUFFERSIZE);
++		if (le32_to_cpu(srbreply->scsi_status)
++				== SAM_STAT_CHECK_CONDITION) {
++			int len;
++
++			scsicmd->result |= SAM_STAT_CHECK_CONDITION;
++			len = min_t(u32, le32_to_cpu(srbreply->sense_data_size),
++				    SCSI_SENSE_BUFFERSIZE);
+ #ifdef AAC_DETAILED_STATUS_INFO
+-		printk(KERN_WARNING "aac_srb_callback: check condition, status = %d len=%d\n",
+-					le32_to_cpu(srbreply->status), len);
++			printk(KERN_WARNING "aac_srb_callback: check condition, status = %d len=%d\n",
++						le32_to_cpu(srbreply->status), len);
+ #endif
+-		memcpy(scsicmd->sense_buffer, srbreply->sense_data, len);
++			memcpy(scsicmd->sense_buffer,
++					srbreply->sense_data, len);
++		}
+ 	}
+ 	/*
+ 	 * OR in the scsi status (already shifted up a bit)
+-- 
+2.6.2
+
