Hello,
I too have a server (Dell R720xd) with a BCM57800 NIC.

I too am getting the message:
 WARNING: at
/build/linux-s5x2oE/linux-3.2.46/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:8886
bnx2x_init_one+0xdc8/0x2b5d [bnx2x]()

I have 3 things to add from my investigation so far:
(1) This is probably a bug against the Linux source package and not the
bnx2x firmware package...  I may try to reassign the bug in the following
days.

(2) I managed to get the broadcom provided driver to compile:
I downloaded linux-7.6.62.zip from:
http://www.broadcom.com/support/ethernet_nic/netxtremeii10.php
Unzipped the zip and then found and unpacked netxtreme2-7.6.62.tar.gz
therein.
in the resulting directory: Server/Linux/Driver/netxtreme2-7.6.62/bnx2x/src
I found that I had to patch bnx2x_compat.h as follows:
-----------------------------------------------------
--- bnx2x_compat.h.orig    2013-03-13 00:30:56.000000000 +0000
+++ bnx2x_compat.h    2013-07-27 20:09:00.000000000 +0100
@@ -1621,11 +1621,11 @@
     return index % n_rx_rings;
 }
 #endif
-static inline void netdev_tx_completed_queue(struct netdev_queue *q,
-                        unsigned int a, unsigned int b) { }
-static inline void netdev_tx_reset_queue(struct netdev_queue *q) { }
-static inline void netdev_tx_sent_queue(struct netdev_queue *q,
-                    unsigned int len) { }
+//static inline void netdev_tx_completed_queue(struct netdev_queue *q,
+//                        unsigned int a, unsigned int b) { }
+//static inline void netdev_tx_reset_queue(struct netdev_queue *q) { }
+//static inline void netdev_tx_sent_queue(struct netdev_queue *q,
+//                    unsigned int len) { }
 #endif

 #ifndef eth_hw_addr_random
-----------------------------------------------------

Then I could just use make to compile up a new apparently working bnx2x.ko

I have used this in the debian installer to network install the machine...
but have not tested any more than that!

(3)
Looking at the error message it appears to be complaining in the function:
bnx2x_init_one

Comparing these between the debian source and the broadcom source shows
there has been lots of changes!! BUT there are 2 that stick out:
(a)  early on in the function:
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 23)) /* BNX2X_UPSTREAM */
+       /*
+        * The workaround will allow to HW properly handle the cases
+        * when device was not closed but started initialization process.
+        * This delay will cause to reset only the functions that belong
+        * to this OS in virtualized environment and also properly suits
+        * MF-modes.
+        */
+       if (reset_devices)
+               msleep(5000);
+#endif

may be interesting... but also:

(b)
-       max_non_def_sbs = bnx2x_get_num_non_def_sbs(pdev);
-
-       /* !!! FIXME !!!
-        * Do not allow the maximum SB count to grow above 16
-        * since Special CIDs starts from 16*BNX2X_MULTI_TX_COS=48.
-        * We will use the FP_SB_MAX_E1x macro for this matter.
-        */
-       max_non_def_sbs = min_t(int, FP_SB_MAX_E1x, max_non_def_sbs);
+       max_cos_est = set_max_cos_est(ent->driver_data);
+       if (max_cos_est < 0)
+               return max_cos_est;
+       is_vf = set_is_vf(ent->driver_data);
+#if (LINUX_VERSION_CODE >= 0x020610) /* BNX2X_UPSTREAM */
+       cnic_cnt = is_vf ? 0 : 1;
+#else
+       cnic_cnt = 0;
+#endif

-       WARN_ON(!max_non_def_sbs);
+       max_non_def_sbs = bnx2x_get_num_non_def_sbs(pdev, cnic_cnt, is_vf);

        /* Maximum number of RSS queues: one IGU SB goes to CNIC */
-       rss_count = max_non_def_sbs - CNIC_PRESENT;
+       rss_count = max_non_def_sbs - cnic_cnt;
+
+       if (rss_count < 1)
+               return -EINVAL;


This WARN which is "removed" may have been  the source of the warning
message in the dmesg output... so may focus a kernel expert  on finding a
minimal patch to fix the debian kernel!

That is all I have time for right now.
Alex Owen

Reply via email to