LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

но как переключиться на WQ_UNBOUND - непонятно, как это сделать то? :)

Ну, ты всегда можешь попробовать сделать

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 02255795b800..331ba1b24881 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -2211,7 +2211,7 @@ static int acpi_ec_init_workqueues(void)
 		ec_wq = alloc_ordered_workqueue("kec", 0);
 
 	if (!ec_query_wq)
-		ec_query_wq = alloc_workqueue("kec_query", 0, ec_max_queries);
+		ec_query_wq = alloc_workqueue("kec_query", WQ_UNBOUND, ec_max_queries);
 
 	if (!ec_wq || !ec_query_wq) {
 		acpi_ec_destroy_workqueues();

Но скорее всего не взлетит. А так можно начать с переписывания acpica, она cpu-bound наверняка не просто так :^)

Исходная версия intelfx, :

но как переключиться на WQ_UNBOUND - непонятно, как это сделать то? :)

Ну, ты всегда можешь попробовать сделать

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 02255795b800..3061f7118ec0 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -14,6 +14,7 @@
 
 /* Uncomment next line to get verbose printout */
 /* #define DEBUG */
+#include "linux/workqueue.h"
 #define pr_fmt(fmt) "ACPI: EC: " fmt
 
 #include <linux/kernel.h>
@@ -2211,7 +2212,7 @@ static int acpi_ec_init_workqueues(void)
 		ec_wq = alloc_ordered_workqueue("kec", 0);
 
 	if (!ec_query_wq)
-		ec_query_wq = alloc_workqueue("kec_query", 0, ec_max_queries);
+		ec_query_wq = alloc_workqueue("kec_query", WQ_UNBOUND, ec_max_queries);
 
 	if (!ec_wq || !ec_query_wq) {
 		acpi_ec_destroy_workqueues();

Но скорее всего не взлетит. А так можно начать с переписывания acpica, она cpu-bound наверняка не просто так :^)