diff mbox series

[v14,10/11] qapi/s390/cpu topology: POLARITY_CHANGE qapi event

Message ID 20230105145313.168489-11-pmorel@linux.ibm.com
State New
Headers show
Series s390x: CPU Topology | expand

Commit Message

Pierre Morel Jan. 5, 2023, 2:53 p.m. UTC
When the guest asks to change the polarity this change
is forwarded to the admin using QAPI.
The admin is supposed to take according decisions concerning
CPU provisioning.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
---
 qapi/machine-target.json | 21 +++++++++++++++++++++
 hw/s390x/cpu-topology.c  |  2 ++
 2 files changed, 23 insertions(+)

Comments

Thomas Huth Jan. 12, 2023, 11:52 a.m. UTC | #1
On 05/01/2023 15.53, Pierre Morel wrote:
> When the guest asks to change the polarity this change
> is forwarded to the admin using QAPI.
> The admin is supposed to take according decisions concerning
> CPU provisioning.

I somehow doubt that an average admin will monitor QEMU for such events ... 
so this rather should be handled by upper layers like libvirt one day?

> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> ---
>   qapi/machine-target.json | 21 +++++++++++++++++++++
>   hw/s390x/cpu-topology.c  |  2 ++
>   2 files changed, 23 insertions(+)
> 
> diff --git a/qapi/machine-target.json b/qapi/machine-target.json
> index 927618a78f..10235cfb45 100644
> --- a/qapi/machine-target.json
> +++ b/qapi/machine-target.json
> @@ -437,3 +437,24 @@
>     'returns': ['S390CpuTopology'],
>     'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] }
>   }
> +
> +##
> +# @POLARITY_CHANGE:

I'd maybe rather call it CPU_POLARITY_CHANGE ... in case "polarity" is one 
day also used for some other devices.

> +#
> +# Emitted when the guest asks to change the polarity.
> +#
> +# @polarity: polarity specified by the guest

Please elaborate: Where does the value come from (the PTF instruction)? 
Which values are possible?

  Thomas


