This patch set aims to avoid dumping registers, data structures and coredump to dmesg and also to reduce the code size of the qlge driver. As pointed out by Benjamin [1], > At 2000 lines, qlge_dbg.c alone is larger than some entire ethernet > drivers. Most of what it does is dump kernel data structures or pci > memory mapped registers to dmesg. There are better facilities for that. > My thinking is not simply to delete qlge_dbg.c but to replace it, making > sure that most of the same information is still available. For data > structures, crash or drgn can be used; possibly with a script for the > latter which formats the data. For pci registers, they should be > included in the ethtool register dump and a patch added to ethtool to > pretty print them. That's what other drivers like e1000e do. For the > "coredump", devlink health can be used. So the debugging features are re-written following Benjamin's advice, - dump kernel data structures in drgn - use devlink to do coredump which also includes device status and general registers For the usage examples of supported devlink commands, please check the last patch. The tests have been done successfully following Shung-Hsi's steps[2] on a machine from Red Hat, - build the kernel and this driver with KASAN, UBSAN, DEBUG_ATOMIC_SLEEP, PROVE_LOCKING and DEBUG_KMEMLEAK enabled - load and unload the driver - devlink health dump [1] https://lkml.org/lkml/2020/6/30/19 [2] https://lore.kernel.org/netdev/20200816025717.GA28176@f3/T/ v3 -> v4 - remove unnecessary memeset in qlge_init_device [Shung-Hsi Yu] - Call qlge_soft_reset_mpi_risc after getting coredump - only allow force_coredump for NIC function that owns the firmware v2 -> v3 - Fix newly introduced resource leak [Dan Carpenter] - Fix bugs after using struct qlge_adapter as the private data struct of devlink - Add qlge_ prefix for structures not having a prefix and fix a left-over ql_adapter [Benjamin Poirier] v1 -> v2 - Call devlink_free when register_netdev fails [Willem de Bruijn] - "scripts/checkpatch.pl --strict" for changes [Dan Carpente] - Declares variables in "Reverse Christmas Tree" [Dan Carpente] - Use the sizeof() directly [Dan Carpente] - Add SPDX-License-Identifier to qlge_devlink.{c,h} - Rename ql_* to qlge_* [Benjamin Poirier] - Update drivers/staging/qlge/TODO [Benjamin Poirier] - struct qlge_adapter is now used as the private data struct of devlink instead of net_device [Benjamin Poirier] RFC -> v1 - select NET_DEVLINK in Kconfig [Benjamin Poirier] - Don't do a coredump when the interface is down [Shung-Hsi Yu] - Remove stray newlines [Benjamin Poirier] - force_coredump for devlink - Remove mpi_core_to_log which will output the coredump to the kernel ring buffer - Put drgn script under Documentation [Benjamin Poirier] - Rename qlge_health.* to qlge_devlink.* Coiby Xu (8): staging: qlge: use qlge_* prefix to avoid namespace clashes with other qlogic drivers staging: qlge: Initialize devlink health dump framework staging: qlge: re-write qlge_init_device staging: qlge: coredump via devlink health reporter staging: qlge: support force_coredump option for devlink health dump staging: qlge: remove mpi_core_to_log which sends coredump to the kernel ring buffer staging: qlge: clean up debugging code in the QL_ALL_DUMP ifdef land staging: qlge: add documentation for debugging qlge .../networking/device_drivers/index.rst | 1 + .../device_drivers/qlogic/index.rst | 18 + .../networking/device_drivers/qlogic/qlge.rst | 118 ++ MAINTAINERS | 6 + drivers/staging/qlge/Kconfig | 1 + drivers/staging/qlge/Makefile | 2 +- drivers/staging/qlge/TODO | 10 - drivers/staging/qlge/qlge.h | 244 +-- drivers/staging/qlge/qlge_dbg.c | 1650 +++++------------ drivers/staging/qlge/qlge_devlink.c | 164 ++ drivers/staging/qlge/qlge_devlink.h | 9 + drivers/staging/qlge/qlge_ethtool.c | 233 ++- drivers/staging/qlge/qlge_main.c | 1376 +++++++------- drivers/staging/qlge/qlge_mpi.c | 356 ++-- 14 files changed, 1873 insertions(+), 2315 deletions(-) create mode 100644 Documentation/networking/device_drivers/qlogic/index.rst create mode 100644 Documentation/networking/device_drivers/qlogic/qlge.rst create mode 100644 drivers/staging/qlge/qlge_devlink.c create mode 100644 drivers/staging/qlge/qlge_devlink.h -- 2.29.2 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel