1QAPI interface for S390 CPU topology
2====================================
3
4The following sections will explain the QAPI interface for S390 CPU topology
5with the help of exemplary output.
6For this, let's assume that QEMU has been started with the following
7command, defining 4 CPUs, where CPU[0] is defined by the -smp argument and will
8have default values:
9
10.. code-block:: bash
11
12 qemu-system-s390x \
13    -enable-kvm \
14    -cpu z14,ctop=on \
15    -smp 1,drawers=3,books=3,sockets=2,cores=2,maxcpus=36 \
16    -device z14-s390x-cpu,core-id=19,entitlement=high \
17    -device z14-s390x-cpu,core-id=11,entitlement=low \
18    -device z14-s390x-cpu,core-id=112,entitlement=high \
19   ...
20
21Additions to query-cpus-fast
22----------------------------
23
24The command query-cpus-fast allows querying the topology tree and
25modifiers for all configured vCPUs.
26
27.. code-block:: QMP
28
29 { "execute": "query-cpus-fast" }
30 {
31  "return": [
32    {
33      "dedicated": false,
34      "thread-id": 536993,
35      "props": {
36        "core-id": 0,
37        "socket-id": 0,
38        "drawer-id": 0,
39        "book-id": 0
40      },
41      "cpu-state": "operating",
42      "entitlement": "medium",
43      "qom-path": "/machine/unattached/device[0]",
44      "cpu-index": 0,
45      "target": "s390x"
46    },
47    {
48      "dedicated": false,
49      "thread-id": 537003,
50      "props": {
51        "core-id": 19,
52        "socket-id": 1,
53        "drawer-id": 0,
54        "book-id": 2
55      },
56      "cpu-state": "operating",
57      "entitlement": "high",
58      "qom-path": "/machine/peripheral-anon/device[0]",
59      "cpu-index": 19,
60      "target": "s390x"
61    },
62    {
63      "dedicated": false,
64      "thread-id": 537004,
65      "props": {
66        "core-id": 11,
67        "socket-id": 1,
68        "drawer-id": 0,
69        "book-id": 1
70      },
71      "cpu-state": "operating",
72      "entitlement": "low",
73      "qom-path": "/machine/peripheral-anon/device[1]",
74      "cpu-index": 11,
75      "target": "s390x"
76    },
77    {
78      "dedicated": true,
79      "thread-id": 537005,
80      "props": {
81        "core-id": 112,
82        "socket-id": 0,
83        "drawer-id": 3,
84        "book-id": 2
85      },
86      "cpu-state": "operating",
87      "entitlement": "high",
88      "qom-path": "/machine/peripheral-anon/device[2]",
89      "cpu-index": 112,
90      "target": "s390x"
91    }
92  ]
93 }
94
95
96QAPI command: set-cpu-topology
97------------------------------
98
99The command set-cpu-topology allows modifying the topology tree
100or the topology modifiers of a vCPU in the configuration.
101
102.. code-block:: QMP
103
104    { "execute": "set-cpu-topology",
105      "arguments": {
106         "core-id": 11,
107         "socket-id": 0,
108         "book-id": 0,
109         "drawer-id": 0,
110         "entitlement": "low",
111         "dedicated": false
112      }
113    }
114    {"return": {}}
115
116The core-id parameter is the only mandatory parameter and every
117unspecified parameter keeps its previous value.
118
119QAPI event CPU_POLARIZATION_CHANGE
120----------------------------------
121
122When a guest requests a modification of the polarization,
123QEMU sends a CPU_POLARIZATION_CHANGE event.
124
125When requesting the change, the guest only specifies horizontal or
126vertical polarization.
127It is the job of the entity administrating QEMU to set the dedication and fine
128grained vertical entitlement in response to this event.
129
130Note that a vertical polarized dedicated vCPU can only have a high
131entitlement, giving 6 possibilities for vCPU polarization:
132
133- Horizontal
134- Horizontal dedicated
135- Vertical low
136- Vertical medium
137- Vertical high
138- Vertical high dedicated
139
140Example of the event received when the guest issues the CPU instruction
141Perform Topology Function PTF(0) to request an horizontal polarization:
142
143.. code-block:: QMP
144
145  {
146    "timestamp": {
147      "seconds": 1687870305,
148      "microseconds": 566299
149    },
150    "event": "CPU_POLARIZATION_CHANGE",
151    "data": {
152      "polarization": "horizontal"
153    }
154  }
155
156QAPI query command: query-s390x-cpu-polarization
157------------------------------------------------
158
159The query command query-s390x-cpu-polarization returns the current
160CPU polarization of the machine.
161In this case the guest previously issued a PTF(1) to request vertical polarization:
162
163.. code-block:: QMP
164
165    { "execute": "query-s390x-cpu-polarization" }
166    {
167        "return": {
168          "polarization": "vertical"
169        }
170    }
171