diff --git a/openpower/linux/linux-0013-aacraid-Reset-irq-affinity-hints.patch b/openpower/linux/linux-0013-aacraid-Reset-irq-affinity-hints.patch
new file mode 100644
index 0000000..387508b
--- /dev/null
+++ b/openpower/linux/linux-0013-aacraid-Reset-irq-affinity-hints.patch
@@ -0,0 +1,242 @@
+From 07900774dd2657b26dc72718fefdaeb1fb3613fe Mon Sep 17 00:00:00 2001
+From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
+Date: Fri, 28 Aug 2015 06:38:38 -0400
+Subject: [PATCH 13/17] aacraid: Reset irq affinity hints
+
+Reset irq affinity hints before releasing IRQ.
+Removed duplicate code of IRQ acquire/release.
+
+Reviewed-by: Tomas Henzl <thenzl@redhat.com>
+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/aacraid.h |   2 +
+ drivers/scsi/aacraid/commsup.c | 113 ++++++++++++++++++++++++++++++-----------
+ drivers/scsi/aacraid/src.c     |  48 ++---------------
+ 3 files changed, 88 insertions(+), 75 deletions(-)
+
+diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
+index e54f597..7b95227 100644
+--- a/drivers/scsi/aacraid/aacraid.h
++++ b/drivers/scsi/aacraid/aacraid.h
+@@ -2110,6 +2110,8 @@ static inline unsigned int cap_to_cyls(sector_t capacity, unsigned divisor)
+ #define AAC_OWNER_ERROR_HANDLER	0x103
+ #define AAC_OWNER_FIRMWARE	0x106
+ 
++int aac_acquire_irq(struct aac_dev *dev);
++void aac_free_irq(struct aac_dev *dev);
+ const char *aac_driverinfo(struct Scsi_Host *);
+ struct fib *aac_fib_alloc(struct aac_dev *dev);
+ int aac_fib_setup(struct aac_dev *dev);
+diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
+index 4da5749..a1f90fe 100644
+--- a/drivers/scsi/aacraid/commsup.c
++++ b/drivers/scsi/aacraid/commsup.c
+@@ -1270,13 +1270,12 @@ retry_next:
+ static int _aac_reset_adapter(struct aac_dev *aac, int forced)
+ {
+ 	int index, quirks;
+-	int retval, i;
++	int retval;
+ 	struct Scsi_Host *host;
+ 	struct scsi_device *dev;
+ 	struct scsi_cmnd *command;
+ 	struct scsi_cmnd *command_list;
+ 	int jafo = 0;
+-	int cpu;
+ 
+ 	/*
+ 	 * Assumptions:
+@@ -1339,35 +1338,7 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced)
+ 	aac->comm_phys = 0;
+ 	kfree(aac->queues);
+ 	aac->queues = NULL;
+-	cpu = cpumask_first(cpu_online_mask);
+-	if (aac->pdev->device == PMC_DEVICE_S6 ||
+-	    aac->pdev->device == PMC_DEVICE_S7 ||
+-	    aac->pdev->device == PMC_DEVICE_S8 ||
+-	    aac->pdev->device == PMC_DEVICE_S9) {
+-		if (aac->max_msix > 1) {
+-			for (i = 0; i < aac->max_msix; i++) {
+-				if (irq_set_affinity_hint(
+-				    aac->msixentry[i].vector,
+-				    NULL)) {
+-					printk(KERN_ERR "%s%d: Failed to reset IRQ affinity for cpu %d\n",
+-						aac->name,
+-						aac->id,
+-						cpu);
+-				}
+-				cpu = cpumask_next(cpu,
+-						cpu_online_mask);
+-				free_irq(aac->msixentry[i].vector,
+-					 &(aac->aac_msix[i]));
+-			}
+-			pci_disable_msix(aac->pdev);
+-		} else {
+-			free_irq(aac->pdev->irq, &(aac->aac_msix[0]));
+-		}
+-	} else {
+-		free_irq(aac->pdev->irq, aac);
+-	}
+-	if (aac->msi)
+-		pci_disable_msi(aac->pdev);
++	aac_free_irq(aac);
+ 	kfree(aac->fsa_dev);
+ 	aac->fsa_dev = NULL;
+ 	quirks = aac_get_driver_ident(index)->quirks;
+@@ -1978,3 +1949,83 @@ int aac_command_thread(void *data)
+ 	dev->aif_thread = 0;
+ 	return 0;
+ }
++
++int aac_acquire_irq(struct aac_dev *dev)
++{
++	int i;
++	int j;
++	int ret = 0;
++	int cpu;
++
++	cpu = cpumask_first(cpu_online_mask);
++	if (!dev->sync_mode && dev->msi_enabled && dev->max_msix > 1) {
++		for (i = 0; i < dev->max_msix; i++) {
++			dev->aac_msix[i].vector_no = i;
++			dev->aac_msix[i].dev = dev;
++			if (request_irq(dev->msixentry[i].vector,
++					dev->a_ops.adapter_intr,
++					0, "aacraid", &(dev->aac_msix[i]))) {
++				printk(KERN_ERR "%s%d: Failed to register IRQ for vector %d.\n",
++						dev->name, dev->id, i);
++				for (j = 0 ; j < i ; j++)
++					free_irq(dev->msixentry[j].vector,
++						 &(dev->aac_msix[j]));
++				pci_disable_msix(dev->pdev);
++				ret = -1;
++			}
++			if (irq_set_affinity_hint(dev->msixentry[i].vector,
++							get_cpu_mask(cpu))) {
++				printk(KERN_ERR "%s%d: Failed to set IRQ affinity for cpu %d\n",
++					    dev->name, dev->id, cpu);
++			}
++			cpu = cpumask_next(cpu, cpu_online_mask);
++		}
++	} else {
++		dev->aac_msix[0].vector_no = 0;
++		dev->aac_msix[0].dev = dev;
++
++		if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr,
++			IRQF_SHARED, "aacraid",
++			&(dev->aac_msix[0])) < 0) {
++			if (dev->msi)
++				pci_disable_msi(dev->pdev);
++			printk(KERN_ERR "%s%d: Interrupt unavailable.\n",
++					dev->name, dev->id);
++			ret = -1;
++		}
++	}
++	return ret;
++}
++
++void aac_free_irq(struct aac_dev *dev)
++{
++	int i;
++	int cpu;
++
++	cpu = cpumask_first(cpu_online_mask);
++	if (dev->pdev->device == PMC_DEVICE_S6 ||
++	    dev->pdev->device == PMC_DEVICE_S7 ||
++	    dev->pdev->device == PMC_DEVICE_S8 ||
++	    dev->pdev->device == PMC_DEVICE_S9) {
++		if (dev->max_msix > 1) {
++			for (i = 0; i < dev->max_msix; i++) {
++				if (irq_set_affinity_hint(
++					dev->msixentry[i].vector, NULL)) {
++					printk(KERN_ERR "%s%d: Failed to reset IRQ affinity for cpu %d\n",
++					    dev->name, dev->id, cpu);
++				}
++				cpu = cpumask_next(cpu, cpu_online_mask);
++				free_irq(dev->msixentry[i].vector,
++						&(dev->aac_msix[i]));
++			}
++		} else {
++			free_irq(dev->pdev->irq, &(dev->aac_msix[0]));
++		}
++	} else {
++		free_irq(dev->pdev->irq, dev);
++	}
++	if (dev->msi)
++		pci_disable_msi(dev->pdev);
++	else if (dev->max_msix > 1)
++		pci_disable_msix(dev->pdev);
++}
+diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
+index 1409a0b..2aa34ea 100644
+--- a/drivers/scsi/aacraid/src.c
++++ b/drivers/scsi/aacraid/src.c
+@@ -798,9 +798,7 @@ int aac_srcv_init(struct aac_dev *dev)
+ 	unsigned long status;
+ 	int restart = 0;
+ 	int instance = dev->id;
+-	int i, j;
+ 	const char *name = dev->name;
+-	int cpu;
+ 
+ 	dev->a_ops.adapter_ioremap = aac_srcv_ioremap;
+ 	dev->a_ops.adapter_comm = aac_src_select_comm;
+@@ -918,48 +916,10 @@ int aac_srcv_init(struct aac_dev *dev)
+ 		goto error_iounmap;
+ 	if (dev->msi_enabled)
+ 		aac_src_access_devreg(dev, AAC_ENABLE_MSIX);
+-	if (!dev->sync_mode && dev->msi_enabled && dev->max_msix > 1) {
+-		cpu = cpumask_first(cpu_online_mask);
+-		for (i = 0; i < dev->max_msix; i++) {
+-			dev->aac_msix[i].vector_no = i;
+-			dev->aac_msix[i].dev = dev;
+-
+-			if (request_irq(dev->msixentry[i].vector,
+-					dev->a_ops.adapter_intr,
+-					0,
+-					"aacraid",
+-					&(dev->aac_msix[i]))) {
+-				printk(KERN_ERR "%s%d: Failed to register IRQ for vector %d.\n",
+-						name, instance, i);
+-				for (j = 0 ; j < i ; j++)
+-					free_irq(dev->msixentry[j].vector,
+-						 &(dev->aac_msix[j]));
+-				pci_disable_msix(dev->pdev);
+-				goto error_iounmap;
+-			}
+-			if (irq_set_affinity_hint(
+-			   dev->msixentry[i].vector,
+-			   get_cpu_mask(cpu))) {
+-				printk(KERN_ERR "%s%d: Failed to set IRQ affinity for cpu %d\n",
+-						name, instance, cpu);
+-			}
+-			cpu = cpumask_next(cpu, cpu_online_mask);
+-		}
+-	} else {
+-		dev->aac_msix[0].vector_no = 0;
+-		dev->aac_msix[0].dev = dev;
+-
+-		if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr,
+-				IRQF_SHARED,
+-				"aacraid",
+-				&(dev->aac_msix[0])) < 0) {
+-			if (dev->msi)
+-				pci_disable_msi(dev->pdev);
+-			printk(KERN_ERR "%s%d: Interrupt unavailable.\n",
+-					name, instance);
+-			goto error_iounmap;
+-		}
+-	}
++
++	if (aac_acquire_irq(dev))
++		goto error_iounmap;
++
+ 	dev->dbg_base = dev->base_start;
+ 	dev->dbg_base_mapped = dev->base;
+ 	dev->dbg_size = dev->base_size;
+-- 
+2.5.0
+
