Blame view

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