diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-15 21:07:59 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-15 21:07:59 -0400 |
commit | 84c3d4aaec3338201b449034beac41635866bddf (patch) | |
tree | 3412951682fb2dd4feb8a5532f8efbaf8b345933 /drivers/net/myri10ge/myri10ge.c | |
parent | 43d2548bb2ef7e6d753f91468a746784041e522d (diff) | |
parent | fafa3a3f16723997f039a0193997464d66dafd8f (diff) |
Merge commit 'origin/master'
Manual merge of:
arch/powerpc/Kconfig
arch/powerpc/kernel/stacktrace.c
arch/powerpc/mm/slice.c
arch/ppc/kernel/smp.c
Diffstat (limited to 'drivers/net/myri10ge/myri10ge.c')
-rw-r--r-- | drivers/net/myri10ge/myri10ge.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index e0d76c75aea0..823bb6d35334 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
@@ -529,6 +529,7 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size) | |||
529 | unsigned crc, reread_crc; | 529 | unsigned crc, reread_crc; |
530 | const struct firmware *fw; | 530 | const struct firmware *fw; |
531 | struct device *dev = &mgp->pdev->dev; | 531 | struct device *dev = &mgp->pdev->dev; |
532 | unsigned char *fw_readback; | ||
532 | struct mcp_gen_header *hdr; | 533 | struct mcp_gen_header *hdr; |
533 | size_t hdr_offset; | 534 | size_t hdr_offset; |
534 | int status; | 535 | int status; |
@@ -571,9 +572,15 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size) | |||
571 | mb(); | 572 | mb(); |
572 | readb(mgp->sram); | 573 | readb(mgp->sram); |
573 | } | 574 | } |
575 | fw_readback = vmalloc(fw->size); | ||
576 | if (!fw_readback) { | ||
577 | status = -ENOMEM; | ||
578 | goto abort_with_fw; | ||
579 | } | ||
574 | /* corruption checking is good for parity recovery and buggy chipset */ | 580 | /* corruption checking is good for parity recovery and buggy chipset */ |
575 | memcpy_fromio(fw->data, mgp->sram + MYRI10GE_FW_OFFSET, fw->size); | 581 | memcpy_fromio(fw_readback, mgp->sram + MYRI10GE_FW_OFFSET, fw->size); |
576 | reread_crc = crc32(~0, fw->data, fw->size); | 582 | reread_crc = crc32(~0, fw_readback, fw->size); |
583 | vfree(fw_readback); | ||
577 | if (crc != reread_crc) { | 584 | if (crc != reread_crc) { |
578 | dev_err(dev, "CRC failed(fw-len=%u), got 0x%x (expect 0x%x)\n", | 585 | dev_err(dev, "CRC failed(fw-len=%u), got 0x%x (expect 0x%x)\n", |
579 | (unsigned)fw->size, reread_crc, crc); | 586 | (unsigned)fw->size, reread_crc, crc); |