enic: reconfigure resources for kdump crash kernel
[cascardo/linux.git] / drivers / net / ethernet / cisco / enic / enic_main.c
index 142c9b5..9027fc1 100644 (file)
@@ -45,6 +45,7 @@
 #ifdef CONFIG_NET_RX_BUSY_POLL
 #include <net/busy_poll.h>
 #endif
+#include <linux/crash_dump.h>
 
 #include "cq_enet_desc.h"
 #include "vnic_dev.h"
@@ -2265,6 +2266,18 @@ static void enic_dev_deinit(struct enic *enic)
        enic_clear_intr_mode(enic);
 }
 
+static void enic_kdump_kernel_config(struct enic *enic)
+{
+       if (is_kdump_kernel()) {
+               dev_info(enic_get_dev(enic), "Running from within kdump kernel. Using minimal resources\n");
+               enic->rq_count = 1;
+               enic->wq_count = 1;
+               enic->config.rq_desc_count = ENIC_MIN_RQ_DESCS;
+               enic->config.wq_desc_count = ENIC_MIN_WQ_DESCS;
+               enic->config.mtu = min_t(u16, 1500, enic->config.mtu);
+       }
+}
+
 static int enic_dev_init(struct enic *enic)
 {
        struct device *dev = enic_get_dev(enic);
@@ -2294,6 +2307,10 @@ static int enic_dev_init(struct enic *enic)
 
        enic_get_res_counts(enic);
 
+       /* modify resource count if we are in kdump_kernel
+        */
+       enic_kdump_kernel_config(enic);
+
        /* Set interrupt mode based on resource counts and system
         * capabilities
         */