Cornelia Huck | d9101fc | 2013-11-13 11:15:02 +0100 | [diff] [blame] | 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. |
David Hildenbrand | ffad018 | 2014-02-03 17:18:02 +0100 | [diff] [blame] | 81 | |
| 82 | This diagnose function code has no subfunctions and uses no parameters. |