qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH]  qemu will core dump with "-smp 254, sockets=2, cores=3, threads=2"
@ 2013-12-12 18:10 lijun
  2013-12-14 17:21 ` lijun
  2013-12-16 16:55 ` Eduardo Habkost
  0 siblings, 2 replies; 10+ messages in thread
From: lijun @ 2013-12-12 18:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, kraxel, mst

Hi all,

when set "-smp" more than 160, qemu will give the following warning:
Warning: Number of SMP cpus requested (161) exceeds the recommended cpus 
supported by KVM (160)
As the above warning, when set "-smp 160,sockets=2,cores=3,threads=2", 
but find that apic_id(hw/i386/acpi-build.c) is 259 not 159 and 
id(hw/acpi/piix4.c) is 259 not 159.

As the above warning, when set "-smp 254,sockets=2,cores=3,threads=2", 
but find that apic_id(hw/i386/acpi-build.c) is 513 not 253 and 
id(hw/acpi/piix4.c) is 513 not 253.

Based on above reasons, we have two methods to fix this issue.
1, Delete "assert(apic_id <= MAX_CPUMASK_BITS)" in file 
"hw/i386/acpi-build.c" and delete "g_assert((id / 8) < PIIX4_PROC_LEN)" 
in file "hw/acpi/piix4.c".
2, Detect the values of "sockets,cores,threads" when get them from 
command line. And modify smp_parse function in file vl.c to do some 
restrictions on these parameters when boot qemu.

I will submit the code patch later.

Best Regards,
Jun Li

