-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
KVM: s390: diagnose call documentation
Add some further documentation on the DIAGNOSE calls we support. Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
- Loading branch information
Cornelia Huck
committed
Dec 11, 2013
1 parent
d6d63b5
commit d9101fc
Showing
2 changed files
with
83 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |