kvm.c 80 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014
  1. /*
  2. * PowerPC implementation of KVM hooks
  3. *
  4. * Copyright IBM Corp. 2007
  5. * Copyright (C) 2011 Freescale Semiconductor, Inc.
  6. *
  7. * Authors:
  8. * Jerone Young <jyoung5@us.ibm.com>
  9. * Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
  10. * Hollis Blanchard <hollisb@us.ibm.com>
  11. *
  12. * This work is licensed under the terms of the GNU GPL, version 2 or later.
  13. * See the COPYING file in the top-level directory.
  14. *
  15. */
  16. #include "qemu/osdep.h"
  17. #include <dirent.h>
  18. #include <sys/ioctl.h>
  19. #include <sys/vfs.h>
  20. #include <linux/kvm.h>
  21. #include "qapi/error.h"
  22. #include "qemu/error-report.h"
  23. #include "cpu.h"
  24. #include "cpu-models.h"
  25. #include "qemu/timer.h"
  26. #include "sysemu/hw_accel.h"
  27. #include "kvm_ppc.h"
  28. #include "sysemu/cpus.h"
  29. #include "sysemu/device_tree.h"
  30. #include "mmu-hash64.h"
  31. #include "hw/ppc/spapr.h"
  32. #include "hw/ppc/spapr_cpu_core.h"
  33. #include "hw/hw.h"
  34. #include "hw/ppc/ppc.h"
  35. #include "migration/qemu-file-types.h"
  36. #include "sysemu/watchdog.h"
  37. #include "trace.h"
  38. #include "gdbstub/enums.h"
  39. #include "exec/memattrs.h"
  40. #include "exec/ram_addr.h"
  41. #include "sysemu/hostmem.h"
  42. #include "qemu/cutils.h"
  43. #include "qemu/main-loop.h"
  44. #include "qemu/mmap-alloc.h"
  45. #include "elf.h"
  46. #include "sysemu/kvm_int.h"
  47. #include "sysemu/kvm.h"
  48. #include "hw/core/accel-cpu.h"
  49. #include CONFIG_DEVICES
  50. #define PROC_DEVTREE_CPU "/proc/device-tree/cpus/"
  51. #define DEBUG_RETURN_GUEST 0
  52. #define DEBUG_RETURN_GDB 1
  53. const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
  54. KVM_CAP_LAST_INFO
  55. };
  56. static int cap_interrupt_unset;
  57. static int cap_segstate;
  58. static int cap_booke_sregs;
  59. static int cap_ppc_smt;
  60. static int cap_ppc_smt_possible;
  61. static int cap_spapr_tce;
  62. static int cap_spapr_tce_64;
  63. static int cap_spapr_multitce;
  64. static int cap_spapr_vfio;
  65. static int cap_hior;
  66. static int cap_one_reg;
  67. static int cap_epr;
  68. static int cap_ppc_watchdog;
  69. static int cap_htab_fd;
  70. static int cap_fixup_hcalls;
  71. static int cap_htm; /* Hardware transactional memory support */
  72. static int cap_mmu_radix;
  73. static int cap_mmu_hash_v3;
  74. static int cap_xive;
  75. static int cap_resize_hpt;
  76. static int cap_ppc_pvr_compat;
  77. static int cap_ppc_safe_cache;
  78. static int cap_ppc_safe_bounds_check;
  79. static int cap_ppc_safe_indirect_branch;
  80. static int cap_ppc_count_cache_flush_assist;
  81. static int cap_ppc_nested_kvm_hv;
  82. static int cap_large_decr;
  83. static int cap_fwnmi;
  84. static int cap_rpt_invalidate;
  85. static int cap_ail_mode_3;
  86. #ifdef CONFIG_PSERIES
  87. static int cap_papr;
  88. #else
  89. #define cap_papr (0)
  90. #endif
  91. static uint32_t debug_inst_opcode;
  92. /*
  93. * Check whether we are running with KVM-PR (instead of KVM-HV). This
  94. * should only be used for fallback tests - generally we should use
  95. * explicit capabilities for the features we want, rather than
  96. * assuming what is/isn't available depending on the KVM variant.
  97. */
  98. static bool kvmppc_is_pr(KVMState *ks)
  99. {
  100. /* Assume KVM-PR if the GET_PVINFO capability is available */
  101. return kvm_vm_check_extension(ks, KVM_CAP_PPC_GET_PVINFO) != 0;
  102. }
  103. static int kvm_ppc_register_host_cpu_type(void);
  104. static void kvmppc_get_cpu_characteristics(KVMState *s);
  105. static int kvmppc_get_dec_bits(void);
  106. int kvm_arch_get_default_type(MachineState *ms)
  107. {
  108. return 0;
  109. }
  110. int kvm_arch_init(MachineState *ms, KVMState *s)
  111. {
  112. cap_interrupt_unset = kvm_check_extension(s, KVM_CAP_PPC_UNSET_IRQ);
  113. cap_segstate = kvm_check_extension(s, KVM_CAP_PPC_SEGSTATE);
  114. cap_booke_sregs = kvm_check_extension(s, KVM_CAP_PPC_BOOKE_SREGS);
  115. cap_ppc_smt_possible = kvm_vm_check_extension(s, KVM_CAP_PPC_SMT_POSSIBLE);
  116. cap_spapr_tce = kvm_check_extension(s, KVM_CAP_SPAPR_TCE);
  117. cap_spapr_tce_64 = kvm_check_extension(s, KVM_CAP_SPAPR_TCE_64);
  118. cap_spapr_multitce = kvm_check_extension(s, KVM_CAP_SPAPR_MULTITCE);
  119. cap_spapr_vfio = kvm_vm_check_extension(s, KVM_CAP_SPAPR_TCE_VFIO);
  120. cap_one_reg = kvm_check_extension(s, KVM_CAP_ONE_REG);
  121. cap_hior = kvm_check_extension(s, KVM_CAP_PPC_HIOR);
  122. cap_epr = kvm_check_extension(s, KVM_CAP_PPC_EPR);
  123. cap_ppc_watchdog = kvm_check_extension(s, KVM_CAP_PPC_BOOKE_WATCHDOG);
  124. /*
  125. * Note: we don't set cap_papr here, because this capability is
  126. * only activated after this by kvmppc_set_papr()
  127. */
  128. cap_htab_fd = kvm_vm_check_extension(s, KVM_CAP_PPC_HTAB_FD);
  129. cap_fixup_hcalls = kvm_check_extension(s, KVM_CAP_PPC_FIXUP_HCALL);
  130. cap_ppc_smt = kvm_vm_check_extension(s, KVM_CAP_PPC_SMT);
  131. cap_htm = kvm_vm_check_extension(s, KVM_CAP_PPC_HTM);
  132. cap_mmu_radix = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_RADIX);
  133. cap_mmu_hash_v3 = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_HASH_V3);
  134. cap_xive = kvm_vm_check_extension(s, KVM_CAP_PPC_IRQ_XIVE);
  135. cap_resize_hpt = kvm_vm_check_extension(s, KVM_CAP_SPAPR_RESIZE_HPT);
  136. kvmppc_get_cpu_characteristics(s);
  137. cap_ppc_nested_kvm_hv = kvm_vm_check_extension(s, KVM_CAP_PPC_NESTED_HV);
  138. cap_large_decr = kvmppc_get_dec_bits();
  139. cap_fwnmi = kvm_vm_check_extension(s, KVM_CAP_PPC_FWNMI);
  140. /*
  141. * Note: setting it to false because there is not such capability
  142. * in KVM at this moment.
  143. *
  144. * TODO: call kvm_vm_check_extension() with the right capability
  145. * after the kernel starts implementing it.
  146. */
  147. cap_ppc_pvr_compat = false;
  148. if (!kvm_check_extension(s, KVM_CAP_PPC_IRQ_LEVEL)) {
  149. error_report("KVM: Host kernel doesn't have level irq capability");
  150. exit(1);
  151. }
  152. cap_rpt_invalidate = kvm_vm_check_extension(s, KVM_CAP_PPC_RPT_INVALIDATE);
  153. cap_ail_mode_3 = kvm_vm_check_extension(s, KVM_CAP_PPC_AIL_MODE_3);
  154. kvm_ppc_register_host_cpu_type();
  155. return 0;
  156. }
  157. int kvm_arch_irqchip_create(KVMState *s)
  158. {
  159. return 0;
  160. }
  161. static int kvm_arch_sync_sregs(PowerPCCPU *cpu)
  162. {
  163. CPUPPCState *cenv = &cpu->env;
  164. CPUState *cs = CPU(cpu);
  165. struct kvm_sregs sregs;
  166. int ret;
  167. if (cenv->excp_model == POWERPC_EXCP_BOOKE) {
  168. /*
  169. * What we're really trying to say is "if we're on BookE, we
  170. * use the native PVR for now". This is the only sane way to
  171. * check it though, so we potentially confuse users that they
  172. * can run BookE guests on BookS. Let's hope nobody dares
  173. * enough :)
  174. */
  175. return 0;
  176. } else {
  177. if (!cap_segstate) {
  178. fprintf(stderr, "kvm error: missing PVR setting capability\n");
  179. return -ENOSYS;
  180. }
  181. }
  182. ret = kvm_vcpu_ioctl(cs, KVM_GET_SREGS, &sregs);
  183. if (ret) {
  184. return ret;
  185. }
  186. sregs.pvr = cenv->spr[SPR_PVR];
  187. return kvm_vcpu_ioctl(cs, KVM_SET_SREGS, &sregs);
  188. }
  189. /* Set up a shared TLB array with KVM */
  190. static int kvm_booke206_tlb_init(PowerPCCPU *cpu)
  191. {
  192. CPUPPCState *env = &cpu->env;
  193. CPUState *cs = CPU(cpu);
  194. struct kvm_book3e_206_tlb_params params = {};
  195. struct kvm_config_tlb cfg = {};
  196. unsigned int entries = 0;
  197. int ret, i;
  198. if (!kvm_enabled() ||
  199. !kvm_check_extension(cs->kvm_state, KVM_CAP_SW_TLB)) {
  200. return 0;
  201. }
  202. assert(ARRAY_SIZE(params.tlb_sizes) == BOOKE206_MAX_TLBN);
  203. for (i = 0; i < BOOKE206_MAX_TLBN; i++) {
  204. params.tlb_sizes[i] = booke206_tlb_size(env, i);
  205. params.tlb_ways[i] = booke206_tlb_ways(env, i);
  206. entries += params.tlb_sizes[i];
  207. }
  208. assert(entries == env->nb_tlb);
  209. assert(sizeof(struct kvm_book3e_206_tlb_entry) == sizeof(ppcmas_tlb_t));
  210. env->tlb_dirty = true;
  211. cfg.array = (uintptr_t)env->tlb.tlbm;
  212. cfg.array_len = sizeof(ppcmas_tlb_t) * entries;
  213. cfg.params = (uintptr_t)&params;
  214. cfg.mmu_type = KVM_MMU_FSL_BOOKE_NOHV;
  215. ret = kvm_vcpu_enable_cap(cs, KVM_CAP_SW_TLB, 0, (uintptr_t)&cfg);
  216. if (ret < 0) {
  217. fprintf(stderr, "%s: couldn't enable KVM_CAP_SW_TLB: %s\n",
  218. __func__, strerror(-ret));
  219. return ret;
  220. }
  221. env->kvm_sw_tlb = true;
  222. return 0;
  223. }
  224. #if defined(TARGET_PPC64)
  225. static void kvm_get_smmu_info(struct kvm_ppc_smmu_info *info, Error **errp)
  226. {
  227. int ret;
  228. assert(kvm_state != NULL);
  229. if (!kvm_check_extension(kvm_state, KVM_CAP_PPC_GET_SMMU_INFO)) {
  230. error_setg(errp, "KVM doesn't expose the MMU features it supports");
  231. error_append_hint(errp, "Consider switching to a newer KVM\n");
  232. return;
  233. }
  234. ret = kvm_vm_ioctl(kvm_state, KVM_PPC_GET_SMMU_INFO, info);
  235. if (ret == 0) {
  236. return;
  237. }
  238. error_setg_errno(errp, -ret,
  239. "KVM failed to provide the MMU features it supports");
  240. }
  241. static struct ppc_radix_page_info *kvmppc_get_radix_page_info(void)
  242. {
  243. KVMState *s = KVM_STATE(current_accel());
  244. struct ppc_radix_page_info *radix_page_info;
  245. struct kvm_ppc_rmmu_info rmmu_info = { };
  246. int i;
  247. if (!kvm_check_extension(s, KVM_CAP_PPC_MMU_RADIX)) {
  248. return NULL;
  249. }
  250. if (kvm_vm_ioctl(s, KVM_PPC_GET_RMMU_INFO, &rmmu_info)) {
  251. return NULL;
  252. }
  253. radix_page_info = g_malloc0(sizeof(*radix_page_info));
  254. radix_page_info->count = 0;
  255. for (i = 0; i < PPC_PAGE_SIZES_MAX_SZ; i++) {
  256. if (rmmu_info.ap_encodings[i]) {
  257. radix_page_info->entries[i] = rmmu_info.ap_encodings[i];
  258. radix_page_info->count++;
  259. }
  260. }
  261. return radix_page_info;
  262. }
  263. target_ulong kvmppc_configure_v3_mmu(PowerPCCPU *cpu,
  264. bool radix, bool gtse,
  265. uint64_t proc_tbl)
  266. {
  267. CPUState *cs = CPU(cpu);
  268. int ret;
  269. uint64_t flags = 0;
  270. struct kvm_ppc_mmuv3_cfg cfg = {
  271. .process_table = proc_tbl,
  272. };
  273. if (radix) {
  274. flags |= KVM_PPC_MMUV3_RADIX;
  275. }
  276. if (gtse) {
  277. flags |= KVM_PPC_MMUV3_GTSE;
  278. }
  279. cfg.flags = flags;
  280. ret = kvm_vm_ioctl(cs->kvm_state, KVM_PPC_CONFIGURE_V3_MMU, &cfg);
  281. switch (ret) {
  282. case 0:
  283. return H_SUCCESS;
  284. case -EINVAL:
  285. return H_PARAMETER;
  286. case -ENODEV:
  287. return H_NOT_AVAILABLE;
  288. default:
  289. return H_HARDWARE;
  290. }
  291. }
  292. bool kvmppc_hpt_needs_host_contiguous_pages(void)
  293. {
  294. static struct kvm_ppc_smmu_info smmu_info;
  295. if (!kvm_enabled()) {
  296. return false;
  297. }
  298. kvm_get_smmu_info(&smmu_info, &error_fatal);
  299. return !!(smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL);
  300. }
  301. void kvm_check_mmu(PowerPCCPU *cpu, Error **errp)
  302. {
  303. struct kvm_ppc_smmu_info smmu_info;
  304. int iq, ik, jq, jk;
  305. Error *local_err = NULL;
  306. /* For now, we only have anything to check on hash64 MMUs */
  307. if (!cpu->hash64_opts || !kvm_enabled()) {
  308. return;
  309. }
  310. kvm_get_smmu_info(&smmu_info, &local_err);
  311. if (local_err) {
  312. error_propagate(errp, local_err);
  313. return;
  314. }
  315. if (ppc_hash64_has(cpu, PPC_HASH64_1TSEG)
  316. && !(smmu_info.flags & KVM_PPC_1T_SEGMENTS)) {
  317. error_setg(errp,
  318. "KVM does not support 1TiB segments which guest expects");
  319. return;
  320. }
  321. if (smmu_info.slb_size < cpu->hash64_opts->slb_size) {
  322. error_setg(errp, "KVM only supports %u SLB entries, but guest needs %u",
  323. smmu_info.slb_size, cpu->hash64_opts->slb_size);
  324. return;
  325. }
  326. /*
  327. * Verify that every pagesize supported by the cpu model is
  328. * supported by KVM with the same encodings
  329. */
  330. for (iq = 0; iq < ARRAY_SIZE(cpu->hash64_opts->sps); iq++) {
  331. PPCHash64SegmentPageSizes *qsps = &cpu->hash64_opts->sps[iq];
  332. struct kvm_ppc_one_seg_page_size *ksps;
  333. for (ik = 0; ik < ARRAY_SIZE(smmu_info.sps); ik++) {
  334. if (qsps->page_shift == smmu_info.sps[ik].page_shift) {
  335. break;
  336. }
  337. }
  338. if (ik >= ARRAY_SIZE(smmu_info.sps)) {
  339. error_setg(errp, "KVM doesn't support for base page shift %u",
  340. qsps->page_shift);
  341. return;
  342. }
  343. ksps = &smmu_info.sps[ik];
  344. if (ksps->slb_enc != qsps->slb_enc) {
  345. error_setg(errp,
  346. "KVM uses SLB encoding 0x%x for page shift %u, but guest expects 0x%x",
  347. ksps->slb_enc, ksps->page_shift, qsps->slb_enc);
  348. return;
  349. }
  350. for (jq = 0; jq < ARRAY_SIZE(qsps->enc); jq++) {
  351. for (jk = 0; jk < ARRAY_SIZE(ksps->enc); jk++) {
  352. if (qsps->enc[jq].page_shift == ksps->enc[jk].page_shift) {
  353. break;
  354. }
  355. }
  356. if (jk >= ARRAY_SIZE(ksps->enc)) {
  357. error_setg(errp, "KVM doesn't support page shift %u/%u",
  358. qsps->enc[jq].page_shift, qsps->page_shift);
  359. return;
  360. }
  361. if (qsps->enc[jq].pte_enc != ksps->enc[jk].pte_enc) {
  362. error_setg(errp,
  363. "KVM uses PTE encoding 0x%x for page shift %u/%u, but guest expects 0x%x",
  364. ksps->enc[jk].pte_enc, qsps->enc[jq].page_shift,
  365. qsps->page_shift, qsps->enc[jq].pte_enc);
  366. return;
  367. }
  368. }
  369. }
  370. if (ppc_hash64_has(cpu, PPC_HASH64_CI_LARGEPAGE)) {
  371. /*
  372. * Mostly what guest pagesizes we can use are related to the
  373. * host pages used to map guest RAM, which is handled in the
  374. * platform code. Cache-Inhibited largepages (64k) however are
  375. * used for I/O, so if they're mapped to the host at all it
  376. * will be a normal mapping, not a special hugepage one used
  377. * for RAM.
  378. */
  379. if (qemu_real_host_page_size() < 0x10000) {
  380. error_setg(errp,
  381. "KVM can't supply 64kiB CI pages, which guest expects");
  382. }
  383. }
  384. }
  385. #endif /* !defined (TARGET_PPC64) */
  386. unsigned long kvm_arch_vcpu_id(CPUState *cpu)
  387. {
  388. return POWERPC_CPU(cpu)->vcpu_id;
  389. }
  390. /*
  391. * e500 supports 2 h/w breakpoint and 2 watchpoint. book3s supports
  392. * only 1 watchpoint, so array size of 4 is sufficient for now.
  393. */
  394. #define MAX_HW_BKPTS 4
  395. static struct HWBreakpoint {
  396. target_ulong addr;
  397. int type;
  398. } hw_debug_points[MAX_HW_BKPTS];
  399. static CPUWatchpoint hw_watchpoint;
  400. /* Default there is no breakpoint and watchpoint supported */
  401. static int max_hw_breakpoint;
  402. static int max_hw_watchpoint;
  403. static int nb_hw_breakpoint;
  404. static int nb_hw_watchpoint;
  405. static void kvmppc_hw_debug_points_init(CPUPPCState *cenv)
  406. {
  407. if (cenv->excp_model == POWERPC_EXCP_BOOKE) {
  408. max_hw_breakpoint = 2;
  409. max_hw_watchpoint = 2;
  410. }
  411. if ((max_hw_breakpoint + max_hw_watchpoint) > MAX_HW_BKPTS) {
  412. fprintf(stderr, "Error initializing h/w breakpoints\n");
  413. return;
  414. }
  415. }
  416. int kvm_arch_init_vcpu(CPUState *cs)
  417. {
  418. PowerPCCPU *cpu = POWERPC_CPU(cs);
  419. CPUPPCState *cenv = &cpu->env;
  420. int ret;
  421. /* Synchronize sregs with kvm */
  422. ret = kvm_arch_sync_sregs(cpu);
  423. if (ret) {
  424. if (ret == -EINVAL) {
  425. error_report("Register sync failed... If you're using kvm-hv.ko,"
  426. " only \"-cpu host\" is possible");
  427. }
  428. return ret;
  429. }
  430. switch (cenv->mmu_model) {
  431. case POWERPC_MMU_BOOKE206:
  432. /* This target supports access to KVM's guest TLB */
  433. ret = kvm_booke206_tlb_init(cpu);
  434. break;
  435. case POWERPC_MMU_2_07:
  436. if (!cap_htm && !kvmppc_is_pr(cs->kvm_state)) {
  437. /*
  438. * KVM-HV has transactional memory on POWER8 also without
  439. * the KVM_CAP_PPC_HTM extension, so enable it here
  440. * instead as long as it's available to userspace on the
  441. * host.
  442. */
  443. if (qemu_getauxval(AT_HWCAP2) & PPC_FEATURE2_HAS_HTM) {
  444. cap_htm = true;
  445. }
  446. }
  447. break;
  448. default:
  449. break;
  450. }
  451. kvm_get_one_reg(cs, KVM_REG_PPC_DEBUG_INST, &debug_inst_opcode);
  452. kvmppc_hw_debug_points_init(cenv);
  453. return ret;
  454. }
  455. int kvm_arch_destroy_vcpu(CPUState *cs)
  456. {
  457. return 0;
  458. }
  459. static void kvm_sw_tlb_put(PowerPCCPU *cpu)
  460. {
  461. CPUPPCState *env = &cpu->env;
  462. CPUState *cs = CPU(cpu);
  463. struct kvm_dirty_tlb dirty_tlb;
  464. unsigned char *bitmap;
  465. int ret;
  466. if (!env->kvm_sw_tlb) {
  467. return;
  468. }
  469. bitmap = g_malloc((env->nb_tlb + 7) / 8);
  470. memset(bitmap, 0xFF, (env->nb_tlb + 7) / 8);
  471. dirty_tlb.bitmap = (uintptr_t)bitmap;
  472. dirty_tlb.num_dirty = env->nb_tlb;
  473. ret = kvm_vcpu_ioctl(cs, KVM_DIRTY_TLB, &dirty_tlb);
  474. if (ret) {
  475. fprintf(stderr, "%s: KVM_DIRTY_TLB: %s\n",
  476. __func__, strerror(-ret));
  477. }
  478. g_free(bitmap);
  479. }
  480. static void kvm_get_one_spr(CPUState *cs, uint64_t id, int spr)
  481. {
  482. CPUPPCState *env = cpu_env(cs);
  483. /* Init 'val' to avoid "uninitialised value" Valgrind warnings */
  484. union {
  485. uint32_t u32;
  486. uint64_t u64;
  487. } val = { };
  488. struct kvm_one_reg reg = {
  489. .id = id,
  490. .addr = (uintptr_t) &val,
  491. };
  492. int ret;
  493. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  494. if (ret != 0) {
  495. trace_kvm_failed_spr_get(spr, strerror(errno));
  496. } else {
  497. switch (id & KVM_REG_SIZE_MASK) {
  498. case KVM_REG_SIZE_U32:
  499. env->spr[spr] = val.u32;
  500. break;
  501. case KVM_REG_SIZE_U64:
  502. env->spr[spr] = val.u64;
  503. break;
  504. default:
  505. /* Don't handle this size yet */
  506. abort();
  507. }
  508. }
  509. }
  510. static void kvm_put_one_spr(CPUState *cs, uint64_t id, int spr)
  511. {
  512. CPUPPCState *env = cpu_env(cs);
  513. union {
  514. uint32_t u32;
  515. uint64_t u64;
  516. } val;
  517. struct kvm_one_reg reg = {
  518. .id = id,
  519. .addr = (uintptr_t) &val,
  520. };
  521. int ret;
  522. switch (id & KVM_REG_SIZE_MASK) {
  523. case KVM_REG_SIZE_U32:
  524. val.u32 = env->spr[spr];
  525. break;
  526. case KVM_REG_SIZE_U64:
  527. val.u64 = env->spr[spr];
  528. break;
  529. default:
  530. /* Don't handle this size yet */
  531. abort();
  532. }
  533. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  534. if (ret != 0) {
  535. trace_kvm_failed_spr_set(spr, strerror(errno));
  536. }
  537. }
  538. static int kvm_put_fp(CPUState *cs)
  539. {
  540. CPUPPCState *env = cpu_env(cs);
  541. struct kvm_one_reg reg;
  542. int i;
  543. int ret;
  544. if (env->insns_flags & PPC_FLOAT) {
  545. uint64_t fpscr = env->fpscr;
  546. bool vsx = !!(env->insns_flags2 & PPC2_VSX);
  547. reg.id = KVM_REG_PPC_FPSCR;
  548. reg.addr = (uintptr_t)&fpscr;
  549. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  550. if (ret < 0) {
  551. trace_kvm_failed_fpscr_set(strerror(errno));
  552. return ret;
  553. }
  554. for (i = 0; i < 32; i++) {
  555. uint64_t vsr[2];
  556. uint64_t *fpr = cpu_fpr_ptr(env, i);
  557. uint64_t *vsrl = cpu_vsrl_ptr(env, i);
  558. #if HOST_BIG_ENDIAN
  559. vsr[0] = float64_val(*fpr);
  560. vsr[1] = *vsrl;
  561. #else
  562. vsr[0] = *vsrl;
  563. vsr[1] = float64_val(*fpr);
  564. #endif
  565. reg.addr = (uintptr_t) &vsr;
  566. reg.id = vsx ? KVM_REG_PPC_VSR(i) : KVM_REG_PPC_FPR(i);
  567. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  568. if (ret < 0) {
  569. trace_kvm_failed_fp_set(vsx ? "VSR" : "FPR", i,
  570. strerror(errno));
  571. return ret;
  572. }
  573. }
  574. }
  575. if (env->insns_flags & PPC_ALTIVEC) {
  576. reg.id = KVM_REG_PPC_VSCR;
  577. reg.addr = (uintptr_t)&env->vscr;
  578. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  579. if (ret < 0) {
  580. trace_kvm_failed_vscr_set(strerror(errno));
  581. return ret;
  582. }
  583. for (i = 0; i < 32; i++) {
  584. reg.id = KVM_REG_PPC_VR(i);
  585. reg.addr = (uintptr_t)cpu_avr_ptr(env, i);
  586. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  587. if (ret < 0) {
  588. trace_kvm_failed_vr_set(i, strerror(errno));
  589. return ret;
  590. }
  591. }
  592. }
  593. return 0;
  594. }
  595. static int kvm_get_fp(CPUState *cs)
  596. {
  597. CPUPPCState *env = cpu_env(cs);
  598. struct kvm_one_reg reg;
  599. int i;
  600. int ret;
  601. if (env->insns_flags & PPC_FLOAT) {
  602. uint64_t fpscr;
  603. bool vsx = !!(env->insns_flags2 & PPC2_VSX);
  604. reg.id = KVM_REG_PPC_FPSCR;
  605. reg.addr = (uintptr_t)&fpscr;
  606. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  607. if (ret < 0) {
  608. trace_kvm_failed_fpscr_get(strerror(errno));
  609. return ret;
  610. } else {
  611. env->fpscr = fpscr;
  612. }
  613. for (i = 0; i < 32; i++) {
  614. uint64_t vsr[2];
  615. uint64_t *fpr = cpu_fpr_ptr(env, i);
  616. uint64_t *vsrl = cpu_vsrl_ptr(env, i);
  617. reg.addr = (uintptr_t) &vsr;
  618. reg.id = vsx ? KVM_REG_PPC_VSR(i) : KVM_REG_PPC_FPR(i);
  619. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  620. if (ret < 0) {
  621. trace_kvm_failed_fp_get(vsx ? "VSR" : "FPR", i,
  622. strerror(errno));
  623. return ret;
  624. } else {
  625. #if HOST_BIG_ENDIAN
  626. *fpr = vsr[0];
  627. if (vsx) {
  628. *vsrl = vsr[1];
  629. }
  630. #else
  631. *fpr = vsr[1];
  632. if (vsx) {
  633. *vsrl = vsr[0];
  634. }
  635. #endif
  636. }
  637. }
  638. }
  639. if (env->insns_flags & PPC_ALTIVEC) {
  640. reg.id = KVM_REG_PPC_VSCR;
  641. reg.addr = (uintptr_t)&env->vscr;
  642. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  643. if (ret < 0) {
  644. trace_kvm_failed_vscr_get(strerror(errno));
  645. return ret;
  646. }
  647. for (i = 0; i < 32; i++) {
  648. reg.id = KVM_REG_PPC_VR(i);
  649. reg.addr = (uintptr_t)cpu_avr_ptr(env, i);
  650. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  651. if (ret < 0) {
  652. trace_kvm_failed_vr_get(i, strerror(errno));
  653. return ret;
  654. }
  655. }
  656. }
  657. return 0;
  658. }
  659. #if defined(TARGET_PPC64)
  660. static int kvm_get_vpa(CPUState *cs)
  661. {
  662. PowerPCCPU *cpu = POWERPC_CPU(cs);
  663. SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu);
  664. struct kvm_one_reg reg;
  665. int ret;
  666. reg.id = KVM_REG_PPC_VPA_ADDR;
  667. reg.addr = (uintptr_t)&spapr_cpu->vpa_addr;
  668. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  669. if (ret < 0) {
  670. trace_kvm_failed_vpa_addr_get(strerror(errno));
  671. return ret;
  672. }
  673. assert((uintptr_t)&spapr_cpu->slb_shadow_size
  674. == ((uintptr_t)&spapr_cpu->slb_shadow_addr + 8));
  675. reg.id = KVM_REG_PPC_VPA_SLB;
  676. reg.addr = (uintptr_t)&spapr_cpu->slb_shadow_addr;
  677. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  678. if (ret < 0) {
  679. trace_kvm_failed_slb_get(strerror(errno));
  680. return ret;
  681. }
  682. assert((uintptr_t)&spapr_cpu->dtl_size
  683. == ((uintptr_t)&spapr_cpu->dtl_addr + 8));
  684. reg.id = KVM_REG_PPC_VPA_DTL;
  685. reg.addr = (uintptr_t)&spapr_cpu->dtl_addr;
  686. ret = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
  687. if (ret < 0) {
  688. trace_kvm_failed_dtl_get(strerror(errno));
  689. return ret;
  690. }
  691. return 0;
  692. }
  693. static int kvm_put_vpa(CPUState *cs)
  694. {
  695. PowerPCCPU *cpu = POWERPC_CPU(cs);
  696. SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu);
  697. struct kvm_one_reg reg;
  698. int ret;
  699. /*
  700. * SLB shadow or DTL can't be registered unless a master VPA is
  701. * registered. That means when restoring state, if a VPA *is*
  702. * registered, we need to set that up first. If not, we need to
  703. * deregister the others before deregistering the master VPA
  704. */
  705. assert(spapr_cpu->vpa_addr
  706. || !(spapr_cpu->slb_shadow_addr || spapr_cpu->dtl_addr));
  707. if (spapr_cpu->vpa_addr) {
  708. reg.id = KVM_REG_PPC_VPA_ADDR;
  709. reg.addr = (uintptr_t)&spapr_cpu->vpa_addr;
  710. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  711. if (ret < 0) {
  712. trace_kvm_failed_vpa_addr_set(strerror(errno));
  713. return ret;
  714. }
  715. }
  716. assert((uintptr_t)&spapr_cpu->slb_shadow_size
  717. == ((uintptr_t)&spapr_cpu->slb_shadow_addr + 8));
  718. reg.id = KVM_REG_PPC_VPA_SLB;
  719. reg.addr = (uintptr_t)&spapr_cpu->slb_shadow_addr;
  720. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  721. if (ret < 0) {
  722. trace_kvm_failed_slb_set(strerror(errno));
  723. return ret;
  724. }
  725. assert((uintptr_t)&spapr_cpu->dtl_size
  726. == ((uintptr_t)&spapr_cpu->dtl_addr + 8));
  727. reg.id = KVM_REG_PPC_VPA_DTL;
  728. reg.addr = (uintptr_t)&spapr_cpu->dtl_addr;
  729. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  730. if (ret < 0) {
  731. trace_kvm_failed_dtl_set(strerror(errno));
  732. return ret;
  733. }
  734. if (!spapr_cpu->vpa_addr) {
  735. reg.id = KVM_REG_PPC_VPA_ADDR;
  736. reg.addr = (uintptr_t)&spapr_cpu->vpa_addr;
  737. ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  738. if (ret < 0) {
  739. trace_kvm_failed_null_vpa_addr_set(strerror(errno));
  740. return ret;
  741. }
  742. }
  743. return 0;
  744. }
  745. #endif /* TARGET_PPC64 */
  746. int kvmppc_put_books_sregs(PowerPCCPU *cpu)
  747. {
  748. CPUPPCState *env = &cpu->env;
  749. struct kvm_sregs sregs = { };
  750. int i;
  751. sregs.pvr = env->spr[SPR_PVR];
  752. if (cpu->vhyp) {
  753. sregs.u.s.sdr1 = cpu->vhyp_class->encode_hpt_for_kvm_pr(cpu->vhyp);
  754. } else {
  755. sregs.u.s.sdr1 = env->spr[SPR_SDR1];
  756. }
  757. /* Sync SLB */
  758. #ifdef TARGET_PPC64
  759. for (i = 0; i < ARRAY_SIZE(env->slb); i++) {
  760. sregs.u.s.ppc64.slb[i].slbe = env->slb[i].esid;
  761. if (env->slb[i].esid & SLB_ESID_V) {
  762. sregs.u.s.ppc64.slb[i].slbe |= i;
  763. }
  764. sregs.u.s.ppc64.slb[i].slbv = env->slb[i].vsid;
  765. }
  766. #endif
  767. /* Sync SRs */
  768. for (i = 0; i < 16; i++) {
  769. sregs.u.s.ppc32.sr[i] = env->sr[i];
  770. }
  771. /* Sync BATs */
  772. for (i = 0; i < 8; i++) {
  773. /* Beware. We have to swap upper and lower bits here */
  774. sregs.u.s.ppc32.dbat[i] = ((uint64_t)env->DBAT[0][i] << 32)
  775. | env->DBAT[1][i];
  776. sregs.u.s.ppc32.ibat[i] = ((uint64_t)env->IBAT[0][i] << 32)
  777. | env->IBAT[1][i];
  778. }
  779. return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS, &sregs);
  780. }
  781. int kvm_arch_put_registers(CPUState *cs, int level, Error **errp)
  782. {
  783. PowerPCCPU *cpu = POWERPC_CPU(cs);
  784. CPUPPCState *env = &cpu->env;
  785. struct kvm_regs regs;
  786. int ret;
  787. int i;
  788. ret = kvm_vcpu_ioctl(cs, KVM_GET_REGS, &regs);
  789. if (ret < 0) {
  790. return ret;
  791. }
  792. regs.ctr = env->ctr;
  793. regs.lr = env->lr;
  794. regs.xer = cpu_read_xer(env);
  795. regs.msr = env->msr;
  796. regs.pc = env->nip;
  797. regs.srr0 = env->spr[SPR_SRR0];
  798. regs.srr1 = env->spr[SPR_SRR1];
  799. regs.sprg0 = env->spr[SPR_SPRG0];
  800. regs.sprg1 = env->spr[SPR_SPRG1];
  801. regs.sprg2 = env->spr[SPR_SPRG2];
  802. regs.sprg3 = env->spr[SPR_SPRG3];
  803. regs.sprg4 = env->spr[SPR_SPRG4];
  804. regs.sprg5 = env->spr[SPR_SPRG5];
  805. regs.sprg6 = env->spr[SPR_SPRG6];
  806. regs.sprg7 = env->spr[SPR_SPRG7];
  807. regs.pid = env->spr[SPR_BOOKE_PID];
  808. for (i = 0; i < 32; i++) {
  809. regs.gpr[i] = env->gpr[i];
  810. }
  811. regs.cr = ppc_get_cr(env);
  812. ret = kvm_vcpu_ioctl(cs, KVM_SET_REGS, &regs);
  813. if (ret < 0) {
  814. return ret;
  815. }
  816. kvm_put_fp(cs);
  817. if (env->tlb_dirty) {
  818. kvm_sw_tlb_put(cpu);
  819. env->tlb_dirty = false;
  820. }
  821. if (cap_segstate && (level >= KVM_PUT_RESET_STATE)) {
  822. ret = kvmppc_put_books_sregs(cpu);
  823. if (ret < 0) {
  824. return ret;
  825. }
  826. }
  827. if (cap_hior && (level >= KVM_PUT_RESET_STATE)) {
  828. kvm_put_one_spr(cs, KVM_REG_PPC_HIOR, SPR_HIOR);
  829. }
  830. if (cap_one_reg) {
  831. /*
  832. * We deliberately ignore errors here, for kernels which have
  833. * the ONE_REG calls, but don't support the specific
  834. * registers, there's a reasonable chance things will still
  835. * work, at least until we try to migrate.
  836. */
  837. for (i = 0; i < 1024; i++) {
  838. uint64_t id = env->spr_cb[i].one_reg_id;
  839. if (id != 0) {
  840. kvm_put_one_spr(cs, id, i);
  841. }
  842. }
  843. #ifdef TARGET_PPC64
  844. if (FIELD_EX64(env->msr, MSR, TS)) {
  845. for (i = 0; i < ARRAY_SIZE(env->tm_gpr); i++) {
  846. kvm_set_one_reg(cs, KVM_REG_PPC_TM_GPR(i), &env->tm_gpr[i]);
  847. }
  848. for (i = 0; i < ARRAY_SIZE(env->tm_vsr); i++) {
  849. kvm_set_one_reg(cs, KVM_REG_PPC_TM_VSR(i), &env->tm_vsr[i]);
  850. }
  851. kvm_set_one_reg(cs, KVM_REG_PPC_TM_CR, &env->tm_cr);
  852. kvm_set_one_reg(cs, KVM_REG_PPC_TM_LR, &env->tm_lr);
  853. kvm_set_one_reg(cs, KVM_REG_PPC_TM_CTR, &env->tm_ctr);
  854. kvm_set_one_reg(cs, KVM_REG_PPC_TM_FPSCR, &env->tm_fpscr);
  855. kvm_set_one_reg(cs, KVM_REG_PPC_TM_AMR, &env->tm_amr);
  856. kvm_set_one_reg(cs, KVM_REG_PPC_TM_PPR, &env->tm_ppr);
  857. kvm_set_one_reg(cs, KVM_REG_PPC_TM_VRSAVE, &env->tm_vrsave);
  858. kvm_set_one_reg(cs, KVM_REG_PPC_TM_VSCR, &env->tm_vscr);
  859. kvm_set_one_reg(cs, KVM_REG_PPC_TM_DSCR, &env->tm_dscr);
  860. kvm_set_one_reg(cs, KVM_REG_PPC_TM_TAR, &env->tm_tar);
  861. }
  862. if (cap_papr) {
  863. if (kvm_put_vpa(cs) < 0) {
  864. trace_kvm_failed_put_vpa();
  865. }
  866. }
  867. kvm_set_one_reg(cs, KVM_REG_PPC_TB_OFFSET, &env->tb_env->tb_offset);
  868. if (level > KVM_PUT_RUNTIME_STATE) {
  869. kvm_put_one_spr(cs, KVM_REG_PPC_DPDES, SPR_DPDES);
  870. }
  871. #endif /* TARGET_PPC64 */
  872. }
  873. return ret;
  874. }
  875. static void kvm_sync_excp(CPUPPCState *env, int vector, int ivor)
  876. {
  877. env->excp_vectors[vector] = env->spr[ivor] + env->spr[SPR_BOOKE_IVPR];
  878. }
  879. static int kvmppc_get_booke_sregs(PowerPCCPU *cpu)
  880. {
  881. CPUPPCState *env = &cpu->env;
  882. struct kvm_sregs sregs;
  883. int ret;
  884. ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_SREGS, &sregs);
  885. if (ret < 0) {
  886. return ret;
  887. }
  888. if (sregs.u.e.features & KVM_SREGS_E_BASE) {
  889. env->spr[SPR_BOOKE_CSRR0] = sregs.u.e.csrr0;
  890. env->spr[SPR_BOOKE_CSRR1] = sregs.u.e.csrr1;
  891. env->spr[SPR_BOOKE_ESR] = sregs.u.e.esr;
  892. env->spr[SPR_BOOKE_DEAR] = sregs.u.e.dear;
  893. env->spr[SPR_BOOKE_MCSR] = sregs.u.e.mcsr;
  894. env->spr[SPR_BOOKE_TSR] = sregs.u.e.tsr;
  895. env->spr[SPR_BOOKE_TCR] = sregs.u.e.tcr;
  896. env->spr[SPR_DECR] = sregs.u.e.dec;
  897. env->spr[SPR_TBL] = sregs.u.e.tb & 0xffffffff;
  898. env->spr[SPR_TBU] = sregs.u.e.tb >> 32;
  899. env->spr[SPR_VRSAVE] = sregs.u.e.vrsave;
  900. }
  901. if (sregs.u.e.features & KVM_SREGS_E_ARCH206) {
  902. env->spr[SPR_BOOKE_PIR] = sregs.u.e.pir;
  903. env->spr[SPR_BOOKE_MCSRR0] = sregs.u.e.mcsrr0;
  904. env->spr[SPR_BOOKE_MCSRR1] = sregs.u.e.mcsrr1;
  905. env->spr[SPR_BOOKE_DECAR] = sregs.u.e.decar;
  906. env->spr[SPR_BOOKE_IVPR] = sregs.u.e.ivpr;
  907. }
  908. if (sregs.u.e.features & KVM_SREGS_E_64) {
  909. env->spr[SPR_BOOKE_EPCR] = sregs.u.e.epcr;
  910. }
  911. if (sregs.u.e.features & KVM_SREGS_E_SPRG8) {
  912. env->spr[SPR_BOOKE_SPRG8] = sregs.u.e.sprg8;
  913. }
  914. if (sregs.u.e.features & KVM_SREGS_E_IVOR) {
  915. env->spr[SPR_BOOKE_IVOR0] = sregs.u.e.ivor_low[0];
  916. kvm_sync_excp(env, POWERPC_EXCP_CRITICAL, SPR_BOOKE_IVOR0);
  917. env->spr[SPR_BOOKE_IVOR1] = sregs.u.e.ivor_low[1];
  918. kvm_sync_excp(env, POWERPC_EXCP_MCHECK, SPR_BOOKE_IVOR1);
  919. env->spr[SPR_BOOKE_IVOR2] = sregs.u.e.ivor_low[2];
  920. kvm_sync_excp(env, POWERPC_EXCP_DSI, SPR_BOOKE_IVOR2);
  921. env->spr[SPR_BOOKE_IVOR3] = sregs.u.e.ivor_low[3];
  922. kvm_sync_excp(env, POWERPC_EXCP_ISI, SPR_BOOKE_IVOR3);
  923. env->spr[SPR_BOOKE_IVOR4] = sregs.u.e.ivor_low[4];
  924. kvm_sync_excp(env, POWERPC_EXCP_EXTERNAL, SPR_BOOKE_IVOR4);
  925. env->spr[SPR_BOOKE_IVOR5] = sregs.u.e.ivor_low[5];
  926. kvm_sync_excp(env, POWERPC_EXCP_ALIGN, SPR_BOOKE_IVOR5);
  927. env->spr[SPR_BOOKE_IVOR6] = sregs.u.e.ivor_low[6];
  928. kvm_sync_excp(env, POWERPC_EXCP_PROGRAM, SPR_BOOKE_IVOR6);
  929. env->spr[SPR_BOOKE_IVOR7] = sregs.u.e.ivor_low[7];
  930. kvm_sync_excp(env, POWERPC_EXCP_FPU, SPR_BOOKE_IVOR7);
  931. env->spr[SPR_BOOKE_IVOR8] = sregs.u.e.ivor_low[8];
  932. kvm_sync_excp(env, POWERPC_EXCP_SYSCALL, SPR_BOOKE_IVOR8);
  933. env->spr[SPR_BOOKE_IVOR9] = sregs.u.e.ivor_low[9];
  934. kvm_sync_excp(env, POWERPC_EXCP_APU, SPR_BOOKE_IVOR9);
  935. env->spr[SPR_BOOKE_IVOR10] = sregs.u.e.ivor_low[10];
  936. kvm_sync_excp(env, POWERPC_EXCP_DECR, SPR_BOOKE_IVOR10);
  937. env->spr[SPR_BOOKE_IVOR11] = sregs.u.e.ivor_low[11];
  938. kvm_sync_excp(env, POWERPC_EXCP_FIT, SPR_BOOKE_IVOR11);
  939. env->spr[SPR_BOOKE_IVOR12] = sregs.u.e.ivor_low[12];
  940. kvm_sync_excp(env, POWERPC_EXCP_WDT, SPR_BOOKE_IVOR12);
  941. env->spr[SPR_BOOKE_IVOR13] = sregs.u.e.ivor_low[13];
  942. kvm_sync_excp(env, POWERPC_EXCP_DTLB, SPR_BOOKE_IVOR13);
  943. env->spr[SPR_BOOKE_IVOR14] = sregs.u.e.ivor_low[14];
  944. kvm_sync_excp(env, POWERPC_EXCP_ITLB, SPR_BOOKE_IVOR14);
  945. env->spr[SPR_BOOKE_IVOR15] = sregs.u.e.ivor_low[15];
  946. kvm_sync_excp(env, POWERPC_EXCP_DEBUG, SPR_BOOKE_IVOR15);
  947. if (sregs.u.e.features & KVM_SREGS_E_SPE) {
  948. env->spr[SPR_BOOKE_IVOR32] = sregs.u.e.ivor_high[0];
  949. kvm_sync_excp(env, POWERPC_EXCP_SPEU, SPR_BOOKE_IVOR32);
  950. env->spr[SPR_BOOKE_IVOR33] = sregs.u.e.ivor_high[1];
  951. kvm_sync_excp(env, POWERPC_EXCP_EFPDI, SPR_BOOKE_IVOR33);
  952. env->spr[SPR_BOOKE_IVOR34] = sregs.u.e.ivor_high[2];
  953. kvm_sync_excp(env, POWERPC_EXCP_EFPRI, SPR_BOOKE_IVOR34);
  954. }
  955. if (sregs.u.e.features & KVM_SREGS_E_PM) {
  956. env->spr[SPR_BOOKE_IVOR35] = sregs.u.e.ivor_high[3];
  957. kvm_sync_excp(env, POWERPC_EXCP_EPERFM, SPR_BOOKE_IVOR35);
  958. }
  959. if (sregs.u.e.features & KVM_SREGS_E_PC) {
  960. env->spr[SPR_BOOKE_IVOR36] = sregs.u.e.ivor_high[4];
  961. kvm_sync_excp(env, POWERPC_EXCP_DOORI, SPR_BOOKE_IVOR36);
  962. env->spr[SPR_BOOKE_IVOR37] = sregs.u.e.ivor_high[5];
  963. kvm_sync_excp(env, POWERPC_EXCP_DOORCI, SPR_BOOKE_IVOR37);
  964. }
  965. }
  966. if (sregs.u.e.features & KVM_SREGS_E_ARCH206_MMU) {
  967. env->spr[SPR_BOOKE_MAS0] = sregs.u.e.mas0;
  968. env->spr[SPR_BOOKE_MAS1] = sregs.u.e.mas1;
  969. env->spr[SPR_BOOKE_MAS2] = sregs.u.e.mas2;
  970. env->spr[SPR_BOOKE_MAS3] = sregs.u.e.mas7_3 & 0xffffffff;
  971. env->spr[SPR_BOOKE_MAS4] = sregs.u.e.mas4;
  972. env->spr[SPR_BOOKE_MAS6] = sregs.u.e.mas6;
  973. env->spr[SPR_BOOKE_MAS7] = sregs.u.e.mas7_3 >> 32;
  974. env->spr[SPR_MMUCFG] = sregs.u.e.mmucfg;
  975. env->spr[SPR_BOOKE_TLB0CFG] = sregs.u.e.tlbcfg[0];
  976. env->spr[SPR_BOOKE_TLB1CFG] = sregs.u.e.tlbcfg[1];
  977. }
  978. if (sregs.u.e.features & KVM_SREGS_EXP) {
  979. env->spr[SPR_BOOKE_EPR] = sregs.u.e.epr;
  980. }
  981. if (sregs.u.e.features & KVM_SREGS_E_PD) {
  982. env->spr[SPR_BOOKE_EPLC] = sregs.u.e.eplc;
  983. env->spr[SPR_BOOKE_EPSC] = sregs.u.e.epsc;
  984. }
  985. if (sregs.u.e.impl_id == KVM_SREGS_E_IMPL_FSL) {
  986. env->spr[SPR_E500_SVR] = sregs.u.e.impl.fsl.svr;
  987. env->spr[SPR_Exxx_MCAR] = sregs.u.e.impl.fsl.mcar;
  988. env->spr[SPR_HID0] = sregs.u.e.impl.fsl.hid0;
  989. if (sregs.u.e.impl.fsl.features & KVM_SREGS_E_FSL_PIDn) {
  990. env->spr[SPR_BOOKE_PID1] = sregs.u.e.impl.fsl.pid1;
  991. env->spr[SPR_BOOKE_PID2] = sregs.u.e.impl.fsl.pid2;
  992. }
  993. }
  994. return 0;
  995. }
  996. static int kvmppc_get_books_sregs(PowerPCCPU *cpu)
  997. {
  998. CPUPPCState *env = &cpu->env;
  999. struct kvm_sregs sregs;
  1000. int ret;
  1001. int i;
  1002. ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_SREGS, &sregs);
  1003. if (ret < 0) {
  1004. return ret;
  1005. }
  1006. if (!cpu->vhyp) {
  1007. ppc_store_sdr1(env, sregs.u.s.sdr1);
  1008. }
  1009. /* Sync SLB */
  1010. #ifdef TARGET_PPC64
  1011. /*
  1012. * The packed SLB array we get from KVM_GET_SREGS only contains
  1013. * information about valid entries. So we flush our internal copy
  1014. * to get rid of stale ones, then put all valid SLB entries back
  1015. * in.
  1016. */
  1017. memset(env->slb, 0, sizeof(env->slb));
  1018. for (i = 0; i < ARRAY_SIZE(env->slb); i++) {
  1019. target_ulong rb = sregs.u.s.ppc64.slb[i].slbe;
  1020. target_ulong rs = sregs.u.s.ppc64.slb[i].slbv;
  1021. /*
  1022. * Only restore valid entries
  1023. */
  1024. if (rb & SLB_ESID_V) {
  1025. ppc_store_slb(cpu, rb & 0xfff, rb & ~0xfffULL, rs);
  1026. }
  1027. }
  1028. #endif
  1029. /* Sync SRs */
  1030. for (i = 0; i < 16; i++) {
  1031. env->sr[i] = sregs.u.s.ppc32.sr[i];
  1032. }
  1033. /* Sync BATs */
  1034. for (i = 0; i < 8; i++) {
  1035. env->DBAT[0][i] = sregs.u.s.ppc32.dbat[i] & 0xffffffff;
  1036. env->DBAT[1][i] = sregs.u.s.ppc32.dbat[i] >> 32;
  1037. env->IBAT[0][i] = sregs.u.s.ppc32.ibat[i] & 0xffffffff;
  1038. env->IBAT[1][i] = sregs.u.s.ppc32.ibat[i] >> 32;
  1039. }
  1040. return 0;
  1041. }
  1042. int kvm_arch_get_registers(CPUState *cs, Error **errp)
  1043. {
  1044. PowerPCCPU *cpu = POWERPC_CPU(cs);
  1045. CPUPPCState *env = &cpu->env;
  1046. struct kvm_regs regs;
  1047. int i, ret;
  1048. ret = kvm_vcpu_ioctl(cs, KVM_GET_REGS, &regs);
  1049. if (ret < 0) {
  1050. return ret;
  1051. }
  1052. ppc_set_cr(env, regs.cr);
  1053. env->ctr = regs.ctr;
  1054. env->lr = regs.lr;
  1055. cpu_write_xer(env, regs.xer);
  1056. env->msr = regs.msr;
  1057. env->nip = regs.pc;
  1058. env->spr[SPR_SRR0] = regs.srr0;
  1059. env->spr[SPR_SRR1] = regs.srr1;
  1060. env->spr[SPR_SPRG0] = regs.sprg0;
  1061. env->spr[SPR_SPRG1] = regs.sprg1;
  1062. env->spr[SPR_SPRG2] = regs.sprg2;
  1063. env->spr[SPR_SPRG3] = regs.sprg3;
  1064. env->spr[SPR_SPRG4] = regs.sprg4;
  1065. env->spr[SPR_SPRG5] = regs.sprg5;
  1066. env->spr[SPR_SPRG6] = regs.sprg6;
  1067. env->spr[SPR_SPRG7] = regs.sprg7;
  1068. env->spr[SPR_BOOKE_PID] = regs.pid;
  1069. for (i = 0; i < 32; i++) {
  1070. env->gpr[i] = regs.gpr[i];
  1071. }
  1072. kvm_get_fp(cs);
  1073. if (cap_booke_sregs) {
  1074. ret = kvmppc_get_booke_sregs(cpu);
  1075. if (ret < 0) {
  1076. return ret;
  1077. }
  1078. }
  1079. if (cap_segstate) {
  1080. ret = kvmppc_get_books_sregs(cpu);
  1081. if (ret < 0) {
  1082. return ret;
  1083. }
  1084. }
  1085. if (cap_hior) {
  1086. kvm_get_one_spr(cs, KVM_REG_PPC_HIOR, SPR_HIOR);
  1087. }
  1088. if (cap_one_reg) {
  1089. /*
  1090. * We deliberately ignore errors here, for kernels which have
  1091. * the ONE_REG calls, but don't support the specific
  1092. * registers, there's a reasonable chance things will still
  1093. * work, at least until we try to migrate.
  1094. */
  1095. for (i = 0; i < 1024; i++) {
  1096. uint64_t id = env->spr_cb[i].one_reg_id;
  1097. if (id != 0) {
  1098. kvm_get_one_spr(cs, id, i);
  1099. }
  1100. }
  1101. #ifdef TARGET_PPC64
  1102. if (FIELD_EX64(env->msr, MSR, TS)) {
  1103. for (i = 0; i < ARRAY_SIZE(env->tm_gpr); i++) {
  1104. kvm_get_one_reg(cs, KVM_REG_PPC_TM_GPR(i), &env->tm_gpr[i]);
  1105. }
  1106. for (i = 0; i < ARRAY_SIZE(env->tm_vsr); i++) {
  1107. kvm_get_one_reg(cs, KVM_REG_PPC_TM_VSR(i), &env->tm_vsr[i]);
  1108. }
  1109. kvm_get_one_reg(cs, KVM_REG_PPC_TM_CR, &env->tm_cr);
  1110. kvm_get_one_reg(cs, KVM_REG_PPC_TM_LR, &env->tm_lr);
  1111. kvm_get_one_reg(cs, KVM_REG_PPC_TM_CTR, &env->tm_ctr);
  1112. kvm_get_one_reg(cs, KVM_REG_PPC_TM_FPSCR, &env->tm_fpscr);
  1113. kvm_get_one_reg(cs, KVM_REG_PPC_TM_AMR, &env->tm_amr);
  1114. kvm_get_one_reg(cs, KVM_REG_PPC_TM_PPR, &env->tm_ppr);
  1115. kvm_get_one_reg(cs, KVM_REG_PPC_TM_VRSAVE, &env->tm_vrsave);
  1116. kvm_get_one_reg(cs, KVM_REG_PPC_TM_VSCR, &env->tm_vscr);
  1117. kvm_get_one_reg(cs, KVM_REG_PPC_TM_DSCR, &env->tm_dscr);
  1118. kvm_get_one_reg(cs, KVM_REG_PPC_TM_TAR, &env->tm_tar);
  1119. }
  1120. if (cap_papr) {
  1121. if (kvm_get_vpa(cs) < 0) {
  1122. trace_kvm_failed_get_vpa();
  1123. }
  1124. }
  1125. kvm_get_one_reg(cs, KVM_REG_PPC_TB_OFFSET, &env->tb_env->tb_offset);
  1126. kvm_get_one_spr(cs, KVM_REG_PPC_DPDES, SPR_DPDES);
  1127. #endif
  1128. }
  1129. return 0;
  1130. }
  1131. int kvmppc_set_interrupt(PowerPCCPU *cpu, int irq, int level)
  1132. {
  1133. unsigned virq = level ? KVM_INTERRUPT_SET_LEVEL : KVM_INTERRUPT_UNSET;
  1134. if (irq != PPC_INTERRUPT_EXT) {
  1135. return 0;
  1136. }
  1137. if (!cap_interrupt_unset) {
  1138. return 0;
  1139. }
  1140. kvm_vcpu_ioctl(CPU(cpu), KVM_INTERRUPT, &virq);
  1141. return 0;
  1142. }
  1143. void kvm_arch_pre_run(CPUState *cs, struct kvm_run *run)
  1144. {
  1145. return;
  1146. }
  1147. MemTxAttrs kvm_arch_post_run(CPUState *cs, struct kvm_run *run)
  1148. {
  1149. return MEMTXATTRS_UNSPECIFIED;
  1150. }
  1151. int kvm_arch_process_async_events(CPUState *cs)
  1152. {
  1153. return cs->halted;
  1154. }
  1155. static int kvmppc_handle_halt(PowerPCCPU *cpu)
  1156. {
  1157. CPUState *cs = CPU(cpu);
  1158. CPUPPCState *env = &cpu->env;
  1159. if (!(cs->interrupt_request & CPU_INTERRUPT_HARD) &&
  1160. FIELD_EX64(env->msr, MSR, EE)) {
  1161. cs->halted = 1;
  1162. cs->exception_index = EXCP_HLT;
  1163. }
  1164. return 0;
  1165. }
  1166. /* map dcr access to existing qemu dcr emulation */
  1167. static int kvmppc_handle_dcr_read(CPUPPCState *env,
  1168. uint32_t dcrn, uint32_t *data)
  1169. {
  1170. if (ppc_dcr_read(env->dcr_env, dcrn, data) < 0) {
  1171. fprintf(stderr, "Read to unhandled DCR (0x%x)\n", dcrn);
  1172. }
  1173. return 0;
  1174. }
  1175. static int kvmppc_handle_dcr_write(CPUPPCState *env,
  1176. uint32_t dcrn, uint32_t data)
  1177. {
  1178. if (ppc_dcr_write(env->dcr_env, dcrn, data) < 0) {
  1179. fprintf(stderr, "Write to unhandled DCR (0x%x)\n", dcrn);
  1180. }
  1181. return 0;
  1182. }
  1183. int kvm_arch_insert_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
  1184. {
  1185. /* Mixed endian case is not handled */
  1186. uint32_t sc = debug_inst_opcode;
  1187. if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn,
  1188. sizeof(sc), 0) ||
  1189. cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&sc, sizeof(sc), 1)) {
  1190. return -EINVAL;
  1191. }
  1192. return 0;
  1193. }
  1194. int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
  1195. {
  1196. uint32_t sc;
  1197. if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&sc, sizeof(sc), 0) ||
  1198. sc != debug_inst_opcode ||
  1199. cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn,
  1200. sizeof(sc), 1)) {
  1201. return -EINVAL;
  1202. }
  1203. return 0;
  1204. }
  1205. static int find_hw_breakpoint(target_ulong addr, int type)
  1206. {
  1207. int n;
  1208. assert((nb_hw_breakpoint + nb_hw_watchpoint)
  1209. <= ARRAY_SIZE(hw_debug_points));
  1210. for (n = 0; n < nb_hw_breakpoint + nb_hw_watchpoint; n++) {
  1211. if (hw_debug_points[n].addr == addr &&
  1212. hw_debug_points[n].type == type) {
  1213. return n;
  1214. }
  1215. }
  1216. return -1;
  1217. }
  1218. static int find_hw_watchpoint(target_ulong addr, int *flag)
  1219. {
  1220. int n;
  1221. n = find_hw_breakpoint(addr, GDB_WATCHPOINT_ACCESS);
  1222. if (n >= 0) {
  1223. *flag = BP_MEM_ACCESS;
  1224. return n;
  1225. }
  1226. n = find_hw_breakpoint(addr, GDB_WATCHPOINT_WRITE);
  1227. if (n >= 0) {
  1228. *flag = BP_MEM_WRITE;
  1229. return n;
  1230. }
  1231. n = find_hw_breakpoint(addr, GDB_WATCHPOINT_READ);
  1232. if (n >= 0) {
  1233. *flag = BP_MEM_READ;
  1234. return n;
  1235. }
  1236. return -1;
  1237. }
  1238. int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
  1239. {
  1240. const unsigned breakpoint_index = nb_hw_breakpoint + nb_hw_watchpoint;
  1241. if (breakpoint_index >= ARRAY_SIZE(hw_debug_points)) {
  1242. return -ENOBUFS;
  1243. }
  1244. hw_debug_points[breakpoint_index].addr = addr;
  1245. hw_debug_points[breakpoint_index].type = type;
  1246. switch (type) {
  1247. case GDB_BREAKPOINT_HW:
  1248. if (nb_hw_breakpoint >= max_hw_breakpoint) {
  1249. return -ENOBUFS;
  1250. }
  1251. if (find_hw_breakpoint(addr, type) >= 0) {
  1252. return -EEXIST;
  1253. }
  1254. nb_hw_breakpoint++;
  1255. break;
  1256. case GDB_WATCHPOINT_WRITE:
  1257. case GDB_WATCHPOINT_READ:
  1258. case GDB_WATCHPOINT_ACCESS:
  1259. if (nb_hw_watchpoint >= max_hw_watchpoint) {
  1260. return -ENOBUFS;
  1261. }
  1262. if (find_hw_breakpoint(addr, type) >= 0) {
  1263. return -EEXIST;
  1264. }
  1265. nb_hw_watchpoint++;
  1266. break;
  1267. default:
  1268. return -ENOSYS;
  1269. }
  1270. return 0;
  1271. }
  1272. int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
  1273. {
  1274. int n;
  1275. n = find_hw_breakpoint(addr, type);
  1276. if (n < 0) {
  1277. return -ENOENT;
  1278. }
  1279. switch (type) {
  1280. case GDB_BREAKPOINT_HW:
  1281. nb_hw_breakpoint--;
  1282. break;
  1283. case GDB_WATCHPOINT_WRITE:
  1284. case GDB_WATCHPOINT_READ:
  1285. case GDB_WATCHPOINT_ACCESS:
  1286. nb_hw_watchpoint--;
  1287. break;
  1288. default:
  1289. return -ENOSYS;
  1290. }
  1291. hw_debug_points[n] = hw_debug_points[nb_hw_breakpoint + nb_hw_watchpoint];
  1292. return 0;
  1293. }
  1294. void kvm_arch_remove_all_hw_breakpoints(void)
  1295. {
  1296. nb_hw_breakpoint = nb_hw_watchpoint = 0;
  1297. }
  1298. void kvm_arch_update_guest_debug(CPUState *cs, struct kvm_guest_debug *dbg)
  1299. {
  1300. int n;
  1301. /* Software Breakpoint updates */
  1302. if (kvm_sw_breakpoints_active(cs)) {
  1303. dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP;
  1304. }
  1305. assert((nb_hw_breakpoint + nb_hw_watchpoint)
  1306. <= ARRAY_SIZE(hw_debug_points));
  1307. assert((nb_hw_breakpoint + nb_hw_watchpoint) <= ARRAY_SIZE(dbg->arch.bp));
  1308. if (nb_hw_breakpoint + nb_hw_watchpoint > 0) {
  1309. dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP;
  1310. memset(dbg->arch.bp, 0, sizeof(dbg->arch.bp));
  1311. for (n = 0; n < nb_hw_breakpoint + nb_hw_watchpoint; n++) {
  1312. switch (hw_debug_points[n].type) {
  1313. case GDB_BREAKPOINT_HW:
  1314. dbg->arch.bp[n].type = KVMPPC_DEBUG_BREAKPOINT;
  1315. break;
  1316. case GDB_WATCHPOINT_WRITE:
  1317. dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_WRITE;
  1318. break;
  1319. case GDB_WATCHPOINT_READ:
  1320. dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_READ;
  1321. break;
  1322. case GDB_WATCHPOINT_ACCESS:
  1323. dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_WRITE |
  1324. KVMPPC_DEBUG_WATCH_READ;
  1325. break;
  1326. default:
  1327. cpu_abort(cs, "Unsupported breakpoint type\n");
  1328. }
  1329. dbg->arch.bp[n].addr = hw_debug_points[n].addr;
  1330. }
  1331. }
  1332. }
  1333. static int kvm_handle_hw_breakpoint(CPUState *cs,
  1334. struct kvm_debug_exit_arch *arch_info)
  1335. {
  1336. int handle = DEBUG_RETURN_GUEST;
  1337. int n;
  1338. int flag = 0;
  1339. if (nb_hw_breakpoint + nb_hw_watchpoint > 0) {
  1340. if (arch_info->status & KVMPPC_DEBUG_BREAKPOINT) {
  1341. n = find_hw_breakpoint(arch_info->address, GDB_BREAKPOINT_HW);
  1342. if (n >= 0) {
  1343. handle = DEBUG_RETURN_GDB;
  1344. }
  1345. } else if (arch_info->status & (KVMPPC_DEBUG_WATCH_READ |
  1346. KVMPPC_DEBUG_WATCH_WRITE)) {
  1347. n = find_hw_watchpoint(arch_info->address, &flag);
  1348. if (n >= 0) {
  1349. handle = DEBUG_RETURN_GDB;
  1350. cs->watchpoint_hit = &hw_watchpoint;
  1351. hw_watchpoint.vaddr = hw_debug_points[n].addr;
  1352. hw_watchpoint.flags = flag;
  1353. }
  1354. }
  1355. }
  1356. return handle;
  1357. }
  1358. static int kvm_handle_singlestep(void)
  1359. {
  1360. return DEBUG_RETURN_GDB;
  1361. }
  1362. static int kvm_handle_sw_breakpoint(void)
  1363. {
  1364. return DEBUG_RETURN_GDB;
  1365. }
  1366. static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run)
  1367. {
  1368. CPUState *cs = CPU(cpu);
  1369. CPUPPCState *env = &cpu->env;
  1370. struct kvm_debug_exit_arch *arch_info = &run->debug.arch;
  1371. if (cs->singlestep_enabled) {
  1372. return kvm_handle_singlestep();
  1373. }
  1374. if (arch_info->status) {
  1375. return kvm_handle_hw_breakpoint(cs, arch_info);
  1376. }
  1377. if (kvm_find_sw_breakpoint(cs, arch_info->address)) {
  1378. return kvm_handle_sw_breakpoint();
  1379. }
  1380. /*
  1381. * QEMU is not able to handle debug exception, so inject
  1382. * program exception to guest;
  1383. * Yes program exception NOT debug exception !!
  1384. * When QEMU is using debug resources then debug exception must
  1385. * be always set. To achieve this we set MSR_DE and also set
  1386. * MSRP_DEP so guest cannot change MSR_DE.
  1387. * When emulating debug resource for guest we want guest
  1388. * to control MSR_DE (enable/disable debug interrupt on need).
  1389. * Supporting both configurations are NOT possible.
  1390. * So the result is that we cannot share debug resources
  1391. * between QEMU and Guest on BOOKE architecture.
  1392. * In the current design QEMU gets the priority over guest,
  1393. * this means that if QEMU is using debug resources then guest
  1394. * cannot use them;
  1395. * For software breakpoint QEMU uses a privileged instruction;
  1396. * So there cannot be any reason that we are here for guest
  1397. * set debug exception, only possibility is guest executed a
  1398. * privileged / illegal instruction and that's why we are
  1399. * injecting a program interrupt.
  1400. */
  1401. cpu_synchronize_state(cs);
  1402. /*
  1403. * env->nip is PC, so increment this by 4 to use
  1404. * ppc_cpu_do_interrupt(), which set srr0 = env->nip - 4.
  1405. */
  1406. env->nip += 4;
  1407. cs->exception_index = POWERPC_EXCP_PROGRAM;
  1408. env->error_code = POWERPC_EXCP_INVAL;
  1409. ppc_cpu_do_interrupt(cs);
  1410. return DEBUG_RETURN_GUEST;
  1411. }
  1412. int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
  1413. {
  1414. PowerPCCPU *cpu = POWERPC_CPU(cs);
  1415. CPUPPCState *env = &cpu->env;
  1416. int ret;
  1417. bql_lock();
  1418. switch (run->exit_reason) {
  1419. case KVM_EXIT_DCR:
  1420. if (run->dcr.is_write) {
  1421. trace_kvm_handle_dcr_write();
  1422. ret = kvmppc_handle_dcr_write(env, run->dcr.dcrn, run->dcr.data);
  1423. } else {
  1424. trace_kvm_handle_dcr_read();
  1425. ret = kvmppc_handle_dcr_read(env, run->dcr.dcrn, &run->dcr.data);
  1426. }
  1427. break;
  1428. case KVM_EXIT_HLT:
  1429. trace_kvm_handle_halt();
  1430. ret = kvmppc_handle_halt(cpu);
  1431. break;
  1432. #if defined(CONFIG_PSERIES)
  1433. case KVM_EXIT_PAPR_HCALL:
  1434. trace_kvm_handle_papr_hcall(run->papr_hcall.nr);
  1435. run->papr_hcall.ret = spapr_hypercall(cpu,
  1436. run->papr_hcall.nr,
  1437. run->papr_hcall.args);
  1438. ret = 0;
  1439. break;
  1440. #endif
  1441. case KVM_EXIT_EPR:
  1442. trace_kvm_handle_epr();
  1443. run->epr.epr = ldl_phys(cs->as, env->mpic_iack);
  1444. ret = 0;
  1445. break;
  1446. case KVM_EXIT_WATCHDOG:
  1447. trace_kvm_handle_watchdog_expiry();
  1448. watchdog_perform_action();
  1449. ret = 0;
  1450. break;
  1451. case KVM_EXIT_DEBUG:
  1452. trace_kvm_handle_debug_exception();
  1453. if (kvm_handle_debug(cpu, run)) {
  1454. ret = EXCP_DEBUG;
  1455. break;
  1456. }
  1457. /* re-enter, this exception was guest-internal */
  1458. ret = 0;
  1459. break;
  1460. #if defined(CONFIG_PSERIES)
  1461. case KVM_EXIT_NMI:
  1462. trace_kvm_handle_nmi_exception();
  1463. ret = kvm_handle_nmi(cpu, run);
  1464. break;
  1465. #endif
  1466. default:
  1467. fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
  1468. ret = -1;
  1469. break;
  1470. }
  1471. bql_unlock();
  1472. return ret;
  1473. }
  1474. int kvmppc_or_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits)
  1475. {
  1476. CPUState *cs = CPU(cpu);
  1477. uint32_t bits = tsr_bits;
  1478. struct kvm_one_reg reg = {
  1479. .id = KVM_REG_PPC_OR_TSR,
  1480. .addr = (uintptr_t) &bits,
  1481. };
  1482. if (!kvm_enabled()) {
  1483. return 0;
  1484. }
  1485. return kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  1486. }
  1487. int kvmppc_clear_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits)
  1488. {
  1489. CPUState *cs = CPU(cpu);
  1490. uint32_t bits = tsr_bits;
  1491. struct kvm_one_reg reg = {
  1492. .id = KVM_REG_PPC_CLEAR_TSR,
  1493. .addr = (uintptr_t) &bits,
  1494. };
  1495. if (!kvm_enabled()) {
  1496. return 0;
  1497. }
  1498. return kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  1499. }
  1500. int kvmppc_set_tcr(PowerPCCPU *cpu)
  1501. {
  1502. CPUState *cs = CPU(cpu);
  1503. CPUPPCState *env = &cpu->env;
  1504. uint32_t tcr = env->spr[SPR_BOOKE_TCR];
  1505. struct kvm_one_reg reg = {
  1506. .id = KVM_REG_PPC_TCR,
  1507. .addr = (uintptr_t) &tcr,
  1508. };
  1509. if (!kvm_enabled()) {
  1510. return 0;
  1511. }
  1512. return kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
  1513. }
  1514. int kvmppc_booke_watchdog_enable(PowerPCCPU *cpu)
  1515. {
  1516. CPUState *cs = CPU(cpu);
  1517. int ret;
  1518. if (!kvm_enabled()) {
  1519. return -1;
  1520. }
  1521. if (!cap_ppc_watchdog) {
  1522. printf("warning: KVM does not support watchdog");
  1523. return -1;
  1524. }
  1525. ret = kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_BOOKE_WATCHDOG, 0);
  1526. if (ret < 0) {
  1527. fprintf(stderr, "%s: couldn't enable KVM_CAP_PPC_BOOKE_WATCHDOG: %s\n",
  1528. __func__, strerror(-ret));
  1529. return ret;
  1530. }
  1531. return ret;
  1532. }
  1533. static int read_cpuinfo(const char *field, char *value, int len)
  1534. {
  1535. FILE *f;
  1536. int ret = -1;
  1537. int field_len = strlen(field);
  1538. char line[512];
  1539. f = fopen("/proc/cpuinfo", "r");
  1540. if (!f) {
  1541. return -1;
  1542. }
  1543. do {
  1544. if (!fgets(line, sizeof(line), f)) {
  1545. break;
  1546. }
  1547. if (!strncmp(line, field, field_len)) {
  1548. pstrcpy(value, len, line);
  1549. ret = 0;
  1550. break;
  1551. }
  1552. } while (*line);
  1553. fclose(f);
  1554. return ret;
  1555. }
  1556. static uint32_t kvmppc_get_tbfreq_procfs(void)
  1557. {
  1558. char line[512];
  1559. char *ns;
  1560. uint32_t tbfreq_fallback = NANOSECONDS_PER_SECOND;
  1561. uint32_t tbfreq_procfs;
  1562. if (read_cpuinfo("timebase", line, sizeof(line))) {
  1563. return tbfreq_fallback;
  1564. }
  1565. ns = strchr(line, ':');
  1566. if (!ns) {
  1567. return tbfreq_fallback;
  1568. }
  1569. tbfreq_procfs = atoi(++ns);
  1570. /* 0 is certainly not acceptable by the guest, return fallback value */
  1571. return tbfreq_procfs ? tbfreq_procfs : tbfreq_fallback;
  1572. }
  1573. uint32_t kvmppc_get_tbfreq(void)
  1574. {
  1575. static uint32_t cached_tbfreq;
  1576. if (!cached_tbfreq) {
  1577. cached_tbfreq = kvmppc_get_tbfreq_procfs();
  1578. }
  1579. return cached_tbfreq;
  1580. }
  1581. bool kvmppc_get_host_serial(char **value)
  1582. {
  1583. return g_file_get_contents("/proc/device-tree/system-id", value, NULL,
  1584. NULL);
  1585. }
  1586. bool kvmppc_get_host_model(char **value)
  1587. {
  1588. return g_file_get_contents("/proc/device-tree/model", value, NULL, NULL);
  1589. }
  1590. /* Try to find a device tree node for a CPU with clock-frequency property */
  1591. static int kvmppc_find_cpu_dt(char *buf, int buf_len)
  1592. {
  1593. struct dirent *dirp;
  1594. DIR *dp;
  1595. dp = opendir(PROC_DEVTREE_CPU);
  1596. if (!dp) {
  1597. printf("Can't open directory " PROC_DEVTREE_CPU "\n");
  1598. return -1;
  1599. }
  1600. buf[0] = '\0';
  1601. while ((dirp = readdir(dp)) != NULL) {
  1602. FILE *f;
  1603. /* Don't accidentally read from the current and parent directories */
  1604. if (strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0) {
  1605. continue;
  1606. }
  1607. snprintf(buf, buf_len, "%s%s/clock-frequency", PROC_DEVTREE_CPU,
  1608. dirp->d_name);
  1609. f = fopen(buf, "r");
  1610. if (f) {
  1611. snprintf(buf, buf_len, "%s%s", PROC_DEVTREE_CPU, dirp->d_name);
  1612. fclose(f);
  1613. break;
  1614. }
  1615. buf[0] = '\0';
  1616. }
  1617. closedir(dp);
  1618. if (buf[0] == '\0') {
  1619. printf("Unknown host!\n");
  1620. return -1;
  1621. }
  1622. return 0;
  1623. }
  1624. static uint64_t kvmppc_read_int_dt(const char *filename)
  1625. {
  1626. union {
  1627. uint32_t v32;
  1628. uint64_t v64;
  1629. } u;
  1630. FILE *f;
  1631. int len;
  1632. f = fopen(filename, "rb");
  1633. if (!f) {
  1634. return -1;
  1635. }
  1636. len = fread(&u, 1, sizeof(u), f);
  1637. fclose(f);
  1638. switch (len) {
  1639. case 4:
  1640. /* property is a 32-bit quantity */
  1641. return be32_to_cpu(u.v32);
  1642. case 8:
  1643. return be64_to_cpu(u.v64);
  1644. }
  1645. return 0;
  1646. }
  1647. /*
  1648. * Read a CPU node property from the host device tree that's a single
  1649. * integer (32-bit or 64-bit). Returns 0 if anything goes wrong
  1650. * (can't find or open the property, or doesn't understand the format)
  1651. */
  1652. static uint64_t kvmppc_read_int_cpu_dt(const char *propname)
  1653. {
  1654. char buf[PATH_MAX], *tmp;
  1655. uint64_t val;
  1656. if (kvmppc_find_cpu_dt(buf, sizeof(buf))) {
  1657. return -1;
  1658. }
  1659. tmp = g_strdup_printf("%s/%s", buf, propname);
  1660. val = kvmppc_read_int_dt(tmp);
  1661. g_free(tmp);
  1662. return val;
  1663. }
  1664. uint64_t kvmppc_get_clockfreq(void)
  1665. {
  1666. return kvmppc_read_int_cpu_dt("clock-frequency");
  1667. }
  1668. static int kvmppc_get_dec_bits(void)
  1669. {
  1670. int nr_bits = kvmppc_read_int_cpu_dt("ibm,dec-bits");
  1671. if (nr_bits > 0) {
  1672. return nr_bits;
  1673. }
  1674. return 0;
  1675. }
  1676. static int kvmppc_get_pvinfo(CPUPPCState *env, struct kvm_ppc_pvinfo *pvinfo)
  1677. {
  1678. CPUState *cs = env_cpu(env);
  1679. if (kvm_vm_check_extension(cs->kvm_state, KVM_CAP_PPC_GET_PVINFO) &&
  1680. !kvm_vm_ioctl(cs->kvm_state, KVM_PPC_GET_PVINFO, pvinfo)) {
  1681. return 0;
  1682. }
  1683. return 1;
  1684. }
  1685. int kvmppc_get_hasidle(CPUPPCState *env)
  1686. {
  1687. struct kvm_ppc_pvinfo pvinfo;
  1688. if (!kvmppc_get_pvinfo(env, &pvinfo) &&
  1689. (pvinfo.flags & KVM_PPC_PVINFO_FLAGS_EV_IDLE)) {
  1690. return 1;
  1691. }
  1692. return 0;
  1693. }
  1694. int kvmppc_get_hypercall(CPUPPCState *env, uint8_t *buf, int buf_len)
  1695. {
  1696. uint32_t *hc = (uint32_t *)buf;
  1697. struct kvm_ppc_pvinfo pvinfo;
  1698. if (!kvmppc_get_pvinfo(env, &pvinfo)) {
  1699. memcpy(buf, pvinfo.hcall, buf_len);
  1700. return 0;
  1701. }
  1702. /*
  1703. * Fallback to always fail hypercalls regardless of endianness:
  1704. *
  1705. * tdi 0,r0,72 (becomes b .+8 in wrong endian, nop in good endian)
  1706. * li r3, -1
  1707. * b .+8 (becomes nop in wrong endian)
  1708. * bswap32(li r3, -1)
  1709. */
  1710. hc[0] = cpu_to_be32(0x08000048);
  1711. hc[1] = cpu_to_be32(0x3860ffff);
  1712. hc[2] = cpu_to_be32(0x48000008);
  1713. hc[3] = cpu_to_be32(bswap32(0x3860ffff));
  1714. return 1;
  1715. }
  1716. static inline int kvmppc_enable_hcall(KVMState *s, target_ulong hcall)
  1717. {
  1718. return kvm_vm_enable_cap(s, KVM_CAP_PPC_ENABLE_HCALL, 0, hcall, 1);
  1719. }
  1720. void kvmppc_enable_logical_ci_hcalls(void)
  1721. {
  1722. /*
  1723. * FIXME: it would be nice if we could detect the cases where
  1724. * we're using a device which requires the in kernel
  1725. * implementation of these hcalls, but the kernel lacks them and
  1726. * produce a warning.
  1727. */
  1728. kvmppc_enable_hcall(kvm_state, H_LOGICAL_CI_LOAD);
  1729. kvmppc_enable_hcall(kvm_state, H_LOGICAL_CI_STORE);
  1730. }
  1731. void kvmppc_enable_set_mode_hcall(void)
  1732. {
  1733. kvmppc_enable_hcall(kvm_state, H_SET_MODE);
  1734. }
  1735. void kvmppc_enable_clear_ref_mod_hcalls(void)
  1736. {
  1737. kvmppc_enable_hcall(kvm_state, H_CLEAR_REF);
  1738. kvmppc_enable_hcall(kvm_state, H_CLEAR_MOD);
  1739. }
  1740. void kvmppc_enable_h_page_init(void)
  1741. {
  1742. kvmppc_enable_hcall(kvm_state, H_PAGE_INIT);
  1743. }
  1744. void kvmppc_enable_h_rpt_invalidate(void)
  1745. {
  1746. kvmppc_enable_hcall(kvm_state, H_RPT_INVALIDATE);
  1747. }
  1748. #ifdef CONFIG_PSERIES
  1749. void kvmppc_set_papr(PowerPCCPU *cpu)
  1750. {
  1751. CPUState *cs = CPU(cpu);
  1752. int ret;
  1753. if (!kvm_enabled()) {
  1754. return;
  1755. }
  1756. ret = kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_PAPR, 0);
  1757. if (ret) {
  1758. error_report("This vCPU type or KVM version does not support PAPR");
  1759. exit(1);
  1760. }
  1761. /*
  1762. * Update the capability flag so we sync the right information
  1763. * with kvm
  1764. */
  1765. cap_papr = 1;
  1766. }
  1767. #endif
  1768. int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr)
  1769. {
  1770. return kvm_set_one_reg(CPU(cpu), KVM_REG_PPC_ARCH_COMPAT, &compat_pvr);
  1771. }
  1772. void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
  1773. {
  1774. CPUState *cs = CPU(cpu);
  1775. int ret;
  1776. ret = kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_EPR, 0, mpic_proxy);
  1777. if (ret && mpic_proxy) {
  1778. error_report("This KVM version does not support EPR");
  1779. exit(1);
  1780. }
  1781. }
  1782. bool kvmppc_get_fwnmi(void)
  1783. {
  1784. return cap_fwnmi;
  1785. }
  1786. int kvmppc_set_fwnmi(PowerPCCPU *cpu)
  1787. {
  1788. CPUState *cs = CPU(cpu);
  1789. return kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_FWNMI, 0);
  1790. }
  1791. int kvmppc_smt_threads(void)
  1792. {
  1793. return cap_ppc_smt ? cap_ppc_smt : 1;
  1794. }
  1795. int kvmppc_set_smt_threads(int smt)
  1796. {
  1797. int ret;
  1798. ret = kvm_vm_enable_cap(kvm_state, KVM_CAP_PPC_SMT, 0, smt, 0);
  1799. if (!ret) {
  1800. cap_ppc_smt = smt;
  1801. }
  1802. return ret;
  1803. }
  1804. void kvmppc_error_append_smt_possible_hint(Error *const *errp)
  1805. {
  1806. int i;
  1807. GString *g;
  1808. char *s;
  1809. assert(kvm_enabled());
  1810. if (cap_ppc_smt_possible) {
  1811. g = g_string_new("Available VSMT modes:");
  1812. for (i = 63; i >= 0; i--) {
  1813. if ((1UL << i) & cap_ppc_smt_possible) {
  1814. g_string_append_printf(g, " %lu", (1UL << i));
  1815. }
  1816. }
  1817. s = g_string_free(g, false);
  1818. error_append_hint(errp, "%s.\n", s);
  1819. g_free(s);
  1820. } else {
  1821. error_append_hint(errp,
  1822. "This KVM seems to be too old to support VSMT.\n");
  1823. }
  1824. }
  1825. #ifdef TARGET_PPC64
  1826. uint64_t kvmppc_vrma_limit(unsigned int hash_shift)
  1827. {
  1828. struct kvm_ppc_smmu_info info;
  1829. long rampagesize, best_page_shift;
  1830. int i;
  1831. /*
  1832. * Find the largest hardware supported page size that's less than
  1833. * or equal to the (logical) backing page size of guest RAM
  1834. */
  1835. kvm_get_smmu_info(&info, &error_fatal);
  1836. rampagesize = qemu_minrampagesize();
  1837. best_page_shift = 0;
  1838. for (i = 0; i < KVM_PPC_PAGE_SIZES_MAX_SZ; i++) {
  1839. struct kvm_ppc_one_seg_page_size *sps = &info.sps[i];
  1840. if (!sps->page_shift) {
  1841. continue;
  1842. }
  1843. if ((sps->page_shift > best_page_shift)
  1844. && ((1UL << sps->page_shift) <= rampagesize)) {
  1845. best_page_shift = sps->page_shift;
  1846. }
  1847. }
  1848. return 1ULL << (best_page_shift + hash_shift - 7);
  1849. }
  1850. #endif
  1851. bool kvmppc_spapr_use_multitce(void)
  1852. {
  1853. return cap_spapr_multitce;
  1854. }
  1855. int kvmppc_spapr_enable_inkernel_multitce(void)
  1856. {
  1857. int ret;
  1858. ret = kvm_vm_enable_cap(kvm_state, KVM_CAP_PPC_ENABLE_HCALL, 0,
  1859. H_PUT_TCE_INDIRECT, 1);
  1860. if (!ret) {
  1861. ret = kvm_vm_enable_cap(kvm_state, KVM_CAP_PPC_ENABLE_HCALL, 0,
  1862. H_STUFF_TCE, 1);
  1863. }
  1864. return ret;
  1865. }
  1866. void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t page_shift,
  1867. uint64_t bus_offset, uint32_t nb_table,
  1868. int *pfd, bool need_vfio)
  1869. {
  1870. long len;
  1871. int fd;
  1872. void *table;
  1873. /*
  1874. * Must set fd to -1 so we don't try to munmap when called for
  1875. * destroying the table, which the upper layers -will- do
  1876. */
  1877. *pfd = -1;
  1878. if (!cap_spapr_tce || (need_vfio && !cap_spapr_vfio)) {
  1879. return NULL;
  1880. }
  1881. if (cap_spapr_tce_64) {
  1882. struct kvm_create_spapr_tce_64 args = {
  1883. .liobn = liobn,
  1884. .page_shift = page_shift,
  1885. .offset = bus_offset >> page_shift,
  1886. .size = nb_table,
  1887. .flags = 0
  1888. };
  1889. fd = kvm_vm_ioctl(kvm_state, KVM_CREATE_SPAPR_TCE_64, &args);
  1890. if (fd < 0) {
  1891. fprintf(stderr,
  1892. "KVM: Failed to create TCE64 table for liobn 0x%x\n",
  1893. liobn);
  1894. return NULL;
  1895. }
  1896. } else if (cap_spapr_tce) {
  1897. uint64_t window_size = (uint64_t) nb_table << page_shift;
  1898. struct kvm_create_spapr_tce args = {
  1899. .liobn = liobn,
  1900. .window_size = window_size,
  1901. };
  1902. if ((window_size != args.window_size) || bus_offset) {
  1903. return NULL;
  1904. }
  1905. fd = kvm_vm_ioctl(kvm_state, KVM_CREATE_SPAPR_TCE, &args);
  1906. if (fd < 0) {
  1907. fprintf(stderr, "KVM: Failed to create TCE table for liobn 0x%x\n",
  1908. liobn);
  1909. return NULL;
  1910. }
  1911. } else {
  1912. return NULL;
  1913. }
  1914. len = nb_table * sizeof(uint64_t);
  1915. /* FIXME: round this up to page size */
  1916. table = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  1917. if (table == MAP_FAILED) {
  1918. fprintf(stderr, "KVM: Failed to map TCE table for liobn 0x%x\n",
  1919. liobn);
  1920. close(fd);
  1921. return NULL;
  1922. }
  1923. *pfd = fd;
  1924. return table;
  1925. }
  1926. int kvmppc_remove_spapr_tce(void *table, int fd, uint32_t nb_table)
  1927. {
  1928. long len;
  1929. if (fd < 0) {
  1930. return -1;
  1931. }
  1932. len = nb_table * sizeof(uint64_t);
  1933. if ((munmap(table, len) < 0) ||
  1934. (close(fd) < 0)) {
  1935. fprintf(stderr, "KVM: Unexpected error removing TCE table: %s",
  1936. strerror(errno));
  1937. /* Leak the table */
  1938. }
  1939. return 0;
  1940. }
  1941. int kvmppc_reset_htab(int shift_hint)
  1942. {
  1943. uint32_t shift = shift_hint;
  1944. if (!kvm_enabled()) {
  1945. /* Full emulation, tell caller to allocate htab itself */
  1946. return 0;
  1947. }
  1948. if (kvm_vm_check_extension(kvm_state, KVM_CAP_PPC_ALLOC_HTAB)) {
  1949. int ret;
  1950. ret = kvm_vm_ioctl(kvm_state, KVM_PPC_ALLOCATE_HTAB, &shift);
  1951. if (ret == -ENOTTY) {
  1952. /*
  1953. * At least some versions of PR KVM advertise the
  1954. * capability, but don't implement the ioctl(). Oops.
  1955. * Return 0 so that we allocate the htab in qemu, as is
  1956. * correct for PR.
  1957. */
  1958. return 0;
  1959. } else if (ret < 0) {
  1960. return ret;
  1961. }
  1962. return shift;
  1963. }
  1964. /*
  1965. * We have a kernel that predates the htab reset calls. For PR
  1966. * KVM, we need to allocate the htab ourselves, for an HV KVM of
  1967. * this era, it has allocated a 16MB fixed size hash table
  1968. * already.
  1969. */
  1970. if (kvmppc_is_pr(kvm_state)) {
  1971. /* PR - tell caller to allocate htab */
  1972. return 0;
  1973. } else {
  1974. /* HV - assume 16MB kernel allocated htab */
  1975. return 24;
  1976. }
  1977. }
  1978. static inline uint32_t mfpvr(void)
  1979. {
  1980. uint32_t pvr;
  1981. asm ("mfpvr %0"
  1982. : "=r"(pvr));
  1983. return pvr;
  1984. }
  1985. static void alter_insns(uint64_t *word, uint64_t flags, bool on)
  1986. {
  1987. if (on) {
  1988. *word |= flags;
  1989. } else {
  1990. *word &= ~flags;
  1991. }
  1992. }
  1993. static bool kvmppc_cpu_realize(CPUState *cs, Error **errp)
  1994. {
  1995. int ret;
  1996. const char *vcpu_str = (cs->parent_obj.hotplugged == true) ?
  1997. "hotplug" : "create";
  1998. cs->cpu_index = cpu_get_free_index();
  1999. POWERPC_CPU(cs)->vcpu_id = cs->cpu_index;
  2000. /* create and park to fail gracefully in case vcpu hotplug fails */
  2001. ret = kvm_create_and_park_vcpu(cs);
  2002. if (ret) {
  2003. /*
  2004. * This causes QEMU to terminate if initial CPU creation
  2005. * fails, and only CPU hotplug failure if the error happens
  2006. * there.
  2007. */
  2008. error_setg(errp, "%s: vcpu %s failed with %d",
  2009. __func__, vcpu_str, ret);
  2010. return false;
  2011. }
  2012. return true;
  2013. }
  2014. static void kvmppc_host_cpu_class_init(ObjectClass *oc, void *data)
  2015. {
  2016. PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
  2017. uint32_t dcache_size = kvmppc_read_int_cpu_dt("d-cache-size");
  2018. uint32_t icache_size = kvmppc_read_int_cpu_dt("i-cache-size");
  2019. /* Now fix up the class with information we can query from the host */
  2020. pcc->pvr = mfpvr();
  2021. alter_insns(&pcc->insns_flags, PPC_ALTIVEC,
  2022. qemu_getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC);
  2023. alter_insns(&pcc->insns_flags2, PPC2_VSX,
  2024. qemu_getauxval(AT_HWCAP) & PPC_FEATURE_HAS_VSX);
  2025. alter_insns(&pcc->insns_flags2, PPC2_DFP,
  2026. qemu_getauxval(AT_HWCAP) & PPC_FEATURE_HAS_DFP);
  2027. if (dcache_size != -1) {
  2028. pcc->l1_dcache_size = dcache_size;
  2029. }
  2030. if (icache_size != -1) {
  2031. pcc->l1_icache_size = icache_size;
  2032. }
  2033. #if defined(TARGET_PPC64)
  2034. pcc->radix_page_info = kvmppc_get_radix_page_info();
  2035. #endif /* defined(TARGET_PPC64) */
  2036. }
  2037. bool kvmppc_has_cap_epr(void)
  2038. {
  2039. return cap_epr;
  2040. }
  2041. bool kvmppc_has_cap_fixup_hcalls(void)
  2042. {
  2043. return cap_fixup_hcalls;
  2044. }
  2045. bool kvmppc_has_cap_htm(void)
  2046. {
  2047. return cap_htm;
  2048. }
  2049. bool kvmppc_has_cap_mmu_radix(void)
  2050. {
  2051. return cap_mmu_radix;
  2052. }
  2053. bool kvmppc_has_cap_mmu_hash_v3(void)
  2054. {
  2055. return cap_mmu_hash_v3;
  2056. }
  2057. static bool kvmppc_power8_host(void)
  2058. {
  2059. bool ret = false;
  2060. #ifdef TARGET_PPC64
  2061. {
  2062. uint32_t base_pvr = CPU_POWERPC_POWER_SERVER_MASK & mfpvr();
  2063. ret = (base_pvr == CPU_POWERPC_POWER8E_BASE) ||
  2064. (base_pvr == CPU_POWERPC_POWER8NVL_BASE) ||
  2065. (base_pvr == CPU_POWERPC_POWER8_BASE);
  2066. }
  2067. #endif /* TARGET_PPC64 */
  2068. return ret;
  2069. }
  2070. static int parse_cap_ppc_safe_cache(struct kvm_ppc_cpu_char c)
  2071. {
  2072. bool l1d_thread_priv_req = !kvmppc_power8_host();
  2073. if (~c.behaviour & c.behaviour_mask & H_CPU_BEHAV_L1D_FLUSH_PR) {
  2074. return 2;
  2075. } else if ((!l1d_thread_priv_req ||
  2076. c.character & c.character_mask & H_CPU_CHAR_L1D_THREAD_PRIV) &&
  2077. (c.character & c.character_mask
  2078. & (H_CPU_CHAR_L1D_FLUSH_ORI30 | H_CPU_CHAR_L1D_FLUSH_TRIG2))) {
  2079. return 1;
  2080. }
  2081. return 0;
  2082. }
  2083. static int parse_cap_ppc_safe_bounds_check(struct kvm_ppc_cpu_char c)
  2084. {
  2085. if (~c.behaviour & c.behaviour_mask & H_CPU_BEHAV_BNDS_CHK_SPEC_BAR) {
  2086. return 2;
  2087. } else if (c.character & c.character_mask & H_CPU_CHAR_SPEC_BAR_ORI31) {
  2088. return 1;
  2089. }
  2090. return 0;
  2091. }
  2092. static int parse_cap_ppc_safe_indirect_branch(struct kvm_ppc_cpu_char c)
  2093. {
  2094. if ((~c.behaviour & c.behaviour_mask & H_CPU_BEHAV_FLUSH_COUNT_CACHE) &&
  2095. (~c.character & c.character_mask & H_CPU_CHAR_CACHE_COUNT_DIS) &&
  2096. (~c.character & c.character_mask & H_CPU_CHAR_BCCTRL_SERIALISED)) {
  2097. return SPAPR_CAP_FIXED_NA;
  2098. } else if (c.behaviour & c.behaviour_mask & H_CPU_BEHAV_FLUSH_COUNT_CACHE) {
  2099. return SPAPR_CAP_WORKAROUND;
  2100. } else if (c.character & c.character_mask & H_CPU_CHAR_CACHE_COUNT_DIS) {
  2101. return SPAPR_CAP_FIXED_CCD;
  2102. } else if (c.character & c.character_mask & H_CPU_CHAR_BCCTRL_SERIALISED) {
  2103. return SPAPR_CAP_FIXED_IBS;
  2104. }
  2105. return 0;
  2106. }
  2107. static int parse_cap_ppc_count_cache_flush_assist(struct kvm_ppc_cpu_char c)
  2108. {
  2109. if (c.character & c.character_mask & H_CPU_CHAR_BCCTR_FLUSH_ASSIST) {
  2110. return 1;
  2111. }
  2112. return 0;
  2113. }
  2114. bool kvmppc_has_cap_xive(void)
  2115. {
  2116. return cap_xive;
  2117. }
  2118. static void kvmppc_get_cpu_characteristics(KVMState *s)
  2119. {
  2120. struct kvm_ppc_cpu_char c;
  2121. int ret;
  2122. /* Assume broken */
  2123. cap_ppc_safe_cache = 0;
  2124. cap_ppc_safe_bounds_check = 0;
  2125. cap_ppc_safe_indirect_branch = 0;
  2126. ret = kvm_vm_check_extension(s, KVM_CAP_PPC_GET_CPU_CHAR);
  2127. if (!ret) {
  2128. return;
  2129. }
  2130. ret = kvm_vm_ioctl(s, KVM_PPC_GET_CPU_CHAR, &c);
  2131. if (ret < 0) {
  2132. return;
  2133. }
  2134. cap_ppc_safe_cache = parse_cap_ppc_safe_cache(c);
  2135. cap_ppc_safe_bounds_check = parse_cap_ppc_safe_bounds_check(c);
  2136. cap_ppc_safe_indirect_branch = parse_cap_ppc_safe_indirect_branch(c);
  2137. cap_ppc_count_cache_flush_assist =
  2138. parse_cap_ppc_count_cache_flush_assist(c);
  2139. }
  2140. int kvmppc_get_cap_safe_cache(void)
  2141. {
  2142. return cap_ppc_safe_cache;
  2143. }
  2144. int kvmppc_get_cap_safe_bounds_check(void)
  2145. {
  2146. return cap_ppc_safe_bounds_check;
  2147. }
  2148. int kvmppc_get_cap_safe_indirect_branch(void)
  2149. {
  2150. return cap_ppc_safe_indirect_branch;
  2151. }
  2152. int kvmppc_get_cap_count_cache_flush_assist(void)
  2153. {
  2154. return cap_ppc_count_cache_flush_assist;
  2155. }
  2156. bool kvmppc_has_cap_nested_kvm_hv(void)
  2157. {
  2158. return !!cap_ppc_nested_kvm_hv;
  2159. }
  2160. int kvmppc_set_cap_nested_kvm_hv(int enable)
  2161. {
  2162. return kvm_vm_enable_cap(kvm_state, KVM_CAP_PPC_NESTED_HV, 0, enable);
  2163. }
  2164. bool kvmppc_has_cap_spapr_vfio(void)
  2165. {
  2166. return cap_spapr_vfio;
  2167. }
  2168. int kvmppc_get_cap_large_decr(void)
  2169. {
  2170. return cap_large_decr;
  2171. }
  2172. int kvmppc_enable_cap_large_decr(PowerPCCPU *cpu, int enable)
  2173. {
  2174. CPUState *cs = CPU(cpu);
  2175. uint64_t lpcr = 0;
  2176. kvm_get_one_reg(cs, KVM_REG_PPC_LPCR_64, &lpcr);
  2177. /* Do we need to modify the LPCR? */
  2178. if (!!(lpcr & LPCR_LD) != !!enable) {
  2179. if (enable) {
  2180. lpcr |= LPCR_LD;
  2181. } else {
  2182. lpcr &= ~LPCR_LD;
  2183. }
  2184. kvm_set_one_reg(cs, KVM_REG_PPC_LPCR_64, &lpcr);
  2185. kvm_get_one_reg(cs, KVM_REG_PPC_LPCR_64, &lpcr);
  2186. if (!!(lpcr & LPCR_LD) != !!enable) {
  2187. return -1;
  2188. }
  2189. }
  2190. return 0;
  2191. }
  2192. int kvmppc_has_cap_rpt_invalidate(void)
  2193. {
  2194. return cap_rpt_invalidate;
  2195. }
  2196. bool kvmppc_supports_ail_3(void)
  2197. {
  2198. return cap_ail_mode_3;
  2199. }
  2200. PowerPCCPUClass *kvm_ppc_get_host_cpu_class(void)
  2201. {
  2202. uint32_t host_pvr = mfpvr();
  2203. PowerPCCPUClass *pvr_pcc;
  2204. pvr_pcc = ppc_cpu_class_by_pvr(host_pvr);
  2205. if (pvr_pcc == NULL) {
  2206. pvr_pcc = ppc_cpu_class_by_pvr_mask(host_pvr);
  2207. }
  2208. return pvr_pcc;
  2209. }
  2210. static void pseries_machine_class_fixup(ObjectClass *oc, void *opaque)
  2211. {
  2212. MachineClass *mc = MACHINE_CLASS(oc);
  2213. mc->default_cpu_type = TYPE_HOST_POWERPC_CPU;
  2214. }
  2215. static int kvm_ppc_register_host_cpu_type(void)
  2216. {
  2217. TypeInfo type_info = {
  2218. .name = TYPE_HOST_POWERPC_CPU,
  2219. .class_init = kvmppc_host_cpu_class_init,
  2220. };
  2221. PowerPCCPUClass *pvr_pcc;
  2222. ObjectClass *oc;
  2223. DeviceClass *dc;
  2224. int i;
  2225. pvr_pcc = kvm_ppc_get_host_cpu_class();
  2226. if (pvr_pcc == NULL) {
  2227. return -1;
  2228. }
  2229. type_info.parent = object_class_get_name(OBJECT_CLASS(pvr_pcc));
  2230. type_register(&type_info);
  2231. /* override TCG default cpu type with 'host' cpu model */
  2232. object_class_foreach(pseries_machine_class_fixup, TYPE_SPAPR_MACHINE,
  2233. false, NULL);
  2234. oc = object_class_by_name(type_info.name);
  2235. g_assert(oc);
  2236. /*
  2237. * Update generic CPU family class alias (e.g. on a POWER8NVL host,
  2238. * we want "POWER8" to be a "family" alias that points to the current
  2239. * host CPU type, too)
  2240. */
  2241. dc = DEVICE_CLASS(ppc_cpu_get_family_class(pvr_pcc));
  2242. for (i = 0; ppc_cpu_aliases[i].alias != NULL; i++) {
  2243. if (strcasecmp(ppc_cpu_aliases[i].alias, dc->desc) == 0) {
  2244. char *suffix;
  2245. ppc_cpu_aliases[i].model = g_strdup(object_class_get_name(oc));
  2246. suffix = strstr(ppc_cpu_aliases[i].model, POWERPC_CPU_TYPE_SUFFIX);
  2247. if (suffix) {
  2248. *suffix = 0;
  2249. }
  2250. break;
  2251. }
  2252. }
  2253. return 0;
  2254. }
  2255. int kvmppc_define_rtas_kernel_token(uint32_t token, const char *function)
  2256. {
  2257. struct kvm_rtas_token_args args = {
  2258. .token = token,
  2259. };
  2260. if (!kvm_check_extension(kvm_state, KVM_CAP_PPC_RTAS)) {
  2261. return -ENOENT;
  2262. }
  2263. strncpy(args.name, function, sizeof(args.name) - 1);
  2264. return kvm_vm_ioctl(kvm_state, KVM_PPC_RTAS_DEFINE_TOKEN, &args);
  2265. }
  2266. int kvmppc_get_htab_fd(bool write, uint64_t index, Error **errp)
  2267. {
  2268. struct kvm_get_htab_fd s = {
  2269. .flags = write ? KVM_GET_HTAB_WRITE : 0,
  2270. .start_index = index,
  2271. };
  2272. int ret;
  2273. if (!cap_htab_fd) {
  2274. error_setg(errp, "KVM version doesn't support %s the HPT",
  2275. write ? "writing" : "reading");
  2276. return -ENOTSUP;
  2277. }
  2278. ret = kvm_vm_ioctl(kvm_state, KVM_PPC_GET_HTAB_FD, &s);
  2279. if (ret < 0) {
  2280. error_setg(errp, "Unable to open fd for %s HPT %s KVM: %s",
  2281. write ? "writing" : "reading", write ? "to" : "from",
  2282. strerror(errno));
  2283. return -errno;
  2284. }
  2285. return ret;
  2286. }
  2287. int kvmppc_save_htab(QEMUFile *f, int fd, size_t bufsize, int64_t max_ns)
  2288. {
  2289. int64_t starttime = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
  2290. g_autofree uint8_t *buf = g_malloc(bufsize);
  2291. ssize_t rc;
  2292. do {
  2293. rc = read(fd, buf, bufsize);
  2294. if (rc < 0) {
  2295. fprintf(stderr, "Error reading data from KVM HTAB fd: %s\n",
  2296. strerror(errno));
  2297. return rc;
  2298. } else if (rc) {
  2299. uint8_t *buffer = buf;
  2300. ssize_t n = rc;
  2301. while (n) {
  2302. struct kvm_get_htab_header *head =
  2303. (struct kvm_get_htab_header *) buffer;
  2304. size_t chunksize = sizeof(*head) +
  2305. HASH_PTE_SIZE_64 * head->n_valid;
  2306. qemu_put_be32(f, head->index);
  2307. qemu_put_be16(f, head->n_valid);
  2308. qemu_put_be16(f, head->n_invalid);
  2309. qemu_put_buffer(f, (void *)(head + 1),
  2310. HASH_PTE_SIZE_64 * head->n_valid);
  2311. buffer += chunksize;
  2312. n -= chunksize;
  2313. }
  2314. }
  2315. } while ((rc != 0)
  2316. && ((max_ns < 0) ||
  2317. ((qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) < max_ns)));
  2318. return (rc == 0) ? 1 : 0;
  2319. }
  2320. int kvmppc_load_htab_chunk(QEMUFile *f, int fd, uint32_t index,
  2321. uint16_t n_valid, uint16_t n_invalid, Error **errp)
  2322. {
  2323. struct kvm_get_htab_header *buf;
  2324. size_t chunksize = sizeof(*buf) + n_valid * HASH_PTE_SIZE_64;
  2325. ssize_t rc;
  2326. buf = alloca(chunksize);
  2327. buf->index = index;
  2328. buf->n_valid = n_valid;
  2329. buf->n_invalid = n_invalid;
  2330. qemu_get_buffer(f, (void *)(buf + 1), HASH_PTE_SIZE_64 * n_valid);
  2331. rc = write(fd, buf, chunksize);
  2332. if (rc < 0) {
  2333. error_setg_errno(errp, errno, "Error writing the KVM hash table");
  2334. return -errno;
  2335. }
  2336. if (rc != chunksize) {
  2337. /* We should never get a short write on a single chunk */
  2338. error_setg(errp, "Short write while restoring the KVM hash table");
  2339. return -ENOSPC;
  2340. }
  2341. return 0;
  2342. }
  2343. bool kvm_arch_stop_on_emulation_error(CPUState *cpu)
  2344. {
  2345. return true;
  2346. }
  2347. void kvm_arch_init_irq_routing(KVMState *s)
  2348. {
  2349. }
  2350. void kvmppc_read_hptes(ppc_hash_pte64_t *hptes, hwaddr ptex, int n)
  2351. {
  2352. int fd, rc;
  2353. int i;
  2354. fd = kvmppc_get_htab_fd(false, ptex, &error_abort);
  2355. i = 0;
  2356. while (i < n) {
  2357. struct kvm_get_htab_header *hdr;
  2358. int m = n < HPTES_PER_GROUP ? n : HPTES_PER_GROUP;
  2359. char buf[sizeof(*hdr) + HPTES_PER_GROUP * HASH_PTE_SIZE_64];
  2360. rc = read(fd, buf, sizeof(*hdr) + m * HASH_PTE_SIZE_64);
  2361. if (rc < 0) {
  2362. hw_error("kvmppc_read_hptes: Unable to read HPTEs");
  2363. }
  2364. hdr = (struct kvm_get_htab_header *)buf;
  2365. while ((i < n) && ((char *)hdr < (buf + rc))) {
  2366. int invalid = hdr->n_invalid, valid = hdr->n_valid;
  2367. if (hdr->index != (ptex + i)) {
  2368. hw_error("kvmppc_read_hptes: Unexpected HPTE index %"PRIu32
  2369. " != (%"HWADDR_PRIu" + %d", hdr->index, ptex, i);
  2370. }
  2371. if (n - i < valid) {
  2372. valid = n - i;
  2373. }
  2374. memcpy(hptes + i, hdr + 1, HASH_PTE_SIZE_64 * valid);
  2375. i += valid;
  2376. if ((n - i) < invalid) {
  2377. invalid = n - i;
  2378. }
  2379. memset(hptes + i, 0, invalid * HASH_PTE_SIZE_64);
  2380. i += invalid;
  2381. hdr = (struct kvm_get_htab_header *)
  2382. ((char *)(hdr + 1) + HASH_PTE_SIZE_64 * hdr->n_valid);
  2383. }
  2384. }
  2385. close(fd);
  2386. }
  2387. void kvmppc_write_hpte(hwaddr ptex, uint64_t pte0, uint64_t pte1)
  2388. {
  2389. int fd, rc;
  2390. struct {
  2391. struct kvm_get_htab_header hdr;
  2392. uint64_t pte0;
  2393. uint64_t pte1;
  2394. } buf;
  2395. fd = kvmppc_get_htab_fd(true, 0 /* Ignored */, &error_abort);
  2396. buf.hdr.n_valid = 1;
  2397. buf.hdr.n_invalid = 0;
  2398. buf.hdr.index = ptex;
  2399. buf.pte0 = cpu_to_be64(pte0);
  2400. buf.pte1 = cpu_to_be64(pte1);
  2401. rc = write(fd, &buf, sizeof(buf));
  2402. if (rc != sizeof(buf)) {
  2403. hw_error("kvmppc_write_hpte: Unable to update KVM HPT");
  2404. }
  2405. close(fd);
  2406. }
  2407. int kvm_arch_fixup_msi_route(struct kvm_irq_routing_entry *route,
  2408. uint64_t address, uint32_t data, PCIDevice *dev)
  2409. {
  2410. return 0;
  2411. }
  2412. int kvm_arch_add_msi_route_post(struct kvm_irq_routing_entry *route,
  2413. int vector, PCIDevice *dev)
  2414. {
  2415. return 0;
  2416. }
  2417. int kvm_arch_release_virq_post(int virq)
  2418. {
  2419. return 0;
  2420. }
  2421. int kvm_arch_msi_data_to_gsi(uint32_t data)
  2422. {
  2423. return data & 0xffff;
  2424. }
  2425. #if defined(CONFIG_PSERIES)
  2426. int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
  2427. {
  2428. uint16_t flags = run->flags & KVM_RUN_PPC_NMI_DISP_MASK;
  2429. cpu_synchronize_state(CPU(cpu));
  2430. spapr_mce_req_event(cpu, flags == KVM_RUN_PPC_NMI_DISP_FULLY_RECOV);
  2431. return 0;
  2432. }
  2433. #endif
  2434. int kvmppc_enable_hwrng(void)
  2435. {
  2436. if (!kvm_enabled() || !kvm_check_extension(kvm_state, KVM_CAP_PPC_HWRNG)) {
  2437. return -1;
  2438. }
  2439. return kvmppc_enable_hcall(kvm_state, H_RANDOM);
  2440. }
  2441. void kvmppc_check_papr_resize_hpt(Error **errp)
  2442. {
  2443. if (!kvm_enabled()) {
  2444. return; /* No KVM, we're good */
  2445. }
  2446. if (cap_resize_hpt) {
  2447. return; /* Kernel has explicit support, we're good */
  2448. }
  2449. /* Otherwise fallback on looking for PR KVM */
  2450. if (kvmppc_is_pr(kvm_state)) {
  2451. return;
  2452. }
  2453. error_setg(errp,
  2454. "Hash page table resizing not available with this KVM version");
  2455. }
  2456. int kvmppc_resize_hpt_prepare(PowerPCCPU *cpu, target_ulong flags, int shift)
  2457. {
  2458. CPUState *cs = CPU(cpu);
  2459. struct kvm_ppc_resize_hpt rhpt = {
  2460. .flags = flags,
  2461. .shift = shift,
  2462. };
  2463. if (!cap_resize_hpt) {
  2464. return -ENOSYS;
  2465. }
  2466. return kvm_vm_ioctl(cs->kvm_state, KVM_PPC_RESIZE_HPT_PREPARE, &rhpt);
  2467. }
  2468. int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift)
  2469. {
  2470. CPUState *cs = CPU(cpu);
  2471. struct kvm_ppc_resize_hpt rhpt = {
  2472. .flags = flags,
  2473. .shift = shift,
  2474. };
  2475. if (!cap_resize_hpt) {
  2476. return -ENOSYS;
  2477. }
  2478. return kvm_vm_ioctl(cs->kvm_state, KVM_PPC_RESIZE_HPT_COMMIT, &rhpt);
  2479. }
  2480. /*
  2481. * This is a helper function to detect a post migration scenario
  2482. * in which a guest, running as KVM-HV, freezes in cpu_post_load because
  2483. * the guest kernel can't handle a PVR value other than the actual host
  2484. * PVR in KVM_SET_SREGS, even if pvr_match() returns true.
  2485. *
  2486. * If we don't have cap_ppc_pvr_compat and we're not running in PR
  2487. * (so, we're HV), return true. The workaround itself is done in
  2488. * cpu_post_load.
  2489. *
  2490. * The order here is important: we'll only check for KVM PR as a
  2491. * fallback if the guest kernel can't handle the situation itself.
  2492. * We need to avoid as much as possible querying the running KVM type
  2493. * in QEMU level.
  2494. */
  2495. bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu)
  2496. {
  2497. CPUState *cs = CPU(cpu);
  2498. if (!kvm_enabled()) {
  2499. return false;
  2500. }
  2501. if (cap_ppc_pvr_compat) {
  2502. return false;
  2503. }
  2504. return !kvmppc_is_pr(cs->kvm_state);
  2505. }
  2506. void kvmppc_set_reg_ppc_online(PowerPCCPU *cpu, unsigned int online)
  2507. {
  2508. CPUState *cs = CPU(cpu);
  2509. if (kvm_enabled()) {
  2510. kvm_set_one_reg(cs, KVM_REG_PPC_ONLINE, &online);
  2511. }
  2512. }
  2513. void kvmppc_set_reg_tb_offset(PowerPCCPU *cpu, int64_t tb_offset)
  2514. {
  2515. CPUState *cs = CPU(cpu);
  2516. if (kvm_enabled()) {
  2517. kvm_set_one_reg(cs, KVM_REG_PPC_TB_OFFSET, &tb_offset);
  2518. }
  2519. }
  2520. void kvm_arch_accel_class_init(ObjectClass *oc)
  2521. {
  2522. }
  2523. static void kvm_cpu_accel_class_init(ObjectClass *oc, void *data)
  2524. {
  2525. AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
  2526. acc->cpu_target_realize = kvmppc_cpu_realize;
  2527. }
  2528. static const TypeInfo kvm_cpu_accel_type_info = {
  2529. .name = ACCEL_CPU_NAME("kvm"),
  2530. .parent = TYPE_ACCEL_CPU,
  2531. .class_init = kvm_cpu_accel_class_init,
  2532. .abstract = true,
  2533. };
  2534. static void kvm_cpu_accel_register_types(void)
  2535. {
  2536. type_register_static(&kvm_cpu_accel_type_info);
  2537. }
  2538. type_init(kvm_cpu_accel_register_types);