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: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
68c64d2034
commit
4bd9b0fffb
|
@ -434,7 +434,6 @@ struct cnic_eth_dev *bnx2_cnic_probe(struct net_device *dev)
|
||||||
|
|
||||||
return cp;
|
return cp;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(bnx2_cnic_probe);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bnx2_cnic_stop(struct bnx2 *bp)
|
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 =
|
bp->cnic_eth_dev.max_iscsi_conn =
|
||||||
(bnx2_shmem_rd(bp, BNX2_ISCSI_MAX_CONN) &
|
(bnx2_shmem_rd(bp, BNX2_ISCSI_MAX_CONN) &
|
||||||
BNX2_ISCSI_MAX_CONN_MASK) >> BNX2_ISCSI_MAX_CONN_SHIFT;
|
BNX2_ISCSI_MAX_CONN_MASK) >> BNX2_ISCSI_MAX_CONN_SHIFT;
|
||||||
|
bp->cnic_probe = bnx2_cnic_probe;
|
||||||
#endif
|
#endif
|
||||||
pci_save_state(pdev);
|
pci_save_state(pdev);
|
||||||
|
|
||||||
|
|
|
@ -6984,6 +6984,7 @@ struct bnx2 {
|
||||||
#ifdef BCM_CNIC
|
#ifdef BCM_CNIC
|
||||||
struct mutex cnic_lock;
|
struct mutex cnic_lock;
|
||||||
struct cnic_eth_dev cnic_eth_dev;
|
struct cnic_eth_dev cnic_eth_dev;
|
||||||
|
struct cnic_eth_dev *(*cnic_probe)(struct net_device *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const struct firmware *mips_firmware;
|
const struct firmware *mips_firmware;
|
||||||
|
|
|
@ -1337,6 +1337,7 @@ struct bnx2x {
|
||||||
u8 cnic_support;
|
u8 cnic_support;
|
||||||
bool cnic_enabled;
|
bool cnic_enabled;
|
||||||
bool cnic_loaded;
|
bool cnic_loaded;
|
||||||
|
struct cnic_eth_dev *(*cnic_probe)(struct net_device *);
|
||||||
|
|
||||||
/* Flag that indicates that we can start looking for FCoE L2 queue
|
/* Flag that indicates that we can start looking for FCoE L2 queue
|
||||||
* completions in the default status block.
|
* completions in the default status block.
|
||||||
|
|
|
@ -12018,6 +12018,8 @@ static int bnx2x_get_num_non_def_sbs(struct pci_dev *pdev,
|
||||||
return control & PCI_MSIX_FLAGS_QSIZE;
|
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,
|
static int bnx2x_init_one(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *ent)
|
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->igu_sb_cnt = max_non_def_sbs;
|
||||||
bp->msg_enable = debug;
|
bp->msg_enable = debug;
|
||||||
bp->cnic_support = cnic_cnt;
|
bp->cnic_support = cnic_cnt;
|
||||||
|
bp->cnic_probe = bnx2x_cnic_probe;
|
||||||
|
|
||||||
pci_set_drvdata(pdev, dev);
|
pci_set_drvdata(pdev, dev);
|
||||||
|
|
||||||
|
@ -13038,6 +13041,5 @@ struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev)
|
||||||
cp->starting_cid);
|
cp->starting_cid);
|
||||||
return cp;
|
return cp;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(bnx2x_cnic_probe);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include <net/ip6_checksum.h>
|
#include <net/ip6_checksum.h>
|
||||||
#include <scsi/iscsi_if.h>
|
#include <scsi/iscsi_if.h>
|
||||||
|
|
||||||
|
#define BCM_CNIC 1
|
||||||
#include "cnic_if.h"
|
#include "cnic_if.h"
|
||||||
#include "bnx2.h"
|
#include "bnx2.h"
|
||||||
#include "bnx2x/bnx2x.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 pci_dev *pdev;
|
||||||
struct cnic_dev *cdev;
|
struct cnic_dev *cdev;
|
||||||
struct cnic_local *cp;
|
struct cnic_local *cp;
|
||||||
|
struct bnx2 *bp = netdev_priv(dev);
|
||||||
struct cnic_eth_dev *ethdev = NULL;
|
struct cnic_eth_dev *ethdev = NULL;
|
||||||
struct cnic_eth_dev *(*probe)(struct net_device *) = NULL;
|
|
||||||
|
|
||||||
probe = symbol_get(bnx2_cnic_probe);
|
if (bp->cnic_probe)
|
||||||
if (probe) {
|
ethdev = (bp->cnic_probe)(dev);
|
||||||
ethdev = (*probe)(dev);
|
|
||||||
symbol_put(bnx2_cnic_probe);
|
|
||||||
}
|
|
||||||
if (!ethdev)
|
if (!ethdev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -5511,14 +5510,12 @@ static struct cnic_dev *init_bnx2x_cnic(struct net_device *dev)
|
||||||
struct pci_dev *pdev;
|
struct pci_dev *pdev;
|
||||||
struct cnic_dev *cdev;
|
struct cnic_dev *cdev;
|
||||||
struct cnic_local *cp;
|
struct cnic_local *cp;
|
||||||
|
struct bnx2x *bp = netdev_priv(dev);
|
||||||
struct cnic_eth_dev *ethdev = NULL;
|
struct cnic_eth_dev *ethdev = NULL;
|
||||||
struct cnic_eth_dev *(*probe)(struct net_device *) = NULL;
|
|
||||||
|
|
||||||
probe = symbol_get(bnx2x_cnic_probe);
|
if (bp->cnic_probe)
|
||||||
if (probe) {
|
ethdev = bp->cnic_probe(dev);
|
||||||
ethdev = (*probe)(dev);
|
|
||||||
symbol_put(bnx2x_cnic_probe);
|
|
||||||
}
|
|
||||||
if (!ethdev)
|
if (!ethdev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
#include "bnx2x/bnx2x_mfw_req.h"
|
#include "bnx2x/bnx2x_mfw_req.h"
|
||||||
|
|
||||||
#define CNIC_MODULE_VERSION "2.5.15"
|
#define CNIC_MODULE_VERSION "2.5.16"
|
||||||
#define CNIC_MODULE_RELDATE "Dec 04, 2012"
|
#define CNIC_MODULE_RELDATE "Dec 05, 2012"
|
||||||
|
|
||||||
#define CNIC_ULP_RDMA 0
|
#define CNIC_ULP_RDMA 0
|
||||||
#define CNIC_ULP_ISCSI 1
|
#define CNIC_ULP_ISCSI 1
|
||||||
|
@ -353,7 +353,4 @@ extern int cnic_register_driver(int ulp_type, struct cnic_ulp_ops *ulp_ops);
|
||||||
|
|
||||||
extern int cnic_unregister_driver(int ulp_type);
|
extern int cnic_unregister_driver(int ulp_type);
|
||||||
|
|
||||||
extern struct cnic_eth_dev *bnx2_cnic_probe(struct net_device *dev);
|
|
||||||
extern struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue