kvm-all.c 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396
  1. /*
  2. * QEMU KVM support
  3. *
  4. * Copyright IBM, Corp. 2008
  5. * Red Hat, Inc. 2008
  6. *
  7. * Authors:
  8. * Anthony Liguori <aliguori@us.ibm.com>
  9. * Glauber Costa <gcosta@redhat.com>
  10. *
  11. * This work is licensed under the terms of the GNU GPL, version 2 or later.
  12. * See the COPYING file in the top-level directory.
  13. *
  14. */
  15. #include <sys/types.h>
  16. #include <sys/ioctl.h>
  17. #include <sys/mman.h>
  18. #include <stdarg.h>
  19. #include <linux/kvm.h>
  20. #include "qemu-common.h"
  21. #include "qemu-barrier.h"
  22. #include "sysemu.h"
  23. #include "hw/hw.h"
  24. #include "gdbstub.h"
  25. #include "kvm.h"
  26. #include "bswap.h"
  27. /* This check must be after config-host.h is included */
  28. #ifdef CONFIG_EVENTFD
  29. #include <sys/eventfd.h>
  30. #endif
  31. /* KVM uses PAGE_SIZE in it's definition of COALESCED_MMIO_MAX */
  32. #define PAGE_SIZE TARGET_PAGE_SIZE
  33. //#define DEBUG_KVM
  34. #ifdef DEBUG_KVM
  35. #define DPRINTF(fmt, ...) \
  36. do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
  37. #else
  38. #define DPRINTF(fmt, ...) \
  39. do { } while (0)
  40. #endif
  41. typedef struct KVMSlot
  42. {
  43. target_phys_addr_t start_addr;
  44. ram_addr_t memory_size;
  45. ram_addr_t phys_offset;
  46. int slot;
  47. int flags;
  48. } KVMSlot;
  49. typedef struct kvm_dirty_log KVMDirtyLog;
  50. struct KVMState
  51. {
  52. KVMSlot slots[32];
  53. int fd;
  54. int vmfd;
  55. int coalesced_mmio;
  56. struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
  57. int broken_set_mem_region;
  58. int migration_log;
  59. int vcpu_events;
  60. int robust_singlestep;
  61. int debugregs;
  62. #ifdef KVM_CAP_SET_GUEST_DEBUG
  63. struct kvm_sw_breakpoint_head kvm_sw_breakpoints;
  64. #endif
  65. int irqchip_in_kernel;
  66. int pit_in_kernel;
  67. int xsave, xcrs;
  68. int many_ioeventfds;
  69. };
  70. KVMState *kvm_state;
  71. static const KVMCapabilityInfo kvm_required_capabilites[] = {
  72. KVM_CAP_INFO(USER_MEMORY),
  73. KVM_CAP_INFO(DESTROY_MEMORY_REGION_WORKS),
  74. KVM_CAP_LAST_INFO
  75. };
  76. static KVMSlot *kvm_alloc_slot(KVMState *s)
  77. {
  78. int i;
  79. for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
  80. if (s->slots[i].memory_size == 0) {
  81. return &s->slots[i];
  82. }
  83. }
  84. fprintf(stderr, "%s: no free slot available\n", __func__);
  85. abort();
  86. }
  87. static KVMSlot *kvm_lookup_matching_slot(KVMState *s,
  88. target_phys_addr_t start_addr,
  89. target_phys_addr_t end_addr)
  90. {
  91. int i;
  92. for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
  93. KVMSlot *mem = &s->slots[i];
  94. if (start_addr == mem->start_addr &&
  95. end_addr == mem->start_addr + mem->memory_size) {
  96. return mem;
  97. }
  98. }
  99. return NULL;
  100. }
  101. /*
  102. * Find overlapping slot with lowest start address
  103. */
  104. static KVMSlot *kvm_lookup_overlapping_slot(KVMState *s,
  105. target_phys_addr_t start_addr,
  106. target_phys_addr_t end_addr)
  107. {
  108. KVMSlot *found = NULL;
  109. int i;
  110. for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
  111. KVMSlot *mem = &s->slots[i];
  112. if (mem->memory_size == 0 ||
  113. (found && found->start_addr < mem->start_addr)) {
  114. continue;
  115. }
  116. if (end_addr > mem->start_addr &&
  117. start_addr < mem->start_addr + mem->memory_size) {
  118. found = mem;
  119. }
  120. }
  121. return found;
  122. }
  123. int kvm_physical_memory_addr_from_ram(KVMState *s, ram_addr_t ram_addr,
  124. target_phys_addr_t *phys_addr)
  125. {
  126. int i;
  127. for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
  128. KVMSlot *mem = &s->slots[i];
  129. if (ram_addr >= mem->phys_offset &&
  130. ram_addr < mem->phys_offset + mem->memory_size) {
  131. *phys_addr = mem->start_addr + (ram_addr - mem->phys_offset);
  132. return 1;
  133. }
  134. }
  135. return 0;
  136. }
  137. static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot)
  138. {
  139. struct kvm_userspace_memory_region mem;
  140. mem.slot = slot->slot;
  141. mem.guest_phys_addr = slot->start_addr;
  142. mem.memory_size = slot->memory_size;
  143. mem.userspace_addr = (unsigned long)qemu_safe_ram_ptr(slot->phys_offset);
  144. mem.flags = slot->flags;
  145. if (s->migration_log) {
  146. mem.flags |= KVM_MEM_LOG_DIRTY_PAGES;
  147. }
  148. return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem);
  149. }
  150. static void kvm_reset_vcpu(void *opaque)
  151. {
  152. CPUState *env = opaque;
  153. kvm_arch_reset_vcpu(env);
  154. }
  155. int kvm_irqchip_in_kernel(void)
  156. {
  157. return kvm_state->irqchip_in_kernel;
  158. }
  159. int kvm_pit_in_kernel(void)
  160. {
  161. return kvm_state->pit_in_kernel;
  162. }
  163. int kvm_init_vcpu(CPUState *env)
  164. {
  165. KVMState *s = kvm_state;
  166. long mmap_size;
  167. int ret;
  168. DPRINTF("kvm_init_vcpu\n");
  169. ret = kvm_vm_ioctl(s, KVM_CREATE_VCPU, env->cpu_index);
  170. if (ret < 0) {
  171. DPRINTF("kvm_create_vcpu failed\n");
  172. goto err;
  173. }
  174. env->kvm_fd = ret;
  175. env->kvm_state = s;
  176. env->kvm_vcpu_dirty = 1;
  177. mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0);
  178. if (mmap_size < 0) {
  179. ret = mmap_size;
  180. DPRINTF("KVM_GET_VCPU_MMAP_SIZE failed\n");
  181. goto err;
  182. }
  183. env->kvm_run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED,
  184. env->kvm_fd, 0);
  185. if (env->kvm_run == MAP_FAILED) {
  186. ret = -errno;
  187. DPRINTF("mmap'ing vcpu state failed\n");
  188. goto err;
  189. }
  190. if (s->coalesced_mmio && !s->coalesced_mmio_ring) {
  191. s->coalesced_mmio_ring =
  192. (void *)env->kvm_run + s->coalesced_mmio * PAGE_SIZE;
  193. }
  194. ret = kvm_arch_init_vcpu(env);
  195. if (ret == 0) {
  196. qemu_register_reset(kvm_reset_vcpu, env);
  197. kvm_arch_reset_vcpu(env);
  198. }
  199. err:
  200. return ret;
  201. }
  202. /*
  203. * dirty pages logging control
  204. */
  205. static int kvm_mem_flags(KVMState *s, bool log_dirty)
  206. {
  207. return log_dirty ? KVM_MEM_LOG_DIRTY_PAGES : 0;
  208. }
  209. static int kvm_slot_dirty_pages_log_change(KVMSlot *mem, bool log_dirty)
  210. {
  211. KVMState *s = kvm_state;
  212. int flags, mask = KVM_MEM_LOG_DIRTY_PAGES;
  213. int old_flags;
  214. old_flags = mem->flags;
  215. flags = (mem->flags & ~mask) | kvm_mem_flags(s, log_dirty);
  216. mem->flags = flags;
  217. /* If nothing changed effectively, no need to issue ioctl */
  218. if (s->migration_log) {
  219. flags |= KVM_MEM_LOG_DIRTY_PAGES;
  220. }
  221. if (flags == old_flags) {
  222. return 0;
  223. }
  224. return kvm_set_user_memory_region(s, mem);
  225. }
  226. static int kvm_dirty_pages_log_change(target_phys_addr_t phys_addr,
  227. ram_addr_t size, bool log_dirty)
  228. {
  229. KVMState *s = kvm_state;
  230. KVMSlot *mem = kvm_lookup_matching_slot(s, phys_addr, phys_addr + size);
  231. if (mem == NULL) {
  232. fprintf(stderr, "BUG: %s: invalid parameters " TARGET_FMT_plx "-"
  233. TARGET_FMT_plx "\n", __func__, phys_addr,
  234. (target_phys_addr_t)(phys_addr + size - 1));
  235. return -EINVAL;
  236. }
  237. return kvm_slot_dirty_pages_log_change(mem, log_dirty);
  238. }
  239. static int kvm_log_start(CPUPhysMemoryClient *client,
  240. target_phys_addr_t phys_addr, ram_addr_t size)
  241. {
  242. return kvm_dirty_pages_log_change(phys_addr, size, true);
  243. }
  244. static int kvm_log_stop(CPUPhysMemoryClient *client,
  245. target_phys_addr_t phys_addr, ram_addr_t size)
  246. {
  247. return kvm_dirty_pages_log_change(phys_addr, size, false);
  248. }
  249. static int kvm_set_migration_log(int enable)
  250. {
  251. KVMState *s = kvm_state;
  252. KVMSlot *mem;
  253. int i, err;
  254. s->migration_log = enable;
  255. for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
  256. mem = &s->slots[i];
  257. if (!mem->memory_size) {
  258. continue;
  259. }
  260. if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) {
  261. continue;
  262. }
  263. err = kvm_set_user_memory_region(s, mem);
  264. if (err) {
  265. return err;
  266. }
  267. }
  268. return 0;
  269. }
  270. /* get kvm's dirty pages bitmap and update qemu's */
  271. static int kvm_get_dirty_pages_log_range(unsigned long start_addr,
  272. unsigned long *bitmap,
  273. unsigned long offset,
  274. unsigned long mem_size)
  275. {
  276. unsigned int i, j;
  277. unsigned long page_number, addr, addr1, c;
  278. ram_addr_t ram_addr;
  279. unsigned int len = ((mem_size / TARGET_PAGE_SIZE) + HOST_LONG_BITS - 1) /
  280. HOST_LONG_BITS;
  281. /*
  282. * bitmap-traveling is faster than memory-traveling (for addr...)
  283. * especially when most of the memory is not dirty.
  284. */
  285. for (i = 0; i < len; i++) {
  286. if (bitmap[i] != 0) {
  287. c = leul_to_cpu(bitmap[i]);
  288. do {
  289. j = ffsl(c) - 1;
  290. c &= ~(1ul << j);
  291. page_number = i * HOST_LONG_BITS + j;
  292. addr1 = page_number * TARGET_PAGE_SIZE;
  293. addr = offset + addr1;
  294. ram_addr = cpu_get_physical_page_desc(addr);
  295. cpu_physical_memory_set_dirty(ram_addr);
  296. } while (c != 0);
  297. }
  298. }
  299. return 0;
  300. }
  301. #define ALIGN(x, y) (((x)+(y)-1) & ~((y)-1))
  302. /**
  303. * kvm_physical_sync_dirty_bitmap - Grab dirty bitmap from kernel space
  304. * This function updates qemu's dirty bitmap using cpu_physical_memory_set_dirty().
  305. * This means all bits are set to dirty.
  306. *
  307. * @start_add: start of logged region.
  308. * @end_addr: end of logged region.
  309. */
  310. static int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
  311. target_phys_addr_t end_addr)
  312. {
  313. KVMState *s = kvm_state;
  314. unsigned long size, allocated_size = 0;
  315. KVMDirtyLog d;
  316. KVMSlot *mem;
  317. int ret = 0;
  318. d.dirty_bitmap = NULL;
  319. while (start_addr < end_addr) {
  320. mem = kvm_lookup_overlapping_slot(s, start_addr, end_addr);
  321. if (mem == NULL) {
  322. break;
  323. }
  324. /* XXX bad kernel interface alert
  325. * For dirty bitmap, kernel allocates array of size aligned to
  326. * bits-per-long. But for case when the kernel is 64bits and
  327. * the userspace is 32bits, userspace can't align to the same
  328. * bits-per-long, since sizeof(long) is different between kernel
  329. * and user space. This way, userspace will provide buffer which
  330. * may be 4 bytes less than the kernel will use, resulting in
  331. * userspace memory corruption (which is not detectable by valgrind
  332. * too, in most cases).
  333. * So for now, let's align to 64 instead of HOST_LONG_BITS here, in
  334. * a hope that sizeof(long) wont become >8 any time soon.
  335. */
  336. size = ALIGN(((mem->memory_size) >> TARGET_PAGE_BITS),
  337. /*HOST_LONG_BITS*/ 64) / 8;
  338. if (!d.dirty_bitmap) {
  339. d.dirty_bitmap = qemu_malloc(size);
  340. } else if (size > allocated_size) {
  341. d.dirty_bitmap = qemu_realloc(d.dirty_bitmap, size);
  342. }
  343. allocated_size = size;
  344. memset(d.dirty_bitmap, 0, allocated_size);
  345. d.slot = mem->slot;
  346. if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
  347. DPRINTF("ioctl failed %d\n", errno);
  348. ret = -1;
  349. break;
  350. }
  351. kvm_get_dirty_pages_log_range(mem->start_addr, d.dirty_bitmap,
  352. mem->start_addr, mem->memory_size);
  353. start_addr = mem->start_addr + mem->memory_size;
  354. }
  355. qemu_free(d.dirty_bitmap);
  356. return ret;
  357. }
  358. int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
  359. {
  360. int ret = -ENOSYS;
  361. KVMState *s = kvm_state;
  362. if (s->coalesced_mmio) {
  363. struct kvm_coalesced_mmio_zone zone;
  364. zone.addr = start;
  365. zone.size = size;
  366. ret = kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
  367. }
  368. return ret;
  369. }
  370. int kvm_uncoalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
  371. {
  372. int ret = -ENOSYS;
  373. KVMState *s = kvm_state;
  374. if (s->coalesced_mmio) {
  375. struct kvm_coalesced_mmio_zone zone;
  376. zone.addr = start;
  377. zone.size = size;
  378. ret = kvm_vm_ioctl(s, KVM_UNREGISTER_COALESCED_MMIO, &zone);
  379. }
  380. return ret;
  381. }
  382. int kvm_check_extension(KVMState *s, unsigned int extension)
  383. {
  384. int ret;
  385. ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, extension);
  386. if (ret < 0) {
  387. ret = 0;
  388. }
  389. return ret;
  390. }
  391. static int kvm_check_many_ioeventfds(void)
  392. {
  393. /* Userspace can use ioeventfd for io notification. This requires a host
  394. * that supports eventfd(2) and an I/O thread; since eventfd does not
  395. * support SIGIO it cannot interrupt the vcpu.
  396. *
  397. * Older kernels have a 6 device limit on the KVM io bus. Find out so we
  398. * can avoid creating too many ioeventfds.
  399. */
  400. #if defined(CONFIG_EVENTFD) && defined(CONFIG_IOTHREAD)
  401. int ioeventfds[7];
  402. int i, ret = 0;
  403. for (i = 0; i < ARRAY_SIZE(ioeventfds); i++) {
  404. ioeventfds[i] = eventfd(0, EFD_CLOEXEC);
  405. if (ioeventfds[i] < 0) {
  406. break;
  407. }
  408. ret = kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, true);
  409. if (ret < 0) {
  410. close(ioeventfds[i]);
  411. break;
  412. }
  413. }
  414. /* Decide whether many devices are supported or not */
  415. ret = i == ARRAY_SIZE(ioeventfds);
  416. while (i-- > 0) {
  417. kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, false);
  418. close(ioeventfds[i]);
  419. }
  420. return ret;
  421. #else
  422. return 0;
  423. #endif
  424. }
  425. static const KVMCapabilityInfo *
  426. kvm_check_extension_list(KVMState *s, const KVMCapabilityInfo *list)
  427. {
  428. while (list->name) {
  429. if (!kvm_check_extension(s, list->value)) {
  430. return list;
  431. }
  432. list++;
  433. }
  434. return NULL;
  435. }
  436. static void kvm_set_phys_mem(target_phys_addr_t start_addr, ram_addr_t size,
  437. ram_addr_t phys_offset, bool log_dirty)
  438. {
  439. KVMState *s = kvm_state;
  440. ram_addr_t flags = phys_offset & ~TARGET_PAGE_MASK;
  441. KVMSlot *mem, old;
  442. int err;
  443. /* kvm works in page size chunks, but the function may be called
  444. with sub-page size and unaligned start address. */
  445. size = TARGET_PAGE_ALIGN(size);
  446. start_addr = TARGET_PAGE_ALIGN(start_addr);
  447. /* KVM does not support read-only slots */
  448. phys_offset &= ~IO_MEM_ROM;
  449. while (1) {
  450. mem = kvm_lookup_overlapping_slot(s, start_addr, start_addr + size);
  451. if (!mem) {
  452. break;
  453. }
  454. if (flags < IO_MEM_UNASSIGNED && start_addr >= mem->start_addr &&
  455. (start_addr + size <= mem->start_addr + mem->memory_size) &&
  456. (phys_offset - start_addr == mem->phys_offset - mem->start_addr)) {
  457. /* The new slot fits into the existing one and comes with
  458. * identical parameters - update flags and done. */
  459. kvm_slot_dirty_pages_log_change(mem, log_dirty);
  460. return;
  461. }
  462. old = *mem;
  463. /* unregister the overlapping slot */
  464. mem->memory_size = 0;
  465. err = kvm_set_user_memory_region(s, mem);
  466. if (err) {
  467. fprintf(stderr, "%s: error unregistering overlapping slot: %s\n",
  468. __func__, strerror(-err));
  469. abort();
  470. }
  471. /* Workaround for older KVM versions: we can't join slots, even not by
  472. * unregistering the previous ones and then registering the larger
  473. * slot. We have to maintain the existing fragmentation. Sigh.
  474. *
  475. * This workaround assumes that the new slot starts at the same
  476. * address as the first existing one. If not or if some overlapping
  477. * slot comes around later, we will fail (not seen in practice so far)
  478. * - and actually require a recent KVM version. */
  479. if (s->broken_set_mem_region &&
  480. old.start_addr == start_addr && old.memory_size < size &&
  481. flags < IO_MEM_UNASSIGNED) {
  482. mem = kvm_alloc_slot(s);
  483. mem->memory_size = old.memory_size;
  484. mem->start_addr = old.start_addr;
  485. mem->phys_offset = old.phys_offset;
  486. mem->flags = kvm_mem_flags(s, log_dirty);
  487. err = kvm_set_user_memory_region(s, mem);
  488. if (err) {
  489. fprintf(stderr, "%s: error updating slot: %s\n", __func__,
  490. strerror(-err));
  491. abort();
  492. }
  493. start_addr += old.memory_size;
  494. phys_offset += old.memory_size;
  495. size -= old.memory_size;
  496. continue;
  497. }
  498. /* register prefix slot */
  499. if (old.start_addr < start_addr) {
  500. mem = kvm_alloc_slot(s);
  501. mem->memory_size = start_addr - old.start_addr;
  502. mem->start_addr = old.start_addr;
  503. mem->phys_offset = old.phys_offset;
  504. mem->flags = kvm_mem_flags(s, log_dirty);
  505. err = kvm_set_user_memory_region(s, mem);
  506. if (err) {
  507. fprintf(stderr, "%s: error registering prefix slot: %s\n",
  508. __func__, strerror(-err));
  509. #ifdef TARGET_PPC
  510. fprintf(stderr, "%s: This is probably because your kernel's " \
  511. "PAGE_SIZE is too big. Please try to use 4k " \
  512. "PAGE_SIZE!\n", __func__);
  513. #endif
  514. abort();
  515. }
  516. }
  517. /* register suffix slot */
  518. if (old.start_addr + old.memory_size > start_addr + size) {
  519. ram_addr_t size_delta;
  520. mem = kvm_alloc_slot(s);
  521. mem->start_addr = start_addr + size;
  522. size_delta = mem->start_addr - old.start_addr;
  523. mem->memory_size = old.memory_size - size_delta;
  524. mem->phys_offset = old.phys_offset + size_delta;
  525. mem->flags = kvm_mem_flags(s, log_dirty);
  526. err = kvm_set_user_memory_region(s, mem);
  527. if (err) {
  528. fprintf(stderr, "%s: error registering suffix slot: %s\n",
  529. __func__, strerror(-err));
  530. abort();
  531. }
  532. }
  533. }
  534. /* in case the KVM bug workaround already "consumed" the new slot */
  535. if (!size) {
  536. return;
  537. }
  538. /* KVM does not need to know about this memory */
  539. if (flags >= IO_MEM_UNASSIGNED) {
  540. return;
  541. }
  542. mem = kvm_alloc_slot(s);
  543. mem->memory_size = size;
  544. mem->start_addr = start_addr;
  545. mem->phys_offset = phys_offset;
  546. mem->flags = kvm_mem_flags(s, log_dirty);
  547. err = kvm_set_user_memory_region(s, mem);
  548. if (err) {
  549. fprintf(stderr, "%s: error registering slot: %s\n", __func__,
  550. strerror(-err));
  551. abort();
  552. }
  553. }
  554. static void kvm_client_set_memory(struct CPUPhysMemoryClient *client,
  555. target_phys_addr_t start_addr,
  556. ram_addr_t size, ram_addr_t phys_offset,
  557. bool log_dirty)
  558. {
  559. kvm_set_phys_mem(start_addr, size, phys_offset, log_dirty);
  560. }
  561. static int kvm_client_sync_dirty_bitmap(struct CPUPhysMemoryClient *client,
  562. target_phys_addr_t start_addr,
  563. target_phys_addr_t end_addr)
  564. {
  565. return kvm_physical_sync_dirty_bitmap(start_addr, end_addr);
  566. }
  567. static int kvm_client_migration_log(struct CPUPhysMemoryClient *client,
  568. int enable)
  569. {
  570. return kvm_set_migration_log(enable);
  571. }
  572. static CPUPhysMemoryClient kvm_cpu_phys_memory_client = {
  573. .set_memory = kvm_client_set_memory,
  574. .sync_dirty_bitmap = kvm_client_sync_dirty_bitmap,
  575. .migration_log = kvm_client_migration_log,
  576. .log_start = kvm_log_start,
  577. .log_stop = kvm_log_stop,
  578. };
  579. static void kvm_handle_interrupt(CPUState *env, int mask)
  580. {
  581. env->interrupt_request |= mask;
  582. if (!qemu_cpu_is_self(env)) {
  583. qemu_cpu_kick(env);
  584. }
  585. }
  586. int kvm_init(void)
  587. {
  588. static const char upgrade_note[] =
  589. "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n"
  590. "(see http://sourceforge.net/projects/kvm).\n";
  591. KVMState *s;
  592. const KVMCapabilityInfo *missing_cap;
  593. int ret;
  594. int i;
  595. s = qemu_mallocz(sizeof(KVMState));
  596. #ifdef KVM_CAP_SET_GUEST_DEBUG
  597. QTAILQ_INIT(&s->kvm_sw_breakpoints);
  598. #endif
  599. for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
  600. s->slots[i].slot = i;
  601. }
  602. s->vmfd = -1;
  603. s->fd = qemu_open("/dev/kvm", O_RDWR);
  604. if (s->fd == -1) {
  605. fprintf(stderr, "Could not access KVM kernel module: %m\n");
  606. ret = -errno;
  607. goto err;
  608. }
  609. ret = kvm_ioctl(s, KVM_GET_API_VERSION, 0);
  610. if (ret < KVM_API_VERSION) {
  611. if (ret > 0) {
  612. ret = -EINVAL;
  613. }
  614. fprintf(stderr, "kvm version too old\n");
  615. goto err;
  616. }
  617. if (ret > KVM_API_VERSION) {
  618. ret = -EINVAL;
  619. fprintf(stderr, "kvm version not supported\n");
  620. goto err;
  621. }
  622. s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
  623. if (s->vmfd < 0) {
  624. #ifdef TARGET_S390X
  625. fprintf(stderr, "Please add the 'switch_amode' kernel parameter to "
  626. "your host kernel command line\n");
  627. #endif
  628. goto err;
  629. }
  630. missing_cap = kvm_check_extension_list(s, kvm_required_capabilites);
  631. if (!missing_cap) {
  632. missing_cap =
  633. kvm_check_extension_list(s, kvm_arch_required_capabilities);
  634. }
  635. if (missing_cap) {
  636. ret = -EINVAL;
  637. fprintf(stderr, "kvm does not support %s\n%s",
  638. missing_cap->name, upgrade_note);
  639. goto err;
  640. }
  641. s->coalesced_mmio = kvm_check_extension(s, KVM_CAP_COALESCED_MMIO);
  642. s->broken_set_mem_region = 1;
  643. ret = kvm_check_extension(s, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS);
  644. if (ret > 0) {
  645. s->broken_set_mem_region = 0;
  646. }
  647. #ifdef KVM_CAP_VCPU_EVENTS
  648. s->vcpu_events = kvm_check_extension(s, KVM_CAP_VCPU_EVENTS);
  649. #endif
  650. s->robust_singlestep =
  651. kvm_check_extension(s, KVM_CAP_X86_ROBUST_SINGLESTEP);
  652. #ifdef KVM_CAP_DEBUGREGS
  653. s->debugregs = kvm_check_extension(s, KVM_CAP_DEBUGREGS);
  654. #endif
  655. #ifdef KVM_CAP_XSAVE
  656. s->xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
  657. #endif
  658. #ifdef KVM_CAP_XCRS
  659. s->xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
  660. #endif
  661. ret = kvm_arch_init(s);
  662. if (ret < 0) {
  663. goto err;
  664. }
  665. kvm_state = s;
  666. cpu_register_phys_memory_client(&kvm_cpu_phys_memory_client);
  667. s->many_ioeventfds = kvm_check_many_ioeventfds();
  668. cpu_interrupt_handler = kvm_handle_interrupt;
  669. return 0;
  670. err:
  671. if (s) {
  672. if (s->vmfd != -1) {
  673. close(s->vmfd);
  674. }
  675. if (s->fd != -1) {
  676. close(s->fd);
  677. }
  678. }
  679. qemu_free(s);
  680. return ret;
  681. }
  682. static void kvm_handle_io(uint16_t port, void *data, int direction, int size,
  683. uint32_t count)
  684. {
  685. int i;
  686. uint8_t *ptr = data;
  687. for (i = 0; i < count; i++) {
  688. if (direction == KVM_EXIT_IO_IN) {
  689. switch (size) {
  690. case 1:
  691. stb_p(ptr, cpu_inb(port));
  692. break;
  693. case 2:
  694. stw_p(ptr, cpu_inw(port));
  695. break;
  696. case 4:
  697. stl_p(ptr, cpu_inl(port));
  698. break;
  699. }
  700. } else {
  701. switch (size) {
  702. case 1:
  703. cpu_outb(port, ldub_p(ptr));
  704. break;
  705. case 2:
  706. cpu_outw(port, lduw_p(ptr));
  707. break;
  708. case 4:
  709. cpu_outl(port, ldl_p(ptr));
  710. break;
  711. }
  712. }
  713. ptr += size;
  714. }
  715. }
  716. static int kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
  717. {
  718. fprintf(stderr, "KVM internal error.");
  719. if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
  720. int i;
  721. fprintf(stderr, " Suberror: %d\n", run->internal.suberror);
  722. for (i = 0; i < run->internal.ndata; ++i) {
  723. fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
  724. i, (uint64_t)run->internal.data[i]);
  725. }
  726. } else {
  727. fprintf(stderr, "\n");
  728. }
  729. if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
  730. fprintf(stderr, "emulation failure\n");
  731. if (!kvm_arch_stop_on_emulation_error(env)) {
  732. cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
  733. return EXCP_INTERRUPT;
  734. }
  735. }
  736. /* FIXME: Should trigger a qmp message to let management know
  737. * something went wrong.
  738. */
  739. return -1;
  740. }
  741. void kvm_flush_coalesced_mmio_buffer(void)
  742. {
  743. KVMState *s = kvm_state;
  744. if (s->coalesced_mmio_ring) {
  745. struct kvm_coalesced_mmio_ring *ring = s->coalesced_mmio_ring;
  746. while (ring->first != ring->last) {
  747. struct kvm_coalesced_mmio *ent;
  748. ent = &ring->coalesced_mmio[ring->first];
  749. cpu_physical_memory_write(ent->phys_addr, ent->data, ent->len);
  750. smp_wmb();
  751. ring->first = (ring->first + 1) % KVM_COALESCED_MMIO_MAX;
  752. }
  753. }
  754. }
  755. static void do_kvm_cpu_synchronize_state(void *_env)
  756. {
  757. CPUState *env = _env;
  758. if (!env->kvm_vcpu_dirty) {
  759. kvm_arch_get_registers(env);
  760. env->kvm_vcpu_dirty = 1;
  761. }
  762. }
  763. void kvm_cpu_synchronize_state(CPUState *env)
  764. {
  765. if (!env->kvm_vcpu_dirty) {
  766. run_on_cpu(env, do_kvm_cpu_synchronize_state, env);
  767. }
  768. }
  769. void kvm_cpu_synchronize_post_reset(CPUState *env)
  770. {
  771. kvm_arch_put_registers(env, KVM_PUT_RESET_STATE);
  772. env->kvm_vcpu_dirty = 0;
  773. }
  774. void kvm_cpu_synchronize_post_init(CPUState *env)
  775. {
  776. kvm_arch_put_registers(env, KVM_PUT_FULL_STATE);
  777. env->kvm_vcpu_dirty = 0;
  778. }
  779. int kvm_cpu_exec(CPUState *env)
  780. {
  781. struct kvm_run *run = env->kvm_run;
  782. int ret, run_ret;
  783. DPRINTF("kvm_cpu_exec()\n");
  784. if (kvm_arch_process_async_events(env)) {
  785. env->exit_request = 0;
  786. return EXCP_HLT;
  787. }
  788. cpu_single_env = env;
  789. do {
  790. if (env->kvm_vcpu_dirty) {
  791. kvm_arch_put_registers(env, KVM_PUT_RUNTIME_STATE);
  792. env->kvm_vcpu_dirty = 0;
  793. }
  794. kvm_arch_pre_run(env, run);
  795. if (env->exit_request) {
  796. DPRINTF("interrupt exit requested\n");
  797. /*
  798. * KVM requires us to reenter the kernel after IO exits to complete
  799. * instruction emulation. This self-signal will ensure that we
  800. * leave ASAP again.
  801. */
  802. qemu_cpu_kick_self();
  803. }
  804. cpu_single_env = NULL;
  805. qemu_mutex_unlock_iothread();
  806. run_ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
  807. qemu_mutex_lock_iothread();
  808. cpu_single_env = env;
  809. kvm_arch_post_run(env, run);
  810. kvm_flush_coalesced_mmio_buffer();
  811. if (run_ret < 0) {
  812. if (run_ret == -EINTR || run_ret == -EAGAIN) {
  813. DPRINTF("io window exit\n");
  814. ret = EXCP_INTERRUPT;
  815. break;
  816. }
  817. DPRINTF("kvm run failed %s\n", strerror(-run_ret));
  818. abort();
  819. }
  820. switch (run->exit_reason) {
  821. case KVM_EXIT_IO:
  822. DPRINTF("handle_io\n");
  823. kvm_handle_io(run->io.port,
  824. (uint8_t *)run + run->io.data_offset,
  825. run->io.direction,
  826. run->io.size,
  827. run->io.count);
  828. ret = 0;
  829. break;
  830. case KVM_EXIT_MMIO:
  831. DPRINTF("handle_mmio\n");
  832. cpu_physical_memory_rw(run->mmio.phys_addr,
  833. run->mmio.data,
  834. run->mmio.len,
  835. run->mmio.is_write);
  836. ret = 0;
  837. break;
  838. case KVM_EXIT_IRQ_WINDOW_OPEN:
  839. DPRINTF("irq_window_open\n");
  840. ret = EXCP_INTERRUPT;
  841. break;
  842. case KVM_EXIT_SHUTDOWN:
  843. DPRINTF("shutdown\n");
  844. qemu_system_reset_request();
  845. ret = EXCP_INTERRUPT;
  846. break;
  847. case KVM_EXIT_UNKNOWN:
  848. fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
  849. (uint64_t)run->hw.hardware_exit_reason);
  850. ret = -1;
  851. break;
  852. case KVM_EXIT_INTERNAL_ERROR:
  853. ret = kvm_handle_internal_error(env, run);
  854. break;
  855. default:
  856. DPRINTF("kvm_arch_handle_exit\n");
  857. ret = kvm_arch_handle_exit(env, run);
  858. break;
  859. }
  860. } while (ret == 0);
  861. if (ret < 0) {
  862. cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
  863. vm_stop(VMSTOP_PANIC);
  864. }
  865. env->exit_request = 0;
  866. cpu_single_env = NULL;
  867. return ret;
  868. }
  869. int kvm_ioctl(KVMState *s, int type, ...)
  870. {
  871. int ret;
  872. void *arg;
  873. va_list ap;
  874. va_start(ap, type);
  875. arg = va_arg(ap, void *);
  876. va_end(ap);
  877. ret = ioctl(s->fd, type, arg);
  878. if (ret == -1) {
  879. ret = -errno;
  880. }
  881. return ret;
  882. }
  883. int kvm_vm_ioctl(KVMState *s, int type, ...)
  884. {
  885. int ret;
  886. void *arg;
  887. va_list ap;
  888. va_start(ap, type);
  889. arg = va_arg(ap, void *);
  890. va_end(ap);
  891. ret = ioctl(s->vmfd, type, arg);
  892. if (ret == -1) {
  893. ret = -errno;
  894. }
  895. return ret;
  896. }
  897. int kvm_vcpu_ioctl(CPUState *env, int type, ...)
  898. {
  899. int ret;
  900. void *arg;
  901. va_list ap;
  902. va_start(ap, type);
  903. arg = va_arg(ap, void *);
  904. va_end(ap);
  905. ret = ioctl(env->kvm_fd, type, arg);
  906. if (ret == -1) {
  907. ret = -errno;
  908. }
  909. return ret;
  910. }
  911. int kvm_has_sync_mmu(void)
  912. {
  913. return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
  914. }
  915. int kvm_has_vcpu_events(void)
  916. {
  917. return kvm_state->vcpu_events;
  918. }
  919. int kvm_has_robust_singlestep(void)
  920. {
  921. return kvm_state->robust_singlestep;
  922. }
  923. int kvm_has_debugregs(void)
  924. {
  925. return kvm_state->debugregs;
  926. }
  927. int kvm_has_xsave(void)
  928. {
  929. return kvm_state->xsave;
  930. }
  931. int kvm_has_xcrs(void)
  932. {
  933. return kvm_state->xcrs;
  934. }
  935. int kvm_has_many_ioeventfds(void)
  936. {
  937. if (!kvm_enabled()) {
  938. return 0;
  939. }
  940. return kvm_state->many_ioeventfds;
  941. }
  942. void kvm_setup_guest_memory(void *start, size_t size)
  943. {
  944. if (!kvm_has_sync_mmu()) {
  945. int ret = qemu_madvise(start, size, QEMU_MADV_DONTFORK);
  946. if (ret) {
  947. perror("qemu_madvise");
  948. fprintf(stderr,
  949. "Need MADV_DONTFORK in absence of synchronous KVM MMU\n");
  950. exit(1);
  951. }
  952. }
  953. }
  954. #ifdef KVM_CAP_SET_GUEST_DEBUG
  955. struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUState *env,
  956. target_ulong pc)
  957. {
  958. struct kvm_sw_breakpoint *bp;
  959. QTAILQ_FOREACH(bp, &env->kvm_state->kvm_sw_breakpoints, entry) {
  960. if (bp->pc == pc) {
  961. return bp;
  962. }
  963. }
  964. return NULL;
  965. }
  966. int kvm_sw_breakpoints_active(CPUState *env)
  967. {
  968. return !QTAILQ_EMPTY(&env->kvm_state->kvm_sw_breakpoints);
  969. }
  970. struct kvm_set_guest_debug_data {
  971. struct kvm_guest_debug dbg;
  972. CPUState *env;
  973. int err;
  974. };
  975. static void kvm_invoke_set_guest_debug(void *data)
  976. {
  977. struct kvm_set_guest_debug_data *dbg_data = data;
  978. CPUState *env = dbg_data->env;
  979. dbg_data->err = kvm_vcpu_ioctl(env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
  980. }
  981. int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
  982. {
  983. struct kvm_set_guest_debug_data data;
  984. data.dbg.control = reinject_trap;
  985. if (env->singlestep_enabled) {
  986. data.dbg.control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
  987. }
  988. kvm_arch_update_guest_debug(env, &data.dbg);
  989. data.env = env;
  990. run_on_cpu(env, kvm_invoke_set_guest_debug, &data);
  991. return data.err;
  992. }
  993. int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
  994. target_ulong len, int type)
  995. {
  996. struct kvm_sw_breakpoint *bp;
  997. CPUState *env;
  998. int err;
  999. if (type == GDB_BREAKPOINT_SW) {
  1000. bp = kvm_find_sw_breakpoint(current_env, addr);
  1001. if (bp) {
  1002. bp->use_count++;
  1003. return 0;
  1004. }
  1005. bp = qemu_malloc(sizeof(struct kvm_sw_breakpoint));
  1006. if (!bp) {
  1007. return -ENOMEM;
  1008. }
  1009. bp->pc = addr;
  1010. bp->use_count = 1;
  1011. err = kvm_arch_insert_sw_breakpoint(current_env, bp);
  1012. if (err) {
  1013. qemu_free(bp);
  1014. return err;
  1015. }
  1016. QTAILQ_INSERT_HEAD(&current_env->kvm_state->kvm_sw_breakpoints,
  1017. bp, entry);
  1018. } else {
  1019. err = kvm_arch_insert_hw_breakpoint(addr, len, type);
  1020. if (err) {
  1021. return err;
  1022. }
  1023. }
  1024. for (env = first_cpu; env != NULL; env = env->next_cpu) {
  1025. err = kvm_update_guest_debug(env, 0);
  1026. if (err) {
  1027. return err;
  1028. }
  1029. }
  1030. return 0;
  1031. }
  1032. int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
  1033. target_ulong len, int type)
  1034. {
  1035. struct kvm_sw_breakpoint *bp;
  1036. CPUState *env;
  1037. int err;
  1038. if (type == GDB_BREAKPOINT_SW) {
  1039. bp = kvm_find_sw_breakpoint(current_env, addr);
  1040. if (!bp) {
  1041. return -ENOENT;
  1042. }
  1043. if (bp->use_count > 1) {
  1044. bp->use_count--;
  1045. return 0;
  1046. }
  1047. err = kvm_arch_remove_sw_breakpoint(current_env, bp);
  1048. if (err) {
  1049. return err;
  1050. }
  1051. QTAILQ_REMOVE(&current_env->kvm_state->kvm_sw_breakpoints, bp, entry);
  1052. qemu_free(bp);
  1053. } else {
  1054. err = kvm_arch_remove_hw_breakpoint(addr, len, type);
  1055. if (err) {
  1056. return err;
  1057. }
  1058. }
  1059. for (env = first_cpu; env != NULL; env = env->next_cpu) {
  1060. err = kvm_update_guest_debug(env, 0);
  1061. if (err) {
  1062. return err;
  1063. }
  1064. }
  1065. return 0;
  1066. }
  1067. void kvm_remove_all_breakpoints(CPUState *current_env)
  1068. {
  1069. struct kvm_sw_breakpoint *bp, *next;
  1070. KVMState *s = current_env->kvm_state;
  1071. CPUState *env;
  1072. QTAILQ_FOREACH_SAFE(bp, &s->kvm_sw_breakpoints, entry, next) {
  1073. if (kvm_arch_remove_sw_breakpoint(current_env, bp) != 0) {
  1074. /* Try harder to find a CPU that currently sees the breakpoint. */
  1075. for (env = first_cpu; env != NULL; env = env->next_cpu) {
  1076. if (kvm_arch_remove_sw_breakpoint(env, bp) == 0) {
  1077. break;
  1078. }
  1079. }
  1080. }
  1081. }
  1082. kvm_arch_remove_all_hw_breakpoints();
  1083. for (env = first_cpu; env != NULL; env = env->next_cpu) {
  1084. kvm_update_guest_debug(env, 0);
  1085. }
  1086. }
  1087. #else /* !KVM_CAP_SET_GUEST_DEBUG */
  1088. int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
  1089. {
  1090. return -EINVAL;
  1091. }
  1092. int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
  1093. target_ulong len, int type)
  1094. {
  1095. return -EINVAL;
  1096. }
  1097. int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
  1098. target_ulong len, int type)
  1099. {
  1100. return -EINVAL;
  1101. }
  1102. void kvm_remove_all_breakpoints(CPUState *current_env)
  1103. {
  1104. }
  1105. #endif /* !KVM_CAP_SET_GUEST_DEBUG */
  1106. int kvm_set_signal_mask(CPUState *env, const sigset_t *sigset)
  1107. {
  1108. struct kvm_signal_mask *sigmask;
  1109. int r;
  1110. if (!sigset) {
  1111. return kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, NULL);
  1112. }
  1113. sigmask = qemu_malloc(sizeof(*sigmask) + sizeof(*sigset));
  1114. sigmask->len = 8;
  1115. memcpy(sigmask->sigset, sigset, sizeof(*sigset));
  1116. r = kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, sigmask);
  1117. qemu_free(sigmask);
  1118. return r;
  1119. }
  1120. int kvm_set_ioeventfd_mmio_long(int fd, uint32_t addr, uint32_t val, bool assign)
  1121. {
  1122. #ifdef KVM_IOEVENTFD
  1123. int ret;
  1124. struct kvm_ioeventfd iofd;
  1125. iofd.datamatch = val;
  1126. iofd.addr = addr;
  1127. iofd.len = 4;
  1128. iofd.flags = KVM_IOEVENTFD_FLAG_DATAMATCH;
  1129. iofd.fd = fd;
  1130. if (!kvm_enabled()) {
  1131. return -ENOSYS;
  1132. }
  1133. if (!assign) {
  1134. iofd.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
  1135. }
  1136. ret = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &iofd);
  1137. if (ret < 0) {
  1138. return -errno;
  1139. }
  1140. return 0;
  1141. #else
  1142. return -ENOSYS;
  1143. #endif
  1144. }
  1145. int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign)
  1146. {
  1147. #ifdef KVM_IOEVENTFD
  1148. struct kvm_ioeventfd kick = {
  1149. .datamatch = val,
  1150. .addr = addr,
  1151. .len = 2,
  1152. .flags = KVM_IOEVENTFD_FLAG_DATAMATCH | KVM_IOEVENTFD_FLAG_PIO,
  1153. .fd = fd,
  1154. };
  1155. int r;
  1156. if (!kvm_enabled()) {
  1157. return -ENOSYS;
  1158. }
  1159. if (!assign) {
  1160. kick.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
  1161. }
  1162. r = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &kick);
  1163. if (r < 0) {
  1164. return r;
  1165. }
  1166. return 0;
  1167. #else
  1168. return -ENOSYS;
  1169. #endif
  1170. }
  1171. int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
  1172. {
  1173. return kvm_arch_on_sigbus_vcpu(env, code, addr);
  1174. }
  1175. int kvm_on_sigbus(int code, void *addr)
  1176. {
  1177. return kvm_arch_on_sigbus(code, addr);
  1178. }