diff options
author | Toomas Soome <tsoome@me.com> | 2020-01-01 14:02:21 +0200 |
---|---|---|
committer | John Levon <john.levon@joyent.com> | 2020-05-07 10:30:55 +0000 |
commit | 8b060f27d51443a3976a23084f8009f35610b60a (patch) | |
tree | 7e7971fb9461ae42eab48a0d89a65c7de157424e | |
parent | 480524e999ecc44012be28e9d4a70c8d47e98dbf (diff) | |
download | illumos-joyent-8b060f27d51443a3976a23084f8009f35610b60a.tar.gz |
iwn: variable may be used uninitialized
../../common/io/iwn/if_iwn.c: In function 'iwn_fatal_intr':
../../common/io/iwn/if_iwn.c:3247:6: error: converting a packed 'struct iwn_fw_dump' pointer (alignment 1) to a 'uint32_t' {aka 'unsigned int'} pointer (alignment 4) may result in an unaligned pointer value [-Werror=address-of-packed-member]
3247 | sizeof (dump) / sizeof (uint32_t));
| ^~~~~~
In file included from ../../common/io/iwn/if_iwn.c:77:
../../common/io/iwn/if_iwnreg.h:1464:8: note: defined here
1464 | struct iwn_fw_dump {
| ^~~~~~~~~~~
cc1: all warnings being treated as errors
Change-Id: Iad2c207cdf95627b6b07bd8e9895ecff85f8127e
-rw-r--r-- | usr/src/uts/common/io/iwn/if_iwn.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/usr/src/uts/common/io/iwn/if_iwn.c b/usr/src/uts/common/io/iwn/if_iwn.c index 8c55f2d7ad..b5611c0a91 100644 --- a/usr/src/uts/common/io/iwn/if_iwn.c +++ b/usr/src/uts/common/io/iwn/if_iwn.c @@ -3222,7 +3222,9 @@ iwn_wakeup_intr(struct iwn_softc *sc) static void iwn_fatal_intr(struct iwn_softc *sc) { - struct iwn_fw_dump dump; + struct iwn_fw_dump *dump; + uint32_t buf[P2ROUNDUP(sizeof (*dump), sizeof (uint32_t)) / + sizeof (uint32_t)]; int i; /* Force a complete recalibration on next init. */ @@ -3242,31 +3244,30 @@ iwn_fatal_intr(struct iwn_softc *sc) return; } /* Read firmware error log from SRAM. */ -#pragma GCC diagnostic ignored "-Waddress-of-packed-member" - iwn_mem_read_region_4(sc, sc->errptr, (uint32_t *)&dump, - sizeof (dump) / sizeof (uint32_t)); + dump = (struct iwn_fw_dump *)buf; + iwn_mem_read_region_4(sc, sc->errptr, buf, sizeof (buf)); iwn_nic_unlock(sc); - if (dump.valid == 0) { + if (dump->valid == 0) { dev_err(sc->sc_dip, CE_WARN, "!firmware error log is empty"); return; } dev_err(sc->sc_dip, CE_WARN, "!firmware error log:"); dev_err(sc->sc_dip, CE_CONT, "! error type = \"%s\" (0x%08X)", - (dump.id < __arraycount(iwn_fw_errmsg)) ? - iwn_fw_errmsg[dump.id] : "UNKNOWN", - dump.id); - dev_err(sc->sc_dip, CE_CONT, "! program counter = 0x%08X", dump.pc); + (dump->id < __arraycount(iwn_fw_errmsg)) ? + iwn_fw_errmsg[dump->id] : "UNKNOWN", + dump->id); + dev_err(sc->sc_dip, CE_CONT, "! program counter = 0x%08X", dump->pc); dev_err(sc->sc_dip, CE_CONT, "! source line = 0x%08X", - dump.src_line); + dump->src_line); dev_err(sc->sc_dip, CE_CONT, "! error data = 0x%08X%08X", - dump.error_data[0], dump.error_data[1]); + dump->error_data[0], dump->error_data[1]); dev_err(sc->sc_dip, CE_CONT, "! branch link = 0x%08X%08X", - dump.branch_link[0], dump.branch_link[1]); + dump->branch_link[0], dump->branch_link[1]); dev_err(sc->sc_dip, CE_CONT, "! interrupt link = 0x%08X%08X", - dump.interrupt_link[0], dump.interrupt_link[1]); - dev_err(sc->sc_dip, CE_CONT, "! time = %u", dump.time[0]); + dump->interrupt_link[0], dump->interrupt_link[1]); + dev_err(sc->sc_dip, CE_CONT, "! time = %u", dump->time[0]); /* Dump driver status (TX and RX rings) while we're here. */ dev_err(sc->sc_dip, CE_WARN, "!driver status:"); |