> +#
> +# Since: 8.0
> +#
> +# Example:
> +#
> +# <- { "event": "POLARITY_CHANGE",
> +#      "data": { "polarity": 0 },
> +#      "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
> +#
> +##
> +{ 'event': 'POLARITY_CHANGE',
> +  'data': { 'polarity': 'int' },
> +   'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM'] }
> +}
> diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c
> index c3748654ff..45621387d5 100644
> --- a/hw/s390x/cpu-topology.c
> +++ b/hw/s390x/cpu-topology.c
> @@ -19,6 +19,7 @@
>   #include "hw/s390x/s390-virtio-ccw.h"
>   #include "hw/s390x/cpu-topology.h"
>   #include "qapi/qapi-commands-machine-target.h"
> +#include "qapi/qapi-events-machine-target.h"
>   #include "qapi/qmp/qdict.h"
>   #include "monitor/hmp.h"
>   #include "monitor/monitor.h"
> @@ -128,6 +129,7 @@ void s390_topology_set_polarity(int polarity)
>           }
>       }
>       s390_cpu_topology_set();
> +    qapi_event_send_polarity_change(polarity);
>   }
>   
>   /*
Pierre Morel Jan. 18, 2023, 5:09 p.m. UTC | #2
On 1/12/23 12:52, Thomas Huth wrote:
> On 05/01/2023 15.53, Pierre Morel wrote:
>> When the guest asks to change the polarity this change
>> is forwarded to the admin using QAPI.
>> The admin is supposed to take according decisions concerning
>> CPU provisioning.
> 
> I somehow doubt that an average admin will monitor QEMU for such events 
> ... so this rather should be handled by upper layers like libvirt one day?

Yes.

> 
>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>> ---
>>   qapi/machine-target.json | 21 +++++++++++++++++++++
>>   hw/s390x/cpu-topology.c  |  2 ++
>>   2 files changed, 23 insertions(+)
>>
>> diff --git a/qapi/machine-target.json b/qapi/machine-target.json
>> index 927618a78f..10235cfb45 100644
>> --- a/qapi/machine-target.json
>> +++ b/qapi/machine-target.json
>> @@ -437,3 +437,24 @@
>>     'returns': ['S390CpuTopology'],
>>     'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] }
>>   }
>> +
>> +##
>> +# @POLARITY_CHANGE:
> 
> I'd maybe rather call it CPU_POLARITY_CHANGE ... in case "polarity" is 
> one day also used for some other devices.

OK, right.

> 
>> +#
>> +# Emitted when the guest asks to change the polarity.
>> +#
>> +# @polarity: polarity specified by the guest
> 
> Please elaborate: Where does the value come from (the PTF instruction)? 
> Which values are possible?

Yes what about:

# @polarity: the guest can specify with the PTF instruction a horizontal
#            or a vertical polarity.
#	     On horizontal polarity the host is expected to provision
#            the vCPU equally.
#            On vertical polarity the host can provision each vCPU
#            differently
#            The guest can get information on the provisioning with
#            the STSI(15) instruction.


Regards,
Pierre
Thomas Huth Jan. 20, 2023, 11:56 a.m. UTC | #3
On 18/01/2023 18.09, Pierre Morel wrote:
> 
> On 1/12/23 12:52, Thomas Huth wrote:
>> On 05/01/2023 15.53, Pierre Morel wrote:
...>>> +#
>>> +# Emitted when the guest asks to change the polarity.
>>> +#
>>> +# @polarity: polarity specified by the guest
>>
>> Please elaborate: Where does the value come from (the PTF instruction)? 
>> Which values are possible?
> 
> Yes what about:
> 
> # @polarity: the guest can specify with the PTF instruction a horizontal
> #            or a vertical polarity.

Maybe something like: "The guest can tell the host (via the PTF instruction) 
whether a CPU should have horizontal or vertical polarity." ?

> #         On horizontal polarity the host is expected to provision
> #            the vCPU equally.

Maybe: "all vCPUs equally" ?
Or: "each vCPU equally" ?

> #            On vertical polarity the host can provision each vCPU
> #            differently
> #            The guest can get information on the provisioning with
> #            the STSI(15) instruction.

  Thomas
Pierre Morel Jan. 20, 2023, 2:22 p.m. UTC | #4
On 1/20/23 12:56, Thomas Huth wrote:
> On 18/01/2023 18.09, Pierre Morel wrote:
>>
>> On 1/12/23 12:52, Thomas Huth wrote:
>>> On 05/01/2023 15.53, Pierre Morel wrote:
> ...>>> +#

OK

>>>> +# Emitted when the guest asks to change the polarity.
>>>> +#
>>>> +# @polarity: polarity specified by the guest
>>>
>>> Please elaborate: Where does the value come from (the PTF 
>>> instruction)? Which values are possible?
>>
>> Yes what about:
>>
>> # @polarity: the guest can specify with the PTF instruction a horizontal
>> #            or a vertical polarity.
> 
> Maybe something like: "The guest can tell the host (via the PTF 
> instruction) whether a CPU should have horizontal or vertical polarity." ?

Yes thanks, much better.

> 
>> #         On horizontal polarity the host is expected to provision
>> #            the vCPU equally.
> 
> Maybe: "all vCPUs equally" ?
> Or: "each vCPU equally" ?

yes, thx.


> 
>> #            On vertical polarity the host can provision each vCPU
>> #            differently
>> #            The guest can get information on the provisioning with
>> #            the STSI(15) instruction.
> 
>   Thomas
> 

I make the changes.

Regards,
Pierre
diff mbox series

Patch

diff --git a/qapi/machine-target.json b/qapi/machine-target.json
index 927618a78f..10235cfb45 100644
--- a/qapi/machine-target.json
+++ b/qapi/machine-target.json
@@ -437,3 +437,24 @@ 
   'returns': ['S390CpuTopology'],
   'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] }
 }
+
+##
+# @POLARITY_CHANGE:
+#
+# Emitted when the guest asks to change the polarity.
+#
+# @polarity: polarity specified by the guest
+#
+# Since: 8.0
+#
+# Example:
+#
+# <- { "event": "POLARITY_CHANGE",
+#      "data": { "polarity": 0 },
+#      "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
+#
+##
+{ 'event': 'POLARITY_CHANGE',
+  'data': { 'polarity': 'int' },
+   'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM'] }
+}
diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c
index c3748654ff..45621387d5 100644
--- a/hw/s390x/cpu-topology.c
+++ b/hw/s390x/cpu-topology.c
@@ -19,6 +19,7 @@ 
 #include "hw/s390x/s390-virtio-ccw.h"
 #include "hw/s390x/cpu-topology.h"
 #include "qapi/qapi-commands-machine-target.h"
+#include "qapi/qapi-events-machine-target.h"
 #include "qapi/qmp/qdict.h"
 #include "monitor/hmp.h"
 #include "monitor/monitor.h"
@@ -128,6 +129,7 @@  void s390_topology_set_polarity(int polarity)
         }
     }
     s390_cpu_topology_set();
+    qapi_event_send_polarity_change(polarity);
 }
 
 /*