From: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org,
bharata@linux.vnet.ibm.com, benh@kernel.crashing.org
Subject: Re: [Qemu-devel] [PATCH] ppc/pnv: fix cores per chip for multiple cpus
Date: Fri, 22 Sep 2017 11:30:51 +0530 [thread overview]
Message-ID: <87y3p7nugc.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me> (raw)
In-Reply-To: <20170921053107.GD4998@umbus.fritz.box>
David Gibson <david@gibson.dropbear.id.au> writes:
>> >>
>> >> As smp_thread defaults to 1 in vl.c, similarly smp_cores also has the
>> >> default value of 1 in vl.c. In powernv, we were setting nr-cores like
>> >> this:
>> >>
>> >> object_property_set_int(chip, smp_cores, "nr-cores", &error_fatal);
>> >>
>> >> Even when there were multiple cpus (-smp 4), when the guest boots up, we
>> >> just get one core (i.e. smp_cores was 1) with single thread(smp_threads
>> >> was 1), which is wrong as per the command-line that was provided.
>> >
>> > Right, so, -smp 4 defaults to 4 sockets, each with 1 core of 1
>> > thread. If you can't supply 4 sockets you should error, but you
>> > shouldn't go and change the number of cores per socket.
>>
>> OK, that makes sense now. And I do see that smp_cpus is 4 in the above
>> case. Now looking more into it, i see that powernv has something called
>> "num_chips", isnt this same as sockets ? Do we need num_chips separately?
>
> Ah, yes, I see. It's probably still reasonable to keep num_chips as
> an internal variable, rather than using (smp_cpus / smp_cores /
> smp_threads) everywhere. But we shouldn't have it as a direct
> user-settable property, instead setting it from the -smp command line
> option.
Something like the below works till num_chips=2, after that guest does
not boot up. This might be some limitation within the OS, Cedric might
have some clue. Otherwise, I see that multiple chips are created with
single core having single thread.
ppc/pnv: Use num_chips for multiple sockets
When the user does not provide the cpu topology, e.g. "-smp 4", machine fails to
initialize 4 cpus. QEMU assumes smp_threads and smp_cores both as 1. Make sure
that we initialize multiple chips for this.
Remove the user-settable property num_chips from machine command line option
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 9724719..fa501f9 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -709,7 +709,17 @@ static void ppc_powernv_init(MachineState *machine)
exit(1);
}
+ pnv->num_chips = smp_cpus / (smp_cores * smp_threads);
pnv->chips = g_new0(PnvChip *, pnv->num_chips);
+
+ if (smp_cpus != (smp_threads * pnv->num_chips * smp_cores)) {
+ error_report("cpu topology not balanced: "
+ "chips (%u) * cores (%u) * threads (%u) != "
+ "number of cpus (%u)",
+ pnv->num_chips, smp_cores, smp_threads, smp_cpus);
+ exit(1);
+ }
+
for (i = 0; i < pnv->num_chips; i++) {
char chip_name[32];
Object *chip = object_new(chip_typename);
@@ -1255,53 +1265,12 @@ static void pnv_pic_print_info(InterruptStatsProvider *obj,
}
}
-static void pnv_get_num_chips(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- visit_type_uint32(v, name, &POWERNV_MACHINE(obj)->num_chips, errp);
-}
-
-static void pnv_set_num_chips(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
-{
- PnvMachineState *pnv = POWERNV_MACHINE(obj);
- uint32_t num_chips;
- Error *local_err = NULL;
-
- visit_type_uint32(v, name, &num_chips, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
-
- /*
- * TODO: should we decide on how many chips we can create based
- * on #cores and Venice vs. Murano vs. Naples chip type etc...,
- */
- if (!is_power_of_2(num_chips) || num_chips > 4) {
- error_setg(errp, "invalid number of chips: '%d'", num_chips);
- return;
- }
-
- pnv->num_chips = num_chips;
-}
-
static void powernv_machine_initfn(Object *obj)
{
PnvMachineState *pnv = POWERNV_MACHINE(obj);
pnv->num_chips = 1;
}
-static void powernv_machine_class_props_init(ObjectClass *oc)
-{
- object_class_property_add(oc, "num-chips", "uint32",
- pnv_get_num_chips, pnv_set_num_chips,
- NULL, NULL, NULL);
- object_class_property_set_description(oc, "num-chips",
- "Specifies the number of processor chips",
- NULL);
-}
-
static void powernv_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
@@ -1321,8 +1290,6 @@ static void powernv_machine_class_init(ObjectClass *oc, void *data)
xic->ics_get = pnv_ics_get;
xic->ics_resend = pnv_ics_resend;
ispc->print_info = pnv_pic_print_info;
-
- powernv_machine_class_props_init(oc);
}
static const TypeInfo powernv_machine_info = {
next prev parent reply other threads:[~2017-09-22 6:01 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-06 8:27 [Qemu-devel] [PATCH] ppc/pnv: fix cores per chip for multiple cpus Nikunj A Dadhania
2017-09-08 6:38 ` Cédric Le Goater
2017-09-09 7:02 ` David Gibson
2017-09-11 5:10 ` Nikunj A Dadhania
2017-09-13 7:35 ` David Gibson
2017-09-14 5:12 ` Nikunj A Dadhania
2017-09-15 6:48 ` David Gibson
2017-09-15 8:23 ` Nikunj A Dadhania
2017-09-15 8:51 ` David Gibson
2017-09-15 9:09 ` Nikunj A Dadhania
2017-09-19 8:24 ` David Gibson
2017-09-20 4:20 ` Nikunj A Dadhania
2017-09-20 4:55 ` David Gibson
2017-09-20 5:13 ` Nikunj A Dadhania
2017-09-20 6:17 ` David Gibson
2017-09-20 6:40 ` Nikunj A Dadhania
2017-09-20 6:50 ` Nikunj A Dadhania
2017-09-20 6:57 ` David Gibson
2017-09-20 7:18 ` Nikunj A Dadhania
2017-09-20 8:12 ` Cédric Le Goater
2017-09-20 11:53 ` David Gibson
2017-09-21 3:54 ` Nikunj A Dadhania
2017-09-21 5:31 ` David Gibson
2017-09-22 6:00 ` Nikunj A Dadhania [this message]
2017-09-22 6:07 ` Cédric Le Goater
2017-09-22 10:12 ` David Gibson
2017-09-22 10:46 ` Cédric Le Goater
2017-09-22 11:20 ` David Gibson
2017-09-22 11:37 ` Cédric Le Goater
2017-09-22 11:49 ` David Gibson
2017-09-22 11:46 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2017-09-22 10:56 ` [Qemu-devel] " Cédric Le Goater
2017-09-22 11:06 ` Nikunj A Dadhania
2017-09-22 11:36 ` David Gibson
2017-09-21 6:04 ` Cédric Le Goater
2017-09-21 7:42 ` Igor Mammedov
2017-09-22 10:09 ` David Gibson
2017-09-22 10:08 ` David Gibson
2017-09-22 10:52 ` Cédric Le Goater
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y3p7nugc.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me \
--to=nikunj@linux.vnet.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=bharata@linux.vnet.ibm.com \
--cc=clg@kaod.org \
--cc=david@gibson.dropbear.id.au \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).