From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZRqTQ-0006Xy-W0 for qemu-devel@nongnu.org; Tue, 18 Aug 2015 19:39:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZRqTM-0008QV-UI for qemu-devel@nongnu.org; Tue, 18 Aug 2015 19:39:20 -0400 Message-ID: <55D3C21E.4020401@redhat.com> Date: Tue, 18 Aug 2015 16:39:10 -0700 From: Thomas Huth MIME-Version: 1.0 References: <1437573590-2801-1-git-send-email-thuth@redhat.com> In-Reply-To: <1437573590-2801-1-git-send-email-thuth@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] Add another sanity check to smp_parse() function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Paolo Bonzini Cc: qemu-trivial@nongnu.org, Eduardo Habkost On 22/07/15 06:59, Thomas Huth wrote: > The code in smp_parse already checks the topology information for > sockets * cores * threads < cpus and bails out with an error in > that case. However, it is still possible to supply a bad configuration > the other way round, e.g. with: > > qemu-system-xxx -smp 4,sockets=1,cores=4,threads=2 > > QEMU then still starts the guest, with topology configuration that > is rather incomprehensible and likely not what the user wanted. > So let's add another check to refuse such wrong configurations. > > Signed-off-by: Thomas Huth > --- > vl.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/vl.c b/vl.c > index 5856396..c8d24b1 100644 > --- a/vl.c > +++ b/vl.c > @@ -1224,7 +1224,13 @@ static void smp_parse(QemuOpts *opts) > exit(1); > } > > - max_cpus = qemu_opt_get_number(opts, "maxcpus", 0); > + max_cpus = qemu_opt_get_number(opts, "maxcpus", cpus); > + if (sockets * cores * threads > max_cpus) { > + fprintf(stderr, "cpu topology: error: " > + "sockets (%u) * cores (%u) * threads (%u) > maxcpus (%u)\n", > + sockets, cores, threads, max_cpus); > + exit(1); > + } > > smp_cpus = cpus; > smp_cores = cores > 0 ? cores : 1; *ping* Thomas