Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / Documentation / virtual / kvm / devices / s390_flic.txt
1 FLIC (floating interrupt controller)
2 ====================================
3
4 FLIC handles floating (non per-cpu) interrupts, i.e. I/O, service and some
5 machine check interruptions. All interrupts are stored in a per-vm list of
6 pending interrupts. FLIC performs operations on this list.
7
8 Only one FLIC instance may be instantiated.
9
10 FLIC provides support to
11 - add interrupts (KVM_DEV_FLIC_ENQUEUE)
12 - inspect currently pending interrupts (KVM_FLIC_GET_ALL_IRQS)
13 - purge all pending floating interrupts (KVM_DEV_FLIC_CLEAR_IRQS)
14 - enable/disable for the guest transparent async page faults
15 - register and modify adapter interrupt sources (KVM_DEV_FLIC_ADAPTER_*)
16
17 Groups:
18   KVM_DEV_FLIC_ENQUEUE
19     Passes a buffer and length into the kernel which are then injected into
20     the list of pending interrupts.
21     attr->addr contains the pointer to the buffer and attr->attr contains
22     the length of the buffer.
23     The format of the data structure kvm_s390_irq as it is copied from userspace
24     is defined in usr/include/linux/kvm.h.
25
26   KVM_DEV_FLIC_GET_ALL_IRQS
27     Copies all floating interrupts into a buffer provided by userspace.
28     When the buffer is too small it returns -ENOMEM, which is the indication
29     for userspace to try again with a bigger buffer.
30     All interrupts remain pending, i.e. are not deleted from the list of
31     currently pending interrupts.
32     attr->addr contains the userspace address of the buffer into which all
33     interrupt data will be copied.
34     attr->attr contains the size of the buffer in bytes.
35
36   KVM_DEV_FLIC_CLEAR_IRQS
37     Simply deletes all elements from the list of currently pending floating
38     interrupts.  No interrupts are injected into the guest.
39
40   KVM_DEV_FLIC_APF_ENABLE
41     Enables async page faults for the guest. So in case of a major page fault
42     the host is allowed to handle this async and continues the guest.
43
44   KVM_DEV_FLIC_APF_DISABLE_WAIT
45     Disables async page faults for the guest and waits until already pending
46     async page faults are done. This is necessary to trigger a completion interrupt
47     for every init interrupt before migrating the interrupt list.
48
49   KVM_DEV_FLIC_ADAPTER_REGISTER
50     Register an I/O adapter interrupt source. Takes a kvm_s390_io_adapter
51     describing the adapter to register:
52
53 struct kvm_s390_io_adapter {
54         __u32 id;
55         __u8 isc;
56         __u8 maskable;
57         __u8 swap;
58         __u8 pad;
59 };
60
61    id contains the unique id for the adapter, isc the I/O interruption subclass
62    to use, maskable whether this adapter may be masked (interrupts turned off)
63    and swap whether the indicators need to be byte swapped.
64
65
66   KVM_DEV_FLIC_ADAPTER_MODIFY
67     Modifies attributes of an existing I/O adapter interrupt source. Takes
68     a kvm_s390_io_adapter_req specifiying the adapter and the operation:
69
70 struct kvm_s390_io_adapter_req {
71         __u32 id;
72         __u8 type;
73         __u8 mask;
74         __u16 pad0;
75         __u64 addr;
76 };
77
78     id specifies the adapter and type the operation. The supported operations
79     are:
80
81     KVM_S390_IO_ADAPTER_MASK
82       mask or unmask the adapter, as specified in mask
83
84     KVM_S390_IO_ADAPTER_MAP
85       perform a gmap translation for the guest address provided in addr,
86       pin a userspace page for the translated address and add it to the
87       list of mappings
88
89     KVM_S390_IO_ADAPTER_UNMAP
90       release a userspace page for the translated address specified in addr
91       from the list of mappings