When a single device error is detected, the device under the error is indicated
by the error bit set in the DER. There is a one to one mapping between register
bit and devices on Port multiplier(PMP) i.e. bit 0 represents PMP device 0 and
bit 1 represents PMP device 1 etc.
Current implementation treats Device error register value as device number not
set of bits representing multiple device on PMP. It is changed to consider bit
level.
No need to check for each set bit as all command is going to be aborted.
Signed-off-by: Prabhakar Kushwaha <redacted>
Signed-off-by: Ashish Kalra <redacted>
---
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git (branch master)
Changes for v1: Incorporated David Laight's comment
- Single usage of ffs()
Changes for v2: Incorporated David Laight's comment
- Changed type of dev_num to unsigned
drivers/ata/sata_fsl.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
@@ -1040,12 +1040,14 @@ static void sata_fsl_error_intr(struct ata_port *ap)/* find out the offending link and qc */if(ap->nr_pmp_links){+unsignedintdev_num;dereg=ioread32(hcr_base+DE);iowrite32(dereg,hcr_base+DE);iowrite32(cereg,hcr_base+CE);-if(dereg<ap->nr_pmp_links){-link=&ap->pmp_link[dereg];+dev_num=ffs(dereg)-1;+if(dev_num<ap->nr_pmp_links){+link=&ap->pmp_link[dev_num];ehi=&link->eh_info;qc=ata_qc_from_tag(ap,link->active_tag);/*
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2011-03-02 03:26:03
On Mon, 2011-02-21 at 15:27 +0530, Prabhakar Kushwaha wrote:
When a single device error is detected, the device under the error is indicated
by the error bit set in the DER. There is a one to one mapping between register
bit and devices on Port multiplier(PMP) i.e. bit 0 represents PMP device 0 and
bit 1 represents PMP device 1 etc.
It might help to send those patches to the linux-ide mailing list and
appropriate libata maintainers in addition to CC'ing linuxppc-dev.
Cheers,
Ben.
quoted hunk
Current implementation treats Device error register value as device number not
set of bits representing multiple device on PMP. It is changed to consider bit
level.
No need to check for each set bit as all command is going to be aborted.
Signed-off-by: Prabhakar Kushwaha <redacted>
Signed-off-by: Ashish Kalra <redacted>
---
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git (branch master)
Changes for v1: Incorporated David Laight's comment
- Single usage of ffs()
Changes for v2: Incorporated David Laight's comment
- Changed type of dev_num to unsigned
drivers/ata/sata_fsl.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
@@ -1040,12 +1040,14 @@ static void sata_fsl_error_intr(struct ata_port *ap)/* find out the offending link and qc */if(ap->nr_pmp_links){+unsignedintdev_num;dereg=ioread32(hcr_base+DE);iowrite32(dereg,hcr_base+DE);iowrite32(cereg,hcr_base+CE);-if(dereg<ap->nr_pmp_links){-link=&ap->pmp_link[dereg];+dev_num=ffs(dereg)-1;+if(dev_num<ap->nr_pmp_links){+link=&ap->pmp_link[dev_num];ehi=&link->eh_info;qc=ata_qc_from_tag(ap,link->active_tag);/*