diff mbox

[PULL,30/30] vl: smp_parse: cleanups

Message ID 1466086585-16526-31-git-send-email-pbonzini@redhat.com
State Accepted
Commit 0544edd88a6acea81aefe22fd0cd9a85d1eef093
Headers show

Commit Message

Paolo Bonzini June 16, 2016, 2:16 p.m. UTC
From: Andrew Jones <drjones@redhat.com>


No functional changes; only some code movement and removal of
dead code (impossible conditions). Also, max_cpus can be
initialized to 1, like smp_cpus, because it's either set by the
user or set to smp_cpus, when smp_cpus is set by the user, or
set to 1, when nothing is set.

Signed-off-by: Andrew Jones <drjones@redhat.com>

Message-Id: <1465580427-13596-2-git-send-email-drjones@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

---
 vl.c | 34 +++++++++++++++-------------------
 1 file changed, 15 insertions(+), 19 deletions(-)

-- 
2.5.5

Comments

Andrew Jones June 21, 2016, 4:22 p.m. UTC | #1
On Tue, Jun 21, 2016 at 05:40:13PM +0200, Igor Mammedov wrote:
> On Thu, 16 Jun 2016 16:16:25 +0200

> Paolo Bonzini <pbonzini@redhat.com> wrote:

> 

> > From: Andrew Jones <drjones@redhat.com>

> > 

> > No functional changes; only some code movement and removal of

> > dead code (impossible conditions). Also, max_cpus can be

> > initialized to 1, like smp_cpus, because it's either set by the

> > user or set to smp_cpus, when smp_cpus is set by the user, or

> > set to 1, when nothing is set.

> > 

> > Signed-off-by: Andrew Jones <drjones@redhat.com>

> > Message-Id: <1465580427-13596-2-git-send-email-drjones@redhat.com>

> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

> this patch broke master with following CLI

>   -machine q35,accel=tcg -smp 2,cores=3,sockets=2,maxcpus=6


I see why. The "real" problem is the whole using 'cpus' instead of
'maxcpus' again, but, since that ship sailed, I guess I should be
careful with calculations like

 threads = cpus / (cores * sockets)

which can result in zero.

I'll send a patch right now.

Thanks,
drew

> 

> 

> 

> > ---

> >  vl.c | 34 +++++++++++++++-------------------

> >  1 file changed, 15 insertions(+), 19 deletions(-)

> > 

> > diff --git a/vl.c b/vl.c

> > index 99c3030..e69ebfd 100644

> > --- a/vl.c

> > +++ b/vl.c

> > @@ -154,7 +154,7 @@ CharDriverState *sclp_hds[MAX_SCLP_CONSOLES];

> >  int win2k_install_hack = 0;

> >  int singlestep = 0;

> >  int smp_cpus = 1;

> > -int max_cpus = 0;

> > +int max_cpus = 1;

> >  int smp_cores = 1;

> >  int smp_threads = 1;

> >  int acpi_enabled = 1;

> > @@ -1223,7 +1223,6 @@ static QemuOptsList qemu_smp_opts = {

> >  static void smp_parse(QemuOpts *opts)

> >  {

> >      if (opts) {

> > -

> >          unsigned cpus    = qemu_opt_get_number(opts, "cpus", 0);

> >          unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);

> >          unsigned cores   = qemu_opt_get_number(opts, "cores", 0);

> > @@ -1251,6 +1250,17 @@ static void smp_parse(QemuOpts *opts)

> >          }

> >  

> >          max_cpus = qemu_opt_get_number(opts, "maxcpus", cpus);

> > +

> > +        if (max_cpus > MAX_CPUMASK_BITS) {

> > +            error_report("unsupported number of maxcpus");

> > +            exit(1);

> > +        }

> > +

> > +        if (max_cpus < cpus) {

> > +            error_report("maxcpus must be equal to or greater than

> > smp");

> > +            exit(1);

> > +        }

> > +

> >          if (sockets * cores * threads > max_cpus) {

> >              error_report("cpu topology: "

> >                           "sockets (%u) * cores (%u) * threads (%u) >

> > " @@ -1260,25 +1270,11 @@ static void smp_parse(QemuOpts *opts)

> >          }

> >  

> >          smp_cpus = cpus;

> > -        smp_cores = cores > 0 ? cores : 1;

> > -        smp_threads = threads > 0 ? threads : 1;

> > -

> > -    }

> > -

> > -    if (max_cpus == 0) {

> > -        max_cpus = smp_cpus;

> > -    }

> > -

> > -    if (max_cpus > MAX_CPUMASK_BITS) {

> > -        error_report("unsupported number of maxcpus");

> > -        exit(1);

> > -    }

> > -    if (max_cpus < smp_cpus) {

> > -        error_report("maxcpus must be equal to or greater than smp");

> > -        exit(1);

> > +        smp_cores = cores;

> > +        smp_threads = threads;

> >      }

> >  

> > -    if (smp_cpus > 1 || smp_cores > 1 || smp_threads > 1) {

> > +    if (smp_cpus > 1) {

> >          Error *blocker = NULL;

> >          error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED, "smp");

> >          replay_add_blocker(blocker);

> 

>
diff mbox

Patch

diff --git a/vl.c b/vl.c
index 99c3030..e69ebfd 100644
--- a/vl.c
+++ b/vl.c
@@ -154,7 +154,7 @@  CharDriverState *sclp_hds[MAX_SCLP_CONSOLES];
 int win2k_install_hack = 0;
 int singlestep = 0;
 int smp_cpus = 1;
-int max_cpus = 0;
+int max_cpus = 1;
 int smp_cores = 1;
 int smp_threads = 1;
 int acpi_enabled = 1;
@@ -1223,7 +1223,6 @@  static QemuOptsList qemu_smp_opts = {
 static void smp_parse(QemuOpts *opts)
 {
     if (opts) {
-
         unsigned cpus    = qemu_opt_get_number(opts, "cpus", 0);
         unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);
         unsigned cores   = qemu_opt_get_number(opts, "cores", 0);
@@ -1251,6 +1250,17 @@  static void smp_parse(QemuOpts *opts)
         }
 
         max_cpus = qemu_opt_get_number(opts, "maxcpus", cpus);
+
+        if (max_cpus > MAX_CPUMASK_BITS) {
+            error_report("unsupported number of maxcpus");
+            exit(1);
+        }
+
+        if (max_cpus < cpus) {
+            error_report("maxcpus must be equal to or greater than smp");
+            exit(1);
+        }
+
         if (sockets * cores * threads > max_cpus) {
             error_report("cpu topology: "
                          "sockets (%u) * cores (%u) * threads (%u) > "
@@ -1260,25 +1270,11 @@  static void smp_parse(QemuOpts *opts)
         }
 
         smp_cpus = cpus;
-        smp_cores = cores > 0 ? cores : 1;
-        smp_threads = threads > 0 ? threads : 1;
-
-    }
-
-    if (max_cpus == 0) {
-        max_cpus = smp_cpus;
-    }
-
-    if (max_cpus > MAX_CPUMASK_BITS) {
-        error_report("unsupported number of maxcpus");
-        exit(1);
-    }
-    if (max_cpus < smp_cpus) {
-        error_report("maxcpus must be equal to or greater than smp");
-        exit(1);
+        smp_cores = cores;
+        smp_threads = threads;
     }
 
-    if (smp_cpus > 1 || smp_cores > 1 || smp_threads > 1) {
+    if (smp_cpus > 1) {
         Error *blocker = NULL;
         error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED, "smp");
         replay_add_blocker(blocker);