|
@@ -0,0 +1,80 @@
|
|
|
+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).
|
|
|
+
|
|
|
+ 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.
|