54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
From: Yong Wang <yong.y.wang@intel.com>
|
|
Date: Thu Mar 11 15:31:50 2010 +0800
|
|
Subject: [PATCH] ahci: Fix accounting oops on dummy port
|
|
|
|
Not all ports are implemented in AHCI mode on some machines.
|
|
If this is the case, it results in NULL pointer dereference
|
|
when doing alpm accounting. Skip such dummy ports.
|
|
|
|
Signed-off-by: Yong Wang <yong.y.wang@intel.com>
|
|
---
|
|
drivers/ata/ahci.c | 10 ++++++++--
|
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/ata/ahci.c
|
|
+++ b/drivers/ata/ahci.c
|
|
@@ -2283,8 +2283,8 @@ static ssize_t ahci_alpm_show_active(str
|
|
struct ata_port *ap = ata_shost_to_port(shost);
|
|
struct ahci_port_priv *pp;
|
|
|
|
- if (!ap)
|
|
- return;
|
|
+ if (!ap || ata_port_is_dummy(ap))
|
|
+ return 0;
|
|
pp = ap->private_data;
|
|
account_alpm_stats(ap);
|
|
|
|
@@ -2298,6 +2298,8 @@ static ssize_t ahci_alpm_show_partial(st
|
|
struct ata_port *ap = ata_shost_to_port(shost);
|
|
struct ahci_port_priv *pp = ap->private_data;
|
|
|
|
+ if (!ap || ata_port_is_dummy(ap))
|
|
+ return 0;
|
|
account_alpm_stats(ap);
|
|
|
|
return sprintf(buf, "%u\n", jiffies_to_msecs(pp->partial_jiffies));
|
|
@@ -2310,6 +2312,8 @@ static ssize_t ahci_alpm_show_slumber(st
|
|
struct ata_port *ap = ata_shost_to_port(shost);
|
|
struct ahci_port_priv *pp = ap->private_data;
|
|
|
|
+ if (!ap || ata_port_is_dummy(ap))
|
|
+ return 0;
|
|
account_alpm_stats(ap);
|
|
|
|
return sprintf(buf, "%u\n", jiffies_to_msecs(pp->slumber_jiffies));
|
|
@@ -2323,6 +2327,8 @@ static ssize_t ahci_alpm_show_accounting
|
|
struct ata_port *ap = ata_shost_to_port(shost);
|
|
struct ahci_port_priv *pp = ap->private_data;
|
|
|
|
+ if (!ap || ata_port_is_dummy(ap))
|
|
+ return 0;
|
|
return sprintf(buf, "%u\n", pp->accounting_active);
|
|
}
|
|
|