~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/s390/include/asm/kvm_para.h

Version: ~ [ linux-5.2-rc4 ] ~ [ linux-5.1.9 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.50 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.125 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.181 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.181 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.68 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * definition for paravirtual devices on s390
  3  *
  4  * Copyright IBM Corp. 2008
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License (version 2 only)
  8  * as published by the Free Software Foundation.
  9  *
 10  *    Author(s): Christian Borntraeger <borntraeger@de.ibm.com>
 11  */
 12 /*
 13  * Hypercalls for KVM on s390. The calling convention is similar to the
 14  * s390 ABI, so we use R2-R6 for parameters 1-5. In addition we use R1
 15  * as hypercall number and R7 as parameter 6. The return value is
 16  * written to R2. We use the diagnose instruction as hypercall. To avoid
 17  * conflicts with existing diagnoses for LPAR and z/VM, we do not use
 18  * the instruction encoded number, but specify the number in R1 and
 19  * use 0x500 as KVM hypercall
 20  *
 21  * Copyright IBM Corp. 2007,2008
 22  * Author(s): Christian Borntraeger <borntraeger@de.ibm.com>
 23  *
 24  * This work is licensed under the terms of the GNU GPL, version 2.
 25  */
 26 #ifndef __S390_KVM_PARA_H
 27 #define __S390_KVM_PARA_H
 28 
 29 #include <uapi/asm/kvm_para.h>
 30 #include <asm/diag.h>
 31 
 32 static inline long __kvm_hypercall0(unsigned long nr)
 33 {
 34         register unsigned long __nr asm("1") = nr;
 35         register long __rc asm("2");
 36 
 37         asm volatile ("diag 2,4,0x500\n"
 38                       : "=d" (__rc) : "d" (__nr): "memory", "cc");
 39         return __rc;
 40 }
 41 
 42 static inline long kvm_hypercall0(unsigned long nr)
 43 {
 44         diag_stat_inc(DIAG_STAT_X500);
 45         return __kvm_hypercall0(nr);
 46 }
 47 
 48 static inline long __kvm_hypercall1(unsigned long nr, unsigned long p1)
 49 {
 50         register unsigned long __nr asm("1") = nr;
 51         register unsigned long __p1 asm("2") = p1;
 52         register long __rc asm("2");
 53 
 54         asm volatile ("diag 2,4,0x500\n"
 55                       : "=d" (__rc) : "d" (__nr), "" (__p1) : "memory", "cc");
 56         return __rc;
 57 }
 58 
 59 static inline long kvm_hypercall1(unsigned long nr, unsigned long p1)
 60 {
 61         diag_stat_inc(DIAG_STAT_X500);
 62         return __kvm_hypercall1(nr, p1);
 63 }
 64 
 65 static inline long __kvm_hypercall2(unsigned long nr, unsigned long p1,
 66                                unsigned long p2)
 67 {
 68         register unsigned long __nr asm("1") = nr;
 69         register unsigned long __p1 asm("2") = p1;
 70         register unsigned long __p2 asm("3") = p2;
 71         register long __rc asm("2");
 72 
 73         asm volatile ("diag 2,4,0x500\n"
 74                       : "=d" (__rc) : "d" (__nr), "" (__p1), "d" (__p2)
 75                       : "memory", "cc");
 76         return __rc;
 77 }
 78 
 79 static inline long kvm_hypercall2(unsigned long nr, unsigned long p1,
 80                                unsigned long p2)
 81 {
 82         diag_stat_inc(DIAG_STAT_X500);
 83         return __kvm_hypercall2(nr, p1, p2);
 84 }
 85 
 86 static inline long __kvm_hypercall3(unsigned long nr, unsigned long p1,
 87                                unsigned long p2, unsigned long p3)
 88 {
 89         register unsigned long __nr asm("1") = nr;
 90         register unsigned long __p1 asm("2") = p1;
 91         register unsigned long __p2 asm("3") = p2;
 92         register unsigned long __p3 asm("4") = p3;
 93         register long __rc asm("2");
 94 
 95         asm volatile ("diag 2,4,0x500\n"
 96                       : "=d" (__rc) : "d" (__nr), "" (__p1), "d" (__p2),
 97                         "d" (__p3) : "memory", "cc");
 98         return __rc;
 99 }
100 
101 static inline long kvm_hypercall3(unsigned long nr, unsigned long p1,
102                                unsigned long p2, unsigned long p3)
103 {
104         diag_stat_inc(DIAG_STAT_X500);
105         return __kvm_hypercall3(nr, p1, p2, p3);
106 }
107 
108 static inline long __kvm_hypercall4(unsigned long nr, unsigned long p1,
109                                unsigned long p2, unsigned long p3,
110                                unsigned long p4)
111 {
112         register unsigned long __nr asm("1") = nr;
113         register unsigned long __p1 asm("2") = p1;
114         register unsigned long __p2 asm("3") = p2;
115         register unsigned long __p3 asm("4") = p3;
116         register unsigned long __p4 asm("5") = p4;
117         register long __rc asm("2");
118 
119         asm volatile ("diag 2,4,0x500\n"
120                       : "=d" (__rc) : "d" (__nr), "" (__p1), "d" (__p2),
121                         "d" (__p3), "d" (__p4) : "memory", "cc");
122         return __rc;
123 }
124 
125 static inline long kvm_hypercall4(unsigned long nr, unsigned long p1,
126                                unsigned long p2, unsigned long p3,
127                                unsigned long p4)
128 {
129         diag_stat_inc(DIAG_STAT_X500);
130         return __kvm_hypercall4(nr, p1, p2, p3, p4);
131 }
132 
133 static inline long __kvm_hypercall5(unsigned long nr, unsigned long p1,
134                                unsigned long p2, unsigned long p3,
135                                unsigned long p4, unsigned long p5)
136 {
137         register unsigned long __nr asm("1") = nr;
138         register unsigned long __p1 asm("2") = p1;
139         register unsigned long __p2 asm("3") = p2;
140         register unsigned long __p3 asm("4") = p3;
141         register unsigned long __p4 asm("5") = p4;
142         register unsigned long __p5 asm("6") = p5;
143         register long __rc asm("2");
144 
145         asm volatile ("diag 2,4,0x500\n"
146                       : "=d" (__rc) : "d" (__nr), "" (__p1), "d" (__p2),
147                         "d" (__p3), "d" (__p4), "d" (__p5)  : "memory", "cc");
148         return __rc;
149 }
150 
151 static inline long kvm_hypercall5(unsigned long nr, unsigned long p1,
152                                unsigned long p2, unsigned long p3,
153                                unsigned long p4, unsigned long p5)
154 {
155         diag_stat_inc(DIAG_STAT_X500);
156         return __kvm_hypercall5(nr, p1, p2, p3, p4, p5);
157 }
158 
159 static inline long __kvm_hypercall6(unsigned long nr, unsigned long p1,
160                                unsigned long p2, unsigned long p3,
161                                unsigned long p4, unsigned long p5,
162                                unsigned long p6)
163 {
164         register unsigned long __nr asm("1") = nr;
165         register unsigned long __p1 asm("2") = p1;
166         register unsigned long __p2 asm("3") = p2;
167         register unsigned long __p3 asm("4") = p3;
168         register unsigned long __p4 asm("5") = p4;
169         register unsigned long __p5 asm("6") = p5;
170         register unsigned long __p6 asm("7") = p6;
171         register long __rc asm("2");
172 
173         asm volatile ("diag 2,4,0x500\n"
174                       : "=d" (__rc) : "d" (__nr), "" (__p1), "d" (__p2),
175                         "d" (__p3), "d" (__p4), "d" (__p5), "d" (__p6)
176                       : "memory", "cc");
177         return __rc;
178 }
179 
180 static inline long kvm_hypercall6(unsigned long nr, unsigned long p1,
181                                unsigned long p2, unsigned long p3,
182                                unsigned long p4, unsigned long p5,
183                                unsigned long p6)
184 {
185         diag_stat_inc(DIAG_STAT_X500);
186         return __kvm_hypercall6(nr, p1, p2, p3, p4, p5, p6);
187 }
188 
189 /* kvm on s390 is always paravirtualization enabled */
190 static inline int kvm_para_available(void)
191 {
192         return 1;
193 }
194 
195 /* No feature bits are currently assigned for kvm on s390 */
196 static inline unsigned int kvm_arch_para_features(void)
197 {
198         return 0;
199 }
200 
201 static inline bool kvm_check_and_clear_guest_paused(void)
202 {
203         return false;
204 }
205 
206 #endif /* __S390_KVM_PARA_H */
207 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp