Commit e31c51e4 authored by Martyn Welch's avatar Martyn Welch Committed by Greg Kroah-Hartman

vme: tsi148: Only store VME bus errors if they will be checked

The TSI148 driver provides an optional mechanism for ensuring that errors
resulting from posted transfers are caught whilst still relevant. To do this
errors are stored in a link list. If bus errors are not checked, this list
would grow until available memory had been exhausted.

Only store the errors in a link list if error detection is switched on.
Reported-by: default avatarDe Roo, Steven <steven.deroo@arcelormittal.com>
Signed-off-by: default avatarMartyn Welch <martyn.welch@ge.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f3cbfa5d
...@@ -169,7 +169,7 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge) ...@@ -169,7 +169,7 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge)
unsigned int error_addr_high, error_addr_low; unsigned int error_addr_high, error_addr_low;
unsigned long long error_addr; unsigned long long error_addr;
u32 error_attrib; u32 error_attrib;
struct vme_bus_error *error; struct vme_bus_error *error = NULL;
struct tsi148_driver *bridge; struct tsi148_driver *bridge;
bridge = tsi148_bridge->driver_priv; bridge = tsi148_bridge->driver_priv;
...@@ -186,16 +186,22 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge) ...@@ -186,16 +186,22 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge)
"Occurred\n"); "Occurred\n");
} }
if (err_chk) {
error = kmalloc(sizeof(struct vme_bus_error), GFP_ATOMIC); error = kmalloc(sizeof(struct vme_bus_error), GFP_ATOMIC);
if (error) { if (error) {
error->address = error_addr; error->address = error_addr;
error->attributes = error_attrib; error->attributes = error_attrib;
list_add_tail(&error->list, &tsi148_bridge->vme_errors); list_add_tail(&error->list, &tsi148_bridge->vme_errors);
} else { } else {
dev_err(tsi148_bridge->parent, "Unable to alloc memory for " dev_err(tsi148_bridge->parent,
"VMEbus Error reporting\n"); "Unable to alloc memory for VMEbus Error reporting\n");
dev_err(tsi148_bridge->parent, "VME Bus Error at address: " }
"0x%llx, attributes: %08x\n", error_addr, error_attrib); }
if (!error) {
dev_err(tsi148_bridge->parent,
"VME Bus Error at address: 0x%llx, attributes: %08x\n",
error_addr, error_attrib);
} }
/* Clear Status */ /* Clear Status */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment