git: 9b3e252e59c6 - main - e1000: Lock nvm print sysctl
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 06 Oct 2021 23:23:59 UTC
The branch main has been updated by kbowling (ports committer):
URL: https://cgit.FreeBSD.org/src/commit/?id=9b3e252e59c6e63594fb20e3f65188dab9e1eeff
commit 9b3e252e59c6e63594fb20e3f65188dab9e1eeff
Author: Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2021-10-06 23:20:26 +0000
Commit: Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-10-06 23:20:26 +0000
e1000: Lock nvm print sysctl
Otherwise results in KASSERT with debug kernels because we rely on the
iflib CTX lock to implement the software serialization to the NVM model
Reviewed by: gallatin
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D32333
---
sys/dev/e1000/if_em.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 3153a44000c5..52eff393e848 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -4510,20 +4510,27 @@ em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS)
static void
em_print_nvm_info(struct e1000_softc *sc)
{
+ struct e1000_hw *hw = &sc->hw;
+ struct sx *iflib_ctx_lock = iflib_ctx_lock_get(sc->ctx);
u16 eeprom_data;
int i, j, row = 0;
/* Its a bit crude, but it gets the job done */
printf("\nInterface EEPROM Dump:\n");
printf("Offset\n0x0000 ");
+
+ /* We rely on the IFLIB_CTX_LOCK as part of NVM locking model */
+ sx_xlock(iflib_ctx_lock);
+ ASSERT_CTX_LOCK_HELD(hw);
for (i = 0, j = 0; i < 32; i++, j++) {
if (j == 8) { /* Make the offset block */
j = 0; ++row;
printf("\n0x00%x0 ",row);
}
- e1000_read_nvm(&sc->hw, i, 1, &eeprom_data);
+ e1000_read_nvm(hw, i, 1, &eeprom_data);
printf("%04x ", eeprom_data);
}
+ sx_xunlock(iflib_ctx_lock);
printf("\n");
}