diff options
author | Alexandre Bounine <alexandre.bounine@idt.com> | 2010-10-27 18:34:32 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-27 21:03:16 -0400 |
commit | e274e0ed0a2ac31d5eaf7c891e4e1d99197517b2 (patch) | |
tree | cae2c7911b21f8ddbf52ee4fdef6673997240529 /drivers/rapidio/rio-scan.c | |
parent | 6429cd49f45450cd77a57b70b0dfa98fe2794da0 (diff) |
rapidio: add device access check into the enumeration
Add explicit device access check before performing device enumeration.
This gives a chance to clear possible link error conditions by issuing
safe maintenance read request(s).
Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
Cc: Thomas Moll <thomas.moll@sysgo.com>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Li Yang <leoli@freescale.com>
Cc: Kumar Gala <galak@kernel.crashing.org>
Cc: Micha Nelissen <micha@neli.hopto.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rapidio/rio-scan.c')
-rw-r--r-- | drivers/rapidio/rio-scan.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/rapidio/rio-scan.c b/drivers/rapidio/rio-scan.c index d2ea01872d6a..e3efdf93df5a 100644 --- a/drivers/rapidio/rio-scan.c +++ b/drivers/rapidio/rio-scan.c | |||
@@ -762,6 +762,12 @@ static int __devinit rio_enum_peer(struct rio_net *net, struct rio_mport *port, | |||
762 | u16 destid; | 762 | u16 destid; |
763 | int tmp; | 763 | int tmp; |
764 | 764 | ||
765 | if (rio_mport_chk_dev_access(port, | ||
766 | RIO_ANY_DESTID(port->sys_size), hopcount)) { | ||
767 | pr_debug("RIO: device access check failed\n"); | ||
768 | return -1; | ||
769 | } | ||
770 | |||
765 | if (rio_get_host_deviceid_lock(port, hopcount) == port->host_deviceid) { | 771 | if (rio_get_host_deviceid_lock(port, hopcount) == port->host_deviceid) { |
766 | pr_debug("RIO: PE already discovered by this host\n"); | 772 | pr_debug("RIO: PE already discovered by this host\n"); |
767 | /* | 773 | /* |