| .. SPDX-License-Identifier: GPL-2.0 |
| |
| ============================= |
| The s390 DIAGNOSE call on KVM |
| ============================= |
| |
| KVM on s390 supports the DIAGNOSE call for making hypercalls, both for |
| native hypercalls and for selected hypercalls found on other s390 |
| hypervisors. |
| |
| Note that bits are numbered as by the usual s390 convention (most significant |
| bit on the left). |
| |
| |
| General remarks |
| --------------- |
| |
| DIAGNOSE calls by the guest cause a mandatory intercept. This implies |
| all supported DIAGNOSE calls need to be handled by either KVM or its |
| userspace. |
| |
| All DIAGNOSE calls supported by KVM use the RS-a format:: |
| |
| -------------------------------------- |
| | '83' | R1 | R3 | B2 | D2 | |
| -------------------------------------- |
| 0 8 12 16 20 31 |
| |
| The second-operand address (obtained by the base/displacement calculation) |
| is not used to address data. Instead, bits 48-63 of this address specify |
| the function code, and bits 0-47 are ignored. |
| |
| The supported DIAGNOSE function codes vary by the userspace used. For |
| DIAGNOSE function codes not specific to KVM, please refer to the |
| documentation for the s390 hypervisors defining them. |
| |
| |
| DIAGNOSE function code 'X'500' - KVM virtio functions |
| ----------------------------------------------------- |
| |
| If the function code specifies 0x500, various virtio-related functions |
| are performed. |
| |
| General register 1 contains the virtio subfunction code. Supported |
| virtio subfunctions depend on KVM's userspace. Generally, userspace |
| provides either s390-virtio (subcodes 0-2) or virtio-ccw (subcode 3). |
| |
| Upon completion of the DIAGNOSE instruction, general register 2 contains |
| the function's return code, which is either a return code or a subcode |
| specific value. |
| |
| Subcode 0 - s390-virtio notification and early console printk |
| Handled by userspace. |
| |
| Subcode 1 - s390-virtio reset |
| Handled by userspace. |
| |
| Subcode 2 - s390-virtio set status |
| Handled by userspace. |
| |
| Subcode 3 - virtio-ccw notification |
| Handled by either userspace or KVM (ioeventfd case). |
| |
| General register 2 contains a subchannel-identification word denoting |
| the subchannel of the virtio-ccw proxy device to be notified. |
| |
| General register 3 contains the number of the virtqueue to be notified. |
| |
| General register 4 contains a 64bit identifier for KVM usage (the |
| kvm_io_bus cookie). If general register 4 does not contain a valid |
| identifier, it is ignored. |
| |
| After completion of the DIAGNOSE call, general register 2 may contain |
| a 64bit identifier (in the kvm_io_bus cookie case), or a negative |
| error value, if an internal error occurred. |
| |
| See also the virtio standard for a discussion of this hypercall. |
| |
| |
| DIAGNOSE function code 'X'501 - KVM breakpoint |
| ---------------------------------------------- |
| |
| If the function code specifies 0x501, breakpoint functions may be performed. |
| This function code is handled by userspace. |
| |
| This diagnose function code has no subfunctions and uses no parameters. |