interrupt.c 92 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * handling kvm guest interrupts
  4. *
  5. * Copyright IBM Corp. 2008, 2020
  6. *
  7. * Author(s): Carsten Otte <cotte@de.ibm.com>
  8. */
  9. #define pr_fmt(fmt) "kvm-s390: " fmt
  10. #include <linux/cpufeature.h>
  11. #include <linux/interrupt.h>
  12. #include <linux/kvm_host.h>
  13. #include <linux/hrtimer.h>
  14. #include <linux/export.h>
  15. #include <linux/mmu_context.h>
  16. #include <linux/nospec.h>
  17. #include <linux/signal.h>
  18. #include <linux/slab.h>
  19. #include <linux/bitmap.h>
  20. #include <linux/vmalloc.h>
  21. #include <asm/access-regs.h>
  22. #include <asm/asm-offsets.h>
  23. #include <asm/dis.h>
  24. #include <linux/uaccess.h>
  25. #include <asm/sclp.h>
  26. #include <asm/isc.h>
  27. #include <asm/nmi.h>
  28. #include <asm/airq.h>
  29. #include <asm/tpi.h>
  30. #include "kvm-s390.h"
  31. #include "gaccess.h"
  32. #include "trace-s390.h"
  33. #include "pci.h"
  34. #include "gmap.h"
  35. #define PFAULT_INIT 0x0600
  36. #define PFAULT_DONE 0x0680
  37. #define VIRTIO_PARAM 0x0d00
  38. static struct kvm_s390_gib *gib;
  39. /* handle external calls via sigp interpretation facility */
  40. static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
  41. {
  42. struct esca_block *sca = vcpu->kvm->arch.sca;
  43. union esca_sigp_ctrl sigp_ctrl = sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  44. if (!kvm_s390_test_cpuflags(vcpu, CPUSTAT_ECALL_PEND))
  45. return 0;
  46. BUG_ON(!kvm_s390_use_sca_entries());
  47. if (src_id)
  48. *src_id = sigp_ctrl.scn;
  49. return sigp_ctrl.c;
  50. }
  51. static int sca_inject_ext_call(struct kvm_vcpu *vcpu, int src_id)
  52. {
  53. struct esca_block *sca = vcpu->kvm->arch.sca;
  54. union esca_sigp_ctrl *sigp_ctrl = &sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  55. union esca_sigp_ctrl old_val, new_val = {.scn = src_id, .c = 1};
  56. int expect, rc;
  57. BUG_ON(!kvm_s390_use_sca_entries());
  58. old_val = READ_ONCE(*sigp_ctrl);
  59. old_val.c = 0;
  60. expect = old_val.value;
  61. rc = cmpxchg(&sigp_ctrl->value, old_val.value, new_val.value);
  62. if (rc != expect) {
  63. /* another external call is pending */
  64. return -EBUSY;
  65. }
  66. kvm_s390_set_cpuflags(vcpu, CPUSTAT_ECALL_PEND);
  67. return 0;
  68. }
  69. static void sca_clear_ext_call(struct kvm_vcpu *vcpu)
  70. {
  71. struct esca_block *sca = vcpu->kvm->arch.sca;
  72. union esca_sigp_ctrl *sigp_ctrl = &sca->cpu[vcpu->vcpu_id].sigp_ctrl;
  73. if (!kvm_s390_use_sca_entries())
  74. return;
  75. kvm_s390_clear_cpuflags(vcpu, CPUSTAT_ECALL_PEND);
  76. WRITE_ONCE(sigp_ctrl->value, 0);
  77. }
  78. int psw_extint_disabled(struct kvm_vcpu *vcpu)
  79. {
  80. return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_EXT);
  81. }
  82. static int psw_ioint_disabled(struct kvm_vcpu *vcpu)
  83. {
  84. return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_IO);
  85. }
  86. static int psw_mchk_disabled(struct kvm_vcpu *vcpu)
  87. {
  88. return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_MCHECK);
  89. }
  90. static int psw_interrupts_disabled(struct kvm_vcpu *vcpu)
  91. {
  92. return psw_extint_disabled(vcpu) &&
  93. psw_ioint_disabled(vcpu) &&
  94. psw_mchk_disabled(vcpu);
  95. }
  96. static int ckc_interrupts_enabled(struct kvm_vcpu *vcpu)
  97. {
  98. if (psw_extint_disabled(vcpu) ||
  99. !(vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SUBMASK))
  100. return 0;
  101. if (guestdbg_enabled(vcpu) && guestdbg_sstep_enabled(vcpu))
  102. /* No timer interrupts when single stepping */
  103. return 0;
  104. return 1;
  105. }
  106. static int ckc_irq_pending(struct kvm_vcpu *vcpu)
  107. {
  108. const u64 now = kvm_s390_get_tod_clock_fast(vcpu->kvm);
  109. const u64 ckc = vcpu->arch.sie_block->ckc;
  110. if (vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SIGN) {
  111. if ((s64)ckc >= (s64)now)
  112. return 0;
  113. } else if (ckc >= now) {
  114. return 0;
  115. }
  116. return ckc_interrupts_enabled(vcpu);
  117. }
  118. static int cpu_timer_interrupts_enabled(struct kvm_vcpu *vcpu)
  119. {
  120. return !psw_extint_disabled(vcpu) &&
  121. (vcpu->arch.sie_block->gcr[0] & CR0_CPU_TIMER_SUBMASK);
  122. }
  123. static int cpu_timer_irq_pending(struct kvm_vcpu *vcpu)
  124. {
  125. if (!cpu_timer_interrupts_enabled(vcpu))
  126. return 0;
  127. return kvm_s390_get_cpu_timer(vcpu) >> 63;
  128. }
  129. static uint64_t isc_to_isc_bits(int isc)
  130. {
  131. return (0x80 >> isc) << 24;
  132. }
  133. static inline u32 isc_to_int_word(u8 isc)
  134. {
  135. return ((u32)isc << 27) | 0x80000000;
  136. }
  137. static inline u8 int_word_to_isc(u32 int_word)
  138. {
  139. return (int_word & 0x38000000) >> 27;
  140. }
  141. /*
  142. * To use atomic bitmap functions, we have to provide a bitmap address
  143. * that is u64 aligned. However, the ipm might be u32 aligned.
  144. * Therefore, we logically start the bitmap at the very beginning of the
  145. * struct and fixup the bit number.
  146. */
  147. #define IPM_BIT_OFFSET (offsetof(struct kvm_s390_gisa, ipm) * BITS_PER_BYTE)
  148. /**
  149. * gisa_set_iam - change the GISA interruption alert mask
  150. *
  151. * @gisa: gisa to operate on
  152. * @iam: new IAM value to use
  153. *
  154. * Change the IAM atomically with the next alert address and the IPM
  155. * of the GISA if the GISA is not part of the GIB alert list. All three
  156. * fields are located in the first long word of the GISA.
  157. *
  158. * Returns: 0 on success
  159. * -EBUSY in case the gisa is part of the alert list
  160. */
  161. static inline int gisa_set_iam(struct kvm_s390_gisa *gisa, u8 iam)
  162. {
  163. u64 word, _word;
  164. word = READ_ONCE(gisa->u64.word[0]);
  165. do {
  166. if ((u64)gisa != word >> 32)
  167. return -EBUSY;
  168. _word = (word & ~0xffUL) | iam;
  169. } while (!try_cmpxchg(&gisa->u64.word[0], &word, _word));
  170. return 0;
  171. }
  172. /**
  173. * gisa_clear_ipm - clear the GISA interruption pending mask
  174. *
  175. * @gisa: gisa to operate on
  176. *
  177. * Clear the IPM atomically with the next alert address and the IAM
  178. * of the GISA unconditionally. All three fields are located in the
  179. * first long word of the GISA.
  180. */
  181. static inline void gisa_clear_ipm(struct kvm_s390_gisa *gisa)
  182. {
  183. u64 word, _word;
  184. word = READ_ONCE(gisa->u64.word[0]);
  185. do {
  186. _word = word & ~(0xffUL << 24);
  187. } while (!try_cmpxchg(&gisa->u64.word[0], &word, _word));
  188. }
  189. /**
  190. * gisa_get_ipm_or_restore_iam - return IPM or restore GISA IAM
  191. *
  192. * @gi: gisa interrupt struct to work on
  193. *
  194. * Atomically restores the interruption alert mask if none of the
  195. * relevant ISCs are pending and return the IPM.
  196. *
  197. * Returns: the relevant pending ISCs
  198. */
  199. static inline u8 gisa_get_ipm_or_restore_iam(struct kvm_s390_gisa_interrupt *gi)
  200. {
  201. u8 pending_mask, alert_mask;
  202. u64 word, _word;
  203. word = READ_ONCE(gi->origin->u64.word[0]);
  204. do {
  205. alert_mask = READ_ONCE(gi->alert.mask);
  206. pending_mask = (u8)(word >> 24) & alert_mask;
  207. if (pending_mask)
  208. return pending_mask;
  209. _word = (word & ~0xffUL) | alert_mask;
  210. } while (!try_cmpxchg(&gi->origin->u64.word[0], &word, _word));
  211. return 0;
  212. }
  213. static inline void gisa_set_ipm_gisc(struct kvm_s390_gisa *gisa, u32 gisc)
  214. {
  215. set_bit_inv(IPM_BIT_OFFSET + gisc, (unsigned long *) gisa);
  216. }
  217. static inline u8 gisa_get_ipm(struct kvm_s390_gisa *gisa)
  218. {
  219. return READ_ONCE(gisa->ipm);
  220. }
  221. static inline int gisa_tac_ipm_gisc(struct kvm_s390_gisa *gisa, u32 gisc)
  222. {
  223. return test_and_clear_bit_inv(IPM_BIT_OFFSET + gisc, (unsigned long *) gisa);
  224. }
  225. static inline unsigned long pending_irqs_no_gisa(struct kvm_vcpu *vcpu)
  226. {
  227. unsigned long pending = vcpu->kvm->arch.float_int.pending_irqs |
  228. vcpu->arch.local_int.pending_irqs;
  229. pending &= ~vcpu->kvm->arch.float_int.masked_irqs;
  230. return pending;
  231. }
  232. static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
  233. {
  234. struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
  235. unsigned long pending_mask;
  236. pending_mask = pending_irqs_no_gisa(vcpu);
  237. if (gi->origin)
  238. pending_mask |= gisa_get_ipm(gi->origin) << IRQ_PEND_IO_ISC_7;
  239. return pending_mask;
  240. }
  241. static inline int isc_to_irq_type(unsigned long isc)
  242. {
  243. return IRQ_PEND_IO_ISC_0 - isc;
  244. }
  245. static inline int irq_type_to_isc(unsigned long irq_type)
  246. {
  247. return IRQ_PEND_IO_ISC_0 - irq_type;
  248. }
  249. static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
  250. unsigned long active_mask)
  251. {
  252. int i;
  253. for (i = 0; i <= MAX_ISC; i++)
  254. if (!(vcpu->arch.sie_block->gcr[6] & isc_to_isc_bits(i)))
  255. active_mask &= ~(1UL << (isc_to_irq_type(i)));
  256. return active_mask;
  257. }
  258. static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)
  259. {
  260. unsigned long active_mask;
  261. active_mask = pending_irqs(vcpu);
  262. if (!active_mask)
  263. return 0;
  264. if (psw_extint_disabled(vcpu))
  265. active_mask &= ~IRQ_PEND_EXT_MASK;
  266. if (psw_ioint_disabled(vcpu))
  267. active_mask &= ~IRQ_PEND_IO_MASK;
  268. else
  269. active_mask = disable_iscs(vcpu, active_mask);
  270. if (!(vcpu->arch.sie_block->gcr[0] & CR0_EXTERNAL_CALL_SUBMASK))
  271. __clear_bit(IRQ_PEND_EXT_EXTERNAL, &active_mask);
  272. if (!(vcpu->arch.sie_block->gcr[0] & CR0_EMERGENCY_SIGNAL_SUBMASK))
  273. __clear_bit(IRQ_PEND_EXT_EMERGENCY, &active_mask);
  274. if (!(vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SUBMASK))
  275. __clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &active_mask);
  276. if (!(vcpu->arch.sie_block->gcr[0] & CR0_CPU_TIMER_SUBMASK))
  277. __clear_bit(IRQ_PEND_EXT_CPU_TIMER, &active_mask);
  278. if (!(vcpu->arch.sie_block->gcr[0] & CR0_SERVICE_SIGNAL_SUBMASK)) {
  279. __clear_bit(IRQ_PEND_EXT_SERVICE, &active_mask);
  280. __clear_bit(IRQ_PEND_EXT_SERVICE_EV, &active_mask);
  281. }
  282. if (psw_mchk_disabled(vcpu))
  283. active_mask &= ~IRQ_PEND_MCHK_MASK;
  284. /* PV guest cpus can have a single interruption injected at a time. */
  285. if (kvm_s390_pv_cpu_get_handle(vcpu) &&
  286. vcpu->arch.sie_block->iictl != IICTL_CODE_NONE)
  287. active_mask &= ~(IRQ_PEND_EXT_II_MASK |
  288. IRQ_PEND_IO_MASK |
  289. IRQ_PEND_MCHK_MASK);
  290. /*
  291. * Check both floating and local interrupt's cr14 because
  292. * bit IRQ_PEND_MCHK_REP could be set in both cases.
  293. */
  294. if (!(vcpu->arch.sie_block->gcr[14] &
  295. (vcpu->kvm->arch.float_int.mchk.cr14 |
  296. vcpu->arch.local_int.irq.mchk.cr14)))
  297. __clear_bit(IRQ_PEND_MCHK_REP, &active_mask);
  298. /*
  299. * STOP irqs will never be actively delivered. They are triggered via
  300. * intercept requests and cleared when the stop intercept is performed.
  301. */
  302. __clear_bit(IRQ_PEND_SIGP_STOP, &active_mask);
  303. return active_mask;
  304. }
  305. static void __set_cpu_idle(struct kvm_vcpu *vcpu)
  306. {
  307. kvm_s390_set_cpuflags(vcpu, CPUSTAT_WAIT);
  308. set_bit(vcpu->vcpu_idx, vcpu->kvm->arch.idle_mask);
  309. }
  310. static void __unset_cpu_idle(struct kvm_vcpu *vcpu)
  311. {
  312. kvm_s390_clear_cpuflags(vcpu, CPUSTAT_WAIT);
  313. clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.idle_mask);
  314. }
  315. static void __reset_intercept_indicators(struct kvm_vcpu *vcpu)
  316. {
  317. kvm_s390_clear_cpuflags(vcpu, CPUSTAT_IO_INT | CPUSTAT_EXT_INT |
  318. CPUSTAT_STOP_INT);
  319. vcpu->arch.sie_block->lctl = 0x0000;
  320. vcpu->arch.sie_block->ictl &= ~(ICTL_LPSW | ICTL_STCTL | ICTL_PINT);
  321. if (guestdbg_enabled(vcpu)) {
  322. vcpu->arch.sie_block->lctl |= (LCTL_CR0 | LCTL_CR9 |
  323. LCTL_CR10 | LCTL_CR11);
  324. vcpu->arch.sie_block->ictl |= (ICTL_STCTL | ICTL_PINT);
  325. }
  326. }
  327. static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
  328. {
  329. if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_IO_MASK))
  330. return;
  331. if (psw_ioint_disabled(vcpu))
  332. kvm_s390_set_cpuflags(vcpu, CPUSTAT_IO_INT);
  333. else
  334. vcpu->arch.sie_block->lctl |= LCTL_CR6;
  335. }
  336. static void set_intercept_indicators_ext(struct kvm_vcpu *vcpu)
  337. {
  338. if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_EXT_MASK))
  339. return;
  340. if (psw_extint_disabled(vcpu))
  341. kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
  342. else
  343. vcpu->arch.sie_block->lctl |= LCTL_CR0;
  344. }
  345. static void set_intercept_indicators_mchk(struct kvm_vcpu *vcpu)
  346. {
  347. if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_MCHK_MASK))
  348. return;
  349. if (psw_mchk_disabled(vcpu))
  350. vcpu->arch.sie_block->ictl |= ICTL_LPSW;
  351. else
  352. vcpu->arch.sie_block->lctl |= LCTL_CR14;
  353. }
  354. static void set_intercept_indicators_stop(struct kvm_vcpu *vcpu)
  355. {
  356. if (kvm_s390_is_stop_irq_pending(vcpu))
  357. kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOP_INT);
  358. }
  359. /* Set interception request for non-deliverable interrupts */
  360. static void set_intercept_indicators(struct kvm_vcpu *vcpu)
  361. {
  362. set_intercept_indicators_io(vcpu);
  363. set_intercept_indicators_ext(vcpu);
  364. set_intercept_indicators_mchk(vcpu);
  365. set_intercept_indicators_stop(vcpu);
  366. }
  367. static int __must_check __deliver_cpu_timer(struct kvm_vcpu *vcpu)
  368. {
  369. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  370. int rc = 0;
  371. vcpu->stat.deliver_cputm++;
  372. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
  373. 0, 0);
  374. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  375. vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
  376. vcpu->arch.sie_block->eic = EXT_IRQ_CPU_TIMER;
  377. } else {
  378. rc = put_guest_lc(vcpu, EXT_IRQ_CPU_TIMER,
  379. (u16 *)__LC_EXT_INT_CODE);
  380. rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
  381. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  382. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  383. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  384. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  385. }
  386. clear_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
  387. return rc ? -EFAULT : 0;
  388. }
  389. static int __must_check __deliver_ckc(struct kvm_vcpu *vcpu)
  390. {
  391. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  392. int rc = 0;
  393. vcpu->stat.deliver_ckc++;
  394. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
  395. 0, 0);
  396. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  397. vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
  398. vcpu->arch.sie_block->eic = EXT_IRQ_CLK_COMP;
  399. } else {
  400. rc = put_guest_lc(vcpu, EXT_IRQ_CLK_COMP,
  401. (u16 __user *)__LC_EXT_INT_CODE);
  402. rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
  403. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  404. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  405. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  406. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  407. }
  408. clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
  409. return rc ? -EFAULT : 0;
  410. }
  411. static int __must_check __deliver_pfault_init(struct kvm_vcpu *vcpu)
  412. {
  413. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  414. struct kvm_s390_ext_info ext;
  415. int rc;
  416. spin_lock(&li->lock);
  417. ext = li->irq.ext;
  418. clear_bit(IRQ_PEND_PFAULT_INIT, &li->pending_irqs);
  419. li->irq.ext.ext_params2 = 0;
  420. spin_unlock(&li->lock);
  421. VCPU_EVENT(vcpu, 4, "deliver: pfault init token 0x%llx",
  422. ext.ext_params2);
  423. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  424. KVM_S390_INT_PFAULT_INIT,
  425. 0, ext.ext_params2);
  426. rc = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE, (u16 *) __LC_EXT_INT_CODE);
  427. rc |= put_guest_lc(vcpu, PFAULT_INIT, (u16 *) __LC_EXT_CPU_ADDR);
  428. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  429. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  430. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  431. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  432. rc |= put_guest_lc(vcpu, ext.ext_params2, (u64 *) __LC_EXT_PARAMS2);
  433. return rc ? -EFAULT : 0;
  434. }
  435. static int __write_machine_check(struct kvm_vcpu *vcpu,
  436. struct kvm_s390_mchk_info *mchk)
  437. {
  438. unsigned long ext_sa_addr;
  439. unsigned long lc;
  440. freg_t fprs[NUM_FPRS];
  441. union mci mci;
  442. int rc;
  443. /*
  444. * All other possible payload for a machine check (e.g. the register
  445. * contents in the save area) will be handled by the ultravisor, as
  446. * the hypervisor does not not have the needed information for
  447. * protected guests.
  448. */
  449. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  450. vcpu->arch.sie_block->iictl = IICTL_CODE_MCHK;
  451. vcpu->arch.sie_block->mcic = mchk->mcic;
  452. vcpu->arch.sie_block->faddr = mchk->failing_storage_address;
  453. vcpu->arch.sie_block->edc = mchk->ext_damage_code;
  454. return 0;
  455. }
  456. mci.val = mchk->mcic;
  457. /* take care of lazy register loading */
  458. kvm_s390_fpu_store(vcpu->run);
  459. save_access_regs(vcpu->run->s.regs.acrs);
  460. if (cpu_has_gs() && vcpu->arch.gs_enabled)
  461. save_gs_cb(current->thread.gs_cb);
  462. /* Extended save area */
  463. rc = read_guest_lc(vcpu, __LC_MCESAD, &ext_sa_addr,
  464. sizeof(unsigned long));
  465. /* Only bits 0 through 63-LC are used for address formation */
  466. lc = ext_sa_addr & MCESA_LC_MASK;
  467. if (test_kvm_facility(vcpu->kvm, 133)) {
  468. switch (lc) {
  469. case 0:
  470. case 10:
  471. ext_sa_addr &= ~0x3ffUL;
  472. break;
  473. case 11:
  474. ext_sa_addr &= ~0x7ffUL;
  475. break;
  476. case 12:
  477. ext_sa_addr &= ~0xfffUL;
  478. break;
  479. default:
  480. ext_sa_addr = 0;
  481. break;
  482. }
  483. } else {
  484. ext_sa_addr &= ~0x3ffUL;
  485. }
  486. if (!rc && mci.vr && ext_sa_addr && test_kvm_facility(vcpu->kvm, 129)) {
  487. if (write_guest_abs(vcpu, ext_sa_addr, vcpu->run->s.regs.vrs,
  488. 512))
  489. mci.vr = 0;
  490. } else {
  491. mci.vr = 0;
  492. }
  493. if (!rc && mci.gs && ext_sa_addr && test_kvm_facility(vcpu->kvm, 133)
  494. && (lc == 11 || lc == 12)) {
  495. if (write_guest_abs(vcpu, ext_sa_addr + 1024,
  496. &vcpu->run->s.regs.gscb, 32))
  497. mci.gs = 0;
  498. } else {
  499. mci.gs = 0;
  500. }
  501. /* General interruption information */
  502. rc |= put_guest_lc(vcpu, 1, (u8 __user *) __LC_AR_MODE_ID);
  503. rc |= write_guest_lc(vcpu, __LC_MCK_OLD_PSW,
  504. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  505. rc |= read_guest_lc(vcpu, __LC_MCK_NEW_PSW,
  506. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  507. rc |= put_guest_lc(vcpu, mci.val, (u64 __user *) __LC_MCCK_CODE);
  508. /* Register-save areas */
  509. if (cpu_has_vx()) {
  510. convert_vx_to_fp(fprs, (__vector128 *) vcpu->run->s.regs.vrs);
  511. rc |= write_guest_lc(vcpu, __LC_FPREGS_SAVE_AREA, fprs, 128);
  512. } else {
  513. rc |= write_guest_lc(vcpu, __LC_FPREGS_SAVE_AREA,
  514. vcpu->run->s.regs.fprs, 128);
  515. }
  516. rc |= write_guest_lc(vcpu, __LC_GPREGS_SAVE_AREA,
  517. vcpu->run->s.regs.gprs, 128);
  518. rc |= put_guest_lc(vcpu, vcpu->run->s.regs.fpc,
  519. (u32 __user *) __LC_FP_CREG_SAVE_AREA);
  520. rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->todpr,
  521. (u32 __user *) __LC_TOD_PROGREG_SAVE_AREA);
  522. rc |= put_guest_lc(vcpu, kvm_s390_get_cpu_timer(vcpu),
  523. (u64 __user *) __LC_CPU_TIMER_SAVE_AREA);
  524. rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->ckc >> 8,
  525. (u64 __user *) __LC_CLOCK_COMP_SAVE_AREA);
  526. rc |= write_guest_lc(vcpu, __LC_AREGS_SAVE_AREA,
  527. &vcpu->run->s.regs.acrs, 64);
  528. rc |= write_guest_lc(vcpu, __LC_CREGS_SAVE_AREA,
  529. &vcpu->arch.sie_block->gcr, 128);
  530. /* Extended interruption information */
  531. rc |= put_guest_lc(vcpu, mchk->ext_damage_code,
  532. (u32 __user *) __LC_EXT_DAMAGE_CODE);
  533. rc |= put_guest_lc(vcpu, mchk->failing_storage_address,
  534. (u64 __user *) __LC_MCCK_FAIL_STOR_ADDR);
  535. rc |= write_guest_lc(vcpu, __LC_PSW_SAVE_AREA, &mchk->fixed_logout,
  536. sizeof(mchk->fixed_logout));
  537. return rc ? -EFAULT : 0;
  538. }
  539. static int __must_check __deliver_machine_check(struct kvm_vcpu *vcpu)
  540. {
  541. struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
  542. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  543. struct kvm_s390_mchk_info mchk = {};
  544. int deliver = 0;
  545. int rc = 0;
  546. spin_lock(&fi->lock);
  547. spin_lock(&li->lock);
  548. if (test_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs) ||
  549. test_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs)) {
  550. /*
  551. * If there was an exigent machine check pending, then any
  552. * repressible machine checks that might have been pending
  553. * are indicated along with it, so always clear bits for
  554. * repressible and exigent interrupts
  555. */
  556. mchk = li->irq.mchk;
  557. clear_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs);
  558. clear_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs);
  559. memset(&li->irq.mchk, 0, sizeof(mchk));
  560. deliver = 1;
  561. }
  562. /*
  563. * We indicate floating repressible conditions along with
  564. * other pending conditions. Channel Report Pending and Channel
  565. * Subsystem damage are the only two and are indicated by
  566. * bits in mcic and masked in cr14.
  567. */
  568. if (test_and_clear_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) {
  569. mchk.mcic |= fi->mchk.mcic;
  570. mchk.cr14 |= fi->mchk.cr14;
  571. memset(&fi->mchk, 0, sizeof(mchk));
  572. deliver = 1;
  573. }
  574. spin_unlock(&li->lock);
  575. spin_unlock(&fi->lock);
  576. if (deliver) {
  577. VCPU_EVENT(vcpu, 3, "deliver: machine check mcic 0x%llx",
  578. mchk.mcic);
  579. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  580. KVM_S390_MCHK,
  581. mchk.cr14, mchk.mcic);
  582. vcpu->stat.deliver_machine_check++;
  583. rc = __write_machine_check(vcpu, &mchk);
  584. }
  585. return rc;
  586. }
  587. static int __must_check __deliver_restart(struct kvm_vcpu *vcpu)
  588. {
  589. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  590. int rc = 0;
  591. VCPU_EVENT(vcpu, 3, "%s", "deliver: cpu restart");
  592. vcpu->stat.deliver_restart_signal++;
  593. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
  594. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  595. vcpu->arch.sie_block->iictl = IICTL_CODE_RESTART;
  596. } else {
  597. rc = write_guest_lc(vcpu,
  598. offsetof(struct lowcore, restart_old_psw),
  599. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  600. rc |= read_guest_lc(vcpu, offsetof(struct lowcore, restart_psw),
  601. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  602. }
  603. clear_bit(IRQ_PEND_RESTART, &li->pending_irqs);
  604. return rc ? -EFAULT : 0;
  605. }
  606. static int __must_check __deliver_set_prefix(struct kvm_vcpu *vcpu)
  607. {
  608. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  609. struct kvm_s390_prefix_info prefix;
  610. spin_lock(&li->lock);
  611. prefix = li->irq.prefix;
  612. li->irq.prefix.address = 0;
  613. clear_bit(IRQ_PEND_SET_PREFIX, &li->pending_irqs);
  614. spin_unlock(&li->lock);
  615. vcpu->stat.deliver_prefix_signal++;
  616. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  617. KVM_S390_SIGP_SET_PREFIX,
  618. prefix.address, 0);
  619. kvm_s390_set_prefix(vcpu, prefix.address);
  620. return 0;
  621. }
  622. static int __must_check __deliver_emergency_signal(struct kvm_vcpu *vcpu)
  623. {
  624. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  625. int rc;
  626. int cpu_addr;
  627. spin_lock(&li->lock);
  628. cpu_addr = find_first_bit(li->sigp_emerg_pending, KVM_MAX_VCPUS);
  629. clear_bit(cpu_addr, li->sigp_emerg_pending);
  630. if (bitmap_empty(li->sigp_emerg_pending, KVM_MAX_VCPUS))
  631. clear_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
  632. spin_unlock(&li->lock);
  633. VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp emerg");
  634. vcpu->stat.deliver_emergency_signal++;
  635. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
  636. cpu_addr, 0);
  637. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  638. vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
  639. vcpu->arch.sie_block->eic = EXT_IRQ_EMERGENCY_SIG;
  640. vcpu->arch.sie_block->extcpuaddr = cpu_addr;
  641. return 0;
  642. }
  643. rc = put_guest_lc(vcpu, EXT_IRQ_EMERGENCY_SIG,
  644. (u16 *)__LC_EXT_INT_CODE);
  645. rc |= put_guest_lc(vcpu, cpu_addr, (u16 *)__LC_EXT_CPU_ADDR);
  646. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  647. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  648. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  649. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  650. return rc ? -EFAULT : 0;
  651. }
  652. static int __must_check __deliver_external_call(struct kvm_vcpu *vcpu)
  653. {
  654. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  655. struct kvm_s390_extcall_info extcall;
  656. int rc;
  657. spin_lock(&li->lock);
  658. extcall = li->irq.extcall;
  659. li->irq.extcall.code = 0;
  660. clear_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
  661. spin_unlock(&li->lock);
  662. VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp ext call");
  663. vcpu->stat.deliver_external_call++;
  664. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  665. KVM_S390_INT_EXTERNAL_CALL,
  666. extcall.code, 0);
  667. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  668. vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
  669. vcpu->arch.sie_block->eic = EXT_IRQ_EXTERNAL_CALL;
  670. vcpu->arch.sie_block->extcpuaddr = extcall.code;
  671. return 0;
  672. }
  673. rc = put_guest_lc(vcpu, EXT_IRQ_EXTERNAL_CALL,
  674. (u16 *)__LC_EXT_INT_CODE);
  675. rc |= put_guest_lc(vcpu, extcall.code, (u16 *)__LC_EXT_CPU_ADDR);
  676. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  677. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  678. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW, &vcpu->arch.sie_block->gpsw,
  679. sizeof(psw_t));
  680. return rc ? -EFAULT : 0;
  681. }
  682. static int __deliver_prog_pv(struct kvm_vcpu *vcpu, u16 code)
  683. {
  684. switch (code) {
  685. case PGM_SPECIFICATION:
  686. vcpu->arch.sie_block->iictl = IICTL_CODE_SPECIFICATION;
  687. break;
  688. case PGM_OPERAND:
  689. vcpu->arch.sie_block->iictl = IICTL_CODE_OPERAND;
  690. break;
  691. default:
  692. return -EINVAL;
  693. }
  694. return 0;
  695. }
  696. static int __must_check __deliver_prog(struct kvm_vcpu *vcpu)
  697. {
  698. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  699. struct kvm_s390_pgm_info pgm_info;
  700. int rc = 0, nullifying = false;
  701. u16 ilen;
  702. spin_lock(&li->lock);
  703. pgm_info = li->irq.pgm;
  704. clear_bit(IRQ_PEND_PROG, &li->pending_irqs);
  705. memset(&li->irq.pgm, 0, sizeof(pgm_info));
  706. spin_unlock(&li->lock);
  707. ilen = pgm_info.flags & KVM_S390_PGM_FLAGS_ILC_MASK;
  708. VCPU_EVENT(vcpu, 3, "deliver: program irq code 0x%x, ilen:%d",
  709. pgm_info.code, ilen);
  710. vcpu->stat.deliver_program++;
  711. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
  712. pgm_info.code, 0);
  713. /* PER is handled by the ultravisor */
  714. if (kvm_s390_pv_cpu_is_protected(vcpu))
  715. return __deliver_prog_pv(vcpu, pgm_info.code & ~PGM_PER);
  716. switch (pgm_info.code & ~PGM_PER) {
  717. case PGM_AFX_TRANSLATION:
  718. case PGM_ASX_TRANSLATION:
  719. case PGM_EX_TRANSLATION:
  720. case PGM_LFX_TRANSLATION:
  721. case PGM_LSTE_SEQUENCE:
  722. case PGM_LSX_TRANSLATION:
  723. case PGM_LX_TRANSLATION:
  724. case PGM_PRIMARY_AUTHORITY:
  725. case PGM_SECONDARY_AUTHORITY:
  726. nullifying = true;
  727. fallthrough;
  728. case PGM_SPACE_SWITCH:
  729. rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
  730. (u64 *)__LC_TRANS_EXC_CODE);
  731. break;
  732. case PGM_ALEN_TRANSLATION:
  733. case PGM_ALE_SEQUENCE:
  734. case PGM_ASTE_INSTANCE:
  735. case PGM_ASTE_SEQUENCE:
  736. case PGM_ASTE_VALIDITY:
  737. case PGM_EXTENDED_AUTHORITY:
  738. rc = put_guest_lc(vcpu, pgm_info.exc_access_id,
  739. (u8 *)__LC_EXC_ACCESS_ID);
  740. nullifying = true;
  741. break;
  742. case PGM_ASCE_TYPE:
  743. case PGM_PAGE_TRANSLATION:
  744. case PGM_REGION_FIRST_TRANS:
  745. case PGM_REGION_SECOND_TRANS:
  746. case PGM_REGION_THIRD_TRANS:
  747. case PGM_SEGMENT_TRANSLATION:
  748. rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
  749. (u64 *)__LC_TRANS_EXC_CODE);
  750. rc |= put_guest_lc(vcpu, pgm_info.exc_access_id,
  751. (u8 *)__LC_EXC_ACCESS_ID);
  752. rc |= put_guest_lc(vcpu, pgm_info.op_access_id,
  753. (u8 *)__LC_OP_ACCESS_ID);
  754. nullifying = true;
  755. break;
  756. case PGM_MONITOR:
  757. rc = put_guest_lc(vcpu, pgm_info.mon_class_nr,
  758. (u16 *)__LC_MON_CLASS_NR);
  759. rc |= put_guest_lc(vcpu, pgm_info.mon_code,
  760. (u64 *)__LC_MON_CODE);
  761. break;
  762. case PGM_VECTOR_PROCESSING:
  763. case PGM_DATA:
  764. rc = put_guest_lc(vcpu, pgm_info.data_exc_code,
  765. (u32 *)__LC_DATA_EXC_CODE);
  766. break;
  767. case PGM_PROTECTION:
  768. rc = put_guest_lc(vcpu, pgm_info.trans_exc_code,
  769. (u64 *)__LC_TRANS_EXC_CODE);
  770. rc |= put_guest_lc(vcpu, pgm_info.exc_access_id,
  771. (u8 *)__LC_EXC_ACCESS_ID);
  772. break;
  773. case PGM_STACK_FULL:
  774. case PGM_STACK_EMPTY:
  775. case PGM_STACK_SPECIFICATION:
  776. case PGM_STACK_TYPE:
  777. case PGM_STACK_OPERATION:
  778. case PGM_TRACE_TABEL:
  779. case PGM_CRYPTO_OPERATION:
  780. nullifying = true;
  781. break;
  782. }
  783. if (pgm_info.code & PGM_PER) {
  784. rc |= put_guest_lc(vcpu, pgm_info.per_code,
  785. (u8 *) __LC_PER_CODE);
  786. rc |= put_guest_lc(vcpu, pgm_info.per_atmid,
  787. (u8 *)__LC_PER_ATMID);
  788. rc |= put_guest_lc(vcpu, pgm_info.per_address,
  789. (u64 *) __LC_PER_ADDRESS);
  790. rc |= put_guest_lc(vcpu, pgm_info.per_access_id,
  791. (u8 *) __LC_PER_ACCESS_ID);
  792. }
  793. if (nullifying && !(pgm_info.flags & KVM_S390_PGM_FLAGS_NO_REWIND))
  794. kvm_s390_rewind_psw(vcpu, ilen);
  795. /* bit 1+2 of the target are the ilc, so we can directly use ilen */
  796. rc |= put_guest_lc(vcpu, ilen, (u16 *) __LC_PGM_ILC);
  797. rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->gbea,
  798. (u64 *) __LC_PGM_LAST_BREAK);
  799. rc |= put_guest_lc(vcpu, pgm_info.code, (u16 *)__LC_PGM_CODE);
  800. rc |= write_guest_lc(vcpu, __LC_PGM_OLD_PSW,
  801. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  802. rc |= read_guest_lc(vcpu, __LC_PGM_NEW_PSW,
  803. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  804. return rc ? -EFAULT : 0;
  805. }
  806. #define SCCB_MASK 0xFFFFFFF8
  807. #define SCCB_EVENT_PENDING 0x3
  808. static int write_sclp(struct kvm_vcpu *vcpu, u32 parm)
  809. {
  810. int rc;
  811. if (kvm_s390_pv_cpu_get_handle(vcpu)) {
  812. vcpu->arch.sie_block->iictl = IICTL_CODE_EXT;
  813. vcpu->arch.sie_block->eic = EXT_IRQ_SERVICE_SIG;
  814. vcpu->arch.sie_block->eiparams = parm;
  815. return 0;
  816. }
  817. rc = put_guest_lc(vcpu, EXT_IRQ_SERVICE_SIG, (u16 *)__LC_EXT_INT_CODE);
  818. rc |= put_guest_lc(vcpu, 0, (u16 *)__LC_EXT_CPU_ADDR);
  819. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  820. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  821. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  822. &vcpu->arch.sie_block->gpsw, sizeof(psw_t));
  823. rc |= put_guest_lc(vcpu, parm,
  824. (u32 *)__LC_EXT_PARAMS);
  825. return rc ? -EFAULT : 0;
  826. }
  827. static int __must_check __deliver_service(struct kvm_vcpu *vcpu)
  828. {
  829. struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
  830. struct kvm_s390_ext_info ext;
  831. spin_lock(&fi->lock);
  832. if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->masked_irqs) ||
  833. !(test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs))) {
  834. spin_unlock(&fi->lock);
  835. return 0;
  836. }
  837. ext = fi->srv_signal;
  838. memset(&fi->srv_signal, 0, sizeof(ext));
  839. clear_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
  840. clear_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs);
  841. if (kvm_s390_pv_cpu_is_protected(vcpu))
  842. set_bit(IRQ_PEND_EXT_SERVICE, &fi->masked_irqs);
  843. spin_unlock(&fi->lock);
  844. VCPU_EVENT(vcpu, 4, "deliver: sclp parameter 0x%x",
  845. ext.ext_params);
  846. vcpu->stat.deliver_service_signal++;
  847. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE,
  848. ext.ext_params, 0);
  849. return write_sclp(vcpu, ext.ext_params);
  850. }
  851. static int __must_check __deliver_service_ev(struct kvm_vcpu *vcpu)
  852. {
  853. struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
  854. struct kvm_s390_ext_info ext;
  855. spin_lock(&fi->lock);
  856. if (!(test_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs))) {
  857. spin_unlock(&fi->lock);
  858. return 0;
  859. }
  860. ext = fi->srv_signal;
  861. /* only clear the event bits */
  862. fi->srv_signal.ext_params &= ~SCCB_EVENT_PENDING;
  863. clear_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs);
  864. spin_unlock(&fi->lock);
  865. VCPU_EVENT(vcpu, 4, "%s", "deliver: sclp parameter event");
  866. vcpu->stat.deliver_service_signal++;
  867. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE,
  868. ext.ext_params, 0);
  869. return write_sclp(vcpu, ext.ext_params & SCCB_EVENT_PENDING);
  870. }
  871. static int __must_check __deliver_pfault_done(struct kvm_vcpu *vcpu)
  872. {
  873. struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
  874. struct kvm_s390_interrupt_info *inti;
  875. int rc = 0;
  876. spin_lock(&fi->lock);
  877. inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_PFAULT],
  878. struct kvm_s390_interrupt_info,
  879. list);
  880. if (inti) {
  881. list_del(&inti->list);
  882. fi->counters[FIRQ_CNTR_PFAULT] -= 1;
  883. }
  884. if (list_empty(&fi->lists[FIRQ_LIST_PFAULT]))
  885. clear_bit(IRQ_PEND_PFAULT_DONE, &fi->pending_irqs);
  886. spin_unlock(&fi->lock);
  887. if (inti) {
  888. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  889. KVM_S390_INT_PFAULT_DONE, 0,
  890. inti->ext.ext_params2);
  891. VCPU_EVENT(vcpu, 4, "deliver: pfault done token 0x%llx",
  892. inti->ext.ext_params2);
  893. rc = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
  894. (u16 *)__LC_EXT_INT_CODE);
  895. rc |= put_guest_lc(vcpu, PFAULT_DONE,
  896. (u16 *)__LC_EXT_CPU_ADDR);
  897. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  898. &vcpu->arch.sie_block->gpsw,
  899. sizeof(psw_t));
  900. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  901. &vcpu->arch.sie_block->gpsw,
  902. sizeof(psw_t));
  903. rc |= put_guest_lc(vcpu, inti->ext.ext_params2,
  904. (u64 *)__LC_EXT_PARAMS2);
  905. kfree(inti);
  906. }
  907. return rc ? -EFAULT : 0;
  908. }
  909. static int __must_check __deliver_virtio(struct kvm_vcpu *vcpu)
  910. {
  911. struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
  912. struct kvm_s390_interrupt_info *inti;
  913. int rc = 0;
  914. spin_lock(&fi->lock);
  915. inti = list_first_entry_or_null(&fi->lists[FIRQ_LIST_VIRTIO],
  916. struct kvm_s390_interrupt_info,
  917. list);
  918. if (inti) {
  919. VCPU_EVENT(vcpu, 4,
  920. "deliver: virtio parm: 0x%x,parm64: 0x%llx",
  921. inti->ext.ext_params, inti->ext.ext_params2);
  922. vcpu->stat.deliver_virtio++;
  923. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  924. inti->type,
  925. inti->ext.ext_params,
  926. inti->ext.ext_params2);
  927. list_del(&inti->list);
  928. fi->counters[FIRQ_CNTR_VIRTIO] -= 1;
  929. }
  930. if (list_empty(&fi->lists[FIRQ_LIST_VIRTIO]))
  931. clear_bit(IRQ_PEND_VIRTIO, &fi->pending_irqs);
  932. spin_unlock(&fi->lock);
  933. if (inti) {
  934. rc = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
  935. (u16 *)__LC_EXT_INT_CODE);
  936. rc |= put_guest_lc(vcpu, VIRTIO_PARAM,
  937. (u16 *)__LC_EXT_CPU_ADDR);
  938. rc |= write_guest_lc(vcpu, __LC_EXT_OLD_PSW,
  939. &vcpu->arch.sie_block->gpsw,
  940. sizeof(psw_t));
  941. rc |= read_guest_lc(vcpu, __LC_EXT_NEW_PSW,
  942. &vcpu->arch.sie_block->gpsw,
  943. sizeof(psw_t));
  944. rc |= put_guest_lc(vcpu, inti->ext.ext_params,
  945. (u32 *)__LC_EXT_PARAMS);
  946. rc |= put_guest_lc(vcpu, inti->ext.ext_params2,
  947. (u64 *)__LC_EXT_PARAMS2);
  948. kfree(inti);
  949. }
  950. return rc ? -EFAULT : 0;
  951. }
  952. static int __do_deliver_io(struct kvm_vcpu *vcpu, struct kvm_s390_io_info *io)
  953. {
  954. int rc;
  955. if (kvm_s390_pv_cpu_is_protected(vcpu)) {
  956. vcpu->arch.sie_block->iictl = IICTL_CODE_IO;
  957. vcpu->arch.sie_block->subchannel_id = io->subchannel_id;
  958. vcpu->arch.sie_block->subchannel_nr = io->subchannel_nr;
  959. vcpu->arch.sie_block->io_int_parm = io->io_int_parm;
  960. vcpu->arch.sie_block->io_int_word = io->io_int_word;
  961. return 0;
  962. }
  963. rc = put_guest_lc(vcpu, io->subchannel_id, (u16 *)__LC_SUBCHANNEL_ID);
  964. rc |= put_guest_lc(vcpu, io->subchannel_nr, (u16 *)__LC_SUBCHANNEL_NR);
  965. rc |= put_guest_lc(vcpu, io->io_int_parm, (u32 *)__LC_IO_INT_PARM);
  966. rc |= put_guest_lc(vcpu, io->io_int_word, (u32 *)__LC_IO_INT_WORD);
  967. rc |= write_guest_lc(vcpu, __LC_IO_OLD_PSW,
  968. &vcpu->arch.sie_block->gpsw,
  969. sizeof(psw_t));
  970. rc |= read_guest_lc(vcpu, __LC_IO_NEW_PSW,
  971. &vcpu->arch.sie_block->gpsw,
  972. sizeof(psw_t));
  973. return rc ? -EFAULT : 0;
  974. }
  975. static int __must_check __deliver_io(struct kvm_vcpu *vcpu,
  976. unsigned long irq_type)
  977. {
  978. struct list_head *isc_list;
  979. struct kvm_s390_float_interrupt *fi;
  980. struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
  981. struct kvm_s390_interrupt_info *inti = NULL;
  982. struct kvm_s390_io_info io;
  983. u32 isc;
  984. int rc = 0;
  985. fi = &vcpu->kvm->arch.float_int;
  986. spin_lock(&fi->lock);
  987. isc = irq_type_to_isc(irq_type);
  988. isc_list = &fi->lists[isc];
  989. inti = list_first_entry_or_null(isc_list,
  990. struct kvm_s390_interrupt_info,
  991. list);
  992. if (inti) {
  993. if (inti->type & KVM_S390_INT_IO_AI_MASK)
  994. VCPU_EVENT(vcpu, 4, "%s", "deliver: I/O (AI)");
  995. else
  996. VCPU_EVENT(vcpu, 4, "deliver: I/O %x ss %x schid %04x",
  997. inti->io.subchannel_id >> 8,
  998. inti->io.subchannel_id >> 1 & 0x3,
  999. inti->io.subchannel_nr);
  1000. vcpu->stat.deliver_io++;
  1001. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  1002. inti->type,
  1003. ((__u32)inti->io.subchannel_id << 16) |
  1004. inti->io.subchannel_nr,
  1005. ((__u64)inti->io.io_int_parm << 32) |
  1006. inti->io.io_int_word);
  1007. list_del(&inti->list);
  1008. fi->counters[FIRQ_CNTR_IO] -= 1;
  1009. }
  1010. if (list_empty(isc_list))
  1011. clear_bit(irq_type, &fi->pending_irqs);
  1012. spin_unlock(&fi->lock);
  1013. if (inti) {
  1014. rc = __do_deliver_io(vcpu, &(inti->io));
  1015. kfree(inti);
  1016. goto out;
  1017. }
  1018. if (gi->origin && gisa_tac_ipm_gisc(gi->origin, isc)) {
  1019. /*
  1020. * in case an adapter interrupt was not delivered
  1021. * in SIE context KVM will handle the delivery
  1022. */
  1023. VCPU_EVENT(vcpu, 4, "%s isc %u", "deliver: I/O (AI/gisa)", isc);
  1024. memset(&io, 0, sizeof(io));
  1025. io.io_int_word = isc_to_int_word(isc);
  1026. vcpu->stat.deliver_io++;
  1027. trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
  1028. KVM_S390_INT_IO(1, 0, 0, 0),
  1029. ((__u32)io.subchannel_id << 16) |
  1030. io.subchannel_nr,
  1031. ((__u64)io.io_int_parm << 32) |
  1032. io.io_int_word);
  1033. rc = __do_deliver_io(vcpu, &io);
  1034. }
  1035. out:
  1036. return rc;
  1037. }
  1038. /* Check whether an external call is pending (deliverable or not) */
  1039. int kvm_s390_ext_call_pending(struct kvm_vcpu *vcpu)
  1040. {
  1041. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1042. if (!kvm_s390_use_sca_entries())
  1043. return test_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
  1044. return sca_ext_call_pending(vcpu, NULL);
  1045. }
  1046. int kvm_s390_vcpu_has_irq(struct kvm_vcpu *vcpu, int exclude_stop)
  1047. {
  1048. if (deliverable_irqs(vcpu))
  1049. return 1;
  1050. if (kvm_cpu_has_pending_timer(vcpu))
  1051. return 1;
  1052. /* external call pending and deliverable */
  1053. if (kvm_s390_ext_call_pending(vcpu) &&
  1054. !psw_extint_disabled(vcpu) &&
  1055. (vcpu->arch.sie_block->gcr[0] & CR0_EXTERNAL_CALL_SUBMASK))
  1056. return 1;
  1057. if (!exclude_stop && kvm_s390_is_stop_irq_pending(vcpu))
  1058. return 1;
  1059. return 0;
  1060. }
  1061. int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
  1062. {
  1063. return ckc_irq_pending(vcpu) || cpu_timer_irq_pending(vcpu);
  1064. }
  1065. static u64 __calculate_sltime(struct kvm_vcpu *vcpu)
  1066. {
  1067. const u64 now = kvm_s390_get_tod_clock_fast(vcpu->kvm);
  1068. const u64 ckc = vcpu->arch.sie_block->ckc;
  1069. u64 cputm, sltime = 0;
  1070. if (ckc_interrupts_enabled(vcpu)) {
  1071. if (vcpu->arch.sie_block->gcr[0] & CR0_CLOCK_COMPARATOR_SIGN) {
  1072. if ((s64)now < (s64)ckc)
  1073. sltime = tod_to_ns((s64)ckc - (s64)now);
  1074. } else if (now < ckc) {
  1075. sltime = tod_to_ns(ckc - now);
  1076. }
  1077. /* already expired */
  1078. if (!sltime)
  1079. return 0;
  1080. if (cpu_timer_interrupts_enabled(vcpu)) {
  1081. cputm = kvm_s390_get_cpu_timer(vcpu);
  1082. /* already expired? */
  1083. if (cputm >> 63)
  1084. return 0;
  1085. return min_t(u64, sltime, tod_to_ns(cputm));
  1086. }
  1087. } else if (cpu_timer_interrupts_enabled(vcpu)) {
  1088. sltime = kvm_s390_get_cpu_timer(vcpu);
  1089. /* already expired? */
  1090. if (sltime >> 63)
  1091. return 0;
  1092. }
  1093. return sltime;
  1094. }
  1095. int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
  1096. {
  1097. struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
  1098. u64 sltime;
  1099. vcpu->stat.exit_wait_state++;
  1100. /* fast path */
  1101. if (kvm_arch_vcpu_runnable(vcpu))
  1102. return 0;
  1103. if (psw_interrupts_disabled(vcpu)) {
  1104. VCPU_EVENT(vcpu, 3, "%s", "disabled wait");
  1105. return -EOPNOTSUPP; /* disabled wait */
  1106. }
  1107. if (gi->origin &&
  1108. (gisa_get_ipm_or_restore_iam(gi) &
  1109. vcpu->arch.sie_block->gcr[6] >> 24))
  1110. return 0;
  1111. if (!ckc_interrupts_enabled(vcpu) &&
  1112. !cpu_timer_interrupts_enabled(vcpu)) {
  1113. VCPU_EVENT(vcpu, 3, "%s", "enabled wait w/o timer");
  1114. __set_cpu_idle(vcpu);
  1115. goto no_timer;
  1116. }
  1117. sltime = __calculate_sltime(vcpu);
  1118. if (!sltime)
  1119. return 0;
  1120. __set_cpu_idle(vcpu);
  1121. hrtimer_start(&vcpu->arch.ckc_timer, sltime, HRTIMER_MODE_REL);
  1122. VCPU_EVENT(vcpu, 4, "enabled wait: %llu ns", sltime);
  1123. no_timer:
  1124. kvm_vcpu_srcu_read_unlock(vcpu);
  1125. vcpu->kvm->arch.float_int.last_sleep_cpu = vcpu->vcpu_idx;
  1126. kvm_vcpu_halt(vcpu);
  1127. vcpu->valid_wakeup = false;
  1128. __unset_cpu_idle(vcpu);
  1129. kvm_vcpu_srcu_read_lock(vcpu);
  1130. hrtimer_cancel(&vcpu->arch.ckc_timer);
  1131. return 0;
  1132. }
  1133. void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu)
  1134. {
  1135. vcpu->valid_wakeup = true;
  1136. kvm_vcpu_wake_up(vcpu);
  1137. /*
  1138. * The VCPU might not be sleeping but rather executing VSIE. Let's
  1139. * kick it, so it leaves the SIE to process the request.
  1140. */
  1141. kvm_s390_vsie_kick(vcpu);
  1142. }
  1143. enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer)
  1144. {
  1145. struct kvm_vcpu *vcpu;
  1146. u64 sltime;
  1147. vcpu = container_of(timer, struct kvm_vcpu, arch.ckc_timer);
  1148. sltime = __calculate_sltime(vcpu);
  1149. /*
  1150. * If the monotonic clock runs faster than the tod clock we might be
  1151. * woken up too early and have to go back to sleep to avoid deadlocks.
  1152. */
  1153. if (sltime && hrtimer_forward_now(timer, ns_to_ktime(sltime)))
  1154. return HRTIMER_RESTART;
  1155. kvm_s390_vcpu_wakeup(vcpu);
  1156. return HRTIMER_NORESTART;
  1157. }
  1158. void kvm_s390_clear_local_irqs(struct kvm_vcpu *vcpu)
  1159. {
  1160. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1161. spin_lock(&li->lock);
  1162. li->pending_irqs = 0;
  1163. bitmap_zero(li->sigp_emerg_pending, KVM_MAX_VCPUS);
  1164. memset(&li->irq, 0, sizeof(li->irq));
  1165. spin_unlock(&li->lock);
  1166. sca_clear_ext_call(vcpu);
  1167. }
  1168. int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
  1169. {
  1170. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1171. int rc = 0;
  1172. bool delivered = false;
  1173. unsigned long irq_type;
  1174. unsigned long irqs;
  1175. __reset_intercept_indicators(vcpu);
  1176. /* pending ckc conditions might have been invalidated */
  1177. clear_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
  1178. if (ckc_irq_pending(vcpu))
  1179. set_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
  1180. /* pending cpu timer conditions might have been invalidated */
  1181. clear_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
  1182. if (cpu_timer_irq_pending(vcpu))
  1183. set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
  1184. while ((irqs = deliverable_irqs(vcpu)) && !rc) {
  1185. /* bits are in the reverse order of interrupt priority */
  1186. irq_type = find_last_bit(&irqs, IRQ_PEND_COUNT);
  1187. switch (irq_type) {
  1188. case IRQ_PEND_IO_ISC_0:
  1189. case IRQ_PEND_IO_ISC_1:
  1190. case IRQ_PEND_IO_ISC_2:
  1191. case IRQ_PEND_IO_ISC_3:
  1192. case IRQ_PEND_IO_ISC_4:
  1193. case IRQ_PEND_IO_ISC_5:
  1194. case IRQ_PEND_IO_ISC_6:
  1195. case IRQ_PEND_IO_ISC_7:
  1196. rc = __deliver_io(vcpu, irq_type);
  1197. break;
  1198. case IRQ_PEND_MCHK_EX:
  1199. case IRQ_PEND_MCHK_REP:
  1200. rc = __deliver_machine_check(vcpu);
  1201. break;
  1202. case IRQ_PEND_PROG:
  1203. rc = __deliver_prog(vcpu);
  1204. break;
  1205. case IRQ_PEND_EXT_EMERGENCY:
  1206. rc = __deliver_emergency_signal(vcpu);
  1207. break;
  1208. case IRQ_PEND_EXT_EXTERNAL:
  1209. rc = __deliver_external_call(vcpu);
  1210. break;
  1211. case IRQ_PEND_EXT_CLOCK_COMP:
  1212. rc = __deliver_ckc(vcpu);
  1213. break;
  1214. case IRQ_PEND_EXT_CPU_TIMER:
  1215. rc = __deliver_cpu_timer(vcpu);
  1216. break;
  1217. case IRQ_PEND_RESTART:
  1218. rc = __deliver_restart(vcpu);
  1219. break;
  1220. case IRQ_PEND_SET_PREFIX:
  1221. rc = __deliver_set_prefix(vcpu);
  1222. break;
  1223. case IRQ_PEND_PFAULT_INIT:
  1224. rc = __deliver_pfault_init(vcpu);
  1225. break;
  1226. case IRQ_PEND_EXT_SERVICE:
  1227. rc = __deliver_service(vcpu);
  1228. break;
  1229. case IRQ_PEND_EXT_SERVICE_EV:
  1230. rc = __deliver_service_ev(vcpu);
  1231. break;
  1232. case IRQ_PEND_PFAULT_DONE:
  1233. rc = __deliver_pfault_done(vcpu);
  1234. break;
  1235. case IRQ_PEND_VIRTIO:
  1236. rc = __deliver_virtio(vcpu);
  1237. break;
  1238. default:
  1239. WARN_ONCE(1, "Unknown pending irq type %ld", irq_type);
  1240. clear_bit(irq_type, &li->pending_irqs);
  1241. }
  1242. delivered |= !rc;
  1243. }
  1244. /*
  1245. * We delivered at least one interrupt and modified the PC. Force a
  1246. * singlestep event now.
  1247. */
  1248. if (delivered && guestdbg_sstep_enabled(vcpu)) {
  1249. struct kvm_debug_exit_arch *debug_exit = &vcpu->run->debug.arch;
  1250. debug_exit->addr = vcpu->arch.sie_block->gpsw.addr;
  1251. debug_exit->type = KVM_SINGLESTEP;
  1252. vcpu->guest_debug |= KVM_GUESTDBG_EXIT_PENDING;
  1253. }
  1254. set_intercept_indicators(vcpu);
  1255. return rc;
  1256. }
  1257. static int __inject_prog(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1258. {
  1259. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1260. vcpu->stat.inject_program++;
  1261. VCPU_EVENT(vcpu, 3, "inject: program irq code 0x%x", irq->u.pgm.code);
  1262. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
  1263. irq->u.pgm.code, 0);
  1264. if (!(irq->u.pgm.flags & KVM_S390_PGM_FLAGS_ILC_VALID)) {
  1265. /* auto detection if no valid ILC was given */
  1266. irq->u.pgm.flags &= ~KVM_S390_PGM_FLAGS_ILC_MASK;
  1267. irq->u.pgm.flags |= kvm_s390_get_ilen(vcpu);
  1268. irq->u.pgm.flags |= KVM_S390_PGM_FLAGS_ILC_VALID;
  1269. }
  1270. if (irq->u.pgm.code == PGM_PER) {
  1271. li->irq.pgm.code |= PGM_PER;
  1272. li->irq.pgm.flags = irq->u.pgm.flags;
  1273. /* only modify PER related information */
  1274. li->irq.pgm.per_address = irq->u.pgm.per_address;
  1275. li->irq.pgm.per_code = irq->u.pgm.per_code;
  1276. li->irq.pgm.per_atmid = irq->u.pgm.per_atmid;
  1277. li->irq.pgm.per_access_id = irq->u.pgm.per_access_id;
  1278. } else if (!(irq->u.pgm.code & PGM_PER)) {
  1279. li->irq.pgm.code = (li->irq.pgm.code & PGM_PER) |
  1280. irq->u.pgm.code;
  1281. li->irq.pgm.flags = irq->u.pgm.flags;
  1282. /* only modify non-PER information */
  1283. li->irq.pgm.trans_exc_code = irq->u.pgm.trans_exc_code;
  1284. li->irq.pgm.mon_code = irq->u.pgm.mon_code;
  1285. li->irq.pgm.data_exc_code = irq->u.pgm.data_exc_code;
  1286. li->irq.pgm.mon_class_nr = irq->u.pgm.mon_class_nr;
  1287. li->irq.pgm.exc_access_id = irq->u.pgm.exc_access_id;
  1288. li->irq.pgm.op_access_id = irq->u.pgm.op_access_id;
  1289. } else {
  1290. li->irq.pgm = irq->u.pgm;
  1291. }
  1292. set_bit(IRQ_PEND_PROG, &li->pending_irqs);
  1293. return 0;
  1294. }
  1295. static int __inject_pfault_init(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1296. {
  1297. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1298. vcpu->stat.inject_pfault_init++;
  1299. VCPU_EVENT(vcpu, 4, "inject: pfault init parameter block at 0x%llx",
  1300. irq->u.ext.ext_params2);
  1301. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_PFAULT_INIT,
  1302. irq->u.ext.ext_params,
  1303. irq->u.ext.ext_params2);
  1304. li->irq.ext = irq->u.ext;
  1305. set_bit(IRQ_PEND_PFAULT_INIT, &li->pending_irqs);
  1306. kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
  1307. return 0;
  1308. }
  1309. static int __inject_extcall(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1310. {
  1311. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1312. struct kvm_s390_extcall_info *extcall = &li->irq.extcall;
  1313. uint16_t src_id = irq->u.extcall.code;
  1314. vcpu->stat.inject_external_call++;
  1315. VCPU_EVENT(vcpu, 4, "inject: external call source-cpu:%u",
  1316. src_id);
  1317. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EXTERNAL_CALL,
  1318. src_id, 0);
  1319. /* sending vcpu invalid */
  1320. if (kvm_get_vcpu_by_id(vcpu->kvm, src_id) == NULL)
  1321. return -EINVAL;
  1322. if (kvm_s390_use_sca_entries() && !kvm_s390_pv_cpu_get_handle(vcpu))
  1323. return sca_inject_ext_call(vcpu, src_id);
  1324. if (test_and_set_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs))
  1325. return -EBUSY;
  1326. *extcall = irq->u.extcall;
  1327. kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
  1328. return 0;
  1329. }
  1330. static int __inject_set_prefix(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1331. {
  1332. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1333. struct kvm_s390_prefix_info *prefix = &li->irq.prefix;
  1334. vcpu->stat.inject_set_prefix++;
  1335. VCPU_EVENT(vcpu, 3, "inject: set prefix to %x",
  1336. irq->u.prefix.address);
  1337. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_SET_PREFIX,
  1338. irq->u.prefix.address, 0);
  1339. if (!is_vcpu_stopped(vcpu))
  1340. return -EBUSY;
  1341. *prefix = irq->u.prefix;
  1342. set_bit(IRQ_PEND_SET_PREFIX, &li->pending_irqs);
  1343. return 0;
  1344. }
  1345. #define KVM_S390_STOP_SUPP_FLAGS (KVM_S390_STOP_FLAG_STORE_STATUS)
  1346. static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1347. {
  1348. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1349. struct kvm_s390_stop_info *stop = &li->irq.stop;
  1350. int rc = 0;
  1351. vcpu->stat.inject_stop_signal++;
  1352. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_STOP, 0, 0);
  1353. if (irq->u.stop.flags & ~KVM_S390_STOP_SUPP_FLAGS)
  1354. return -EINVAL;
  1355. if (is_vcpu_stopped(vcpu)) {
  1356. if (irq->u.stop.flags & KVM_S390_STOP_FLAG_STORE_STATUS)
  1357. rc = kvm_s390_store_status_unloaded(vcpu,
  1358. KVM_S390_STORE_STATUS_NOADDR);
  1359. return rc;
  1360. }
  1361. if (test_and_set_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs))
  1362. return -EBUSY;
  1363. stop->flags = irq->u.stop.flags;
  1364. kvm_s390_set_cpuflags(vcpu, CPUSTAT_STOP_INT);
  1365. return 0;
  1366. }
  1367. static int __inject_sigp_restart(struct kvm_vcpu *vcpu)
  1368. {
  1369. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1370. vcpu->stat.inject_restart++;
  1371. VCPU_EVENT(vcpu, 3, "%s", "inject: restart int");
  1372. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
  1373. set_bit(IRQ_PEND_RESTART, &li->pending_irqs);
  1374. return 0;
  1375. }
  1376. static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
  1377. struct kvm_s390_irq *irq)
  1378. {
  1379. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1380. vcpu->stat.inject_emergency_signal++;
  1381. VCPU_EVENT(vcpu, 4, "inject: emergency from cpu %u",
  1382. irq->u.emerg.code);
  1383. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
  1384. irq->u.emerg.code, 0);
  1385. /* sending vcpu invalid */
  1386. if (kvm_get_vcpu_by_id(vcpu->kvm, irq->u.emerg.code) == NULL)
  1387. return -EINVAL;
  1388. set_bit(irq->u.emerg.code, li->sigp_emerg_pending);
  1389. set_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
  1390. kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
  1391. return 0;
  1392. }
  1393. static int __inject_mchk(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1394. {
  1395. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1396. struct kvm_s390_mchk_info *mchk = &li->irq.mchk;
  1397. vcpu->stat.inject_mchk++;
  1398. VCPU_EVENT(vcpu, 3, "inject: machine check mcic 0x%llx",
  1399. irq->u.mchk.mcic);
  1400. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_MCHK, 0,
  1401. irq->u.mchk.mcic);
  1402. /*
  1403. * Because repressible machine checks can be indicated along with
  1404. * exigent machine checks (PoP, Chapter 11, Interruption action)
  1405. * we need to combine cr14, mcic and external damage code.
  1406. * Failing storage address and the logout area should not be or'ed
  1407. * together, we just indicate the last occurrence of the corresponding
  1408. * machine check
  1409. */
  1410. mchk->cr14 |= irq->u.mchk.cr14;
  1411. mchk->mcic |= irq->u.mchk.mcic;
  1412. mchk->ext_damage_code |= irq->u.mchk.ext_damage_code;
  1413. mchk->failing_storage_address = irq->u.mchk.failing_storage_address;
  1414. memcpy(&mchk->fixed_logout, &irq->u.mchk.fixed_logout,
  1415. sizeof(mchk->fixed_logout));
  1416. if (mchk->mcic & MCHK_EX_MASK)
  1417. set_bit(IRQ_PEND_MCHK_EX, &li->pending_irqs);
  1418. else if (mchk->mcic & MCHK_REP_MASK)
  1419. set_bit(IRQ_PEND_MCHK_REP, &li->pending_irqs);
  1420. return 0;
  1421. }
  1422. static int __inject_ckc(struct kvm_vcpu *vcpu)
  1423. {
  1424. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1425. vcpu->stat.inject_ckc++;
  1426. VCPU_EVENT(vcpu, 3, "%s", "inject: clock comparator external");
  1427. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
  1428. 0, 0);
  1429. set_bit(IRQ_PEND_EXT_CLOCK_COMP, &li->pending_irqs);
  1430. kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
  1431. return 0;
  1432. }
  1433. static int __inject_cpu_timer(struct kvm_vcpu *vcpu)
  1434. {
  1435. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1436. vcpu->stat.inject_cputm++;
  1437. VCPU_EVENT(vcpu, 3, "%s", "inject: cpu timer external");
  1438. trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
  1439. 0, 0);
  1440. set_bit(IRQ_PEND_EXT_CPU_TIMER, &li->pending_irqs);
  1441. kvm_s390_set_cpuflags(vcpu, CPUSTAT_EXT_INT);
  1442. return 0;
  1443. }
  1444. static struct kvm_s390_interrupt_info *get_io_int(struct kvm *kvm,
  1445. int isc, u32 schid)
  1446. {
  1447. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  1448. struct list_head *isc_list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
  1449. struct kvm_s390_interrupt_info *iter;
  1450. u16 id = (schid & 0xffff0000U) >> 16;
  1451. u16 nr = schid & 0x0000ffffU;
  1452. spin_lock(&fi->lock);
  1453. list_for_each_entry(iter, isc_list, list) {
  1454. if (schid && (id != iter->io.subchannel_id ||
  1455. nr != iter->io.subchannel_nr))
  1456. continue;
  1457. /* found an appropriate entry */
  1458. list_del_init(&iter->list);
  1459. fi->counters[FIRQ_CNTR_IO] -= 1;
  1460. if (list_empty(isc_list))
  1461. clear_bit(isc_to_irq_type(isc), &fi->pending_irqs);
  1462. spin_unlock(&fi->lock);
  1463. return iter;
  1464. }
  1465. spin_unlock(&fi->lock);
  1466. return NULL;
  1467. }
  1468. static struct kvm_s390_interrupt_info *get_top_io_int(struct kvm *kvm,
  1469. u64 isc_mask, u32 schid)
  1470. {
  1471. struct kvm_s390_interrupt_info *inti = NULL;
  1472. int isc;
  1473. for (isc = 0; isc <= MAX_ISC && !inti; isc++) {
  1474. if (isc_mask & isc_to_isc_bits(isc))
  1475. inti = get_io_int(kvm, isc, schid);
  1476. }
  1477. return inti;
  1478. }
  1479. static int get_top_gisa_isc(struct kvm *kvm, u64 isc_mask, u32 schid)
  1480. {
  1481. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  1482. unsigned long active_mask;
  1483. int isc;
  1484. if (schid)
  1485. goto out;
  1486. if (!gi->origin)
  1487. goto out;
  1488. active_mask = (isc_mask & gisa_get_ipm(gi->origin) << 24) << 32;
  1489. while (active_mask) {
  1490. isc = __fls(active_mask) ^ (BITS_PER_LONG - 1);
  1491. if (gisa_tac_ipm_gisc(gi->origin, isc))
  1492. return isc;
  1493. clear_bit_inv(isc, &active_mask);
  1494. }
  1495. out:
  1496. return -EINVAL;
  1497. }
  1498. /*
  1499. * Dequeue and return an I/O interrupt matching any of the interruption
  1500. * subclasses as designated by the isc mask in cr6 and the schid (if != 0).
  1501. * Take into account the interrupts pending in the interrupt list and in GISA.
  1502. *
  1503. * Note that for a guest that does not enable I/O interrupts
  1504. * but relies on TPI, a flood of classic interrupts may starve
  1505. * out adapter interrupts on the same isc. Linux does not do
  1506. * that, and it is possible to work around the issue by configuring
  1507. * different iscs for classic and adapter interrupts in the guest,
  1508. * but we may want to revisit this in the future.
  1509. */
  1510. struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
  1511. u64 isc_mask, u32 schid)
  1512. {
  1513. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  1514. struct kvm_s390_interrupt_info *inti, *tmp_inti;
  1515. int isc;
  1516. inti = get_top_io_int(kvm, isc_mask, schid);
  1517. isc = get_top_gisa_isc(kvm, isc_mask, schid);
  1518. if (isc < 0)
  1519. /* no AI in GISA */
  1520. goto out;
  1521. if (!inti)
  1522. /* AI in GISA but no classical IO int */
  1523. goto gisa_out;
  1524. /* both types of interrupts present */
  1525. if (int_word_to_isc(inti->io.io_int_word) <= isc) {
  1526. /* classical IO int with higher priority */
  1527. gisa_set_ipm_gisc(gi->origin, isc);
  1528. goto out;
  1529. }
  1530. gisa_out:
  1531. tmp_inti = kzalloc_obj(*inti, GFP_KERNEL_ACCOUNT);
  1532. if (tmp_inti) {
  1533. tmp_inti->type = KVM_S390_INT_IO(1, 0, 0, 0);
  1534. tmp_inti->io.io_int_word = isc_to_int_word(isc);
  1535. if (inti)
  1536. kvm_s390_reinject_io_int(kvm, inti);
  1537. inti = tmp_inti;
  1538. } else
  1539. gisa_set_ipm_gisc(gi->origin, isc);
  1540. out:
  1541. return inti;
  1542. }
  1543. static int __inject_service(struct kvm *kvm,
  1544. struct kvm_s390_interrupt_info *inti)
  1545. {
  1546. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  1547. kvm->stat.inject_service_signal++;
  1548. spin_lock(&fi->lock);
  1549. fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_EVENT_PENDING;
  1550. /* We always allow events, track them separately from the sccb ints */
  1551. if (fi->srv_signal.ext_params & SCCB_EVENT_PENDING)
  1552. set_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs);
  1553. /*
  1554. * Early versions of the QEMU s390 bios will inject several
  1555. * service interrupts after another without handling a
  1556. * condition code indicating busy.
  1557. * We will silently ignore those superfluous sccb values.
  1558. * A future version of QEMU will take care of serialization
  1559. * of servc requests
  1560. */
  1561. if (fi->srv_signal.ext_params & SCCB_MASK)
  1562. goto out;
  1563. fi->srv_signal.ext_params |= inti->ext.ext_params & SCCB_MASK;
  1564. set_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
  1565. out:
  1566. spin_unlock(&fi->lock);
  1567. kfree(inti);
  1568. return 0;
  1569. }
  1570. static int __inject_virtio(struct kvm *kvm,
  1571. struct kvm_s390_interrupt_info *inti)
  1572. {
  1573. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  1574. kvm->stat.inject_virtio++;
  1575. spin_lock(&fi->lock);
  1576. if (fi->counters[FIRQ_CNTR_VIRTIO] >= KVM_S390_MAX_VIRTIO_IRQS) {
  1577. spin_unlock(&fi->lock);
  1578. return -EBUSY;
  1579. }
  1580. fi->counters[FIRQ_CNTR_VIRTIO] += 1;
  1581. list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_VIRTIO]);
  1582. set_bit(IRQ_PEND_VIRTIO, &fi->pending_irqs);
  1583. spin_unlock(&fi->lock);
  1584. return 0;
  1585. }
  1586. static int __inject_pfault_done(struct kvm *kvm,
  1587. struct kvm_s390_interrupt_info *inti)
  1588. {
  1589. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  1590. kvm->stat.inject_pfault_done++;
  1591. spin_lock(&fi->lock);
  1592. if (fi->counters[FIRQ_CNTR_PFAULT] >=
  1593. (ASYNC_PF_PER_VCPU * KVM_MAX_VCPUS)) {
  1594. spin_unlock(&fi->lock);
  1595. return -EBUSY;
  1596. }
  1597. fi->counters[FIRQ_CNTR_PFAULT] += 1;
  1598. list_add_tail(&inti->list, &fi->lists[FIRQ_LIST_PFAULT]);
  1599. set_bit(IRQ_PEND_PFAULT_DONE, &fi->pending_irqs);
  1600. spin_unlock(&fi->lock);
  1601. return 0;
  1602. }
  1603. #define CR_PENDING_SUBCLASS 28
  1604. static int __inject_float_mchk(struct kvm *kvm,
  1605. struct kvm_s390_interrupt_info *inti)
  1606. {
  1607. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  1608. kvm->stat.inject_float_mchk++;
  1609. spin_lock(&fi->lock);
  1610. fi->mchk.cr14 |= inti->mchk.cr14 & (1UL << CR_PENDING_SUBCLASS);
  1611. fi->mchk.mcic |= inti->mchk.mcic;
  1612. set_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs);
  1613. spin_unlock(&fi->lock);
  1614. kfree(inti);
  1615. return 0;
  1616. }
  1617. static int __inject_io(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
  1618. {
  1619. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  1620. struct kvm_s390_float_interrupt *fi;
  1621. struct list_head *list;
  1622. int isc;
  1623. kvm->stat.inject_io++;
  1624. isc = int_word_to_isc(inti->io.io_int_word);
  1625. /*
  1626. * We do not use the lock checking variant as this is just a
  1627. * performance optimization and we do not hold the lock here.
  1628. * This is ok as the code will pick interrupts from both "lists"
  1629. * for delivery.
  1630. */
  1631. if (gi->origin && inti->type & KVM_S390_INT_IO_AI_MASK) {
  1632. VM_EVENT(kvm, 4, "%s isc %1u", "inject: I/O (AI/gisa)", isc);
  1633. gisa_set_ipm_gisc(gi->origin, isc);
  1634. kfree(inti);
  1635. return 0;
  1636. }
  1637. fi = &kvm->arch.float_int;
  1638. spin_lock(&fi->lock);
  1639. if (fi->counters[FIRQ_CNTR_IO] >= KVM_S390_MAX_FLOAT_IRQS) {
  1640. spin_unlock(&fi->lock);
  1641. return -EBUSY;
  1642. }
  1643. fi->counters[FIRQ_CNTR_IO] += 1;
  1644. if (inti->type & KVM_S390_INT_IO_AI_MASK)
  1645. VM_EVENT(kvm, 4, "%s", "inject: I/O (AI)");
  1646. else
  1647. VM_EVENT(kvm, 4, "inject: I/O %x ss %x schid %04x",
  1648. inti->io.subchannel_id >> 8,
  1649. inti->io.subchannel_id >> 1 & 0x3,
  1650. inti->io.subchannel_nr);
  1651. list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
  1652. list_add_tail(&inti->list, list);
  1653. set_bit(isc_to_irq_type(isc), &fi->pending_irqs);
  1654. spin_unlock(&fi->lock);
  1655. return 0;
  1656. }
  1657. /*
  1658. * Find a destination VCPU for a floating irq and kick it.
  1659. */
  1660. static void __floating_irq_kick(struct kvm *kvm, u64 type)
  1661. {
  1662. struct kvm_vcpu *dst_vcpu;
  1663. int sigcpu, online_vcpus, nr_tries = 0;
  1664. online_vcpus = atomic_read(&kvm->online_vcpus);
  1665. if (!online_vcpus)
  1666. return;
  1667. for (sigcpu = kvm->arch.float_int.last_sleep_cpu; ; sigcpu++) {
  1668. sigcpu %= online_vcpus;
  1669. dst_vcpu = kvm_get_vcpu(kvm, sigcpu);
  1670. if (!is_vcpu_stopped(dst_vcpu))
  1671. break;
  1672. /* avoid endless loops if all vcpus are stopped */
  1673. if (nr_tries++ >= online_vcpus)
  1674. return;
  1675. }
  1676. /* make the VCPU drop out of the SIE, or wake it up if sleeping */
  1677. switch (type) {
  1678. case KVM_S390_MCHK:
  1679. kvm_s390_set_cpuflags(dst_vcpu, CPUSTAT_STOP_INT);
  1680. break;
  1681. case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
  1682. if (!(type & KVM_S390_INT_IO_AI_MASK &&
  1683. kvm->arch.gisa_int.origin) ||
  1684. kvm_s390_pv_cpu_get_handle(dst_vcpu))
  1685. kvm_s390_set_cpuflags(dst_vcpu, CPUSTAT_IO_INT);
  1686. break;
  1687. default:
  1688. kvm_s390_set_cpuflags(dst_vcpu, CPUSTAT_EXT_INT);
  1689. break;
  1690. }
  1691. kvm_s390_vcpu_wakeup(dst_vcpu);
  1692. }
  1693. static int __inject_vm(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
  1694. {
  1695. u64 type = READ_ONCE(inti->type);
  1696. int rc;
  1697. switch (type) {
  1698. case KVM_S390_MCHK:
  1699. rc = __inject_float_mchk(kvm, inti);
  1700. break;
  1701. case KVM_S390_INT_VIRTIO:
  1702. rc = __inject_virtio(kvm, inti);
  1703. break;
  1704. case KVM_S390_INT_SERVICE:
  1705. rc = __inject_service(kvm, inti);
  1706. break;
  1707. case KVM_S390_INT_PFAULT_DONE:
  1708. rc = __inject_pfault_done(kvm, inti);
  1709. break;
  1710. case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
  1711. rc = __inject_io(kvm, inti);
  1712. break;
  1713. default:
  1714. rc = -EINVAL;
  1715. }
  1716. if (rc)
  1717. return rc;
  1718. __floating_irq_kick(kvm, type);
  1719. return 0;
  1720. }
  1721. int kvm_s390_inject_vm(struct kvm *kvm,
  1722. struct kvm_s390_interrupt *s390int)
  1723. {
  1724. struct kvm_s390_interrupt_info *inti;
  1725. int rc;
  1726. inti = kzalloc_obj(*inti, GFP_KERNEL_ACCOUNT);
  1727. if (!inti)
  1728. return -ENOMEM;
  1729. inti->type = s390int->type;
  1730. switch (inti->type) {
  1731. case KVM_S390_INT_VIRTIO:
  1732. VM_EVENT(kvm, 5, "inject: virtio parm:%x,parm64:%llx",
  1733. s390int->parm, s390int->parm64);
  1734. inti->ext.ext_params = s390int->parm;
  1735. inti->ext.ext_params2 = s390int->parm64;
  1736. break;
  1737. case KVM_S390_INT_SERVICE:
  1738. VM_EVENT(kvm, 4, "inject: sclp parm:%x", s390int->parm);
  1739. inti->ext.ext_params = s390int->parm;
  1740. break;
  1741. case KVM_S390_INT_PFAULT_DONE:
  1742. inti->ext.ext_params2 = s390int->parm64;
  1743. break;
  1744. case KVM_S390_MCHK:
  1745. VM_EVENT(kvm, 3, "inject: machine check mcic 0x%llx",
  1746. s390int->parm64);
  1747. inti->mchk.cr14 = s390int->parm; /* upper bits are not used */
  1748. inti->mchk.mcic = s390int->parm64;
  1749. break;
  1750. case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
  1751. inti->io.subchannel_id = s390int->parm >> 16;
  1752. inti->io.subchannel_nr = s390int->parm & 0x0000ffffu;
  1753. inti->io.io_int_parm = s390int->parm64 >> 32;
  1754. inti->io.io_int_word = s390int->parm64 & 0x00000000ffffffffull;
  1755. break;
  1756. default:
  1757. kfree(inti);
  1758. return -EINVAL;
  1759. }
  1760. trace_kvm_s390_inject_vm(s390int->type, s390int->parm, s390int->parm64,
  1761. 2);
  1762. rc = __inject_vm(kvm, inti);
  1763. if (rc)
  1764. kfree(inti);
  1765. return rc;
  1766. }
  1767. int kvm_s390_reinject_io_int(struct kvm *kvm,
  1768. struct kvm_s390_interrupt_info *inti)
  1769. {
  1770. return __inject_vm(kvm, inti);
  1771. }
  1772. int s390int_to_s390irq(struct kvm_s390_interrupt *s390int,
  1773. struct kvm_s390_irq *irq)
  1774. {
  1775. irq->type = s390int->type;
  1776. switch (irq->type) {
  1777. case KVM_S390_PROGRAM_INT:
  1778. if (s390int->parm & 0xffff0000)
  1779. return -EINVAL;
  1780. irq->u.pgm.code = s390int->parm;
  1781. break;
  1782. case KVM_S390_SIGP_SET_PREFIX:
  1783. irq->u.prefix.address = s390int->parm;
  1784. break;
  1785. case KVM_S390_SIGP_STOP:
  1786. irq->u.stop.flags = s390int->parm;
  1787. break;
  1788. case KVM_S390_INT_EXTERNAL_CALL:
  1789. if (s390int->parm & 0xffff0000)
  1790. return -EINVAL;
  1791. irq->u.extcall.code = s390int->parm;
  1792. break;
  1793. case KVM_S390_INT_EMERGENCY:
  1794. if (s390int->parm & 0xffff0000)
  1795. return -EINVAL;
  1796. irq->u.emerg.code = s390int->parm;
  1797. break;
  1798. case KVM_S390_MCHK:
  1799. irq->u.mchk.mcic = s390int->parm64;
  1800. break;
  1801. case KVM_S390_INT_PFAULT_INIT:
  1802. irq->u.ext.ext_params = s390int->parm;
  1803. irq->u.ext.ext_params2 = s390int->parm64;
  1804. break;
  1805. case KVM_S390_RESTART:
  1806. case KVM_S390_INT_CLOCK_COMP:
  1807. case KVM_S390_INT_CPU_TIMER:
  1808. break;
  1809. default:
  1810. return -EINVAL;
  1811. }
  1812. return 0;
  1813. }
  1814. int kvm_s390_is_stop_irq_pending(struct kvm_vcpu *vcpu)
  1815. {
  1816. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1817. return test_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs);
  1818. }
  1819. int kvm_s390_is_restart_irq_pending(struct kvm_vcpu *vcpu)
  1820. {
  1821. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1822. return test_bit(IRQ_PEND_RESTART, &li->pending_irqs);
  1823. }
  1824. void kvm_s390_clear_stop_irq(struct kvm_vcpu *vcpu)
  1825. {
  1826. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1827. spin_lock(&li->lock);
  1828. li->irq.stop.flags = 0;
  1829. clear_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs);
  1830. spin_unlock(&li->lock);
  1831. }
  1832. static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1833. {
  1834. int rc;
  1835. switch (irq->type) {
  1836. case KVM_S390_PROGRAM_INT:
  1837. rc = __inject_prog(vcpu, irq);
  1838. break;
  1839. case KVM_S390_SIGP_SET_PREFIX:
  1840. rc = __inject_set_prefix(vcpu, irq);
  1841. break;
  1842. case KVM_S390_SIGP_STOP:
  1843. rc = __inject_sigp_stop(vcpu, irq);
  1844. break;
  1845. case KVM_S390_RESTART:
  1846. rc = __inject_sigp_restart(vcpu);
  1847. break;
  1848. case KVM_S390_INT_CLOCK_COMP:
  1849. rc = __inject_ckc(vcpu);
  1850. break;
  1851. case KVM_S390_INT_CPU_TIMER:
  1852. rc = __inject_cpu_timer(vcpu);
  1853. break;
  1854. case KVM_S390_INT_EXTERNAL_CALL:
  1855. rc = __inject_extcall(vcpu, irq);
  1856. break;
  1857. case KVM_S390_INT_EMERGENCY:
  1858. rc = __inject_sigp_emergency(vcpu, irq);
  1859. break;
  1860. case KVM_S390_MCHK:
  1861. rc = __inject_mchk(vcpu, irq);
  1862. break;
  1863. case KVM_S390_INT_PFAULT_INIT:
  1864. rc = __inject_pfault_init(vcpu, irq);
  1865. break;
  1866. case KVM_S390_INT_VIRTIO:
  1867. case KVM_S390_INT_SERVICE:
  1868. case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
  1869. default:
  1870. rc = -EINVAL;
  1871. }
  1872. return rc;
  1873. }
  1874. int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
  1875. {
  1876. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  1877. int rc;
  1878. spin_lock(&li->lock);
  1879. rc = do_inject_vcpu(vcpu, irq);
  1880. spin_unlock(&li->lock);
  1881. if (!rc)
  1882. kvm_s390_vcpu_wakeup(vcpu);
  1883. return rc;
  1884. }
  1885. static inline void clear_irq_list(struct list_head *_list)
  1886. {
  1887. struct kvm_s390_interrupt_info *inti, *n;
  1888. list_for_each_entry_safe(inti, n, _list, list) {
  1889. list_del(&inti->list);
  1890. kfree(inti);
  1891. }
  1892. }
  1893. static void inti_to_irq(struct kvm_s390_interrupt_info *inti,
  1894. struct kvm_s390_irq *irq)
  1895. {
  1896. irq->type = inti->type;
  1897. switch (inti->type) {
  1898. case KVM_S390_INT_PFAULT_INIT:
  1899. case KVM_S390_INT_PFAULT_DONE:
  1900. case KVM_S390_INT_VIRTIO:
  1901. irq->u.ext = inti->ext;
  1902. break;
  1903. case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
  1904. irq->u.io = inti->io;
  1905. break;
  1906. }
  1907. }
  1908. void kvm_s390_clear_float_irqs(struct kvm *kvm)
  1909. {
  1910. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  1911. int i;
  1912. mutex_lock(&kvm->lock);
  1913. if (!kvm_s390_pv_is_protected(kvm))
  1914. fi->masked_irqs = 0;
  1915. mutex_unlock(&kvm->lock);
  1916. spin_lock(&fi->lock);
  1917. fi->pending_irqs = 0;
  1918. memset(&fi->srv_signal, 0, sizeof(fi->srv_signal));
  1919. memset(&fi->mchk, 0, sizeof(fi->mchk));
  1920. for (i = 0; i < FIRQ_LIST_COUNT; i++)
  1921. clear_irq_list(&fi->lists[i]);
  1922. for (i = 0; i < FIRQ_MAX_COUNT; i++)
  1923. fi->counters[i] = 0;
  1924. spin_unlock(&fi->lock);
  1925. kvm_s390_gisa_clear(kvm);
  1926. };
  1927. static int get_all_floating_irqs(struct kvm *kvm, u8 __user *usrbuf, u64 len)
  1928. {
  1929. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  1930. struct kvm_s390_interrupt_info *inti;
  1931. struct kvm_s390_float_interrupt *fi;
  1932. struct kvm_s390_irq *buf;
  1933. struct kvm_s390_irq *irq;
  1934. int max_irqs;
  1935. int ret = 0;
  1936. int n = 0;
  1937. int i;
  1938. if (len > KVM_S390_FLIC_MAX_BUFFER || len == 0)
  1939. return -EINVAL;
  1940. /*
  1941. * We are already using -ENOMEM to signal
  1942. * userspace it may retry with a bigger buffer,
  1943. * so we need to use something else for this case
  1944. */
  1945. buf = vzalloc(len);
  1946. if (!buf)
  1947. return -ENOBUFS;
  1948. max_irqs = len / sizeof(struct kvm_s390_irq);
  1949. if (gi->origin && gisa_get_ipm(gi->origin)) {
  1950. for (i = 0; i <= MAX_ISC; i++) {
  1951. if (n == max_irqs) {
  1952. /* signal userspace to try again */
  1953. ret = -ENOMEM;
  1954. goto out_nolock;
  1955. }
  1956. if (gisa_tac_ipm_gisc(gi->origin, i)) {
  1957. irq = (struct kvm_s390_irq *) &buf[n];
  1958. irq->type = KVM_S390_INT_IO(1, 0, 0, 0);
  1959. irq->u.io.io_int_word = isc_to_int_word(i);
  1960. n++;
  1961. }
  1962. }
  1963. }
  1964. fi = &kvm->arch.float_int;
  1965. spin_lock(&fi->lock);
  1966. for (i = 0; i < FIRQ_LIST_COUNT; i++) {
  1967. list_for_each_entry(inti, &fi->lists[i], list) {
  1968. if (n == max_irqs) {
  1969. /* signal userspace to try again */
  1970. ret = -ENOMEM;
  1971. goto out;
  1972. }
  1973. inti_to_irq(inti, &buf[n]);
  1974. n++;
  1975. }
  1976. }
  1977. if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs) ||
  1978. test_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs)) {
  1979. if (n == max_irqs) {
  1980. /* signal userspace to try again */
  1981. ret = -ENOMEM;
  1982. goto out;
  1983. }
  1984. irq = (struct kvm_s390_irq *) &buf[n];
  1985. irq->type = KVM_S390_INT_SERVICE;
  1986. irq->u.ext = fi->srv_signal;
  1987. n++;
  1988. }
  1989. if (test_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) {
  1990. if (n == max_irqs) {
  1991. /* signal userspace to try again */
  1992. ret = -ENOMEM;
  1993. goto out;
  1994. }
  1995. irq = (struct kvm_s390_irq *) &buf[n];
  1996. irq->type = KVM_S390_MCHK;
  1997. irq->u.mchk = fi->mchk;
  1998. n++;
  1999. }
  2000. out:
  2001. spin_unlock(&fi->lock);
  2002. out_nolock:
  2003. if (!ret && n > 0) {
  2004. if (copy_to_user(usrbuf, buf, sizeof(struct kvm_s390_irq) * n))
  2005. ret = -EFAULT;
  2006. }
  2007. vfree(buf);
  2008. return ret < 0 ? ret : n;
  2009. }
  2010. static int flic_ais_mode_get_all(struct kvm *kvm, struct kvm_device_attr *attr)
  2011. {
  2012. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  2013. struct kvm_s390_ais_all ais;
  2014. if (attr->attr < sizeof(ais))
  2015. return -EINVAL;
  2016. if (!test_kvm_facility(kvm, 72))
  2017. return -EOPNOTSUPP;
  2018. mutex_lock(&fi->ais_lock);
  2019. ais.simm = fi->simm;
  2020. ais.nimm = fi->nimm;
  2021. mutex_unlock(&fi->ais_lock);
  2022. if (copy_to_user((void __user *)attr->addr, &ais, sizeof(ais)))
  2023. return -EFAULT;
  2024. return 0;
  2025. }
  2026. static int flic_get_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
  2027. {
  2028. int r;
  2029. switch (attr->group) {
  2030. case KVM_DEV_FLIC_GET_ALL_IRQS:
  2031. r = get_all_floating_irqs(dev->kvm, (u8 __user *) attr->addr,
  2032. attr->attr);
  2033. break;
  2034. case KVM_DEV_FLIC_AISM_ALL:
  2035. r = flic_ais_mode_get_all(dev->kvm, attr);
  2036. break;
  2037. default:
  2038. r = -EINVAL;
  2039. }
  2040. return r;
  2041. }
  2042. static inline int copy_irq_from_user(struct kvm_s390_interrupt_info *inti,
  2043. u64 addr)
  2044. {
  2045. struct kvm_s390_irq __user *uptr = (struct kvm_s390_irq __user *) addr;
  2046. void *target = NULL;
  2047. void __user *source;
  2048. u64 size;
  2049. if (get_user(inti->type, (u64 __user *)addr))
  2050. return -EFAULT;
  2051. switch (inti->type) {
  2052. case KVM_S390_INT_PFAULT_INIT:
  2053. case KVM_S390_INT_PFAULT_DONE:
  2054. case KVM_S390_INT_VIRTIO:
  2055. case KVM_S390_INT_SERVICE:
  2056. target = (void *) &inti->ext;
  2057. source = &uptr->u.ext;
  2058. size = sizeof(inti->ext);
  2059. break;
  2060. case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
  2061. target = (void *) &inti->io;
  2062. source = &uptr->u.io;
  2063. size = sizeof(inti->io);
  2064. break;
  2065. case KVM_S390_MCHK:
  2066. target = (void *) &inti->mchk;
  2067. source = &uptr->u.mchk;
  2068. size = sizeof(inti->mchk);
  2069. break;
  2070. default:
  2071. return -EINVAL;
  2072. }
  2073. if (copy_from_user(target, source, size))
  2074. return -EFAULT;
  2075. return 0;
  2076. }
  2077. static int enqueue_floating_irq(struct kvm_device *dev,
  2078. struct kvm_device_attr *attr)
  2079. {
  2080. struct kvm_s390_interrupt_info *inti = NULL;
  2081. int r = 0;
  2082. int len = attr->attr;
  2083. if (len % sizeof(struct kvm_s390_irq) != 0)
  2084. return -EINVAL;
  2085. else if (len > KVM_S390_FLIC_MAX_BUFFER)
  2086. return -EINVAL;
  2087. while (len >= sizeof(struct kvm_s390_irq)) {
  2088. inti = kzalloc_obj(*inti, GFP_KERNEL_ACCOUNT);
  2089. if (!inti)
  2090. return -ENOMEM;
  2091. r = copy_irq_from_user(inti, attr->addr);
  2092. if (r) {
  2093. kfree(inti);
  2094. return r;
  2095. }
  2096. r = __inject_vm(dev->kvm, inti);
  2097. if (r) {
  2098. kfree(inti);
  2099. return r;
  2100. }
  2101. len -= sizeof(struct kvm_s390_irq);
  2102. attr->addr += sizeof(struct kvm_s390_irq);
  2103. }
  2104. return r;
  2105. }
  2106. static struct s390_io_adapter *get_io_adapter(struct kvm *kvm, unsigned int id)
  2107. {
  2108. if (id >= MAX_S390_IO_ADAPTERS)
  2109. return NULL;
  2110. id = array_index_nospec(id, MAX_S390_IO_ADAPTERS);
  2111. return kvm->arch.adapters[id];
  2112. }
  2113. static int register_io_adapter(struct kvm_device *dev,
  2114. struct kvm_device_attr *attr)
  2115. {
  2116. struct s390_io_adapter *adapter;
  2117. struct kvm_s390_io_adapter adapter_info;
  2118. if (copy_from_user(&adapter_info,
  2119. (void __user *)attr->addr, sizeof(adapter_info)))
  2120. return -EFAULT;
  2121. if (adapter_info.id >= MAX_S390_IO_ADAPTERS)
  2122. return -EINVAL;
  2123. adapter_info.id = array_index_nospec(adapter_info.id,
  2124. MAX_S390_IO_ADAPTERS);
  2125. if (dev->kvm->arch.adapters[adapter_info.id] != NULL)
  2126. return -EINVAL;
  2127. adapter = kzalloc_obj(*adapter, GFP_KERNEL_ACCOUNT);
  2128. if (!adapter)
  2129. return -ENOMEM;
  2130. adapter->id = adapter_info.id;
  2131. adapter->isc = adapter_info.isc;
  2132. adapter->maskable = adapter_info.maskable;
  2133. adapter->masked = false;
  2134. adapter->swap = adapter_info.swap;
  2135. adapter->suppressible = (adapter_info.flags) &
  2136. KVM_S390_ADAPTER_SUPPRESSIBLE;
  2137. dev->kvm->arch.adapters[adapter->id] = adapter;
  2138. return 0;
  2139. }
  2140. int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked)
  2141. {
  2142. int ret;
  2143. struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
  2144. if (!adapter || !adapter->maskable)
  2145. return -EINVAL;
  2146. ret = adapter->masked;
  2147. adapter->masked = masked;
  2148. return ret;
  2149. }
  2150. void kvm_s390_destroy_adapters(struct kvm *kvm)
  2151. {
  2152. int i;
  2153. for (i = 0; i < MAX_S390_IO_ADAPTERS; i++)
  2154. kfree(kvm->arch.adapters[i]);
  2155. }
  2156. static int modify_io_adapter(struct kvm_device *dev,
  2157. struct kvm_device_attr *attr)
  2158. {
  2159. struct kvm_s390_io_adapter_req req;
  2160. struct s390_io_adapter *adapter;
  2161. int ret;
  2162. if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
  2163. return -EFAULT;
  2164. adapter = get_io_adapter(dev->kvm, req.id);
  2165. if (!adapter)
  2166. return -EINVAL;
  2167. switch (req.type) {
  2168. case KVM_S390_IO_ADAPTER_MASK:
  2169. ret = kvm_s390_mask_adapter(dev->kvm, req.id, req.mask);
  2170. if (ret > 0)
  2171. ret = 0;
  2172. break;
  2173. /*
  2174. * The following operations are no longer needed and therefore no-ops.
  2175. * The gpa to hva translation is done when an IRQ route is set up. The
  2176. * set_irq code uses get_user_pages_remote() to do the actual write.
  2177. */
  2178. case KVM_S390_IO_ADAPTER_MAP:
  2179. case KVM_S390_IO_ADAPTER_UNMAP:
  2180. ret = 0;
  2181. break;
  2182. default:
  2183. ret = -EINVAL;
  2184. }
  2185. return ret;
  2186. }
  2187. static int clear_io_irq(struct kvm *kvm, struct kvm_device_attr *attr)
  2188. {
  2189. const u64 isc_mask = 0xffUL << 24; /* all iscs set */
  2190. u32 schid;
  2191. if (attr->flags)
  2192. return -EINVAL;
  2193. if (attr->attr != sizeof(schid))
  2194. return -EINVAL;
  2195. if (copy_from_user(&schid, (void __user *) attr->addr, sizeof(schid)))
  2196. return -EFAULT;
  2197. if (!schid)
  2198. return -EINVAL;
  2199. kfree(kvm_s390_get_io_int(kvm, isc_mask, schid));
  2200. /*
  2201. * If userspace is conforming to the architecture, we can have at most
  2202. * one pending I/O interrupt per subchannel, so this is effectively a
  2203. * clear all.
  2204. */
  2205. return 0;
  2206. }
  2207. static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr)
  2208. {
  2209. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  2210. struct kvm_s390_ais_req req;
  2211. int ret = 0;
  2212. if (!test_kvm_facility(kvm, 72))
  2213. return -EOPNOTSUPP;
  2214. if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
  2215. return -EFAULT;
  2216. if (req.isc > MAX_ISC)
  2217. return -EINVAL;
  2218. trace_kvm_s390_modify_ais_mode(req.isc,
  2219. (fi->simm & AIS_MODE_MASK(req.isc)) ?
  2220. (fi->nimm & AIS_MODE_MASK(req.isc)) ?
  2221. 2 : KVM_S390_AIS_MODE_SINGLE :
  2222. KVM_S390_AIS_MODE_ALL, req.mode);
  2223. mutex_lock(&fi->ais_lock);
  2224. switch (req.mode) {
  2225. case KVM_S390_AIS_MODE_ALL:
  2226. fi->simm &= ~AIS_MODE_MASK(req.isc);
  2227. fi->nimm &= ~AIS_MODE_MASK(req.isc);
  2228. break;
  2229. case KVM_S390_AIS_MODE_SINGLE:
  2230. fi->simm |= AIS_MODE_MASK(req.isc);
  2231. fi->nimm &= ~AIS_MODE_MASK(req.isc);
  2232. break;
  2233. default:
  2234. ret = -EINVAL;
  2235. }
  2236. mutex_unlock(&fi->ais_lock);
  2237. return ret;
  2238. }
  2239. static int kvm_s390_inject_airq(struct kvm *kvm,
  2240. struct s390_io_adapter *adapter)
  2241. {
  2242. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  2243. struct kvm_s390_interrupt s390int = {
  2244. .type = KVM_S390_INT_IO(1, 0, 0, 0),
  2245. .parm = 0,
  2246. .parm64 = isc_to_int_word(adapter->isc),
  2247. };
  2248. int ret = 0;
  2249. if (!test_kvm_facility(kvm, 72) || !adapter->suppressible)
  2250. return kvm_s390_inject_vm(kvm, &s390int);
  2251. mutex_lock(&fi->ais_lock);
  2252. if (fi->nimm & AIS_MODE_MASK(adapter->isc)) {
  2253. trace_kvm_s390_airq_suppressed(adapter->id, adapter->isc);
  2254. goto out;
  2255. }
  2256. ret = kvm_s390_inject_vm(kvm, &s390int);
  2257. if (!ret && (fi->simm & AIS_MODE_MASK(adapter->isc))) {
  2258. fi->nimm |= AIS_MODE_MASK(adapter->isc);
  2259. trace_kvm_s390_modify_ais_mode(adapter->isc,
  2260. KVM_S390_AIS_MODE_SINGLE, 2);
  2261. }
  2262. out:
  2263. mutex_unlock(&fi->ais_lock);
  2264. return ret;
  2265. }
  2266. static int flic_inject_airq(struct kvm *kvm, struct kvm_device_attr *attr)
  2267. {
  2268. unsigned int id = attr->attr;
  2269. struct s390_io_adapter *adapter = get_io_adapter(kvm, id);
  2270. if (!adapter)
  2271. return -EINVAL;
  2272. return kvm_s390_inject_airq(kvm, adapter);
  2273. }
  2274. static int flic_ais_mode_set_all(struct kvm *kvm, struct kvm_device_attr *attr)
  2275. {
  2276. struct kvm_s390_float_interrupt *fi = &kvm->arch.float_int;
  2277. struct kvm_s390_ais_all ais;
  2278. if (!test_kvm_facility(kvm, 72))
  2279. return -EOPNOTSUPP;
  2280. if (copy_from_user(&ais, (void __user *)attr->addr, sizeof(ais)))
  2281. return -EFAULT;
  2282. mutex_lock(&fi->ais_lock);
  2283. fi->simm = ais.simm;
  2284. fi->nimm = ais.nimm;
  2285. mutex_unlock(&fi->ais_lock);
  2286. return 0;
  2287. }
  2288. static int flic_set_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
  2289. {
  2290. int r = 0;
  2291. unsigned long i;
  2292. struct kvm_vcpu *vcpu;
  2293. switch (attr->group) {
  2294. case KVM_DEV_FLIC_ENQUEUE:
  2295. r = enqueue_floating_irq(dev, attr);
  2296. break;
  2297. case KVM_DEV_FLIC_CLEAR_IRQS:
  2298. kvm_s390_clear_float_irqs(dev->kvm);
  2299. break;
  2300. case KVM_DEV_FLIC_APF_ENABLE:
  2301. if (kvm_is_ucontrol(dev->kvm))
  2302. return -EINVAL;
  2303. set_bit(GMAP_FLAG_PFAULT_ENABLED, &dev->kvm->arch.gmap->flags);
  2304. break;
  2305. case KVM_DEV_FLIC_APF_DISABLE_WAIT:
  2306. if (kvm_is_ucontrol(dev->kvm))
  2307. return -EINVAL;
  2308. clear_bit(GMAP_FLAG_PFAULT_ENABLED, &dev->kvm->arch.gmap->flags);
  2309. /*
  2310. * Make sure no async faults are in transition when
  2311. * clearing the queues. So we don't need to worry
  2312. * about late coming workers.
  2313. */
  2314. synchronize_srcu(&dev->kvm->srcu);
  2315. kvm_for_each_vcpu(i, vcpu, dev->kvm)
  2316. kvm_clear_async_pf_completion_queue(vcpu);
  2317. break;
  2318. case KVM_DEV_FLIC_ADAPTER_REGISTER:
  2319. r = register_io_adapter(dev, attr);
  2320. break;
  2321. case KVM_DEV_FLIC_ADAPTER_MODIFY:
  2322. r = modify_io_adapter(dev, attr);
  2323. break;
  2324. case KVM_DEV_FLIC_CLEAR_IO_IRQ:
  2325. r = clear_io_irq(dev->kvm, attr);
  2326. break;
  2327. case KVM_DEV_FLIC_AISM:
  2328. r = modify_ais_mode(dev->kvm, attr);
  2329. break;
  2330. case KVM_DEV_FLIC_AIRQ_INJECT:
  2331. r = flic_inject_airq(dev->kvm, attr);
  2332. break;
  2333. case KVM_DEV_FLIC_AISM_ALL:
  2334. r = flic_ais_mode_set_all(dev->kvm, attr);
  2335. break;
  2336. default:
  2337. r = -EINVAL;
  2338. }
  2339. return r;
  2340. }
  2341. static int flic_has_attr(struct kvm_device *dev,
  2342. struct kvm_device_attr *attr)
  2343. {
  2344. switch (attr->group) {
  2345. case KVM_DEV_FLIC_GET_ALL_IRQS:
  2346. case KVM_DEV_FLIC_ENQUEUE:
  2347. case KVM_DEV_FLIC_CLEAR_IRQS:
  2348. case KVM_DEV_FLIC_APF_ENABLE:
  2349. case KVM_DEV_FLIC_APF_DISABLE_WAIT:
  2350. case KVM_DEV_FLIC_ADAPTER_REGISTER:
  2351. case KVM_DEV_FLIC_ADAPTER_MODIFY:
  2352. case KVM_DEV_FLIC_CLEAR_IO_IRQ:
  2353. case KVM_DEV_FLIC_AISM:
  2354. case KVM_DEV_FLIC_AIRQ_INJECT:
  2355. case KVM_DEV_FLIC_AISM_ALL:
  2356. return 0;
  2357. }
  2358. return -ENXIO;
  2359. }
  2360. static int flic_create(struct kvm_device *dev, u32 type)
  2361. {
  2362. if (!dev)
  2363. return -EINVAL;
  2364. if (dev->kvm->arch.flic)
  2365. return -EINVAL;
  2366. dev->kvm->arch.flic = dev;
  2367. return 0;
  2368. }
  2369. static void flic_destroy(struct kvm_device *dev)
  2370. {
  2371. dev->kvm->arch.flic = NULL;
  2372. kfree(dev);
  2373. }
  2374. /* s390 floating irq controller (flic) */
  2375. struct kvm_device_ops kvm_flic_ops = {
  2376. .name = "kvm-flic",
  2377. .get_attr = flic_get_attr,
  2378. .set_attr = flic_set_attr,
  2379. .has_attr = flic_has_attr,
  2380. .create = flic_create,
  2381. .destroy = flic_destroy,
  2382. };
  2383. static unsigned long get_ind_bit(__u64 addr, unsigned long bit_nr, bool swap)
  2384. {
  2385. unsigned long bit;
  2386. bit = bit_nr + (addr % PAGE_SIZE) * 8;
  2387. /* kvm_set_routing_entry() should never allow this to happen */
  2388. WARN_ON_ONCE(bit > (PAGE_SIZE * BITS_PER_BYTE - 1));
  2389. return swap ? (bit ^ (BITS_PER_LONG - 1)) : bit;
  2390. }
  2391. static struct page *get_map_page(struct kvm *kvm, u64 uaddr)
  2392. {
  2393. struct mm_struct *mm = kvm->mm;
  2394. struct page *page = NULL;
  2395. int locked = 1;
  2396. if (mmget_not_zero(mm)) {
  2397. mmap_read_lock(mm);
  2398. get_user_pages_remote(mm, uaddr, 1, FOLL_WRITE,
  2399. &page, &locked);
  2400. if (locked)
  2401. mmap_read_unlock(mm);
  2402. mmput(mm);
  2403. }
  2404. return page;
  2405. }
  2406. static int adapter_indicators_set(struct kvm *kvm,
  2407. struct s390_io_adapter *adapter,
  2408. struct kvm_s390_adapter_int *adapter_int)
  2409. {
  2410. unsigned long bit;
  2411. int summary_set, idx;
  2412. struct page *ind_page, *summary_page;
  2413. void *map;
  2414. ind_page = get_map_page(kvm, adapter_int->ind_addr);
  2415. if (!ind_page)
  2416. return -1;
  2417. summary_page = get_map_page(kvm, adapter_int->summary_addr);
  2418. if (!summary_page) {
  2419. put_page(ind_page);
  2420. return -1;
  2421. }
  2422. idx = srcu_read_lock(&kvm->srcu);
  2423. map = page_address(ind_page);
  2424. bit = get_ind_bit(adapter_int->ind_addr,
  2425. adapter_int->ind_offset, adapter->swap);
  2426. set_bit(bit, map);
  2427. mark_page_dirty(kvm, adapter_int->ind_gaddr >> PAGE_SHIFT);
  2428. set_page_dirty_lock(ind_page);
  2429. map = page_address(summary_page);
  2430. bit = get_ind_bit(adapter_int->summary_addr,
  2431. adapter_int->summary_offset, adapter->swap);
  2432. summary_set = test_and_set_bit(bit, map);
  2433. mark_page_dirty(kvm, adapter_int->summary_gaddr >> PAGE_SHIFT);
  2434. set_page_dirty_lock(summary_page);
  2435. srcu_read_unlock(&kvm->srcu, idx);
  2436. put_page(ind_page);
  2437. put_page(summary_page);
  2438. return summary_set ? 0 : 1;
  2439. }
  2440. /*
  2441. * < 0 - not injected due to error
  2442. * = 0 - coalesced, summary indicator already active
  2443. * > 0 - injected interrupt
  2444. */
  2445. static int set_adapter_int(struct kvm_kernel_irq_routing_entry *e,
  2446. struct kvm *kvm, int irq_source_id, int level,
  2447. bool line_status)
  2448. {
  2449. int ret;
  2450. struct s390_io_adapter *adapter;
  2451. /* We're only interested in the 0->1 transition. */
  2452. if (!level)
  2453. return 0;
  2454. adapter = get_io_adapter(kvm, e->adapter.adapter_id);
  2455. if (!adapter)
  2456. return -1;
  2457. ret = adapter_indicators_set(kvm, adapter, &e->adapter);
  2458. if ((ret > 0) && !adapter->masked) {
  2459. ret = kvm_s390_inject_airq(kvm, adapter);
  2460. if (ret == 0)
  2461. ret = 1;
  2462. }
  2463. return ret;
  2464. }
  2465. /*
  2466. * Inject the machine check to the guest.
  2467. */
  2468. void kvm_s390_reinject_machine_check(struct kvm_vcpu *vcpu,
  2469. struct mcck_volatile_info *mcck_info)
  2470. {
  2471. struct kvm_s390_interrupt_info inti;
  2472. struct kvm_s390_irq irq;
  2473. struct kvm_s390_mchk_info *mchk;
  2474. union mci mci;
  2475. __u64 cr14 = 0; /* upper bits are not used */
  2476. int rc;
  2477. mci.val = mcck_info->mcic;
  2478. /* log machine checks being reinjected on all debugs */
  2479. VCPU_EVENT(vcpu, 2, "guest machine check %lx", mci.val);
  2480. KVM_EVENT(2, "guest machine check %lx", mci.val);
  2481. pr_info("guest machine check pid %d: %lx", current->pid, mci.val);
  2482. if (mci.sr)
  2483. cr14 |= CR14_RECOVERY_SUBMASK;
  2484. if (mci.dg)
  2485. cr14 |= CR14_DEGRADATION_SUBMASK;
  2486. if (mci.w)
  2487. cr14 |= CR14_WARNING_SUBMASK;
  2488. mchk = mci.ck ? &inti.mchk : &irq.u.mchk;
  2489. mchk->cr14 = cr14;
  2490. mchk->mcic = mcck_info->mcic;
  2491. mchk->ext_damage_code = mcck_info->ext_damage_code;
  2492. mchk->failing_storage_address = mcck_info->failing_storage_address;
  2493. if (mci.ck) {
  2494. /* Inject the floating machine check */
  2495. inti.type = KVM_S390_MCHK;
  2496. rc = __inject_vm(vcpu->kvm, &inti);
  2497. } else {
  2498. /* Inject the machine check to specified vcpu */
  2499. irq.type = KVM_S390_MCHK;
  2500. rc = kvm_s390_inject_vcpu(vcpu, &irq);
  2501. }
  2502. WARN_ON_ONCE(rc);
  2503. }
  2504. int kvm_set_routing_entry(struct kvm *kvm,
  2505. struct kvm_kernel_irq_routing_entry *e,
  2506. const struct kvm_irq_routing_entry *ue)
  2507. {
  2508. const struct kvm_irq_routing_s390_adapter *adapter;
  2509. u64 uaddr_s, uaddr_i;
  2510. int idx;
  2511. switch (ue->type) {
  2512. /* we store the userspace addresses instead of the guest addresses */
  2513. case KVM_IRQ_ROUTING_S390_ADAPTER:
  2514. if (kvm_is_ucontrol(kvm))
  2515. return -EINVAL;
  2516. e->set = set_adapter_int;
  2517. adapter = &ue->u.adapter;
  2518. if (adapter->summary_addr + (adapter->summary_offset / 8) >=
  2519. (adapter->summary_addr & PAGE_MASK) + PAGE_SIZE)
  2520. return -EINVAL;
  2521. if (adapter->ind_addr + (adapter->ind_offset / 8) >=
  2522. (adapter->ind_addr & PAGE_MASK) + PAGE_SIZE)
  2523. return -EINVAL;
  2524. idx = srcu_read_lock(&kvm->srcu);
  2525. uaddr_s = gpa_to_hva(kvm, ue->u.adapter.summary_addr);
  2526. uaddr_i = gpa_to_hva(kvm, ue->u.adapter.ind_addr);
  2527. srcu_read_unlock(&kvm->srcu, idx);
  2528. if (kvm_is_error_hva(uaddr_s) || kvm_is_error_hva(uaddr_i))
  2529. return -EFAULT;
  2530. e->adapter.summary_addr = uaddr_s;
  2531. e->adapter.summary_gaddr = ue->u.adapter.summary_addr;
  2532. e->adapter.ind_addr = uaddr_i;
  2533. e->adapter.ind_gaddr = ue->u.adapter.ind_addr;
  2534. e->adapter.summary_offset = ue->u.adapter.summary_offset;
  2535. e->adapter.ind_offset = ue->u.adapter.ind_offset;
  2536. e->adapter.adapter_id = ue->u.adapter.adapter_id;
  2537. return 0;
  2538. default:
  2539. return -EINVAL;
  2540. }
  2541. }
  2542. int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, struct kvm *kvm,
  2543. int irq_source_id, int level, bool line_status)
  2544. {
  2545. return -EINVAL;
  2546. }
  2547. int kvm_s390_set_irq_state(struct kvm_vcpu *vcpu, void __user *irqstate, int len)
  2548. {
  2549. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  2550. struct kvm_s390_irq *buf;
  2551. int r = 0;
  2552. int n;
  2553. buf = vmalloc(len);
  2554. if (!buf)
  2555. return -ENOMEM;
  2556. if (copy_from_user((void *) buf, irqstate, len)) {
  2557. r = -EFAULT;
  2558. goto out_free;
  2559. }
  2560. /*
  2561. * Don't allow setting the interrupt state
  2562. * when there are already interrupts pending
  2563. */
  2564. spin_lock(&li->lock);
  2565. if (li->pending_irqs) {
  2566. r = -EBUSY;
  2567. goto out_unlock;
  2568. }
  2569. for (n = 0; n < len / sizeof(*buf); n++) {
  2570. r = do_inject_vcpu(vcpu, &buf[n]);
  2571. if (r)
  2572. break;
  2573. }
  2574. out_unlock:
  2575. spin_unlock(&li->lock);
  2576. out_free:
  2577. vfree(buf);
  2578. return r;
  2579. }
  2580. static void store_local_irq(struct kvm_s390_local_interrupt *li,
  2581. struct kvm_s390_irq *irq,
  2582. unsigned long irq_type)
  2583. {
  2584. switch (irq_type) {
  2585. case IRQ_PEND_MCHK_EX:
  2586. case IRQ_PEND_MCHK_REP:
  2587. irq->type = KVM_S390_MCHK;
  2588. irq->u.mchk = li->irq.mchk;
  2589. break;
  2590. case IRQ_PEND_PROG:
  2591. irq->type = KVM_S390_PROGRAM_INT;
  2592. irq->u.pgm = li->irq.pgm;
  2593. break;
  2594. case IRQ_PEND_PFAULT_INIT:
  2595. irq->type = KVM_S390_INT_PFAULT_INIT;
  2596. irq->u.ext = li->irq.ext;
  2597. break;
  2598. case IRQ_PEND_EXT_EXTERNAL:
  2599. irq->type = KVM_S390_INT_EXTERNAL_CALL;
  2600. irq->u.extcall = li->irq.extcall;
  2601. break;
  2602. case IRQ_PEND_EXT_CLOCK_COMP:
  2603. irq->type = KVM_S390_INT_CLOCK_COMP;
  2604. break;
  2605. case IRQ_PEND_EXT_CPU_TIMER:
  2606. irq->type = KVM_S390_INT_CPU_TIMER;
  2607. break;
  2608. case IRQ_PEND_SIGP_STOP:
  2609. irq->type = KVM_S390_SIGP_STOP;
  2610. irq->u.stop = li->irq.stop;
  2611. break;
  2612. case IRQ_PEND_RESTART:
  2613. irq->type = KVM_S390_RESTART;
  2614. break;
  2615. case IRQ_PEND_SET_PREFIX:
  2616. irq->type = KVM_S390_SIGP_SET_PREFIX;
  2617. irq->u.prefix = li->irq.prefix;
  2618. break;
  2619. }
  2620. }
  2621. int kvm_s390_get_irq_state(struct kvm_vcpu *vcpu, __u8 __user *buf, int len)
  2622. {
  2623. int scn;
  2624. DECLARE_BITMAP(sigp_emerg_pending, KVM_MAX_VCPUS);
  2625. struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
  2626. unsigned long pending_irqs;
  2627. struct kvm_s390_irq irq;
  2628. unsigned long irq_type;
  2629. int cpuaddr;
  2630. int n = 0;
  2631. spin_lock(&li->lock);
  2632. pending_irqs = li->pending_irqs;
  2633. memcpy(&sigp_emerg_pending, &li->sigp_emerg_pending,
  2634. sizeof(sigp_emerg_pending));
  2635. spin_unlock(&li->lock);
  2636. for_each_set_bit(irq_type, &pending_irqs, IRQ_PEND_COUNT) {
  2637. memset(&irq, 0, sizeof(irq));
  2638. if (irq_type == IRQ_PEND_EXT_EMERGENCY)
  2639. continue;
  2640. if (n + sizeof(irq) > len)
  2641. return -ENOBUFS;
  2642. store_local_irq(&vcpu->arch.local_int, &irq, irq_type);
  2643. if (copy_to_user(&buf[n], &irq, sizeof(irq)))
  2644. return -EFAULT;
  2645. n += sizeof(irq);
  2646. }
  2647. if (test_bit(IRQ_PEND_EXT_EMERGENCY, &pending_irqs)) {
  2648. for_each_set_bit(cpuaddr, sigp_emerg_pending, KVM_MAX_VCPUS) {
  2649. memset(&irq, 0, sizeof(irq));
  2650. if (n + sizeof(irq) > len)
  2651. return -ENOBUFS;
  2652. irq.type = KVM_S390_INT_EMERGENCY;
  2653. irq.u.emerg.code = cpuaddr;
  2654. if (copy_to_user(&buf[n], &irq, sizeof(irq)))
  2655. return -EFAULT;
  2656. n += sizeof(irq);
  2657. }
  2658. }
  2659. if (sca_ext_call_pending(vcpu, &scn)) {
  2660. if (n + sizeof(irq) > len)
  2661. return -ENOBUFS;
  2662. memset(&irq, 0, sizeof(irq));
  2663. irq.type = KVM_S390_INT_EXTERNAL_CALL;
  2664. irq.u.extcall.code = scn;
  2665. if (copy_to_user(&buf[n], &irq, sizeof(irq)))
  2666. return -EFAULT;
  2667. n += sizeof(irq);
  2668. }
  2669. return n;
  2670. }
  2671. static void __airqs_kick_single_vcpu(struct kvm *kvm, u8 deliverable_mask)
  2672. {
  2673. int vcpu_idx, online_vcpus = atomic_read(&kvm->online_vcpus);
  2674. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2675. struct kvm_vcpu *vcpu;
  2676. u8 vcpu_isc_mask;
  2677. for_each_set_bit(vcpu_idx, kvm->arch.idle_mask, online_vcpus) {
  2678. vcpu = kvm_get_vcpu(kvm, vcpu_idx);
  2679. if (psw_ioint_disabled(vcpu))
  2680. continue;
  2681. vcpu_isc_mask = (u8)(vcpu->arch.sie_block->gcr[6] >> 24);
  2682. if (deliverable_mask & vcpu_isc_mask) {
  2683. /* lately kicked but not yet running */
  2684. if (test_and_set_bit(vcpu_idx, gi->kicked_mask))
  2685. return;
  2686. kvm_s390_vcpu_wakeup(vcpu);
  2687. return;
  2688. }
  2689. }
  2690. }
  2691. static enum hrtimer_restart gisa_vcpu_kicker(struct hrtimer *timer)
  2692. {
  2693. struct kvm_s390_gisa_interrupt *gi =
  2694. container_of(timer, struct kvm_s390_gisa_interrupt, timer);
  2695. struct kvm *kvm =
  2696. container_of(gi->origin, struct sie_page2, gisa)->kvm;
  2697. u8 pending_mask;
  2698. pending_mask = gisa_get_ipm_or_restore_iam(gi);
  2699. if (pending_mask) {
  2700. __airqs_kick_single_vcpu(kvm, pending_mask);
  2701. hrtimer_forward_now(timer, ns_to_ktime(gi->expires));
  2702. return HRTIMER_RESTART;
  2703. }
  2704. return HRTIMER_NORESTART;
  2705. }
  2706. #define NULL_GISA_ADDR 0x00000000UL
  2707. #define NONE_GISA_ADDR 0x00000001UL
  2708. #define GISA_ADDR_MASK 0xfffff000UL
  2709. static void process_gib_alert_list(void)
  2710. {
  2711. struct kvm_s390_gisa_interrupt *gi;
  2712. u32 final, gisa_phys, origin = 0UL;
  2713. struct kvm_s390_gisa *gisa;
  2714. struct kvm *kvm;
  2715. do {
  2716. /*
  2717. * If the NONE_GISA_ADDR is still stored in the alert list
  2718. * origin, we will leave the outer loop. No further GISA has
  2719. * been added to the alert list by millicode while processing
  2720. * the current alert list.
  2721. */
  2722. final = (origin & NONE_GISA_ADDR);
  2723. /*
  2724. * Cut off the alert list and store the NONE_GISA_ADDR in the
  2725. * alert list origin to avoid further GAL interruptions.
  2726. * A new alert list can be build up by millicode in parallel
  2727. * for guests not in the yet cut-off alert list. When in the
  2728. * final loop, store the NULL_GISA_ADDR instead. This will re-
  2729. * enable GAL interruptions on the host again.
  2730. */
  2731. origin = xchg(&gib->alert_list_origin,
  2732. (!final) ? NONE_GISA_ADDR : NULL_GISA_ADDR);
  2733. /*
  2734. * Loop through the just cut-off alert list and start the
  2735. * gisa timers to kick idle vcpus to consume the pending
  2736. * interruptions asap.
  2737. */
  2738. while (origin & GISA_ADDR_MASK) {
  2739. gisa_phys = origin;
  2740. gisa = phys_to_virt(gisa_phys);
  2741. origin = gisa->next_alert;
  2742. gisa->next_alert = gisa_phys;
  2743. kvm = container_of(gisa, struct sie_page2, gisa)->kvm;
  2744. gi = &kvm->arch.gisa_int;
  2745. if (hrtimer_active(&gi->timer))
  2746. hrtimer_cancel(&gi->timer);
  2747. hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);
  2748. }
  2749. } while (!final);
  2750. }
  2751. void kvm_s390_gisa_clear(struct kvm *kvm)
  2752. {
  2753. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2754. if (!gi->origin)
  2755. return;
  2756. gisa_clear_ipm(gi->origin);
  2757. VM_EVENT(kvm, 3, "gisa 0x%p cleared", gi->origin);
  2758. }
  2759. void kvm_s390_gisa_init(struct kvm *kvm)
  2760. {
  2761. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2762. if (!css_general_characteristics.aiv)
  2763. return;
  2764. gi->origin = &kvm->arch.sie_page2->gisa;
  2765. gi->alert.mask = 0;
  2766. spin_lock_init(&gi->alert.ref_lock);
  2767. gi->expires = 50 * 1000; /* 50 usec */
  2768. hrtimer_setup(&gi->timer, gisa_vcpu_kicker, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  2769. memset(gi->origin, 0, sizeof(struct kvm_s390_gisa));
  2770. gi->origin->next_alert = (u32)virt_to_phys(gi->origin);
  2771. VM_EVENT(kvm, 3, "gisa 0x%p initialized", gi->origin);
  2772. }
  2773. void kvm_s390_gisa_enable(struct kvm *kvm)
  2774. {
  2775. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2776. struct kvm_vcpu *vcpu;
  2777. unsigned long i;
  2778. u32 gisa_desc;
  2779. if (gi->origin)
  2780. return;
  2781. kvm_s390_gisa_init(kvm);
  2782. gisa_desc = kvm_s390_get_gisa_desc(kvm);
  2783. if (!gisa_desc)
  2784. return;
  2785. kvm_for_each_vcpu(i, vcpu, kvm) {
  2786. mutex_lock(&vcpu->mutex);
  2787. vcpu->arch.sie_block->gd = gisa_desc;
  2788. vcpu->arch.sie_block->eca |= ECA_AIV;
  2789. VCPU_EVENT(vcpu, 3, "AIV gisa format-%u enabled for cpu %03u",
  2790. vcpu->arch.sie_block->gd & 0x3, vcpu->vcpu_id);
  2791. mutex_unlock(&vcpu->mutex);
  2792. }
  2793. }
  2794. void kvm_s390_gisa_destroy(struct kvm *kvm)
  2795. {
  2796. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2797. struct kvm_s390_gisa *gisa = gi->origin;
  2798. if (!gi->origin)
  2799. return;
  2800. WARN(gi->alert.mask != 0x00,
  2801. "unexpected non zero alert.mask 0x%02x",
  2802. gi->alert.mask);
  2803. gi->alert.mask = 0x00;
  2804. if (gisa_set_iam(gi->origin, gi->alert.mask))
  2805. process_gib_alert_list();
  2806. hrtimer_cancel(&gi->timer);
  2807. gi->origin = NULL;
  2808. VM_EVENT(kvm, 3, "gisa 0x%p destroyed", gisa);
  2809. }
  2810. void kvm_s390_gisa_disable(struct kvm *kvm)
  2811. {
  2812. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2813. struct kvm_vcpu *vcpu;
  2814. unsigned long i;
  2815. if (!gi->origin)
  2816. return;
  2817. kvm_for_each_vcpu(i, vcpu, kvm) {
  2818. mutex_lock(&vcpu->mutex);
  2819. vcpu->arch.sie_block->eca &= ~ECA_AIV;
  2820. vcpu->arch.sie_block->gd = 0U;
  2821. mutex_unlock(&vcpu->mutex);
  2822. VCPU_EVENT(vcpu, 3, "AIV disabled for cpu %03u", vcpu->vcpu_id);
  2823. }
  2824. kvm_s390_gisa_destroy(kvm);
  2825. }
  2826. /**
  2827. * kvm_s390_gisc_register - register a guest ISC
  2828. *
  2829. * @kvm: the kernel vm to work with
  2830. * @gisc: the guest interruption sub class to register
  2831. *
  2832. * The function extends the vm specific alert mask to use.
  2833. * The effective IAM mask in the GISA is updated as well
  2834. * in case the GISA is not part of the GIB alert list.
  2835. * It will be updated latest when the IAM gets restored
  2836. * by gisa_get_ipm_or_restore_iam().
  2837. *
  2838. * Returns: the nonspecific ISC (NISC) the gib alert mechanism
  2839. * has registered with the channel subsystem.
  2840. * -ENODEV in case the vm uses no GISA
  2841. * -ERANGE in case the guest ISC is invalid
  2842. */
  2843. int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc)
  2844. {
  2845. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2846. if (!gi->origin)
  2847. return -ENODEV;
  2848. if (gisc > MAX_ISC)
  2849. return -ERANGE;
  2850. spin_lock(&gi->alert.ref_lock);
  2851. gi->alert.ref_count[gisc]++;
  2852. if (gi->alert.ref_count[gisc] == 1) {
  2853. gi->alert.mask |= 0x80 >> gisc;
  2854. gisa_set_iam(gi->origin, gi->alert.mask);
  2855. }
  2856. spin_unlock(&gi->alert.ref_lock);
  2857. return gib->nisc;
  2858. }
  2859. EXPORT_SYMBOL_GPL(kvm_s390_gisc_register);
  2860. /**
  2861. * kvm_s390_gisc_unregister - unregister a guest ISC
  2862. *
  2863. * @kvm: the kernel vm to work with
  2864. * @gisc: the guest interruption sub class to register
  2865. *
  2866. * The function reduces the vm specific alert mask to use.
  2867. * The effective IAM mask in the GISA is updated as well
  2868. * in case the GISA is not part of the GIB alert list.
  2869. * It will be updated latest when the IAM gets restored
  2870. * by gisa_get_ipm_or_restore_iam().
  2871. *
  2872. * Returns: the nonspecific ISC (NISC) the gib alert mechanism
  2873. * has registered with the channel subsystem.
  2874. * -ENODEV in case the vm uses no GISA
  2875. * -ERANGE in case the guest ISC is invalid
  2876. * -EINVAL in case the guest ISC is not registered
  2877. */
  2878. int kvm_s390_gisc_unregister(struct kvm *kvm, u32 gisc)
  2879. {
  2880. struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
  2881. int rc = 0;
  2882. if (!gi->origin)
  2883. return -ENODEV;
  2884. if (gisc > MAX_ISC)
  2885. return -ERANGE;
  2886. spin_lock(&gi->alert.ref_lock);
  2887. if (gi->alert.ref_count[gisc] == 0) {
  2888. rc = -EINVAL;
  2889. goto out;
  2890. }
  2891. gi->alert.ref_count[gisc]--;
  2892. if (gi->alert.ref_count[gisc] == 0) {
  2893. gi->alert.mask &= ~(0x80 >> gisc);
  2894. gisa_set_iam(gi->origin, gi->alert.mask);
  2895. }
  2896. out:
  2897. spin_unlock(&gi->alert.ref_lock);
  2898. return rc;
  2899. }
  2900. EXPORT_SYMBOL_GPL(kvm_s390_gisc_unregister);
  2901. static void aen_host_forward(unsigned long si)
  2902. {
  2903. struct kvm_s390_gisa_interrupt *gi;
  2904. struct zpci_gaite *gaite;
  2905. struct kvm *kvm;
  2906. gaite = (struct zpci_gaite *)aift->gait +
  2907. (si * sizeof(struct zpci_gaite));
  2908. if (gaite->count == 0)
  2909. return;
  2910. if (gaite->aisb != 0)
  2911. set_bit_inv(gaite->aisbo, phys_to_virt(gaite->aisb));
  2912. kvm = kvm_s390_pci_si_to_kvm(aift, si);
  2913. if (!kvm)
  2914. return;
  2915. gi = &kvm->arch.gisa_int;
  2916. if (!(gi->origin->g1.simm & AIS_MODE_MASK(gaite->gisc)) ||
  2917. !(gi->origin->g1.nimm & AIS_MODE_MASK(gaite->gisc))) {
  2918. gisa_set_ipm_gisc(gi->origin, gaite->gisc);
  2919. if (hrtimer_active(&gi->timer))
  2920. hrtimer_cancel(&gi->timer);
  2921. hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);
  2922. kvm->stat.aen_forward++;
  2923. }
  2924. }
  2925. static void aen_process_gait(u8 isc)
  2926. {
  2927. bool found = false, first = true;
  2928. union zpci_sic_iib iib = {{0}};
  2929. unsigned long si, flags;
  2930. spin_lock_irqsave(&aift->gait_lock, flags);
  2931. if (!aift->gait) {
  2932. spin_unlock_irqrestore(&aift->gait_lock, flags);
  2933. return;
  2934. }
  2935. for (si = 0;;) {
  2936. /* Scan adapter summary indicator bit vector */
  2937. si = airq_iv_scan(aift->sbv, si, airq_iv_end(aift->sbv));
  2938. if (si == -1UL) {
  2939. if (first || found) {
  2940. /* Re-enable interrupts. */
  2941. zpci_set_irq_ctrl(SIC_IRQ_MODE_SINGLE, isc,
  2942. &iib);
  2943. first = found = false;
  2944. } else {
  2945. /* Interrupts on and all bits processed */
  2946. break;
  2947. }
  2948. found = false;
  2949. si = 0;
  2950. /* Scan again after re-enabling interrupts */
  2951. continue;
  2952. }
  2953. found = true;
  2954. aen_host_forward(si);
  2955. }
  2956. spin_unlock_irqrestore(&aift->gait_lock, flags);
  2957. }
  2958. static void gib_alert_irq_handler(struct airq_struct *airq,
  2959. struct tpi_info *tpi_info)
  2960. {
  2961. struct tpi_adapter_info *info = (struct tpi_adapter_info *)tpi_info;
  2962. inc_irq_stat(IRQIO_GAL);
  2963. if ((info->forward || info->error) &&
  2964. IS_ENABLED(CONFIG_VFIO_PCI_ZDEV_KVM)) {
  2965. aen_process_gait(info->isc);
  2966. if (info->aism != 0)
  2967. process_gib_alert_list();
  2968. } else {
  2969. process_gib_alert_list();
  2970. }
  2971. }
  2972. static struct airq_struct gib_alert_irq = {
  2973. .handler = gib_alert_irq_handler,
  2974. };
  2975. void kvm_s390_gib_destroy(void)
  2976. {
  2977. if (!gib)
  2978. return;
  2979. if (kvm_s390_pci_interp_allowed() && aift) {
  2980. mutex_lock(&aift->aift_lock);
  2981. kvm_s390_pci_aen_exit();
  2982. mutex_unlock(&aift->aift_lock);
  2983. }
  2984. chsc_sgib(0);
  2985. unregister_adapter_interrupt(&gib_alert_irq);
  2986. free_page((unsigned long)gib);
  2987. gib = NULL;
  2988. }
  2989. int __init kvm_s390_gib_init(u8 nisc)
  2990. {
  2991. u32 gib_origin;
  2992. int rc = 0;
  2993. if (!css_general_characteristics.aiv) {
  2994. KVM_EVENT(3, "%s", "gib not initialized, no AIV facility");
  2995. goto out;
  2996. }
  2997. gib = (struct kvm_s390_gib *)get_zeroed_page(GFP_KERNEL_ACCOUNT | GFP_DMA);
  2998. if (!gib) {
  2999. rc = -ENOMEM;
  3000. goto out;
  3001. }
  3002. gib_alert_irq.isc = nisc;
  3003. if (register_adapter_interrupt(&gib_alert_irq)) {
  3004. pr_err("Registering the GIB alert interruption handler failed\n");
  3005. rc = -EIO;
  3006. goto out_free_gib;
  3007. }
  3008. /* adapter interrupts used for AP (applicable here) don't use the LSI */
  3009. *gib_alert_irq.lsi_ptr = 0xff;
  3010. gib->nisc = nisc;
  3011. gib_origin = virt_to_phys(gib);
  3012. if (chsc_sgib(gib_origin)) {
  3013. pr_err("Associating the GIB with the AIV facility failed\n");
  3014. free_page((unsigned long)gib);
  3015. gib = NULL;
  3016. rc = -EIO;
  3017. goto out_unreg_gal;
  3018. }
  3019. if (kvm_s390_pci_interp_allowed()) {
  3020. if (kvm_s390_pci_aen_init(nisc)) {
  3021. pr_err("Initializing AEN for PCI failed\n");
  3022. rc = -EIO;
  3023. goto out_unreg_gal;
  3024. }
  3025. }
  3026. KVM_EVENT(3, "gib 0x%p (nisc=%d) initialized", gib, gib->nisc);
  3027. goto out;
  3028. out_unreg_gal:
  3029. unregister_adapter_interrupt(&gib_alert_irq);
  3030. out_free_gib:
  3031. free_page((unsigned long)gib);
  3032. gib = NULL;
  3033. out:
  3034. return rc;
  3035. }