i40e_driver_string, i40e_driver_version_str);
        pr_info("%s: %s\n", i40e_driver_name, i40e_copyright);
 
-       /* we will see if single thread per module is enough for now,
-        * it can't be any worse than using the system workqueue which
-        * was already single threaded
+       /* There is no need to throttle the number of active tasks because
+        * each device limits its own task using a state bit for scheduling
+        * the service task, and the device tasks do not interfere with each
+        * other, so we don't set a max task limit. We must set WQ_MEM_RECLAIM
+        * since we need to be able to guarantee forward progress even under
+        * memory pressure.
         */
-       i40e_wq = alloc_workqueue("%s", WQ_UNBOUND | WQ_MEM_RECLAIM, 1,
-                                 i40e_driver_name);
+       i40e_wq = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0, i40e_driver_name);
        if (!i40e_wq) {
                pr_err("%s: Failed to create workqueue\n", i40e_driver_name);
                return -ENOMEM;