]>
Commit | Line | Data |
---|---|---|
d9101fca CH |
1 | The s390 DIAGNOSE call on KVM |
2 | ============================= | |
3 | ||
4 | KVM on s390 supports the DIAGNOSE call for making hypercalls, both for | |
5 | native hypercalls and for selected hypercalls found on other s390 | |
6 | hypervisors. | |
7 | ||
8 | Note that bits are numbered as by the usual s390 convention (most significant | |
9 | bit on the left). | |
10 | ||
11 | ||
12 | General remarks | |
13 | --------------- | |
14 | ||
15 | DIAGNOSE calls by the guest cause a mandatory intercept. This implies | |
16 | all supported DIAGNOSE calls need to be handled by either KVM or its | |
17 | userspace. | |
18 | ||
19 | All DIAGNOSE calls supported by KVM use the RS-a format: | |
20 | ||
21 | -------------------------------------- | |
22 | | '83' | R1 | R3 | B2 | D2 | | |
23 | -------------------------------------- | |
24 | 0 8 12 16 20 31 | |
25 | ||
26 | The second-operand address (obtained by the base/displacement calculation) | |
27 | is not used to address data. Instead, bits 48-63 of this address specify | |
28 | the function code, and bits 0-47 are ignored. | |
29 | ||
30 | The supported DIAGNOSE function codes vary by the userspace used. For | |
31 | DIAGNOSE function codes not specific to KVM, please refer to the | |
32 | documentation for the s390 hypervisors defining them. | |
33 | ||
34 | ||
35 | DIAGNOSE function code 'X'500' - KVM virtio functions | |
36 | ----------------------------------------------------- | |
37 | ||
38 | If the function code specifies 0x500, various virtio-related functions | |
39 | are performed. | |
40 | ||
41 | General register 1 contains the virtio subfunction code. Supported | |
42 | virtio subfunctions depend on KVM's userspace. Generally, userspace | |
43 | provides either s390-virtio (subcodes 0-2) or virtio-ccw (subcode 3). | |
44 | ||
45 | Upon completion of the DIAGNOSE instruction, general register 2 contains | |
46 | the function's return code, which is either a return code or a subcode | |
47 | specific value. | |
48 | ||
49 | Subcode 0 - s390-virtio notification and early console printk | |
50 | Handled by userspace. | |
51 | ||
52 | Subcode 1 - s390-virtio reset | |
53 | Handled by userspace. | |
54 | ||
55 | Subcode 2 - s390-virtio set status | |
56 | Handled by userspace. | |
57 | ||
58 | Subcode 3 - virtio-ccw notification | |
59 | Handled by either userspace or KVM (ioeventfd case). | |
60 | ||
61 | General register 2 contains a subchannel-identification word denoting | |
62 | the subchannel of the virtio-ccw proxy device to be notified. | |
63 | ||
64 | General register 3 contains the number of the virtqueue to be notified. | |
65 | ||
66 | General register 4 contains a 64bit identifier for KVM usage (the | |
67 | kvm_io_bus cookie). If general register 4 does not contain a valid | |
68 | identifier, it is ignored. | |
69 | ||
70 | After completion of the DIAGNOSE call, general register 2 may contain | |
71 | a 64bit identifier (in the kvm_io_bus cookie case). | |
72 | ||
73 | See also the virtio standard for a discussion of this hypercall. | |
74 | ||
75 | ||
76 | DIAGNOSE function code 'X'501 - KVM breakpoint | |
77 | ---------------------------------------------- | |
78 | ||
79 | If the function code specifies 0x501, breakpoint functions may be performed. | |
80 | This function code is handled by userspace. | |
ffad018c DH |
81 | |
82 | This diagnose function code has no subfunctions and uses no parameters. |