[PATCH] Re: How to completely disable async fastboot?

From: Jeff Garzik
Date: Wed Apr 15 2009 - 21:48:35 EST


Arjan van de Ven wrote:
On Wed, 15 Apr 2009 20:20:32 -0400
Jeff Garzik <jeff@xxxxxxxxxx> wrote:

The following commit

commit 9710794383ee5008d67f1a6613a4717bf6de47bc
Author: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx>
Date: Sun Mar 15 11:11:44 2009 -0700

async: remove the temporary (2.6.29) "async is off by default"
code
not only changes a default, it completely removes the ability to turn off async AFAICS.

this is on the request of Andrew and others who want to be able to use
these API's (soon) in an "forced offload" scenario.

At present, I need to turn this off to debug boot-time operation.

can you give some details? Maybe I can help suggest things...

Too much shit is occurring in parallel, which completely obscures the operation of the driver I am currently debugging. A new and unwelcome behavior, as it is directly impacting workflow.

Commit 9710794383ee5008d67f1a6613a4717bf6de47bc was fine for the normal case, but please have pity on developers! Just like many multi-threaded userland programs have an option to run single-threaded (usually for debug purposes), the kernel should have this too.

I need a slowboot option, like the attached patch.

The patch is basically the reverse of your 9710794383ee5008d67f1a6613a4717bf6de47bc in a different way.

Jeff



diff --git a/kernel/async.c b/kernel/async.c
index 968ef94..8c553ce 100644
--- a/kernel/async.c
+++ b/kernel/async.c
@@ -68,6 +68,7 @@ static LIST_HEAD(async_running);
static DEFINE_SPINLOCK(async_lock);

static int async_enabled = 0;
+static int async_disabled;

struct async_entry {
struct list_head list;
@@ -388,6 +389,11 @@ static int async_manager_thread(void *unused)

static int __init async_init(void)
{
+ if (async_disabled) {
+ async_enabled = 0;
+ return 0;
+ }
+
async_enabled =
!IS_ERR(kthread_run(async_manager_thread, NULL, "async/mgr"));

@@ -395,4 +401,12 @@ static int __init async_init(void)
return 0;
}

+static int __init setup_async(char *str)
+{
+ async_disabled = 1;
+ return 1;
+}
+
+__setup("slowboot", setup_async);
+
core_initcall(async_init);