Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4bd9b0ff authored by Michael Chan's avatar Michael Chan Committed by David S. Miller
Browse files

cnic, bnx2x, bnx2: Simplify cnic probing.



Instead of using symbol_get(), cnic can now directly call the cnic_probe
functions in struct bnx2x and struct bnx2.  symbol_get() is not reliable
as it fails when the module is still initializing.

Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 68c64d20
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -434,7 +434,6 @@ struct cnic_eth_dev *bnx2_cnic_probe(struct net_device *dev)

	return cp;
}
EXPORT_SYMBOL(bnx2_cnic_probe);

static void
bnx2_cnic_stop(struct bnx2 *bp)
@@ -8422,6 +8421,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
		bp->cnic_eth_dev.max_iscsi_conn =
			(bnx2_shmem_rd(bp, BNX2_ISCSI_MAX_CONN) &
			 BNX2_ISCSI_MAX_CONN_MASK) >> BNX2_ISCSI_MAX_CONN_SHIFT;
	bp->cnic_probe = bnx2_cnic_probe;
#endif
	pci_save_state(pdev);

+1 −0
Original line number Diff line number Diff line
@@ -6984,6 +6984,7 @@ struct bnx2 {
#ifdef BCM_CNIC
	struct mutex		cnic_lock;
	struct cnic_eth_dev	cnic_eth_dev;
	struct cnic_eth_dev	*(*cnic_probe)(struct net_device *);
#endif

	const struct firmware	*mips_firmware;
+1 −0
Original line number Diff line number Diff line
@@ -1337,6 +1337,7 @@ struct bnx2x {
	u8			cnic_support;
	bool			cnic_enabled;
	bool			cnic_loaded;
	struct cnic_eth_dev	*(*cnic_probe)(struct net_device *);

	/* Flag that indicates that we can start looking for FCoE L2 queue
	 * completions in the default status block.
+3 −1
Original line number Diff line number Diff line
@@ -12018,6 +12018,8 @@ static int bnx2x_get_num_non_def_sbs(struct pci_dev *pdev,
	return control & PCI_MSIX_FLAGS_QSIZE;
}

struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *);

static int bnx2x_init_one(struct pci_dev *pdev,
				    const struct pci_device_id *ent)
{
@@ -12097,6 +12099,7 @@ static int bnx2x_init_one(struct pci_dev *pdev,
	bp->igu_sb_cnt = max_non_def_sbs;
	bp->msg_enable = debug;
	bp->cnic_support = cnic_cnt;
	bp->cnic_probe = bnx2x_cnic_probe;

	pci_set_drvdata(pdev, dev);

@@ -13038,6 +13041,5 @@ struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev)
	   cp->starting_cid);
	return cp;
}
EXPORT_SYMBOL(bnx2x_cnic_probe);

+9 −12
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@
#include <net/ip6_checksum.h>
#include <scsi/iscsi_if.h>

#define BCM_CNIC	1
#include "cnic_if.h"
#include "bnx2.h"
#include "bnx2x/bnx2x.h"
@@ -5449,14 +5450,12 @@ static struct cnic_dev *init_bnx2_cnic(struct net_device *dev)
	struct pci_dev *pdev;
	struct cnic_dev *cdev;
	struct cnic_local *cp;
	struct bnx2 *bp = netdev_priv(dev);
	struct cnic_eth_dev *ethdev = NULL;
	struct cnic_eth_dev *(*probe)(struct net_device *) = NULL;

	probe = symbol_get(bnx2_cnic_probe);
	if (probe) {
		ethdev = (*probe)(dev);
		symbol_put(bnx2_cnic_probe);
	}
	if (bp->cnic_probe)
		ethdev = (bp->cnic_probe)(dev);

	if (!ethdev)
		return NULL;

@@ -5511,14 +5510,12 @@ static struct cnic_dev *init_bnx2x_cnic(struct net_device *dev)
	struct pci_dev *pdev;
	struct cnic_dev *cdev;
	struct cnic_local *cp;
	struct bnx2x *bp = netdev_priv(dev);
	struct cnic_eth_dev *ethdev = NULL;
	struct cnic_eth_dev *(*probe)(struct net_device *) = NULL;

	probe = symbol_get(bnx2x_cnic_probe);
	if (probe) {
		ethdev = (*probe)(dev);
		symbol_put(bnx2x_cnic_probe);
	}
	if (bp->cnic_probe)
		ethdev = bp->cnic_probe(dev);

	if (!ethdev)
		return NULL;

Loading