diff mbox series

[v14,04/11] s390x/sclp: reporting the maximum nested topology entries

Message ID 20230105145313.168489-5-pmorel@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series s390x: CPU Topology | expand

Commit Message

Pierre Morel Jan. 5, 2023, 2:53 p.m. UTC
The maximum nested topology entries is used by the guest to know
how many nested topology are available on the machine.

Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
equivalent of reporting the default value of 2.
Let's use the default SCLP value of 2 and increase this value in the
future patches implementing higher levels.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
---
 include/hw/s390x/sclp.h | 5 +++--
 hw/s390x/sclp.c         | 4 ++++
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Thomas Huth Jan. 11, 2023, 8:57 a.m. UTC | #1
On 05/01/2023 15.53, Pierre Morel wrote:
> The maximum nested topology entries is used by the guest to know
> how many nested topology are available on the machine.
> 
> Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
> equivalent of reporting the default value of 2.
> Let's use the default SCLP value of 2 and increase this value in the
> future patches implementing higher levels.

I'm confused ... so does a SCLP value of 2 mean a MNEST level of 4 ?

> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> ---
>   include/hw/s390x/sclp.h | 5 +++--
>   hw/s390x/sclp.c         | 4 ++++
>   2 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
> index 712fd68123..4ce852473c 100644
> --- a/include/hw/s390x/sclp.h
> +++ b/include/hw/s390x/sclp.h
> @@ -112,12 +112,13 @@ typedef struct CPUEntry {
>   } QEMU_PACKED CPUEntry;
>   
>   #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
> -#define SCLP_READ_SCP_INFO_MNEST                2
> +#define SCLP_READ_SCP_INFO_MNEST                4

... since you update it to 4 here.

