[PATCH v4 0/8] staging: qlge: Re-writing the debugging features

Coiby Xu coiby.xu at gmail.com
Sat Jan 23 10:46:05 UTC 2021


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



More information about the devel mailing list