[Xenomai-git] Philippe Gerum : copperplate/init: disambiguate --mem-pool-size argument
Module: xenomai-3 Branch: master Commit: b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2 Author: Philippe Gerum Date: Thu Aug 13 17:07:42 2015 +0200 copperplate/init: disambiguate --mem-pool-size argument The value passed to --mem-pool-size used to represent kilobytes, which is at odds with the byte unit required by the mem_pool_size tunable. --mem-pool-size now accepts a unit K|M|G suffix to values, defaulting to bytes. For backward compatibility, any non-suffixed value below 65536 is interpreted as a count of kilobytes, not bytes, e.g. --mem-pool-size=8192 will create a 8M heap for the application. This conversion is noisy, to call for a parameter update asap, unless --no-sanity is in effect. If you need a tiny heap size below 64k, pass a kilobyte value with a 'K' suffix. --- lib/copperplate/init.c | 20 ++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c index c84d8a2..d24673d 100644 --- a/lib/copperplate/init.c +++ b/lib/copperplate/init.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -193,9 +194,24 @@ static int copperplate_init(void) static int copperplate_parse_option(int optnum, const char *optarg) { + size_t memsz; + switch (optnum) { case mempool_opt: - __copperplate_setup_data.mem_pool = atoi(optarg) * 1024; + memsz = get_mem_size(optarg); + if (memsz == 0) + return -EINVAL; + /* +* Emulate former sloppy syntax: values below 64k are +* likely to represent kilobytes, not bytes. +*/ + if (isdigit(optarg[strlen(optarg)-1]) && + memsz < 64 * 1024) { + memsz *= 1024; + if (__base_setup_data.no_sanity == 0) + warning("--mem-pool-size=, using %Zu bytes", memsz); + } + __copperplate_setup_data.mem_pool = memsz; break; case session_opt: __copperplate_setup_data.session_label = strdup(optarg); @@ -216,7 +232,7 @@ static int copperplate_parse_option(int optnum, const char *optarg) static void copperplate_help(void) { - fprintf(stderr, "--mem-pool-size=size of the main heap (kbytes)\n"); + fprintf(stderr, "--mem-pool-size= size of the main heap\n"); fprintf(stderr, "--no-registry suppress object registration\n"); fprintf(stderr, "--shared-registry enable public access to registry\n"); fprintf(stderr, "--registry-root=root path of registry\n"); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : copperplate/init: disambiguate --mem-pool-size argument
Module: xenomai-3 Branch: next Commit: b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2 Author: Philippe Gerum Date: Thu Aug 13 17:07:42 2015 +0200 copperplate/init: disambiguate --mem-pool-size argument The value passed to --mem-pool-size used to represent kilobytes, which is at odds with the byte unit required by the mem_pool_size tunable. --mem-pool-size now accepts a unit K|M|G suffix to values, defaulting to bytes. For backward compatibility, any non-suffixed value below 65536 is interpreted as a count of kilobytes, not bytes, e.g. --mem-pool-size=8192 will create a 8M heap for the application. This conversion is noisy, to call for a parameter update asap, unless --no-sanity is in effect. If you need a tiny heap size below 64k, pass a kilobyte value with a 'K' suffix. --- lib/copperplate/init.c | 20 ++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c index c84d8a2..d24673d 100644 --- a/lib/copperplate/init.c +++ b/lib/copperplate/init.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -193,9 +194,24 @@ static int copperplate_init(void) static int copperplate_parse_option(int optnum, const char *optarg) { + size_t memsz; + switch (optnum) { case mempool_opt: - __copperplate_setup_data.mem_pool = atoi(optarg) * 1024; + memsz = get_mem_size(optarg); + if (memsz == 0) + return -EINVAL; + /* +* Emulate former sloppy syntax: values below 64k are +* likely to represent kilobytes, not bytes. +*/ + if (isdigit(optarg[strlen(optarg)-1]) && + memsz < 64 * 1024) { + memsz *= 1024; + if (__base_setup_data.no_sanity == 0) + warning("--mem-pool-size=, using %Zu bytes", memsz); + } + __copperplate_setup_data.mem_pool = memsz; break; case session_opt: __copperplate_setup_data.session_label = strdup(optarg); @@ -216,7 +232,7 @@ static int copperplate_parse_option(int optnum, const char *optarg) static void copperplate_help(void) { - fprintf(stderr, "--mem-pool-size=size of the main heap (kbytes)\n"); + fprintf(stderr, "--mem-pool-size= size of the main heap\n"); fprintf(stderr, "--no-registry suppress object registration\n"); fprintf(stderr, "--shared-registry enable public access to registry\n"); fprintf(stderr, "--registry-root=root path of registry\n"); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git