diff -NurpP --minimal linux-2.6.11-rc1-vs1.9.4-rc2-ng8.7/kernel/vserver/sysctl.c linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/kernel/vserver/sysctl.c --- linux-2.6.11-rc1-vs1.9.4-rc2-ng8.7/kernel/vserver/sysctl.c 2005-01-17 18:33:57 +0100 +++ linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/kernel/vserver/sysctl.c 2005-01-18 13:33:59 +0100 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -203,6 +204,65 @@ static ctl_table vserver_table[] = { { .ctl_name = 0 } }; +enum { + Opt_err = 0, + Opt_switch, Opt_xid, Opt_nid, Opt_net, Opt_limit, + Opt_dlim, Opt_cvirt +}; + +static match_table_t tokens = { + { Opt_switch, "switch=%x" }, + { Opt_xid, "xid=%x" }, + { Opt_nid, "nid=%x" }, + { Opt_net, "net=%x" }, + { Opt_limit, "limit=%x" }, + { Opt_dlim, "dlim=%x" }, + { Opt_cvirt, "cvirt=%x" }, + { Opt_err, NULL } +}; + +#define HANDLE_CASE(x,v) \ + case Opt_ ## x: \ + vx_debug_ ## x = v; \ + printk("vs_debug_" #x "=%x\n", v); \ + break + +static int __init vs_debug_setup(char *str) +{ + char *p; + int token; + + printk("vs_debug_setup(%s)\n", str); + while ((p = strsep(&str, ",")) != NULL) { + substring_t args[MAX_OPT_ARGS]; + unsigned int value; + + if (!*p) + continue; + + token = match_token(p, tokens, args); + value = (token>0)?simple_strtoul(args[0].from, NULL, 16):0; + + switch (token) { + HANDLE_CASE(switch, value); + HANDLE_CASE(xid, value); + HANDLE_CASE(nid, value); + HANDLE_CASE(net, value); + HANDLE_CASE(limit, value); + HANDLE_CASE(dlim, value); + HANDLE_CASE(cvirt, value); + default: + return -EINVAL; + break; + } + } + return 1; +} + +__setup("vsdebug=", vs_debug_setup); + EXPORT_SYMBOL_GPL(vx_debug_switch); EXPORT_SYMBOL_GPL(vx_debug_xid);