lkml.org 
[lkml]   [2007]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v2 -mm 3/9] netconsole: Simplify boot/module option setup logic
    From: Satyam Sharma <ssatyam@cse.iitk.ac.in>

    [3/9] netconsole: Simplify boot/module option setup logic

    Presently, for built-in netconsole:

    __setup(..., option_setup) ensures that the option_setup() function is
    called at boot-time from obsolete_checksetup() with the string matching
    "netconsole=" passed to it from the kernel's command line. We call the
    netpoll_parse_options() from in there, and populate the netpoll struct
    with the passed values. Then, when init_netconsole() is called during the
    initcall phase, strlen(config) fails, thus skipping option_setup().

    For modular netconsole:

    module_param_string() ensures that the string corresponding to the
    "netconsole" module parameter passed from the modprobe command line is
    copied into the "config" static variable. This time, when the module is
    being initialized, strlen(config) is true and so option_setup() is called
    on "config" from init_netconsole() and the input string is parsed and the
    netpoll struct populated.

    Hence, quite different things happen in the copying and parsing of the
    passed netpoll parameters for the modular / built-in cases. This patch
    makes both of them similar by doing exactly the equivalent of a
    module_param_string() in option_setup() also -- just copying the param
    string passed from the kernel command line into the "config" static
    variable. So, init_netconsole() parses (using netpoll_parse_options())
    it in both the cases, and makes the logic somewhat simpler.

    Now, option_setup() is only ever called / used for the built-in case,
    so we put it inside a #ifndef MODULE, otherwise gcc will complain about
    option_setup() being "defined but not used".

    Also, the "configured" variable is redundant with this patch and so removed.

    Signed-off-by: Satyam Sharma <ssatyam@cse.iitk.ac.in>
    Cc: Keiichi Kii <k-keiichi@bx.jp.nec.com>

    ---

    drivers/net/netconsole.c | 27 ++++++++++++++-------------
    1 file changed, 14 insertions(+), 13 deletions(-)

    ---

    diff -ruNp a/drivers/net/netconsole.c b/drivers/net/netconsole.c
    --- a/drivers/net/netconsole.c 2007-07-10 06:00:15.000000000 +0530
    +++ b/drivers/net/netconsole.c 2007-07-10 06:28:19.000000000 +0530
    @@ -53,6 +53,15 @@ static char config[MAX_PARAM_LENGTH];
    module_param_string(netconsole, config, MAX_PARAM_LENGTH, 0);
    MODULE_PARM_DESC(netconsole, " netconsole=[src-port]@[src-ip]/[dev],[tgt-port]@<tgt-ip>/[tgt-macaddr]\n");

    +#ifndef MODULE
    +static int __init option_setup(char *opt)
    +{
    + strlcpy(config, opt, MAX_PARAM_LENGTH);
    + return 1;
    +}
    +__setup("netconsole=", option_setup);
    +#endif /* MODULE */
    +
    static struct netpoll np = {
    .name = "netconsole",
    .dev_name = "eth0",
    @@ -60,7 +69,6 @@ static struct netpoll np = {
    .remote_port = 6666,
    .remote_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
    };
    -static int configured;

    static void write_msg(struct console *con, const char *msg, unsigned int len)
    {
    @@ -85,26 +93,19 @@ static struct console netconsole = {
    .write = write_msg,
    };

    -static int __init option_setup(char *opt)
    -{
    - configured = !netpoll_parse_options(&np, opt);
    - return 1;
    -}
    -
    -__setup("netconsole=", option_setup);
    -
    static int __init init_netconsole(void)
    {
    int err = 0;

    - if (strnlen(config, MAX_PARAM_LENGTH))
    - option_setup(config);
    -
    - if (!configured) {
    + if (!strnlen(config, MAX_PARAM_LENGTH)) {
    printk(KERN_INFO "netconsole: not configured, aborting\n");
    goto out;
    }

    + err = netpoll_parse_options(&np, config);
    + if (err)
    + goto out;
    +
    err = netpoll_setup(&np);
    if (err)
    goto out;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-07-10 11:01    [W:4.608 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site