Skip to contentSkip to conversation

2.5.1[345]-dj Add cpqarray_init() back into genhd.c

PATCH In review Adam Kropelin 2 participants 5 messages May 14, 2002 Block layer

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 2.5.1[345]-dj Add cpqarray_init() back into genhd.c

In 2.5.13-dj1, the call to cpqarray_init() in drivers/block/genhd.c was dropped. I'm not sure what the intent was since the driver seems to work fine as a module. In case it was a mistake, here's a patch (against 2.5.15-dj1) to add it back in. Without it, cpqarray only works as a module. Works For Me (tm).

--Adam

drivers/block/genhd.c +3 -0
@@ -229,6 +229,9 @@
 	/* This has to be done before scsi_dev_init */
 	soc_probe();
 #endif
+#ifdef CONFIG_BLK_CPQ_DA
+	cpqarray_init();
+#endif
 #ifdef CONFIG_NET
 	net_dev_init();
 #endif
#1 lore raw
Quoted 10 lines · Adam Kropelin

In 2.5.13-dj1, the call to cpqarray_init() in drivers/block/genhd.c was dropped. I'm not sure what the intent was since the driver seems to work fine as a module. In case it was a mistake, here's a patch (against 2.5.15-dj1) to add it back in. Without it, cpqarray only works as a module. Works For Me (tm).

--Adam

drivers/block/genhd.c line 237

Quoted 9 lines
drivers/block/genhd.c +3 -0
@@ -229,6 +229,9 @@
 	/* This has to be done before scsi_dev_init */
 	soc_probe();
 #endif
+#ifdef CONFIG_BLK_CPQ_DA
+	cpqarray_init();
+#endif
 #ifdef CONFIG_NET
 	net_dev_init();
 #endif

The real problem appears to be cpqarray.c, it wraps the init/exit code in #ifdef MODULE, so the init code is only available to modules. I think that cpqarray.c should remove the #ifdef MODULE and use the same init mechanism as other drivers, including module_init/exit. I don't have a card and the code is a mess so I am not going to attempt a patch.

#2 lore raw
In reply to Adam Kropelin
Quoted 4 lines · Keith Owens
Quoted 2 lines · Adam Kropelin

In 2.5.13-dj1, the call to cpqarray_init() in drivers/block/genhd.c was dropped. I'm not sure what the intent was since the driver seems to work fine

<snip>

Quoted 5 lines

The real problem appears to be cpqarray.c, it wraps the init/exit code in #ifdef MODULE, so the init code is only available to modules. I think that cpqarray.c should remove the #ifdef MODULE and use the same init mechanism as other drivers, including module_init/exit. I don't have a card and the code is a mess so I am not going to attempt a patch.

I'm not seeing it. I see init_module() and cleanup_module() wrapped as you say but cpqarray_init() is outside the #ifdef. Also, two versions of cpqarray_setup are provided based on #ifdef MODULE but this doesn't look problematic to me. I'm a newbie, for sure. Am I overlooking something obvious?

--Adam

#3 lore raw
Quoted 11 lines · Adam Kropelin
Quoted 5 lines · Keith Owens

The real problem appears to be cpqarray.c, it wraps the init/exit code in #ifdef MODULE, so the init code is only available to modules. I think that cpqarray.c should remove the #ifdef MODULE and use the same init mechanism as other drivers, including module_init/exit. I don't have a card and the code is a mess so I am not going to attempt a patch.

I'm not seeing it. I see init_module() and cleanup_module() wrapped as you say but cpqarray_init() is outside the #ifdef. Also, two versions of cpqarray_setup are provided based on #ifdef MODULE but this doesn't look problematic to me. I'm a newbie, for sure. Am I overlooking something obvious?

The call to cpqarray_init() is from init_module() which does not exist when the code is built in. See drivers/block/loop.c for an example of the correct use of init and exit routines, using module_init and module_exit.

#4 lore raw
In reply to Adam Kropelin
Quoted 14 lines · Keith Owens
Quoted 11 lines · Adam Kropelin
Quoted 5 lines · Keith Owens

The real problem appears to be cpqarray.c, it wraps the init/exit code in #ifdef MODULE, so the init code is only available to modules. I think that cpqarray.c should remove the #ifdef MODULE and use the same init mechanism as other drivers, including module_init/exit. I don't have a card and the code is a mess so I am not going to attempt a patch.

I'm not seeing it. I see init_module() and cleanup_module() wrapped as you say but cpqarray_init() is outside the #ifdef. Also, two versions of cpqarray_setup are provided based on #ifdef MODULE but this doesn't look problematic to me. I'm a newbie, for sure. Am I overlooking something obvious?

Quoted 4 lines

The call to cpqarray_init() is from init_module() which does not exist when the code is built in. See drivers/block/loop.c for an example of the correct use of init and exit routines, using module_init and module_exit.

Ah, I think I see your point now. The call to cpqarray_init() from genhd.c was a hack, needed only because cpqarray doesn't use the module_init/module_exit mechanism. Sorry I took so long to catch on and thanks for your patience.

Since I do have a card and the motivation to see this driver work when compiled-in, I'll attempt a more correct fix tonight.

--Adam