qemu-devel
[Top][All Lists]
Advanced

[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;
>              }
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]