>   typedef struct ReadInfo {
>       SCCBHeader h;
>       uint16_t rnmax;
>       uint8_t rnsize;
> -    uint8_t  _reserved1[16 - 11];       /* 11-15 */
> +    uint8_t  _reserved1[15 - 11];       /* 11-14 */
> +    uint8_t  stsi_parm;                 /* 15-16 */
>       uint16_t entries_cpu;               /* 16-17 */
>       uint16_t offset_cpu;                /* 18-19 */
>       uint8_t  _reserved2[24 - 20];       /* 20-23 */
> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
> index eff74479f4..07e3cb4cac 100644
> --- a/hw/s390x/sclp.c
> +++ b/hw/s390x/sclp.c
> @@ -20,6 +20,7 @@
>   #include "hw/s390x/event-facility.h"
>   #include "hw/s390x/s390-pci-bus.h"
>   #include "hw/s390x/ipl.h"
> +#include "hw/s390x/cpu-topology.h"
>   
>   static inline SCLPDevice *get_sclp_device(void)
>   {
> @@ -125,6 +126,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
>   
>       /* CPU information */
>       prepare_cpu_entries(machine, entries_start, &cpu_count);
> +    if (s390_has_topology()) {
> +        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;

This seems to be in contradiction to what you've said in the commit 
description - you set it to 4 and not to 2.

  Thomas


> +    }
>       read_info->entries_cpu = cpu_to_be16(cpu_count);
>       read_info->offset_cpu = cpu_to_be16(offset_cpu);
>       read_info->highest_cpu = cpu_to_be16(machine->smp.max_cpus - 1);
Nina Schoetterl-Glausch Jan. 11, 2023, 5:52 p.m. UTC | #2
On Thu, 2023-01-05 at 15:53 +0100, Pierre Morel wrote:
> The maximum nested topology entries is used by the guest to know
> how many nested topology are available on the machine.
> 
> Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
> equivalent of reporting the default value of 2.
> Let's use the default SCLP value of 2 and increase this value in the
> future patches implementing higher levels.
> 
> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>

Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
if you address the issues Thomas found with the commit description
and the nits below.

> ---
>  include/hw/s390x/sclp.h | 5 +++--
>  hw/s390x/sclp.c         | 4 ++++
>  2 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
> index 712fd68123..4ce852473c 100644
> --- a/include/hw/s390x/sclp.h
> +++ b/include/hw/s390x/sclp.h
> @@ -112,12 +112,13 @@ typedef struct CPUEntry {
>  } QEMU_PACKED CPUEntry;
>  
>  #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
> -#define SCLP_READ_SCP_INFO_MNEST                2
> +#define SCLP_READ_SCP_INFO_MNEST                4
>  typedef struct ReadInfo {
>      SCCBHeader h;
>      uint16_t rnmax;
>      uint8_t rnsize;
> -    uint8_t  _reserved1[16 - 11];       /* 11-15 */
> +    uint8_t  _reserved1[15 - 11];       /* 11-14 */
> +    uint8_t  stsi_parm;                 /* 15-16 */

The numbering here is the same as the one in the arch doc, instead
of the maybe more usual one where the right number is exclusive.
So 15-16 looks like a two byte field, so just do 15 or just drop it.

>      uint16_t entries_cpu;               /* 16-17 */
>      uint16_t offset_cpu;                /* 18-19 */
>      uint8_t  _reserved2[24 - 20];       /* 20-23 */
> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
> index eff74479f4..07e3cb4cac 100644
> --- a/hw/s390x/sclp.c
> +++ b/hw/s390x/sclp.c
> @@ -20,6 +20,7 @@
>  #include "hw/s390x/event-facility.h"
>  #include "hw/s390x/s390-pci-bus.h"
>  #include "hw/s390x/ipl.h"
> +#include "hw/s390x/cpu-topology.h"
>  
>  static inline SCLPDevice *get_sclp_device(void)
>  {
> @@ -125,6 +126,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
>  
>      /* CPU information */
>      prepare_cpu_entries(machine, entries_start, &cpu_count);
> +    if (s390_has_topology()) {
> +        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;
> +    }

Maybe move that up a bit, not sure if it belongs under the CPU information section.
I'd leave prepare_cpu_entries and read_info->entries_cpu = adjacent in any case.

>      read_info->entries_cpu = cpu_to_be16(cpu_count);
>      read_info->offset_cpu = cpu_to_be16(offset_cpu);
>      read_info->highest_cpu = cpu_to_be16(machine->smp.max_cpus - 1);
Pierre Morel Jan. 17, 2023, 5:36 p.m. UTC | #3
On 1/11/23 09:57, Thomas Huth wrote:
> On 05/01/2023 15.53, Pierre Morel wrote:
>> The maximum nested topology entries is used by the guest to know
>> how many nested topology are available on the machine.
>>
>> Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
>> equivalent of reporting the default value of 2.
>> Let's use the default SCLP value of 2 and increase this value in the
>> future patches implementing higher levels.
> 
> I'm confused ... so does a SCLP value of 2 mean a MNEST level of 4 ?

Sorry, I forgot to change this.
MNEST = 0 means no MNEST support and only socket is supported so it is 
like MNEST = 2.
MNEST != 0 set the maximum nested level and correct values may be 2,3 or 4.
But this setting to 4 should already have been done in previous patch 
where we introduced the books and drawers.

I change the commit message with:
---
s390x/sclp: reporting the maximum nested topology entries

The maximum nested topology entries is used by the guest to know
how many nested topology are available on the machine.

Let's return this information to the guest.
---

> 
>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>> ---
>>   include/hw/s390x/sclp.h | 5 +++--
>>   hw/s390x/sclp.c         | 4 ++++
>>   2 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
>> index 712fd68123..4ce852473c 100644
>> --- a/include/hw/s390x/sclp.h
>> +++ b/include/hw/s390x/sclp.h
>> @@ -112,12 +112,13 @@ typedef struct CPUEntry {
>>   } QEMU_PACKED CPUEntry;
>>   #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
>> -#define SCLP_READ_SCP_INFO_MNEST                2
>> +#define SCLP_READ_SCP_INFO_MNEST                4
> 
> ... since you update it to 4 here.

Yes, in fact this should be set in the previous patch already to 4.
So I will do that.

> 
>>   typedef struct ReadInfo {
>>       SCCBHeader h;
>>       uint16_t rnmax;
>>       uint8_t rnsize;
>> -    uint8_t  _reserved1[16 - 11];       /* 11-15 */
>> +    uint8_t  _reserved1[15 - 11];       /* 11-14 */
>> +    uint8_t  stsi_parm;                 /* 15-16 */
>>       uint16_t entries_cpu;               /* 16-17 */
>>       uint16_t offset_cpu;                /* 18-19 */
>>       uint8_t  _reserved2[24 - 20];       /* 20-23 */
>> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
>> index eff74479f4..07e3cb4cac 100644
>> --- a/hw/s390x/sclp.c
>> +++ b/hw/s390x/sclp.c
>> @@ -20,6 +20,7 @@
>>   #include "hw/s390x/event-facility.h"
>>   #include "hw/s390x/s390-pci-bus.h"
>>   #include "hw/s390x/ipl.h"
>> +#include "hw/s390x/cpu-topology.h"
>>   static inline SCLPDevice *get_sclp_device(void)
>>   {
>> @@ -125,6 +126,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB 
>> *sccb)
>>       /* CPU information */
>>       prepare_cpu_entries(machine, entries_start, &cpu_count);
>> +    if (s390_has_topology()) {
>> +        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;
> 
> This seems to be in contradiction to what you've said in the commit 
> description - you set it to 4 and not to 2.

Yes, I change the commit message.

Thanks.

Regards,
Pierre
Pierre Morel Jan. 17, 2023, 5:44 p.m. UTC | #4
On 1/11/23 18:52, Nina Schoetterl-Glausch wrote:
> On Thu, 2023-01-05 at 15:53 +0100, Pierre Morel wrote:
>> The maximum nested topology entries is used by the guest to know
>> how many nested topology are available on the machine.
>>
>> Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
>> equivalent of reporting the default value of 2.
>> Let's use the default SCLP value of 2 and increase this value in the
>> future patches implementing higher levels.
>>
>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> 
> Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> if you address the issues Thomas found with the commit description
> and the nits below.

Thanks.

> 
>> ---
>>   include/hw/s390x/sclp.h | 5 +++--
>>   hw/s390x/sclp.c         | 4 ++++
>>   2 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
>> index 712fd68123..4ce852473c 100644
>> --- a/include/hw/s390x/sclp.h
>> +++ b/include/hw/s390x/sclp.h
>> @@ -112,12 +112,13 @@ typedef struct CPUEntry {
>>   } QEMU_PACKED CPUEntry;
>>   
>>   #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
>> -#define SCLP_READ_SCP_INFO_MNEST                2
>> +#define SCLP_READ_SCP_INFO_MNEST                4
>>   typedef struct ReadInfo {
>>       SCCBHeader h;
>>       uint16_t rnmax;
>>       uint8_t rnsize;
>> -    uint8_t  _reserved1[16 - 11];       /* 11-15 */
>> +    uint8_t  _reserved1[15 - 11];       /* 11-14 */
>> +    uint8_t  stsi_parm;                 /* 15-16 */
> 
> The numbering here is the same as the one in the arch doc, instead
> of the maybe more usual one where the right number is exclusive.
> So 15-16 looks like a two byte field, so just do 15 or just drop it.

Yes right, thanks.

> 
>>       uint16_t entries_cpu;               /* 16-17 */
>>       uint16_t offset_cpu;                /* 18-19 */
>>       uint8_t  _reserved2[24 - 20];       /* 20-23 */
>> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
>> index eff74479f4..07e3cb4cac 100644
>> --- a/hw/s390x/sclp.c
>> +++ b/hw/s390x/sclp.c
>> @@ -20,6 +20,7 @@
>>   #include "hw/s390x/event-facility.h"
>>   #include "hw/s390x/s390-pci-bus.h"
>>   #include "hw/s390x/ipl.h"
>> +#include "hw/s390x/cpu-topology.h"
>>   
>>   static inline SCLPDevice *get_sclp_device(void)
>>   {
>> @@ -125,6 +126,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
>>   
>>       /* CPU information */
>>       prepare_cpu_entries(machine, entries_start, &cpu_count);
>> +    if (s390_has_topology()) {
>> +        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;
>> +    }
> 
> Maybe move that up a bit, not sure if it belongs under the CPU information section.
> I'd leave prepare_cpu_entries and read_info->entries_cpu = adjacent in any case.
> 

Yes, I do that.

Thanks,

Regards,
Pierre
Nina Schoetterl-Glausch Jan. 17, 2023, 7:58 p.m. UTC | #5
On Tue, 2023-01-17 at 18:36 +0100, Pierre Morel wrote:
> 
> On 1/11/23 09:57, Thomas Huth wrote:
> > On 05/01/2023 15.53, Pierre Morel wrote:
> > > The maximum nested topology entries is used by the guest to know
> > > how many nested topology are available on the machine.
> > > 
> > > Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
> > > equivalent of reporting the default value of 2.
> > > Let's use the default SCLP value of 2 and increase this value in the
> > > future patches implementing higher levels.
> > 
> > I'm confused ... so does a SCLP value of 2 mean a MNEST level of 4 ?
> 
> Sorry, I forgot to change this.
> MNEST = 0 means no MNEST support and only socket is supported so it is 
> like MNEST = 2.
> MNEST != 0 set the maximum nested level and correct values may be 2,3 or 4.
> But this setting to 4 should already have been done in previous patch 
> where we introduced the books and drawers.

I think setting it to 4 here is fine/preferable, since 2 is the default unless
you tell the guest that more are available, which you do in this patch.
It's only the commit description that is confusing.

> 
> I change the commit message with:
> ---
> s390x/sclp: reporting the maximum nested topology entries
> 
> The maximum nested topology entries is used by the guest to know
> how many nested topology are available on the machine.
> 
> Let's return this information to the guest.
> ---
> 
> > 
> > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> > > ---
> > >   include/hw/s390x/sclp.h | 5 +++--
> > >   hw/s390x/sclp.c         | 4 ++++
> > >   2 files changed, 7 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
> > > index 712fd68123..4ce852473c 100644
> > > --- a/include/hw/s390x/sclp.h
> > > +++ b/include/hw/s390x/sclp.h
> > > @@ -112,12 +112,13 @@ typedef struct CPUEntry {
> > >   } QEMU_PACKED CPUEntry;
> > >   #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
> > > -#define SCLP_READ_SCP_INFO_MNEST                2
> > > +#define SCLP_READ_SCP_INFO_MNEST                4
> > 
> > ... since you update it to 4 here.
> 
> Yes, in fact this should be set in the previous patch already to 4.
> So I will do that.
> 
> > 
> > >   typedef struct ReadInfo {
> > >       SCCBHeader h;
> > >       uint16_t rnmax;
> > >       uint8_t rnsize;
> > > -    uint8_t  _reserved1[16 - 11];       /* 11-15 */
> > > +    uint8_t  _reserved1[15 - 11];       /* 11-14 */
> > > +    uint8_t  stsi_parm;                 /* 15-16 */
> > >       uint16_t entries_cpu;               /* 16-17 */
> > >       uint16_t offset_cpu;                /* 18-19 */
> > >       uint8_t  _reserved2[24 - 20];       /* 20-23 */
> > > diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
> > > index eff74479f4..07e3cb4cac 100644
> > > --- a/hw/s390x/sclp.c
> > > +++ b/hw/s390x/sclp.c
> > > @@ -20,6 +20,7 @@
> > >   #include "hw/s390x/event-facility.h"
> > >   #include "hw/s390x/s390-pci-bus.h"
> > >   #include "hw/s390x/ipl.h"
> > > +#include "hw/s390x/cpu-topology.h"
> > >   static inline SCLPDevice *get_sclp_device(void)
> > >   {
> > > @@ -125,6 +126,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB 
> > > *sccb)
> > >       /* CPU information */
> > >       prepare_cpu_entries(machine, entries_start, &cpu_count);
> > > +    if (s390_has_topology()) {
> > > +        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;
> > 
> > This seems to be in contradiction to what you've said in the commit 
> > description - you set it to 4 and not to 2.
> 
> Yes, I change the commit message.
> 
> Thanks.
> 
> Regards,
> Pierre
>
Pierre Morel Jan. 19, 2023, 1:08 p.m. UTC | #6
On 1/17/23 20:58, Nina Schoetterl-Glausch wrote:
> On Tue, 2023-01-17 at 18:36 +0100, Pierre Morel wrote:
>>
>> On 1/11/23 09:57, Thomas Huth wrote:
>>> On 05/01/2023 15.53, Pierre Morel wrote:
>>>> The maximum nested topology entries is used by the guest to know
>>>> how many nested topology are available on the machine.
>>>>
>>>> Currently, SCLP READ SCP INFO reports MNEST = 0, which is the
>>>> equivalent of reporting the default value of 2.
>>>> Let's use the default SCLP value of 2 and increase this value in the
>>>> future patches implementing higher levels.
>>>
>>> I'm confused ... so does a SCLP value of 2 mean a MNEST level of 4 ?
>>
>> Sorry, I forgot to change this.
>> MNEST = 0 means no MNEST support and only socket is supported so it is
>> like MNEST = 2.
>> MNEST != 0 set the maximum nested level and correct values may be 2,3 or 4.
>> But this setting to 4 should already have been done in previous patch
>> where we introduced the books and drawers.
> 
> I think setting it to 4 here is fine/preferable, since 2 is the default unless
> you tell the guest that more are available, which you do in this patch.
> It's only the commit description that is confusing.

Yes.
Only the commit message is confusing, it is to be set on 4 in this patch.

I change the commit message to:

---
s390x/sclp: reporting the maximum nested topology entries

The maximum nested topology entries is used by the guest to
know how many nested topology are available on the machine.

Let change the MNEST value from 2 to 4 in the SCLP READ INFO
structure now that we support books and drawers.
---

is it OK ?

Regards,
Pierre

> 
>>
>> I change the commit message with:
>> ---
>> s390x/sclp: reporting the maximum nested topology entries
>>
>> The maximum nested topology entries is used by the guest to know
>> how many nested topology are available on the machine.
>>
>> Let's return this information to the guest.
>> ---
>>
>>>
>>>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>>>> ---
>>>>    include/hw/s390x/sclp.h | 5 +++--
>>>>    hw/s390x/sclp.c         | 4 ++++
>>>>    2 files changed, 7 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
>>>> index 712fd68123..4ce852473c 100644
>>>> --- a/include/hw/s390x/sclp.h
>>>> +++ b/include/hw/s390x/sclp.h
>>>> @@ -112,12 +112,13 @@ typedef struct CPUEntry {
>>>>    } QEMU_PACKED CPUEntry;
>>>>    #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
>>>> -#define SCLP_READ_SCP_INFO_MNEST                2
>>>> +#define SCLP_READ_SCP_INFO_MNEST                4
>>>
>>> ... since you update it to 4 here.
>>
>> Yes, in fact this should be set in the previous patch already to 4.
>> So I will do that.
>>
>>>
>>>>    typedef struct ReadInfo {
>>>>        SCCBHeader h;
>>>>        uint16_t rnmax;
>>>>        uint8_t rnsize;
>>>> -    uint8_t  _reserved1[16 - 11];       /* 11-15 */
>>>> +    uint8_t  _reserved1[15 - 11];       /* 11-14 */
>>>> +    uint8_t  stsi_parm;                 /* 15-16 */
>>>>        uint16_t entries_cpu;               /* 16-17 */
>>>>        uint16_t offset_cpu;                /* 18-19 */
>>>>        uint8_t  _reserved2[24 - 20];       /* 20-23 */
>>>> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
>>>> index eff74479f4..07e3cb4cac 100644
>>>> --- a/hw/s390x/sclp.c
>>>> +++ b/hw/s390x/sclp.c
>>>> @@ -20,6 +20,7 @@
>>>>    #include "hw/s390x/event-facility.h"
>>>>    #include "hw/s390x/s390-pci-bus.h"
>>>>    #include "hw/s390x/ipl.h"
>>>> +#include "hw/s390x/cpu-topology.h"
>>>>    static inline SCLPDevice *get_sclp_device(void)
>>>>    {
>>>> @@ -125,6 +126,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB
>>>> *sccb)
>>>>        /* CPU information */
>>>>        prepare_cpu_entries(machine, entries_start, &cpu_count);
>>>> +    if (s390_has_topology()) {
>>>> +        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;
>>>
>>> This seems to be in contradiction to what you've said in the commit
>>> description - you set it to 4 and not to 2.
>>
>> Yes, I change the commit message.
>>
>> Thanks.
>>
>> Regards,
>> Pierre
>>
>
diff mbox series

Patch

diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
index 712fd68123..4ce852473c 100644
--- a/include/hw/s390x/sclp.h
+++ b/include/hw/s390x/sclp.h
@@ -112,12 +112,13 @@  typedef struct CPUEntry {
 } QEMU_PACKED CPUEntry;
 
 #define SCLP_READ_SCP_INFO_FIXED_CPU_OFFSET     128
-#define SCLP_READ_SCP_INFO_MNEST                2
+#define SCLP_READ_SCP_INFO_MNEST                4
 typedef struct ReadInfo {
     SCCBHeader h;
     uint16_t rnmax;
     uint8_t rnsize;
-    uint8_t  _reserved1[16 - 11];       /* 11-15 */
+    uint8_t  _reserved1[15 - 11];       /* 11-14 */
+    uint8_t  stsi_parm;                 /* 15-16 */
     uint16_t entries_cpu;               /* 16-17 */
     uint16_t offset_cpu;                /* 18-19 */
     uint8_t  _reserved2[24 - 20];       /* 20-23 */
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index eff74479f4..07e3cb4cac 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -20,6 +20,7 @@ 
 #include "hw/s390x/event-facility.h"
 #include "hw/s390x/s390-pci-bus.h"
 #include "hw/s390x/ipl.h"
+#include "hw/s390x/cpu-topology.h"
 
 static inline SCLPDevice *get_sclp_device(void)
 {
@@ -125,6 +126,9 @@  static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
 
     /* CPU information */
     prepare_cpu_entries(machine, entries_start, &cpu_count);
+    if (s390_has_topology()) {
+        read_info->stsi_parm = SCLP_READ_SCP_INFO_MNEST;
+    }
     read_info->entries_cpu = cpu_to_be16(cpu_count);
     read_info->offset_cpu = cpu_to_be16(offset_cpu);
     read_info->highest_cpu = cpu_to_be16(machine->smp.max_cpus - 1);