^ permalink raw reply	[flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu will core dump with "-smp 254, sockets=2, cores=3, threads=2"
@ 2013-12-16  6:18 jun muzi
  0 siblings, 0 replies; 10+ messages in thread
From: jun muzi @ 2013-12-16  6:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: blauwirbel, afaerber, ehabkost, rth

[-- Attachment #1: Type: text/plain, Size: 1510 bytes --]

As Peter's suggestion, mv this patch to file target-i386/topology.h. If
someone has any good idea, please give me a commit in the followings.
Thanks.
---
 target-i386/topology.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/target-i386/topology.h b/target-i386/topology.h
index 07a6c5f..cda6bf5 100644
--- a/target-i386/topology.h
+++ b/target-i386/topology.h
@@ -117,6 +117,19 @@ static inline void x86_topo_ids_from_idx(unsigned
nr_cores,
     *pkg_id = core_index / nr_cores;
 }

+/* This function will return whether @num is power of 2.
+ *
+ * Returns: 1 indicate @num is power of 2, 0 indicate @num is not.
+ */
+static int is_2_power(int num)
+{
+    if (num < 0 || num > 256) {
+        return 1;
+    }
+
+    return !(num & (num - 1));
+}
+
 /* Make APIC ID for the CPU 'cpu_index'
  *
  * 'cpu_index' is a sequential, contiguous ID for the CPU.
@@ -126,6 +139,13 @@ static inline apic_id_t
x86_apicid_from_cpu_idx(unsigned nr_cores,
                                                 unsigned cpu_index)
 {
     unsigned pkg_id, core_id, smt_id;
+
+    /* check whether nr_cores and nr_threads is a power of 2 */
+    if (!is_2_power(smp_cores) || !is_2_power(smp_threads)) {
+        nr_cores = 1;
+        nr_threads = 1;
+    }
+
     x86_topo_ids_from_idx(nr_cores, nr_threads, cpu_index,
                           &pkg_id, &core_id, &smt_id);
     return apicid_from_topo_ids(nr_cores, nr_threads, pkg_id, core_id,
smt_id);
-- 
1.8.1.4
-- 
Jun Li <junmuzi@gmail.com>

[-- Attachment #2: Type: text/html, Size: 1774 bytes --]

^ permalink raw reply related	[flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu will core dump with "-smp 254, sockets=2, cores=3, threads=2"
@ 2013-12-16  7:54 jun muzi
  2013-12-16 16:53 ` Eduardo Habkost
  0 siblings, 1 reply; 10+ messages in thread
From: jun muzi @ 2013-12-16  7:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: blauwirbel, afaerber, ehabkost, rth

[-- Attachment #1: Type: text/plain, Size: 1543 bytes --]

Type error, change smp_cores to nr_cores and change smp_threads to
nr_threads. But using smp_cores can work well. As it is not the same with
explanatory note, so change it.

Signed-off-by: Jun Li <junmuzi@gmail.com>
---
 target-i386/topology.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/target-i386/topology.h b/target-i386/topology.h
index 07a6c5f..49c6331 100644
--- a/target-i386/topology.h
+++ b/target-i386/topology.h
@@ -117,6 +117,19 @@ static inline void x86_topo_ids_from_idx(unsigned
nr_cores,
     *pkg_id = core_index / nr_cores;
 }

+/* This function will return whether @num is power of 2.
+ *
+ * Returns: 1 indicate @num is power of 2, 0 indicate @num is not.
+ */
+static int is_2_power(int num)
+{
+    if (num < 0 || num > 256) {
+        return 1;
+    }
+
+    return !(num & (num - 1));
+}
+
 /* Make APIC ID for the CPU 'cpu_index'
  *
  * 'cpu_index' is a sequential, contiguous ID for the CPU.
@@ -126,6 +139,13 @@ static inline apic_id_t
x86_apicid_from_cpu_idx(unsigned nr_cores,
                                                 unsigned cpu_index)
 {
     unsigned pkg_id, core_id, smt_id;
+
+    /* check whether nr_cores and nr_threads is a power of 2 */
+    if (!is_2_power(nr_cores) || !is_2_power(nr_threads)) {
+        nr_cores = 1;
+        nr_threads = 1;
+    }
+
     x86_topo_ids_from_idx(nr_cores, nr_threads, cpu_index,
                           &pkg_id, &core_id, &smt_id);
     return apicid_from_topo_ids(nr_cores, nr_threads, pkg_id, core_id,
smt_id);
-- 
1.8.1.4

[-- Attachment #2: Type: text/html, Size: 1805 bytes --]

^ permalink raw reply related	[flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu will core dump with "-smp 254, , sockets=2, cores=3, threads=2"
@ 2013-12-17 15:16 lijun
  2013-12-17 15:51 ` Eduardo Habkost
  0 siblings, 1 reply; 10+ messages in thread
From: lijun @ 2013-12-17 15:16 UTC (permalink / raw)
  To: qemu-devel; +Cc: blauwirbel, afaerber, ehabkost, rth

As Eric and Eduardo's suggestions, use is_power_of_2 to check whether 
nr_cores
and nr_threads is the power of 2 in function x86_apicid_from_cpu_idx in file
target-i386/topology.h. This check is very simple, I prefer add it in a
function to write a new function. Thanks for Eric and Eduardo.

Best Regards,
Jun Li

Signed-off-by: Jun Li <junmuzi@gmail.com>
---
  target-i386/topology.h | 8 ++++++++
  1 file changed, 8 insertions(+)

diff --git a/target-i386/topology.h b/target-i386/topology.h
index 07a6c5f..ff21a98 100644
--- a/target-i386/topology.h
+++ b/target-i386/topology.h
@@ -126,6 +126,14 @@ static inline apic_id_t 
x86_apicid_from_cpu_idx(unsigned nr_cores,
                                                  unsigned cpu_index)
  {
      unsigned pkg_id, core_id, smt_id;
+
+    /* Check whether nr_cores and nr_threads is a power of 2.
+     * If not, 1 is assigned to them.
+     */
+    nr_cores = is_power_of_2(nr_cores) > 0 ? nr_cores : 1;
+    nr_threads = is_power_of_2(nr_threads) > 0 ? nr_threads : 1;
+
+
      x86_topo_ids_from_idx(nr_cores, nr_threads, cpu_index,
                            &pkg_id, &core_id, &smt_id);
      return apicid_from_topo_ids(nr_cores, nr_threads, pkg_id, core_id, 
smt_id);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-12-17 15:52 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-12 18:10 [Qemu-devel] [PATCH] qemu will core dump with "-smp 254, sockets=2, cores=3, threads=2" lijun
2013-12-14 17:21 ` lijun
2013-12-14 19:10   ` Peter Maydell
2013-12-16 14:43   ` Eric Blake
2013-12-16 16:55 ` Eduardo Habkost
  -- strict thread matches above, loose matches on Subject: below --
2013-12-16  6:18 jun muzi
2013-12-16  7:54 jun muzi
2013-12-16 16:53 ` Eduardo Habkost
2013-12-17 15:16 [Qemu-devel] [PATCH] qemu will core dump with "-smp 254, , " lijun
2013-12-17 15:51 ` Eduardo Habkost

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).