Commit 953b9400 authored by Coiby Xu's avatar Coiby Xu Committed by Greg Kroah-Hartman
Browse files

staging: qlge: Initialize devlink health dump framework



Initialize devlink health dump framework for the qlge driver so the
coredump could be done via devlink.

struct qlge_adapter is now used as the private data structure of
struct devlink so it could exist independently of struct net_device
and devlink reload could be supported in the future. The private data
of PCIe driver now points to qlge_adapter.

Since devlink_alloc will zero out struct qlge_adapter, memset in
qlge_init_device is not necessary.

Signed-off-by: default avatarCoiby Xu <coiby.xu@gmail.com>
Link: https://lore.kernel.org/r/20210123104613.38359-3-coiby.xu@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f8c047be
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
config QLGE
	tristate "QLogic QLGE 10Gb Ethernet Driver Support"
	depends on ETHERNET && PCI
	select NET_DEVLINK
	help
	This driver supports QLogic ISP8XXX 10Gb Ethernet cards.

+1 −1
Original line number Diff line number Diff line
@@ -5,4 +5,4 @@

obj-$(CONFIG_QLGE) += qlge.o

qlge-objs := qlge_main.o qlge_dbg.o qlge_mpi.o qlge_ethtool.o
qlge-objs := qlge_main.o qlge_dbg.o qlge_mpi.o qlge_ethtool.o qlge_devlink.o
+13 −0
Original line number Diff line number Diff line
@@ -2060,6 +2060,18 @@ struct nic_operations {
	int (*port_initialize)(struct qlge_adapter *qdev);
};

struct qlge_netdev_priv {
	struct qlge_adapter *qdev;
	struct net_device *ndev;
};

static inline
struct qlge_adapter *netdev_to_qdev(struct net_device *ndev)
{
	struct qlge_netdev_priv *ndev_priv = netdev_priv(ndev);

	return ndev_priv->qdev;
}
/*
 * The main Adapter structure definition.
 * This structure has all fields relevant to the hardware.
@@ -2077,6 +2089,7 @@ struct qlge_adapter {
	struct pci_dev *pdev;
	struct net_device *ndev;	/* Parent NET device */

	struct devlink_health_reporter *reporter;
	/* Hardware information */
	u32 chip_rev_id;
	u32 fw_rev_id;
+31 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-or-later
#include "qlge.h"
#include "qlge_devlink.h"

static int
qlge_reporter_coredump(struct devlink_health_reporter *reporter,
		       struct devlink_fmsg *fmsg, void *priv_ctx,
		       struct netlink_ext_ack *extack)
{
	return 0;
}

static const struct devlink_health_reporter_ops qlge_reporter_ops = {
	.name = "dummy",
	.dump = qlge_reporter_coredump,
};

void qlge_health_create_reporters(struct qlge_adapter *priv)
{
	struct devlink_health_reporter *reporter;
	struct devlink *devlink;

	devlink = priv_to_devlink(priv);
	priv->reporter =
		devlink_health_reporter_create(devlink, &qlge_reporter_ops,
					       0, priv);
	if (IS_ERR(priv->reporter))
		netdev_warn(priv->ndev,
			    "Failed to create reporter, err = %ld\n",
			    PTR_ERR(reporter));
}
+9 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef QLGE_DEVLINK_H
#define QLGE_DEVLINK_H

#include <net/devlink.h>

void qlge_health_create_reporters(struct qlge_adapter *priv);

#endif /* QLGE_DEVLINK_H */
Loading