[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/2] vl: Fix the confused logic for '-m' option
From: |
Li Liu |
Subject: |
Re: [Qemu-devel] [PATCH 1/2] vl: Fix the confused logic for '-m' option |
Date: |
Fri, 12 Sep 2014 14:46:20 +0800 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 |
On 2014/9/12 13:58, zhanghailiang wrote:
> It should be valid for the follow configure:
> -m 256,slots=0
> -m 256,maxmem=256M
> -m 256,slots=0,maxmem=256M
> -m 256,slots=x,maxmem=y where x > 0 and y > 256M
>
> Fix the confused code logic and use error_report instead of fprintf.
>
> Printing the maxmem in hex, same with ram_size.
>
> Signed-off-by: zhanghailiang <address@hidden>
> ---
> vl.c | 46 +++++++++++++++++++++++++++-------------------
> 1 file changed, 27 insertions(+), 19 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index 9c9acf5..f547405 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -3306,6 +3306,7 @@ int main(int argc, char **argv, char **envp)
> break;
> case QEMU_OPTION_m: {
> uint64_t sz;
> + uint64_t slots;
> const char *mem_str;
> const char *maxmem_str, *slots_str;
>
> @@ -3353,40 +3354,47 @@ int main(int argc, char **argv, char **envp)
>
> maxmem_str = qemu_opt_get(opts, "maxmem");
> slots_str = qemu_opt_get(opts, "slots");
> - if (maxmem_str && slots_str) {
> - uint64_t slots;
> -
> + if (maxmem_str) {
> sz = qemu_opt_get_size(opts, "maxmem", 0);
> + }
> + if (slots_str) {
> + slots = qemu_opt_get_number(opts, "slots", 0);
> + }
> + if (maxmem_str && slots_str) {
> if (sz < ram_size) {
> - fprintf(stderr, "qemu: invalid -m option value:
> maxmem "
> - "(%" PRIu64 ") <= initial memory ("
> + error_report("qemu: invalid -m option value: maxmem "
> + "(%" PRIx64 ") < initial memory ("
> RAM_ADDR_FMT ")\n", sz, ram_size);
error_report will add a '\n' automatically. Below lines have the same issue.
> exit(EXIT_FAILURE);
> }
> -
> - slots = qemu_opt_get_number(opts, "slots", 0);
> - if ((sz > ram_size) && !slots) {
> - fprintf(stderr, "qemu: invalid -m option value:
> maxmem "
> - "(%" PRIu64 ") more than initial memory ("
> + if (!slots && (sz != ram_size)) {
> + error_report("qemu: invalid -m option value: maxmem "
> + "(%" PRIx64 ") more than initial memory ("
> RAM_ADDR_FMT ") but no hotplug slots where "
> "specified\n", sz, ram_size);
> exit(EXIT_FAILURE);
> }
> -
> - if ((sz <= ram_size) && slots) {
> - fprintf(stderr, "qemu: invalid -m option value: %"
> + if (slots && (sz == ram_size)) {
> + error_report("qemu: invalid -m option value: %"
> PRIu64 " hotplug slots where specified but "
> - "maxmem (%" PRIu64 ") <= initial memory ("
> + "maxmem (%" PRIx64 ") = initial memory ("
> RAM_ADDR_FMT ")\n", slots, sz, ram_size);
> exit(EXIT_FAILURE);
> }
> maxram_size = sz;
> ram_slots = slots;
> - } else if ((!maxmem_str && slots_str) ||
> - (maxmem_str && !slots_str)) {
> - fprintf(stderr, "qemu: invalid -m option value: missing "
> - "'%s' option\n", slots_str ? "maxmem" : "slots");
> - exit(EXIT_FAILURE);
> + } else if (!maxmem_str && slots_str) {
> + if (slots > 0) {
> + error_report("qemu: invalid -m option value: missing
> "
> + "'maxmem' option\n");
> + exit(EXIT_FAILURE);
> + }
> + } else if (maxmem_str && !slots_str) {
> + if (sz != ram_size) {
> + error_report("qemu: invalid -m option value: missing
> "
> + "'slot' option\n");
> + exit(EXIT_FAILURE);
> + }
> }
> break;
> }
>