2.5.1[345]-dj Add cpqarray_init() back into genhd.c
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
Quoted 10 lines · Adam Kropelin
In 2.5.13-dj1, the call to
cpqarray_init()indrivers/block/genhd.cwas 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.
Quoted 4 lines · Keith Owens
Quoted 2 lines · Adam Kropelin
In 2.5.13-dj1, the call to
cpqarray_init()indrivers/block/genhd.cwas 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 thatcpqarray.cshould 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
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 thatcpqarray.cshould 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()andcleanup_module()wrapped as you say butcpqarray_init()is outside the #ifdef. Also, two versions ofcpqarray_setupare 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.
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 thatcpqarray.cshould 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()andcleanup_module()wrapped as you say butcpqarray_init()is outside the #ifdef. Also, two versions ofcpqarray_setupare 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 frominit_module()which does not exist when the code is built in. Seedrivers/block/loop.cfor an example of the correct use of init and exit routines, usingmodule_initandmodule_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