6667 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Kernel-based Virtual Machine (KVM) Hypervisor4 *5 * Copyright (C) 2006 Qumranet, Inc.6 * Copyright 2010 Red Hat, Inc. and/or its affiliates.7 *8 * Authors:9 * Avi Kivity <avi@qumranet.com>10 * Yaniv Kamay <yaniv@qumranet.com>11 */12 13#include <kvm/iodev.h>14 15#include <linux/kvm_host.h>16#include <linux/kvm.h>17#include <linux/module.h>18#include <linux/errno.h>19#include <linux/percpu.h>20#include <linux/mm.h>21#include <linux/miscdevice.h>22#include <linux/vmalloc.h>23#include <linux/reboot.h>24#include <linux/debugfs.h>25#include <linux/highmem.h>26#include <linux/file.h>27#include <linux/syscore_ops.h>28#include <linux/cpu.h>29#include <linux/sched/signal.h>30#include <linux/sched/mm.h>31#include <linux/sched/stat.h>32#include <linux/cpumask.h>33#include <linux/smp.h>34#include <linux/anon_inodes.h>35#include <linux/profile.h>36#include <linux/kvm_para.h>37#include <linux/pagemap.h>38#include <linux/mman.h>39#include <linux/swap.h>40#include <linux/bitops.h>41#include <linux/spinlock.h>42#include <linux/compat.h>43#include <linux/srcu.h>44#include <linux/hugetlb.h>45#include <linux/slab.h>46#include <linux/sort.h>47#include <linux/bsearch.h>48#include <linux/io.h>49#include <linux/lockdep.h>50#include <linux/kthread.h>51#include <linux/suspend.h>52 53#include <asm/processor.h>54#include <asm/ioctl.h>55#include <linux/uaccess.h>56 57#include "coalesced_mmio.h"58#include "async_pf.h"59#include "kvm_mm.h"60#include "vfio.h"61 62#include <trace/events/ipi.h>63 64#define CREATE_TRACE_POINTS65#include <trace/events/kvm.h>66 67#include <linux/kvm_dirty_ring.h>68 69 70/* Worst case buffer size needed for holding an integer. */71#define ITOA_MAX_LEN 1272 73MODULE_AUTHOR("Qumranet");74MODULE_DESCRIPTION("Kernel-based Virtual Machine (KVM) Hypervisor");75MODULE_LICENSE("GPL");76 77/* Architectures should define their poll value according to the halt latency */78unsigned int halt_poll_ns = KVM_HALT_POLL_NS_DEFAULT;79module_param(halt_poll_ns, uint, 0644);80EXPORT_SYMBOL_GPL(halt_poll_ns);81 82/* Default doubles per-vcpu halt_poll_ns. */83unsigned int halt_poll_ns_grow = 2;84module_param(halt_poll_ns_grow, uint, 0644);85EXPORT_SYMBOL_GPL(halt_poll_ns_grow);86 87/* The start value to grow halt_poll_ns from */88unsigned int halt_poll_ns_grow_start = 10000; /* 10us */89module_param(halt_poll_ns_grow_start, uint, 0644);90EXPORT_SYMBOL_GPL(halt_poll_ns_grow_start);91 92/* Default halves per-vcpu halt_poll_ns. */93unsigned int halt_poll_ns_shrink = 2;94module_param(halt_poll_ns_shrink, uint, 0644);95EXPORT_SYMBOL_GPL(halt_poll_ns_shrink);96 97/*98 * Ordering of locks:99 *100 * kvm->lock --> kvm->slots_lock --> kvm->irq_lock101 */102 103DEFINE_MUTEX(kvm_lock);104LIST_HEAD(vm_list);105 106static struct kmem_cache *kvm_vcpu_cache;107 108static __read_mostly struct preempt_ops kvm_preempt_ops;109static DEFINE_PER_CPU(struct kvm_vcpu *, kvm_running_vcpu);110 111static struct dentry *kvm_debugfs_dir;112 113static const struct file_operations stat_fops_per_vm;114 115static long kvm_vcpu_ioctl(struct file *file, unsigned int ioctl,116 unsigned long arg);117#ifdef CONFIG_KVM_COMPAT118static long kvm_vcpu_compat_ioctl(struct file *file, unsigned int ioctl,119 unsigned long arg);120#define KVM_COMPAT(c) .compat_ioctl = (c)121#else122/*123 * For architectures that don't implement a compat infrastructure,124 * adopt a double line of defense:125 * - Prevent a compat task from opening /dev/kvm126 * - If the open has been done by a 64bit task, and the KVM fd127 * passed to a compat task, let the ioctls fail.128 */129static long kvm_no_compat_ioctl(struct file *file, unsigned int ioctl,130 unsigned long arg) { return -EINVAL; }131 132static int kvm_no_compat_open(struct inode *inode, struct file *file)133{134 return is_compat_task() ? -ENODEV : 0;135}136#define KVM_COMPAT(c) .compat_ioctl = kvm_no_compat_ioctl, \137 .open = kvm_no_compat_open138#endif139static int kvm_enable_virtualization(void);140static void kvm_disable_virtualization(void);141 142static void kvm_io_bus_destroy(struct kvm_io_bus *bus);143 144#define KVM_EVENT_CREATE_VM 0145#define KVM_EVENT_DESTROY_VM 1146static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm);147static unsigned long long kvm_createvm_count;148static unsigned long long kvm_active_vms;149 150static DEFINE_PER_CPU(cpumask_var_t, cpu_kick_mask);151 152__weak void kvm_arch_guest_memory_reclaimed(struct kvm *kvm)153{154}155 156bool kvm_is_zone_device_page(struct page *page)157{158 /*159 * The metadata used by is_zone_device_page() to determine whether or160 * not a page is ZONE_DEVICE is guaranteed to be valid if and only if161 * the device has been pinned, e.g. by get_user_pages(). WARN if the162 * page_count() is zero to help detect bad usage of this helper.163 */164 if (WARN_ON_ONCE(!page_count(page)))165 return false;166 167 return is_zone_device_page(page);168}169 170/*171 * Returns a 'struct page' if the pfn is "valid" and backed by a refcounted172 * page, NULL otherwise. Note, the list of refcounted PG_reserved page types173 * is likely incomplete, it has been compiled purely through people wanting to174 * back guest with a certain type of memory and encountering issues.175 */176struct page *kvm_pfn_to_refcounted_page(kvm_pfn_t pfn)177{178 struct page *page;179 180 if (!pfn_valid(pfn))181 return NULL;182 183 page = pfn_to_page(pfn);184 if (!PageReserved(page))185 return page;186 187 /* The ZERO_PAGE(s) is marked PG_reserved, but is refcounted. */188 if (is_zero_pfn(pfn))189 return page;190 191 /*192 * ZONE_DEVICE pages currently set PG_reserved, but from a refcounting193 * perspective they are "normal" pages, albeit with slightly different194 * usage rules.195 */196 if (kvm_is_zone_device_page(page))197 return page;198 199 return NULL;200}201 202/*203 * Switches to specified vcpu, until a matching vcpu_put()204 */205void vcpu_load(struct kvm_vcpu *vcpu)206{207 int cpu = get_cpu();208 209 __this_cpu_write(kvm_running_vcpu, vcpu);210 preempt_notifier_register(&vcpu->preempt_notifier);211 kvm_arch_vcpu_load(vcpu, cpu);212 put_cpu();213}214EXPORT_SYMBOL_GPL(vcpu_load);215 216void vcpu_put(struct kvm_vcpu *vcpu)217{218 preempt_disable();219 kvm_arch_vcpu_put(vcpu);220 preempt_notifier_unregister(&vcpu->preempt_notifier);221 __this_cpu_write(kvm_running_vcpu, NULL);222 preempt_enable();223}224EXPORT_SYMBOL_GPL(vcpu_put);225 226/* TODO: merge with kvm_arch_vcpu_should_kick */227static bool kvm_request_needs_ipi(struct kvm_vcpu *vcpu, unsigned req)228{229 int mode = kvm_vcpu_exiting_guest_mode(vcpu);230 231 /*232 * We need to wait for the VCPU to reenable interrupts and get out of233 * READING_SHADOW_PAGE_TABLES mode.234 */235 if (req & KVM_REQUEST_WAIT)236 return mode != OUTSIDE_GUEST_MODE;237 238 /*239 * Need to kick a running VCPU, but otherwise there is nothing to do.240 */241 return mode == IN_GUEST_MODE;242}243 244static void ack_kick(void *_completed)245{246}247 248static inline bool kvm_kick_many_cpus(struct cpumask *cpus, bool wait)249{250 if (cpumask_empty(cpus))251 return false;252 253 smp_call_function_many(cpus, ack_kick, NULL, wait);254 return true;255}256 257static void kvm_make_vcpu_request(struct kvm_vcpu *vcpu, unsigned int req,258 struct cpumask *tmp, int current_cpu)259{260 int cpu;261 262 if (likely(!(req & KVM_REQUEST_NO_ACTION)))263 __kvm_make_request(req, vcpu);264 265 if (!(req & KVM_REQUEST_NO_WAKEUP) && kvm_vcpu_wake_up(vcpu))266 return;267 268 /*269 * Note, the vCPU could get migrated to a different pCPU at any point270 * after kvm_request_needs_ipi(), which could result in sending an IPI271 * to the previous pCPU. But, that's OK because the purpose of the IPI272 * is to ensure the vCPU returns to OUTSIDE_GUEST_MODE, which is273 * satisfied if the vCPU migrates. Entering READING_SHADOW_PAGE_TABLES274 * after this point is also OK, as the requirement is only that KVM wait275 * for vCPUs that were reading SPTEs _before_ any changes were276 * finalized. See kvm_vcpu_kick() for more details on handling requests.277 */278 if (kvm_request_needs_ipi(vcpu, req)) {279 cpu = READ_ONCE(vcpu->cpu);280 if (cpu != -1 && cpu != current_cpu)281 __cpumask_set_cpu(cpu, tmp);282 }283}284 285bool kvm_make_vcpus_request_mask(struct kvm *kvm, unsigned int req,286 unsigned long *vcpu_bitmap)287{288 struct kvm_vcpu *vcpu;289 struct cpumask *cpus;290 int i, me;291 bool called;292 293 me = get_cpu();294 295 cpus = this_cpu_cpumask_var_ptr(cpu_kick_mask);296 cpumask_clear(cpus);297 298 for_each_set_bit(i, vcpu_bitmap, KVM_MAX_VCPUS) {299 vcpu = kvm_get_vcpu(kvm, i);300 if (!vcpu)301 continue;302 kvm_make_vcpu_request(vcpu, req, cpus, me);303 }304 305 called = kvm_kick_many_cpus(cpus, !!(req & KVM_REQUEST_WAIT));306 put_cpu();307 308 return called;309}310 311bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req)312{313 struct kvm_vcpu *vcpu;314 struct cpumask *cpus;315 unsigned long i;316 bool called;317 int me;318 319 me = get_cpu();320 321 cpus = this_cpu_cpumask_var_ptr(cpu_kick_mask);322 cpumask_clear(cpus);323 324 kvm_for_each_vcpu(i, vcpu, kvm)325 kvm_make_vcpu_request(vcpu, req, cpus, me);326 327 called = kvm_kick_many_cpus(cpus, !!(req & KVM_REQUEST_WAIT));328 put_cpu();329 330 return called;331}332EXPORT_SYMBOL_GPL(kvm_make_all_cpus_request);333 334void kvm_flush_remote_tlbs(struct kvm *kvm)335{336 ++kvm->stat.generic.remote_tlb_flush_requests;337 338 /*339 * We want to publish modifications to the page tables before reading340 * mode. Pairs with a memory barrier in arch-specific code.341 * - x86: smp_mb__after_srcu_read_unlock in vcpu_enter_guest342 * and smp_mb in walk_shadow_page_lockless_begin/end.343 * - powerpc: smp_mb in kvmppc_prepare_to_enter.344 *345 * There is already an smp_mb__after_atomic() before346 * kvm_make_all_cpus_request() reads vcpu->mode. We reuse that347 * barrier here.348 */349 if (!kvm_arch_flush_remote_tlbs(kvm)350 || kvm_make_all_cpus_request(kvm, KVM_REQ_TLB_FLUSH))351 ++kvm->stat.generic.remote_tlb_flush;352}353EXPORT_SYMBOL_GPL(kvm_flush_remote_tlbs);354 355void kvm_flush_remote_tlbs_range(struct kvm *kvm, gfn_t gfn, u64 nr_pages)356{357 if (!kvm_arch_flush_remote_tlbs_range(kvm, gfn, nr_pages))358 return;359 360 /*361 * Fall back to a flushing entire TLBs if the architecture range-based362 * TLB invalidation is unsupported or can't be performed for whatever363 * reason.364 */365 kvm_flush_remote_tlbs(kvm);366}367 368void kvm_flush_remote_tlbs_memslot(struct kvm *kvm,369 const struct kvm_memory_slot *memslot)370{371 /*372 * All current use cases for flushing the TLBs for a specific memslot373 * are related to dirty logging, and many do the TLB flush out of374 * mmu_lock. The interaction between the various operations on memslot375 * must be serialized by slots_locks to ensure the TLB flush from one376 * operation is observed by any other operation on the same memslot.377 */378 lockdep_assert_held(&kvm->slots_lock);379 kvm_flush_remote_tlbs_range(kvm, memslot->base_gfn, memslot->npages);380}381 382static void kvm_flush_shadow_all(struct kvm *kvm)383{384 kvm_arch_flush_shadow_all(kvm);385 kvm_arch_guest_memory_reclaimed(kvm);386}387 388#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE389static inline void *mmu_memory_cache_alloc_obj(struct kvm_mmu_memory_cache *mc,390 gfp_t gfp_flags)391{392 void *page;393 394 gfp_flags |= mc->gfp_zero;395 396 if (mc->kmem_cache)397 return kmem_cache_alloc(mc->kmem_cache, gfp_flags);398 399 page = (void *)__get_free_page(gfp_flags);400 if (page && mc->init_value)401 memset64(page, mc->init_value, PAGE_SIZE / sizeof(u64));402 return page;403}404 405int __kvm_mmu_topup_memory_cache(struct kvm_mmu_memory_cache *mc, int capacity, int min)406{407 gfp_t gfp = mc->gfp_custom ? mc->gfp_custom : GFP_KERNEL_ACCOUNT;408 void *obj;409 410 if (mc->nobjs >= min)411 return 0;412 413 if (unlikely(!mc->objects)) {414 if (WARN_ON_ONCE(!capacity))415 return -EIO;416 417 /*418 * Custom init values can be used only for page allocations,419 * and obviously conflict with __GFP_ZERO.420 */421 if (WARN_ON_ONCE(mc->init_value && (mc->kmem_cache || mc->gfp_zero)))422 return -EIO;423 424 mc->objects = kvmalloc_array(capacity, sizeof(void *), gfp);425 if (!mc->objects)426 return -ENOMEM;427 428 mc->capacity = capacity;429 }430 431 /* It is illegal to request a different capacity across topups. */432 if (WARN_ON_ONCE(mc->capacity != capacity))433 return -EIO;434 435 while (mc->nobjs < mc->capacity) {436 obj = mmu_memory_cache_alloc_obj(mc, gfp);437 if (!obj)438 return mc->nobjs >= min ? 0 : -ENOMEM;439 mc->objects[mc->nobjs++] = obj;440 }441 return 0;442}443 444int kvm_mmu_topup_memory_cache(struct kvm_mmu_memory_cache *mc, int min)445{446 return __kvm_mmu_topup_memory_cache(mc, KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE, min);447}448 449int kvm_mmu_memory_cache_nr_free_objects(struct kvm_mmu_memory_cache *mc)450{451 return mc->nobjs;452}453 454void kvm_mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc)455{456 while (mc->nobjs) {457 if (mc->kmem_cache)458 kmem_cache_free(mc->kmem_cache, mc->objects[--mc->nobjs]);459 else460 free_page((unsigned long)mc->objects[--mc->nobjs]);461 }462 463 kvfree(mc->objects);464 465 mc->objects = NULL;466 mc->capacity = 0;467}468 469void *kvm_mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc)470{471 void *p;472 473 if (WARN_ON(!mc->nobjs))474 p = mmu_memory_cache_alloc_obj(mc, GFP_ATOMIC | __GFP_ACCOUNT);475 else476 p = mc->objects[--mc->nobjs];477 BUG_ON(!p);478 return p;479}480#endif481 482static void kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)483{484 mutex_init(&vcpu->mutex);485 vcpu->cpu = -1;486 vcpu->kvm = kvm;487 vcpu->vcpu_id = id;488 vcpu->pid = NULL;489#ifndef __KVM_HAVE_ARCH_WQP490 rcuwait_init(&vcpu->wait);491#endif492 kvm_async_pf_vcpu_init(vcpu);493 494 kvm_vcpu_set_in_spin_loop(vcpu, false);495 kvm_vcpu_set_dy_eligible(vcpu, false);496 vcpu->preempted = false;497 vcpu->ready = false;498 preempt_notifier_init(&vcpu->preempt_notifier, &kvm_preempt_ops);499 vcpu->last_used_slot = NULL;500 501 /* Fill the stats id string for the vcpu */502 snprintf(vcpu->stats_id, sizeof(vcpu->stats_id), "kvm-%d/vcpu-%d",503 task_pid_nr(current), id);504}505 506static void kvm_vcpu_destroy(struct kvm_vcpu *vcpu)507{508 kvm_arch_vcpu_destroy(vcpu);509 kvm_dirty_ring_free(&vcpu->dirty_ring);510 511 /*512 * No need for rcu_read_lock as VCPU_RUN is the only place that changes513 * the vcpu->pid pointer, and at destruction time all file descriptors514 * are already gone.515 */516 put_pid(rcu_dereference_protected(vcpu->pid, 1));517 518 free_page((unsigned long)vcpu->run);519 kmem_cache_free(kvm_vcpu_cache, vcpu);520}521 522void kvm_destroy_vcpus(struct kvm *kvm)523{524 unsigned long i;525 struct kvm_vcpu *vcpu;526 527 kvm_for_each_vcpu(i, vcpu, kvm) {528 kvm_vcpu_destroy(vcpu);529 xa_erase(&kvm->vcpu_array, i);530 }531 532 atomic_set(&kvm->online_vcpus, 0);533}534EXPORT_SYMBOL_GPL(kvm_destroy_vcpus);535 536#ifdef CONFIG_KVM_GENERIC_MMU_NOTIFIER537static inline struct kvm *mmu_notifier_to_kvm(struct mmu_notifier *mn)538{539 return container_of(mn, struct kvm, mmu_notifier);540}541 542typedef bool (*gfn_handler_t)(struct kvm *kvm, struct kvm_gfn_range *range);543 544typedef void (*on_lock_fn_t)(struct kvm *kvm);545 546struct kvm_mmu_notifier_range {547 /*548 * 64-bit addresses, as KVM notifiers can operate on host virtual549 * addresses (unsigned long) and guest physical addresses (64-bit).550 */551 u64 start;552 u64 end;553 union kvm_mmu_notifier_arg arg;554 gfn_handler_t handler;555 on_lock_fn_t on_lock;556 bool flush_on_ret;557 bool may_block;558};559 560/*561 * The inner-most helper returns a tuple containing the return value from the562 * arch- and action-specific handler, plus a flag indicating whether or not at563 * least one memslot was found, i.e. if the handler found guest memory.564 *565 * Note, most notifiers are averse to booleans, so even though KVM tracks the566 * return from arch code as a bool, outer helpers will cast it to an int. :-(567 */568typedef struct kvm_mmu_notifier_return {569 bool ret;570 bool found_memslot;571} kvm_mn_ret_t;572 573/*574 * Use a dedicated stub instead of NULL to indicate that there is no callback575 * function/handler. The compiler technically can't guarantee that a real576 * function will have a non-zero address, and so it will generate code to577 * check for !NULL, whereas comparing against a stub will be elided at compile578 * time (unless the compiler is getting long in the tooth, e.g. gcc 4.9).579 */580static void kvm_null_fn(void)581{582 583}584#define IS_KVM_NULL_FN(fn) ((fn) == (void *)kvm_null_fn)585 586/* Iterate over each memslot intersecting [start, last] (inclusive) range */587#define kvm_for_each_memslot_in_hva_range(node, slots, start, last) \588 for (node = interval_tree_iter_first(&slots->hva_tree, start, last); \589 node; \590 node = interval_tree_iter_next(node, start, last)) \591 592static __always_inline kvm_mn_ret_t __kvm_handle_hva_range(struct kvm *kvm,593 const struct kvm_mmu_notifier_range *range)594{595 struct kvm_mmu_notifier_return r = {596 .ret = false,597 .found_memslot = false,598 };599 struct kvm_gfn_range gfn_range;600 struct kvm_memory_slot *slot;601 struct kvm_memslots *slots;602 int i, idx;603 604 if (WARN_ON_ONCE(range->end <= range->start))605 return r;606 607 /* A null handler is allowed if and only if on_lock() is provided. */608 if (WARN_ON_ONCE(IS_KVM_NULL_FN(range->on_lock) &&609 IS_KVM_NULL_FN(range->handler)))610 return r;611 612 idx = srcu_read_lock(&kvm->srcu);613 614 for (i = 0; i < kvm_arch_nr_memslot_as_ids(kvm); i++) {615 struct interval_tree_node *node;616 617 slots = __kvm_memslots(kvm, i);618 kvm_for_each_memslot_in_hva_range(node, slots,619 range->start, range->end - 1) {620 unsigned long hva_start, hva_end;621 622 slot = container_of(node, struct kvm_memory_slot, hva_node[slots->node_idx]);623 hva_start = max_t(unsigned long, range->start, slot->userspace_addr);624 hva_end = min_t(unsigned long, range->end,625 slot->userspace_addr + (slot->npages << PAGE_SHIFT));626 627 /*628 * To optimize for the likely case where the address629 * range is covered by zero or one memslots, don't630 * bother making these conditional (to avoid writes on631 * the second or later invocation of the handler).632 */633 gfn_range.arg = range->arg;634 gfn_range.may_block = range->may_block;635 636 /*637 * {gfn(page) | page intersects with [hva_start, hva_end)} =638 * {gfn_start, gfn_start+1, ..., gfn_end-1}.639 */640 gfn_range.start = hva_to_gfn_memslot(hva_start, slot);641 gfn_range.end = hva_to_gfn_memslot(hva_end + PAGE_SIZE - 1, slot);642 gfn_range.slot = slot;643 644 if (!r.found_memslot) {645 r.found_memslot = true;646 KVM_MMU_LOCK(kvm);647 if (!IS_KVM_NULL_FN(range->on_lock))648 range->on_lock(kvm);649 650 if (IS_KVM_NULL_FN(range->handler))651 goto mmu_unlock;652 }653 r.ret |= range->handler(kvm, &gfn_range);654 }655 }656 657 if (range->flush_on_ret && r.ret)658 kvm_flush_remote_tlbs(kvm);659 660mmu_unlock:661 if (r.found_memslot)662 KVM_MMU_UNLOCK(kvm);663 664 srcu_read_unlock(&kvm->srcu, idx);665 666 return r;667}668 669static __always_inline int kvm_handle_hva_range(struct mmu_notifier *mn,670 unsigned long start,671 unsigned long end,672 gfn_handler_t handler)673{674 struct kvm *kvm = mmu_notifier_to_kvm(mn);675 const struct kvm_mmu_notifier_range range = {676 .start = start,677 .end = end,678 .handler = handler,679 .on_lock = (void *)kvm_null_fn,680 .flush_on_ret = true,681 .may_block = false,682 };683 684 return __kvm_handle_hva_range(kvm, &range).ret;685}686 687static __always_inline int kvm_handle_hva_range_no_flush(struct mmu_notifier *mn,688 unsigned long start,689 unsigned long end,690 gfn_handler_t handler)691{692 struct kvm *kvm = mmu_notifier_to_kvm(mn);693 const struct kvm_mmu_notifier_range range = {694 .start = start,695 .end = end,696 .handler = handler,697 .on_lock = (void *)kvm_null_fn,698 .flush_on_ret = false,699 .may_block = false,700 };701 702 return __kvm_handle_hva_range(kvm, &range).ret;703}704 705void kvm_mmu_invalidate_begin(struct kvm *kvm)706{707 lockdep_assert_held_write(&kvm->mmu_lock);708 /*709 * The count increase must become visible at unlock time as no710 * spte can be established without taking the mmu_lock and711 * count is also read inside the mmu_lock critical section.712 */713 kvm->mmu_invalidate_in_progress++;714 715 if (likely(kvm->mmu_invalidate_in_progress == 1)) {716 kvm->mmu_invalidate_range_start = INVALID_GPA;717 kvm->mmu_invalidate_range_end = INVALID_GPA;718 }719}720 721void kvm_mmu_invalidate_range_add(struct kvm *kvm, gfn_t start, gfn_t end)722{723 lockdep_assert_held_write(&kvm->mmu_lock);724 725 WARN_ON_ONCE(!kvm->mmu_invalidate_in_progress);726 727 if (likely(kvm->mmu_invalidate_range_start == INVALID_GPA)) {728 kvm->mmu_invalidate_range_start = start;729 kvm->mmu_invalidate_range_end = end;730 } else {731 /*732 * Fully tracking multiple concurrent ranges has diminishing733 * returns. Keep things simple and just find the minimal range734 * which includes the current and new ranges. As there won't be735 * enough information to subtract a range after its invalidate736 * completes, any ranges invalidated concurrently will737 * accumulate and persist until all outstanding invalidates738 * complete.739 */740 kvm->mmu_invalidate_range_start =741 min(kvm->mmu_invalidate_range_start, start);742 kvm->mmu_invalidate_range_end =743 max(kvm->mmu_invalidate_range_end, end);744 }745}746 747bool kvm_mmu_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range)748{749 kvm_mmu_invalidate_range_add(kvm, range->start, range->end);750 return kvm_unmap_gfn_range(kvm, range);751}752 753static int kvm_mmu_notifier_invalidate_range_start(struct mmu_notifier *mn,754 const struct mmu_notifier_range *range)755{756 struct kvm *kvm = mmu_notifier_to_kvm(mn);757 const struct kvm_mmu_notifier_range hva_range = {758 .start = range->start,759 .end = range->end,760 .handler = kvm_mmu_unmap_gfn_range,761 .on_lock = kvm_mmu_invalidate_begin,762 .flush_on_ret = true,763 .may_block = mmu_notifier_range_blockable(range),764 };765 766 trace_kvm_unmap_hva_range(range->start, range->end);767 768 /*769 * Prevent memslot modification between range_start() and range_end()770 * so that conditionally locking provides the same result in both771 * functions. Without that guarantee, the mmu_invalidate_in_progress772 * adjustments will be imbalanced.773 *774 * Pairs with the decrement in range_end().775 */776 spin_lock(&kvm->mn_invalidate_lock);777 kvm->mn_active_invalidate_count++;778 spin_unlock(&kvm->mn_invalidate_lock);779 780 /*781 * Invalidate pfn caches _before_ invalidating the secondary MMUs, i.e.782 * before acquiring mmu_lock, to avoid holding mmu_lock while acquiring783 * each cache's lock. There are relatively few caches in existence at784 * any given time, and the caches themselves can check for hva overlap,785 * i.e. don't need to rely on memslot overlap checks for performance.786 * Because this runs without holding mmu_lock, the pfn caches must use787 * mn_active_invalidate_count (see above) instead of788 * mmu_invalidate_in_progress.789 */790 gfn_to_pfn_cache_invalidate_start(kvm, range->start, range->end);791 792 /*793 * If one or more memslots were found and thus zapped, notify arch code794 * that guest memory has been reclaimed. This needs to be done *after*795 * dropping mmu_lock, as x86's reclaim path is slooooow.796 */797 if (__kvm_handle_hva_range(kvm, &hva_range).found_memslot)798 kvm_arch_guest_memory_reclaimed(kvm);799 800 return 0;801}802 803void kvm_mmu_invalidate_end(struct kvm *kvm)804{805 lockdep_assert_held_write(&kvm->mmu_lock);806 807 /*808 * This sequence increase will notify the kvm page fault that809 * the page that is going to be mapped in the spte could have810 * been freed.811 */812 kvm->mmu_invalidate_seq++;813 smp_wmb();814 /*815 * The above sequence increase must be visible before the816 * below count decrease, which is ensured by the smp_wmb above817 * in conjunction with the smp_rmb in mmu_invalidate_retry().818 */819 kvm->mmu_invalidate_in_progress--;820 KVM_BUG_ON(kvm->mmu_invalidate_in_progress < 0, kvm);821 822 /*823 * Assert that at least one range was added between start() and end().824 * Not adding a range isn't fatal, but it is a KVM bug.825 */826 WARN_ON_ONCE(kvm->mmu_invalidate_range_start == INVALID_GPA);827}828 829static void kvm_mmu_notifier_invalidate_range_end(struct mmu_notifier *mn,830 const struct mmu_notifier_range *range)831{832 struct kvm *kvm = mmu_notifier_to_kvm(mn);833 const struct kvm_mmu_notifier_range hva_range = {834 .start = range->start,835 .end = range->end,836 .handler = (void *)kvm_null_fn,837 .on_lock = kvm_mmu_invalidate_end,838 .flush_on_ret = false,839 .may_block = mmu_notifier_range_blockable(range),840 };841 bool wake;842 843 __kvm_handle_hva_range(kvm, &hva_range);844 845 /* Pairs with the increment in range_start(). */846 spin_lock(&kvm->mn_invalidate_lock);847 if (!WARN_ON_ONCE(!kvm->mn_active_invalidate_count))848 --kvm->mn_active_invalidate_count;849 wake = !kvm->mn_active_invalidate_count;850 spin_unlock(&kvm->mn_invalidate_lock);851 852 /*853 * There can only be one waiter, since the wait happens under854 * slots_lock.855 */856 if (wake)857 rcuwait_wake_up(&kvm->mn_memslots_update_rcuwait);858}859 860static int kvm_mmu_notifier_clear_flush_young(struct mmu_notifier *mn,861 struct mm_struct *mm,862 unsigned long start,863 unsigned long end)864{865 trace_kvm_age_hva(start, end);866 867 return kvm_handle_hva_range(mn, start, end, kvm_age_gfn);868}869 870static int kvm_mmu_notifier_clear_young(struct mmu_notifier *mn,871 struct mm_struct *mm,872 unsigned long start,873 unsigned long end)874{875 trace_kvm_age_hva(start, end);876 877 /*878 * Even though we do not flush TLB, this will still adversely879 * affect performance on pre-Haswell Intel EPT, where there is880 * no EPT Access Bit to clear so that we have to tear down EPT881 * tables instead. If we find this unacceptable, we can always882 * add a parameter to kvm_age_hva so that it effectively doesn't883 * do anything on clear_young.884 *885 * Also note that currently we never issue secondary TLB flushes886 * from clear_young, leaving this job up to the regular system887 * cadence. If we find this inaccurate, we might come up with a888 * more sophisticated heuristic later.889 */890 return kvm_handle_hva_range_no_flush(mn, start, end, kvm_age_gfn);891}892 893static int kvm_mmu_notifier_test_young(struct mmu_notifier *mn,894 struct mm_struct *mm,895 unsigned long address)896{897 trace_kvm_test_age_hva(address);898 899 return kvm_handle_hva_range_no_flush(mn, address, address + 1,900 kvm_test_age_gfn);901}902 903static void kvm_mmu_notifier_release(struct mmu_notifier *mn,904 struct mm_struct *mm)905{906 struct kvm *kvm = mmu_notifier_to_kvm(mn);907 int idx;908 909 idx = srcu_read_lock(&kvm->srcu);910 kvm_flush_shadow_all(kvm);911 srcu_read_unlock(&kvm->srcu, idx);912}913 914static const struct mmu_notifier_ops kvm_mmu_notifier_ops = {915 .invalidate_range_start = kvm_mmu_notifier_invalidate_range_start,916 .invalidate_range_end = kvm_mmu_notifier_invalidate_range_end,917 .clear_flush_young = kvm_mmu_notifier_clear_flush_young,918 .clear_young = kvm_mmu_notifier_clear_young,919 .test_young = kvm_mmu_notifier_test_young,920 .release = kvm_mmu_notifier_release,921};922 923static int kvm_init_mmu_notifier(struct kvm *kvm)924{925 kvm->mmu_notifier.ops = &kvm_mmu_notifier_ops;926 return mmu_notifier_register(&kvm->mmu_notifier, current->mm);927}928 929#else /* !CONFIG_KVM_GENERIC_MMU_NOTIFIER */930 931static int kvm_init_mmu_notifier(struct kvm *kvm)932{933 return 0;934}935 936#endif /* CONFIG_KVM_GENERIC_MMU_NOTIFIER */937 938#ifdef CONFIG_HAVE_KVM_PM_NOTIFIER939static int kvm_pm_notifier_call(struct notifier_block *bl,940 unsigned long state,941 void *unused)942{943 struct kvm *kvm = container_of(bl, struct kvm, pm_notifier);944 945 return kvm_arch_pm_notifier(kvm, state);946}947 948static void kvm_init_pm_notifier(struct kvm *kvm)949{950 kvm->pm_notifier.notifier_call = kvm_pm_notifier_call;951 /* Suspend KVM before we suspend ftrace, RCU, etc. */952 kvm->pm_notifier.priority = INT_MAX;953 register_pm_notifier(&kvm->pm_notifier);954}955 956static void kvm_destroy_pm_notifier(struct kvm *kvm)957{958 unregister_pm_notifier(&kvm->pm_notifier);959}960#else /* !CONFIG_HAVE_KVM_PM_NOTIFIER */961static void kvm_init_pm_notifier(struct kvm *kvm)962{963}964 965static void kvm_destroy_pm_notifier(struct kvm *kvm)966{967}968#endif /* CONFIG_HAVE_KVM_PM_NOTIFIER */969 970static void kvm_destroy_dirty_bitmap(struct kvm_memory_slot *memslot)971{972 if (!memslot->dirty_bitmap)973 return;974 975 vfree(memslot->dirty_bitmap);976 memslot->dirty_bitmap = NULL;977}978 979/* This does not remove the slot from struct kvm_memslots data structures */980static void kvm_free_memslot(struct kvm *kvm, struct kvm_memory_slot *slot)981{982 if (slot->flags & KVM_MEM_GUEST_MEMFD)983 kvm_gmem_unbind(slot);984 985 kvm_destroy_dirty_bitmap(slot);986 987 kvm_arch_free_memslot(kvm, slot);988 989 kfree(slot);990}991 992static void kvm_free_memslots(struct kvm *kvm, struct kvm_memslots *slots)993{994 struct hlist_node *idnode;995 struct kvm_memory_slot *memslot;996 int bkt;997 998 /*999 * The same memslot objects live in both active and inactive sets,1000 * arbitrarily free using index '1' so the second invocation of this1001 * function isn't operating over a structure with dangling pointers1002 * (even though this function isn't actually touching them).1003 */1004 if (!slots->node_idx)1005 return;1006 1007 hash_for_each_safe(slots->id_hash, bkt, idnode, memslot, id_node[1])1008 kvm_free_memslot(kvm, memslot);1009}1010 1011static umode_t kvm_stats_debugfs_mode(const struct _kvm_stats_desc *pdesc)1012{1013 switch (pdesc->desc.flags & KVM_STATS_TYPE_MASK) {1014 case KVM_STATS_TYPE_INSTANT:1015 return 0444;1016 case KVM_STATS_TYPE_CUMULATIVE:1017 case KVM_STATS_TYPE_PEAK:1018 default:1019 return 0644;1020 }1021}1022 1023 1024static void kvm_destroy_vm_debugfs(struct kvm *kvm)1025{1026 int i;1027 int kvm_debugfs_num_entries = kvm_vm_stats_header.num_desc +1028 kvm_vcpu_stats_header.num_desc;1029 1030 if (IS_ERR(kvm->debugfs_dentry))1031 return;1032 1033 debugfs_remove_recursive(kvm->debugfs_dentry);1034 1035 if (kvm->debugfs_stat_data) {1036 for (i = 0; i < kvm_debugfs_num_entries; i++)1037 kfree(kvm->debugfs_stat_data[i]);1038 kfree(kvm->debugfs_stat_data);1039 }1040}1041 1042static int kvm_create_vm_debugfs(struct kvm *kvm, const char *fdname)1043{1044 static DEFINE_MUTEX(kvm_debugfs_lock);1045 struct dentry *dent;1046 char dir_name[ITOA_MAX_LEN * 2];1047 struct kvm_stat_data *stat_data;1048 const struct _kvm_stats_desc *pdesc;1049 int i, ret = -ENOMEM;1050 int kvm_debugfs_num_entries = kvm_vm_stats_header.num_desc +1051 kvm_vcpu_stats_header.num_desc;1052 1053 if (!debugfs_initialized())1054 return 0;1055 1056 snprintf(dir_name, sizeof(dir_name), "%d-%s", task_pid_nr(current), fdname);1057 mutex_lock(&kvm_debugfs_lock);1058 dent = debugfs_lookup(dir_name, kvm_debugfs_dir);1059 if (dent) {1060 pr_warn_ratelimited("KVM: debugfs: duplicate directory %s\n", dir_name);1061 dput(dent);1062 mutex_unlock(&kvm_debugfs_lock);1063 return 0;1064 }1065 dent = debugfs_create_dir(dir_name, kvm_debugfs_dir);1066 mutex_unlock(&kvm_debugfs_lock);1067 if (IS_ERR(dent))1068 return 0;1069 1070 kvm->debugfs_dentry = dent;1071 kvm->debugfs_stat_data = kcalloc(kvm_debugfs_num_entries,1072 sizeof(*kvm->debugfs_stat_data),1073 GFP_KERNEL_ACCOUNT);1074 if (!kvm->debugfs_stat_data)1075 goto out_err;1076 1077 for (i = 0; i < kvm_vm_stats_header.num_desc; ++i) {1078 pdesc = &kvm_vm_stats_desc[i];1079 stat_data = kzalloc(sizeof(*stat_data), GFP_KERNEL_ACCOUNT);1080 if (!stat_data)1081 goto out_err;1082 1083 stat_data->kvm = kvm;1084 stat_data->desc = pdesc;1085 stat_data->kind = KVM_STAT_VM;1086 kvm->debugfs_stat_data[i] = stat_data;1087 debugfs_create_file(pdesc->name, kvm_stats_debugfs_mode(pdesc),1088 kvm->debugfs_dentry, stat_data,1089 &stat_fops_per_vm);1090 }1091 1092 for (i = 0; i < kvm_vcpu_stats_header.num_desc; ++i) {1093 pdesc = &kvm_vcpu_stats_desc[i];1094 stat_data = kzalloc(sizeof(*stat_data), GFP_KERNEL_ACCOUNT);1095 if (!stat_data)1096 goto out_err;1097 1098 stat_data->kvm = kvm;1099 stat_data->desc = pdesc;1100 stat_data->kind = KVM_STAT_VCPU;1101 kvm->debugfs_stat_data[i + kvm_vm_stats_header.num_desc] = stat_data;1102 debugfs_create_file(pdesc->name, kvm_stats_debugfs_mode(pdesc),1103 kvm->debugfs_dentry, stat_data,1104 &stat_fops_per_vm);1105 }1106 1107 kvm_arch_create_vm_debugfs(kvm);1108 return 0;1109out_err:1110 kvm_destroy_vm_debugfs(kvm);1111 return ret;1112}1113 1114/*1115 * Called after the VM is otherwise initialized, but just before adding it to1116 * the vm_list.1117 */1118int __weak kvm_arch_post_init_vm(struct kvm *kvm)1119{1120 return 0;1121}1122 1123/*1124 * Called just after removing the VM from the vm_list, but before doing any1125 * other destruction.1126 */1127void __weak kvm_arch_pre_destroy_vm(struct kvm *kvm)1128{1129}1130 1131/*1132 * Called after per-vm debugfs created. When called kvm->debugfs_dentry should1133 * be setup already, so we can create arch-specific debugfs entries under it.1134 * Cleanup should be automatic done in kvm_destroy_vm_debugfs() recursively, so1135 * a per-arch destroy interface is not needed.1136 */1137void __weak kvm_arch_create_vm_debugfs(struct kvm *kvm)1138{1139}1140 1141static struct kvm *kvm_create_vm(unsigned long type, const char *fdname)1142{1143 struct kvm *kvm = kvm_arch_alloc_vm();1144 struct kvm_memslots *slots;1145 int r, i, j;1146 1147 if (!kvm)1148 return ERR_PTR(-ENOMEM);1149 1150 KVM_MMU_LOCK_INIT(kvm);1151 mmgrab(current->mm);1152 kvm->mm = current->mm;1153 kvm_eventfd_init(kvm);1154 mutex_init(&kvm->lock);1155 mutex_init(&kvm->irq_lock);1156 mutex_init(&kvm->slots_lock);1157 mutex_init(&kvm->slots_arch_lock);1158 spin_lock_init(&kvm->mn_invalidate_lock);1159 rcuwait_init(&kvm->mn_memslots_update_rcuwait);1160 xa_init(&kvm->vcpu_array);1161#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES1162 xa_init(&kvm->mem_attr_array);1163#endif1164 1165 INIT_LIST_HEAD(&kvm->gpc_list);1166 spin_lock_init(&kvm->gpc_lock);1167 1168 INIT_LIST_HEAD(&kvm->devices);1169 kvm->max_vcpus = KVM_MAX_VCPUS;1170 1171 BUILD_BUG_ON(KVM_MEM_SLOTS_NUM > SHRT_MAX);1172 1173 /*1174 * Force subsequent debugfs file creations to fail if the VM directory1175 * is not created (by kvm_create_vm_debugfs()).1176 */1177 kvm->debugfs_dentry = ERR_PTR(-ENOENT);1178 1179 snprintf(kvm->stats_id, sizeof(kvm->stats_id), "kvm-%d",1180 task_pid_nr(current));1181 1182 r = -ENOMEM;1183 if (init_srcu_struct(&kvm->srcu))1184 goto out_err_no_srcu;1185 if (init_srcu_struct(&kvm->irq_srcu))1186 goto out_err_no_irq_srcu;1187 1188 r = kvm_init_irq_routing(kvm);1189 if (r)1190 goto out_err_no_irq_routing;1191 1192 refcount_set(&kvm->users_count, 1);1193 1194 for (i = 0; i < kvm_arch_nr_memslot_as_ids(kvm); i++) {1195 for (j = 0; j < 2; j++) {1196 slots = &kvm->__memslots[i][j];1197 1198 atomic_long_set(&slots->last_used_slot, (unsigned long)NULL);1199 slots->hva_tree = RB_ROOT_CACHED;1200 slots->gfn_tree = RB_ROOT;1201 hash_init(slots->id_hash);1202 slots->node_idx = j;1203 1204 /* Generations must be different for each address space. */1205 slots->generation = i;1206 }1207 1208 rcu_assign_pointer(kvm->memslots[i], &kvm->__memslots[i][0]);1209 }1210 1211 r = -ENOMEM;1212 for (i = 0; i < KVM_NR_BUSES; i++) {1213 rcu_assign_pointer(kvm->buses[i],1214 kzalloc(sizeof(struct kvm_io_bus), GFP_KERNEL_ACCOUNT));1215 if (!kvm->buses[i])1216 goto out_err_no_arch_destroy_vm;1217 }1218 1219 r = kvm_arch_init_vm(kvm, type);1220 if (r)1221 goto out_err_no_arch_destroy_vm;1222 1223 r = kvm_enable_virtualization();1224 if (r)1225 goto out_err_no_disable;1226 1227#ifdef CONFIG_HAVE_KVM_IRQCHIP1228 INIT_HLIST_HEAD(&kvm->irq_ack_notifier_list);1229#endif1230 1231 r = kvm_init_mmu_notifier(kvm);1232 if (r)1233 goto out_err_no_mmu_notifier;1234 1235 r = kvm_coalesced_mmio_init(kvm);1236 if (r < 0)1237 goto out_no_coalesced_mmio;1238 1239 r = kvm_create_vm_debugfs(kvm, fdname);1240 if (r)1241 goto out_err_no_debugfs;1242 1243 r = kvm_arch_post_init_vm(kvm);1244 if (r)1245 goto out_err;1246 1247 mutex_lock(&kvm_lock);1248 list_add(&kvm->vm_list, &vm_list);1249 mutex_unlock(&kvm_lock);1250 1251 preempt_notifier_inc();1252 kvm_init_pm_notifier(kvm);1253 1254 return kvm;1255 1256out_err:1257 kvm_destroy_vm_debugfs(kvm);1258out_err_no_debugfs:1259 kvm_coalesced_mmio_free(kvm);1260out_no_coalesced_mmio:1261#ifdef CONFIG_KVM_GENERIC_MMU_NOTIFIER1262 if (kvm->mmu_notifier.ops)1263 mmu_notifier_unregister(&kvm->mmu_notifier, current->mm);1264#endif1265out_err_no_mmu_notifier:1266 kvm_disable_virtualization();1267out_err_no_disable:1268 kvm_arch_destroy_vm(kvm);1269out_err_no_arch_destroy_vm:1270 WARN_ON_ONCE(!refcount_dec_and_test(&kvm->users_count));1271 for (i = 0; i < KVM_NR_BUSES; i++)1272 kfree(kvm_get_bus(kvm, i));1273 kvm_free_irq_routing(kvm);1274out_err_no_irq_routing:1275 cleanup_srcu_struct(&kvm->irq_srcu);1276out_err_no_irq_srcu:1277 cleanup_srcu_struct(&kvm->srcu);1278out_err_no_srcu:1279 kvm_arch_free_vm(kvm);1280 mmdrop(current->mm);1281 return ERR_PTR(r);1282}1283 1284static void kvm_destroy_devices(struct kvm *kvm)1285{1286 struct kvm_device *dev, *tmp;1287 1288 /*1289 * We do not need to take the kvm->lock here, because nobody else1290 * has a reference to the struct kvm at this point and therefore1291 * cannot access the devices list anyhow.1292 *1293 * The device list is generally managed as an rculist, but list_del()1294 * is used intentionally here. If a bug in KVM introduced a reader that1295 * was not backed by a reference on the kvm struct, the hope is that1296 * it'd consume the poisoned forward pointer instead of suffering a1297 * use-after-free, even though this cannot be guaranteed.1298 */1299 list_for_each_entry_safe(dev, tmp, &kvm->devices, vm_node) {1300 list_del(&dev->vm_node);1301 dev->ops->destroy(dev);1302 }1303}1304 1305static void kvm_destroy_vm(struct kvm *kvm)1306{1307 int i;1308 struct mm_struct *mm = kvm->mm;1309 1310 kvm_destroy_pm_notifier(kvm);1311 kvm_uevent_notify_change(KVM_EVENT_DESTROY_VM, kvm);1312 kvm_destroy_vm_debugfs(kvm);1313 kvm_arch_sync_events(kvm);1314 mutex_lock(&kvm_lock);1315 list_del(&kvm->vm_list);1316 mutex_unlock(&kvm_lock);1317 kvm_arch_pre_destroy_vm(kvm);1318 1319 kvm_free_irq_routing(kvm);1320 for (i = 0; i < KVM_NR_BUSES; i++) {1321 struct kvm_io_bus *bus = kvm_get_bus(kvm, i);1322 1323 if (bus)1324 kvm_io_bus_destroy(bus);1325 kvm->buses[i] = NULL;1326 }1327 kvm_coalesced_mmio_free(kvm);1328#ifdef CONFIG_KVM_GENERIC_MMU_NOTIFIER1329 mmu_notifier_unregister(&kvm->mmu_notifier, kvm->mm);1330 /*1331 * At this point, pending calls to invalidate_range_start()1332 * have completed but no more MMU notifiers will run, so1333 * mn_active_invalidate_count may remain unbalanced.1334 * No threads can be waiting in kvm_swap_active_memslots() as the1335 * last reference on KVM has been dropped, but freeing1336 * memslots would deadlock without this manual intervention.1337 *1338 * If the count isn't unbalanced, i.e. KVM did NOT unregister its MMU1339 * notifier between a start() and end(), then there shouldn't be any1340 * in-progress invalidations.1341 */1342 WARN_ON(rcuwait_active(&kvm->mn_memslots_update_rcuwait));1343 if (kvm->mn_active_invalidate_count)1344 kvm->mn_active_invalidate_count = 0;1345 else1346 WARN_ON(kvm->mmu_invalidate_in_progress);1347#else1348 kvm_flush_shadow_all(kvm);1349#endif1350 kvm_arch_destroy_vm(kvm);1351 kvm_destroy_devices(kvm);1352 for (i = 0; i < kvm_arch_nr_memslot_as_ids(kvm); i++) {1353 kvm_free_memslots(kvm, &kvm->__memslots[i][0]);1354 kvm_free_memslots(kvm, &kvm->__memslots[i][1]);1355 }1356 cleanup_srcu_struct(&kvm->irq_srcu);1357 cleanup_srcu_struct(&kvm->srcu);1358#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES1359 xa_destroy(&kvm->mem_attr_array);1360#endif1361 kvm_arch_free_vm(kvm);1362 preempt_notifier_dec();1363 kvm_disable_virtualization();1364 mmdrop(mm);1365}1366 1367void kvm_get_kvm(struct kvm *kvm)1368{1369 refcount_inc(&kvm->users_count);1370}1371EXPORT_SYMBOL_GPL(kvm_get_kvm);1372 1373/*1374 * Make sure the vm is not during destruction, which is a safe version of1375 * kvm_get_kvm(). Return true if kvm referenced successfully, false otherwise.1376 */1377bool kvm_get_kvm_safe(struct kvm *kvm)1378{1379 return refcount_inc_not_zero(&kvm->users_count);1380}1381EXPORT_SYMBOL_GPL(kvm_get_kvm_safe);1382 1383void kvm_put_kvm(struct kvm *kvm)1384{1385 if (refcount_dec_and_test(&kvm->users_count))1386 kvm_destroy_vm(kvm);1387}1388EXPORT_SYMBOL_GPL(kvm_put_kvm);1389 1390/*1391 * Used to put a reference that was taken on behalf of an object associated1392 * with a user-visible file descriptor, e.g. a vcpu or device, if installation1393 * of the new file descriptor fails and the reference cannot be transferred to1394 * its final owner. In such cases, the caller is still actively using @kvm and1395 * will fail miserably if the refcount unexpectedly hits zero.1396 */1397void kvm_put_kvm_no_destroy(struct kvm *kvm)1398{1399 WARN_ON(refcount_dec_and_test(&kvm->users_count));1400}1401EXPORT_SYMBOL_GPL(kvm_put_kvm_no_destroy);1402 1403static int kvm_vm_release(struct inode *inode, struct file *filp)1404{1405 struct kvm *kvm = filp->private_data;1406 1407 kvm_irqfd_release(kvm);1408 1409 kvm_put_kvm(kvm);1410 return 0;1411}1412 1413/*1414 * Allocation size is twice as large as the actual dirty bitmap size.1415 * See kvm_vm_ioctl_get_dirty_log() why this is needed.1416 */1417static int kvm_alloc_dirty_bitmap(struct kvm_memory_slot *memslot)1418{1419 unsigned long dirty_bytes = kvm_dirty_bitmap_bytes(memslot);1420 1421 memslot->dirty_bitmap = __vcalloc(2, dirty_bytes, GFP_KERNEL_ACCOUNT);1422 if (!memslot->dirty_bitmap)1423 return -ENOMEM;1424 1425 return 0;1426}1427 1428static struct kvm_memslots *kvm_get_inactive_memslots(struct kvm *kvm, int as_id)1429{1430 struct kvm_memslots *active = __kvm_memslots(kvm, as_id);1431 int node_idx_inactive = active->node_idx ^ 1;1432 1433 return &kvm->__memslots[as_id][node_idx_inactive];1434}1435 1436/*1437 * Helper to get the address space ID when one of memslot pointers may be NULL.1438 * This also serves as a sanity that at least one of the pointers is non-NULL,1439 * and that their address space IDs don't diverge.1440 */1441static int kvm_memslots_get_as_id(struct kvm_memory_slot *a,1442 struct kvm_memory_slot *b)1443{1444 if (WARN_ON_ONCE(!a && !b))1445 return 0;1446 1447 if (!a)1448 return b->as_id;1449 if (!b)1450 return a->as_id;1451 1452 WARN_ON_ONCE(a->as_id != b->as_id);1453 return a->as_id;1454}1455 1456static void kvm_insert_gfn_node(struct kvm_memslots *slots,1457 struct kvm_memory_slot *slot)1458{1459 struct rb_root *gfn_tree = &slots->gfn_tree;1460 struct rb_node **node, *parent;1461 int idx = slots->node_idx;1462 1463 parent = NULL;1464 for (node = &gfn_tree->rb_node; *node; ) {1465 struct kvm_memory_slot *tmp;1466 1467 tmp = container_of(*node, struct kvm_memory_slot, gfn_node[idx]);1468 parent = *node;1469 if (slot->base_gfn < tmp->base_gfn)1470 node = &(*node)->rb_left;1471 else if (slot->base_gfn > tmp->base_gfn)1472 node = &(*node)->rb_right;1473 else1474 BUG();1475 }1476 1477 rb_link_node(&slot->gfn_node[idx], parent, node);1478 rb_insert_color(&slot->gfn_node[idx], gfn_tree);1479}1480 1481static void kvm_erase_gfn_node(struct kvm_memslots *slots,1482 struct kvm_memory_slot *slot)1483{1484 rb_erase(&slot->gfn_node[slots->node_idx], &slots->gfn_tree);1485}1486 1487static void kvm_replace_gfn_node(struct kvm_memslots *slots,1488 struct kvm_memory_slot *old,1489 struct kvm_memory_slot *new)1490{1491 int idx = slots->node_idx;1492 1493 WARN_ON_ONCE(old->base_gfn != new->base_gfn);1494 1495 rb_replace_node(&old->gfn_node[idx], &new->gfn_node[idx],1496 &slots->gfn_tree);1497}1498 1499/*1500 * Replace @old with @new in the inactive memslots.1501 *1502 * With NULL @old this simply adds @new.1503 * With NULL @new this simply removes @old.1504 *1505 * If @new is non-NULL its hva_node[slots_idx] range has to be set1506 * appropriately.1507 */1508static void kvm_replace_memslot(struct kvm *kvm,1509 struct kvm_memory_slot *old,1510 struct kvm_memory_slot *new)1511{1512 int as_id = kvm_memslots_get_as_id(old, new);1513 struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);1514 int idx = slots->node_idx;1515 1516 if (old) {1517 hash_del(&old->id_node[idx]);1518 interval_tree_remove(&old->hva_node[idx], &slots->hva_tree);1519 1520 if ((long)old == atomic_long_read(&slots->last_used_slot))1521 atomic_long_set(&slots->last_used_slot, (long)new);1522 1523 if (!new) {1524 kvm_erase_gfn_node(slots, old);1525 return;1526 }1527 }1528 1529 /*1530 * Initialize @new's hva range. Do this even when replacing an @old1531 * slot, kvm_copy_memslot() deliberately does not touch node data.1532 */1533 new->hva_node[idx].start = new->userspace_addr;1534 new->hva_node[idx].last = new->userspace_addr +1535 (new->npages << PAGE_SHIFT) - 1;1536 1537 /*1538 * (Re)Add the new memslot. There is no O(1) interval_tree_replace(),1539 * hva_node needs to be swapped with remove+insert even though hva can't1540 * change when replacing an existing slot.1541 */1542 hash_add(slots->id_hash, &new->id_node[idx], new->id);1543 interval_tree_insert(&new->hva_node[idx], &slots->hva_tree);1544 1545 /*1546 * If the memslot gfn is unchanged, rb_replace_node() can be used to1547 * switch the node in the gfn tree instead of removing the old and1548 * inserting the new as two separate operations. Replacement is a1549 * single O(1) operation versus two O(log(n)) operations for1550 * remove+insert.1551 */1552 if (old && old->base_gfn == new->base_gfn) {1553 kvm_replace_gfn_node(slots, old, new);1554 } else {1555 if (old)1556 kvm_erase_gfn_node(slots, old);1557 kvm_insert_gfn_node(slots, new);1558 }1559}1560 1561/*1562 * Flags that do not access any of the extra space of struct1563 * kvm_userspace_memory_region2. KVM_SET_USER_MEMORY_REGION_V1_FLAGS1564 * only allows these.1565 */1566#define KVM_SET_USER_MEMORY_REGION_V1_FLAGS \1567 (KVM_MEM_LOG_DIRTY_PAGES | KVM_MEM_READONLY)1568 1569static int check_memory_region_flags(struct kvm *kvm,1570 const struct kvm_userspace_memory_region2 *mem)1571{1572 u32 valid_flags = KVM_MEM_LOG_DIRTY_PAGES;1573 1574 if (kvm_arch_has_private_mem(kvm))1575 valid_flags |= KVM_MEM_GUEST_MEMFD;1576 1577 /* Dirty logging private memory is not currently supported. */1578 if (mem->flags & KVM_MEM_GUEST_MEMFD)1579 valid_flags &= ~KVM_MEM_LOG_DIRTY_PAGES;1580 1581 /*1582 * GUEST_MEMFD is incompatible with read-only memslots, as writes to1583 * read-only memslots have emulated MMIO, not page fault, semantics,1584 * and KVM doesn't allow emulated MMIO for private memory.1585 */1586 if (kvm_arch_has_readonly_mem(kvm) &&1587 !(mem->flags & KVM_MEM_GUEST_MEMFD))1588 valid_flags |= KVM_MEM_READONLY;1589 1590 if (mem->flags & ~valid_flags)1591 return -EINVAL;1592 1593 return 0;1594}1595 1596static void kvm_swap_active_memslots(struct kvm *kvm, int as_id)1597{1598 struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);1599 1600 /* Grab the generation from the activate memslots. */1601 u64 gen = __kvm_memslots(kvm, as_id)->generation;1602 1603 WARN_ON(gen & KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS);1604 slots->generation = gen | KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS;1605 1606 /*1607 * Do not store the new memslots while there are invalidations in1608 * progress, otherwise the locking in invalidate_range_start and1609 * invalidate_range_end will be unbalanced.1610 */1611 spin_lock(&kvm->mn_invalidate_lock);1612 prepare_to_rcuwait(&kvm->mn_memslots_update_rcuwait);1613 while (kvm->mn_active_invalidate_count) {1614 set_current_state(TASK_UNINTERRUPTIBLE);1615 spin_unlock(&kvm->mn_invalidate_lock);1616 schedule();1617 spin_lock(&kvm->mn_invalidate_lock);1618 }1619 finish_rcuwait(&kvm->mn_memslots_update_rcuwait);1620 rcu_assign_pointer(kvm->memslots[as_id], slots);1621 spin_unlock(&kvm->mn_invalidate_lock);1622 1623 /*1624 * Acquired in kvm_set_memslot. Must be released before synchronize1625 * SRCU below in order to avoid deadlock with another thread1626 * acquiring the slots_arch_lock in an srcu critical section.1627 */1628 mutex_unlock(&kvm->slots_arch_lock);1629 1630 synchronize_srcu_expedited(&kvm->srcu);1631 1632 /*1633 * Increment the new memslot generation a second time, dropping the1634 * update in-progress flag and incrementing the generation based on1635 * the number of address spaces. This provides a unique and easily1636 * identifiable generation number while the memslots are in flux.1637 */1638 gen = slots->generation & ~KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS;1639 1640 /*1641 * Generations must be unique even across address spaces. We do not need1642 * a global counter for that, instead the generation space is evenly split1643 * across address spaces. For example, with two address spaces, address1644 * space 0 will use generations 0, 2, 4, ... while address space 1 will1645 * use generations 1, 3, 5, ...1646 */1647 gen += kvm_arch_nr_memslot_as_ids(kvm);1648 1649 kvm_arch_memslots_updated(kvm, gen);1650 1651 slots->generation = gen;1652}1653 1654static int kvm_prepare_memory_region(struct kvm *kvm,1655 const struct kvm_memory_slot *old,1656 struct kvm_memory_slot *new,1657 enum kvm_mr_change change)1658{1659 int r;1660 1661 /*1662 * If dirty logging is disabled, nullify the bitmap; the old bitmap1663 * will be freed on "commit". If logging is enabled in both old and1664 * new, reuse the existing bitmap. If logging is enabled only in the1665 * new and KVM isn't using a ring buffer, allocate and initialize a1666 * new bitmap.1667 */1668 if (change != KVM_MR_DELETE) {1669 if (!(new->flags & KVM_MEM_LOG_DIRTY_PAGES))1670 new->dirty_bitmap = NULL;1671 else if (old && old->dirty_bitmap)1672 new->dirty_bitmap = old->dirty_bitmap;1673 else if (kvm_use_dirty_bitmap(kvm)) {1674 r = kvm_alloc_dirty_bitmap(new);1675 if (r)1676 return r;1677 1678 if (kvm_dirty_log_manual_protect_and_init_set(kvm))1679 bitmap_set(new->dirty_bitmap, 0, new->npages);1680 }1681 }1682 1683 r = kvm_arch_prepare_memory_region(kvm, old, new, change);1684 1685 /* Free the bitmap on failure if it was allocated above. */1686 if (r && new && new->dirty_bitmap && (!old || !old->dirty_bitmap))1687 kvm_destroy_dirty_bitmap(new);1688 1689 return r;1690}1691 1692static void kvm_commit_memory_region(struct kvm *kvm,1693 struct kvm_memory_slot *old,1694 const struct kvm_memory_slot *new,1695 enum kvm_mr_change change)1696{1697 int old_flags = old ? old->flags : 0;1698 int new_flags = new ? new->flags : 0;1699 /*1700 * Update the total number of memslot pages before calling the arch1701 * hook so that architectures can consume the result directly.1702 */1703 if (change == KVM_MR_DELETE)1704 kvm->nr_memslot_pages -= old->npages;1705 else if (change == KVM_MR_CREATE)1706 kvm->nr_memslot_pages += new->npages;1707 1708 if ((old_flags ^ new_flags) & KVM_MEM_LOG_DIRTY_PAGES) {1709 int change = (new_flags & KVM_MEM_LOG_DIRTY_PAGES) ? 1 : -1;1710 atomic_set(&kvm->nr_memslots_dirty_logging,1711 atomic_read(&kvm->nr_memslots_dirty_logging) + change);1712 }1713 1714 kvm_arch_commit_memory_region(kvm, old, new, change);1715 1716 switch (change) {1717 case KVM_MR_CREATE:1718 /* Nothing more to do. */1719 break;1720 case KVM_MR_DELETE:1721 /* Free the old memslot and all its metadata. */1722 kvm_free_memslot(kvm, old);1723 break;1724 case KVM_MR_MOVE:1725 case KVM_MR_FLAGS_ONLY:1726 /*1727 * Free the dirty bitmap as needed; the below check encompasses1728 * both the flags and whether a ring buffer is being used)1729 */1730 if (old->dirty_bitmap && !new->dirty_bitmap)1731 kvm_destroy_dirty_bitmap(old);1732 1733 /*1734 * The final quirk. Free the detached, old slot, but only its1735 * memory, not any metadata. Metadata, including arch specific1736 * data, may be reused by @new.1737 */1738 kfree(old);1739 break;1740 default:1741 BUG();1742 }1743}1744 1745/*1746 * Activate @new, which must be installed in the inactive slots by the caller,1747 * by swapping the active slots and then propagating @new to @old once @old is1748 * unreachable and can be safely modified.1749 *1750 * With NULL @old this simply adds @new to @active (while swapping the sets).1751 * With NULL @new this simply removes @old from @active and frees it1752 * (while also swapping the sets).1753 */1754static void kvm_activate_memslot(struct kvm *kvm,1755 struct kvm_memory_slot *old,1756 struct kvm_memory_slot *new)1757{1758 int as_id = kvm_memslots_get_as_id(old, new);1759 1760 kvm_swap_active_memslots(kvm, as_id);1761 1762 /* Propagate the new memslot to the now inactive memslots. */1763 kvm_replace_memslot(kvm, old, new);1764}1765 1766static void kvm_copy_memslot(struct kvm_memory_slot *dest,1767 const struct kvm_memory_slot *src)1768{1769 dest->base_gfn = src->base_gfn;1770 dest->npages = src->npages;1771 dest->dirty_bitmap = src->dirty_bitmap;1772 dest->arch = src->arch;1773 dest->userspace_addr = src->userspace_addr;1774 dest->flags = src->flags;1775 dest->id = src->id;1776 dest->as_id = src->as_id;1777}1778 1779static void kvm_invalidate_memslot(struct kvm *kvm,1780 struct kvm_memory_slot *old,1781 struct kvm_memory_slot *invalid_slot)1782{1783 /*1784 * Mark the current slot INVALID. As with all memslot modifications,1785 * this must be done on an unreachable slot to avoid modifying the1786 * current slot in the active tree.1787 */1788 kvm_copy_memslot(invalid_slot, old);1789 invalid_slot->flags |= KVM_MEMSLOT_INVALID;1790 kvm_replace_memslot(kvm, old, invalid_slot);1791 1792 /*1793 * Activate the slot that is now marked INVALID, but don't propagate1794 * the slot to the now inactive slots. The slot is either going to be1795 * deleted or recreated as a new slot.1796 */1797 kvm_swap_active_memslots(kvm, old->as_id);1798 1799 /*1800 * From this point no new shadow pages pointing to a deleted, or moved,1801 * memslot will be created. Validation of sp->gfn happens in:1802 * - gfn_to_hva (kvm_read_guest, gfn_to_pfn)1803 * - kvm_is_visible_gfn (mmu_check_root)1804 */1805 kvm_arch_flush_shadow_memslot(kvm, old);1806 kvm_arch_guest_memory_reclaimed(kvm);1807 1808 /* Was released by kvm_swap_active_memslots(), reacquire. */1809 mutex_lock(&kvm->slots_arch_lock);1810 1811 /*1812 * Copy the arch-specific field of the newly-installed slot back to the1813 * old slot as the arch data could have changed between releasing1814 * slots_arch_lock in kvm_swap_active_memslots() and re-acquiring the lock1815 * above. Writers are required to retrieve memslots *after* acquiring1816 * slots_arch_lock, thus the active slot's data is guaranteed to be fresh.1817 */1818 old->arch = invalid_slot->arch;1819}1820 1821static void kvm_create_memslot(struct kvm *kvm,1822 struct kvm_memory_slot *new)1823{1824 /* Add the new memslot to the inactive set and activate. */1825 kvm_replace_memslot(kvm, NULL, new);1826 kvm_activate_memslot(kvm, NULL, new);1827}1828 1829static void kvm_delete_memslot(struct kvm *kvm,1830 struct kvm_memory_slot *old,1831 struct kvm_memory_slot *invalid_slot)1832{1833 /*1834 * Remove the old memslot (in the inactive memslots) by passing NULL as1835 * the "new" slot, and for the invalid version in the active slots.1836 */1837 kvm_replace_memslot(kvm, old, NULL);1838 kvm_activate_memslot(kvm, invalid_slot, NULL);1839}1840 1841static void kvm_move_memslot(struct kvm *kvm,1842 struct kvm_memory_slot *old,1843 struct kvm_memory_slot *new,1844 struct kvm_memory_slot *invalid_slot)1845{1846 /*1847 * Replace the old memslot in the inactive slots, and then swap slots1848 * and replace the current INVALID with the new as well.1849 */1850 kvm_replace_memslot(kvm, old, new);1851 kvm_activate_memslot(kvm, invalid_slot, new);1852}1853 1854static void kvm_update_flags_memslot(struct kvm *kvm,1855 struct kvm_memory_slot *old,1856 struct kvm_memory_slot *new)1857{1858 /*1859 * Similar to the MOVE case, but the slot doesn't need to be zapped as1860 * an intermediate step. Instead, the old memslot is simply replaced1861 * with a new, updated copy in both memslot sets.1862 */1863 kvm_replace_memslot(kvm, old, new);1864 kvm_activate_memslot(kvm, old, new);1865}1866 1867static int kvm_set_memslot(struct kvm *kvm,1868 struct kvm_memory_slot *old,1869 struct kvm_memory_slot *new,1870 enum kvm_mr_change change)1871{1872 struct kvm_memory_slot *invalid_slot;1873 int r;1874 1875 /*1876 * Released in kvm_swap_active_memslots().1877 *1878 * Must be held from before the current memslots are copied until after1879 * the new memslots are installed with rcu_assign_pointer, then1880 * released before the synchronize srcu in kvm_swap_active_memslots().1881 *1882 * When modifying memslots outside of the slots_lock, must be held1883 * before reading the pointer to the current memslots until after all1884 * changes to those memslots are complete.1885 *1886 * These rules ensure that installing new memslots does not lose1887 * changes made to the previous memslots.1888 */1889 mutex_lock(&kvm->slots_arch_lock);1890 1891 /*1892 * Invalidate the old slot if it's being deleted or moved. This is1893 * done prior to actually deleting/moving the memslot to allow vCPUs to1894 * continue running by ensuring there are no mappings or shadow pages1895 * for the memslot when it is deleted/moved. Without pre-invalidation1896 * (and without a lock), a window would exist between effecting the1897 * delete/move and committing the changes in arch code where KVM or a1898 * guest could access a non-existent memslot.1899 *1900 * Modifications are done on a temporary, unreachable slot. The old1901 * slot needs to be preserved in case a later step fails and the1902 * invalidation needs to be reverted.1903 */1904 if (change == KVM_MR_DELETE || change == KVM_MR_MOVE) {1905 invalid_slot = kzalloc(sizeof(*invalid_slot), GFP_KERNEL_ACCOUNT);1906 if (!invalid_slot) {1907 mutex_unlock(&kvm->slots_arch_lock);1908 return -ENOMEM;1909 }1910 kvm_invalidate_memslot(kvm, old, invalid_slot);1911 }1912 1913 r = kvm_prepare_memory_region(kvm, old, new, change);1914 if (r) {1915 /*1916 * For DELETE/MOVE, revert the above INVALID change. No1917 * modifications required since the original slot was preserved1918 * in the inactive slots. Changing the active memslots also1919 * release slots_arch_lock.1920 */1921 if (change == KVM_MR_DELETE || change == KVM_MR_MOVE) {1922 kvm_activate_memslot(kvm, invalid_slot, old);1923 kfree(invalid_slot);1924 } else {1925 mutex_unlock(&kvm->slots_arch_lock);1926 }1927 return r;1928 }1929 1930 /*1931 * For DELETE and MOVE, the working slot is now active as the INVALID1932 * version of the old slot. MOVE is particularly special as it reuses1933 * the old slot and returns a copy of the old slot (in working_slot).1934 * For CREATE, there is no old slot. For DELETE and FLAGS_ONLY, the1935 * old slot is detached but otherwise preserved.1936 */1937 if (change == KVM_MR_CREATE)1938 kvm_create_memslot(kvm, new);1939 else if (change == KVM_MR_DELETE)1940 kvm_delete_memslot(kvm, old, invalid_slot);1941 else if (change == KVM_MR_MOVE)1942 kvm_move_memslot(kvm, old, new, invalid_slot);1943 else if (change == KVM_MR_FLAGS_ONLY)1944 kvm_update_flags_memslot(kvm, old, new);1945 else1946 BUG();1947 1948 /* Free the temporary INVALID slot used for DELETE and MOVE. */1949 if (change == KVM_MR_DELETE || change == KVM_MR_MOVE)1950 kfree(invalid_slot);1951 1952 /*1953 * No need to refresh new->arch, changes after dropping slots_arch_lock1954 * will directly hit the final, active memslot. Architectures are1955 * responsible for knowing that new->arch may be stale.1956 */1957 kvm_commit_memory_region(kvm, old, new, change);1958 1959 return 0;1960}1961 1962static bool kvm_check_memslot_overlap(struct kvm_memslots *slots, int id,1963 gfn_t start, gfn_t end)1964{1965 struct kvm_memslot_iter iter;1966 1967 kvm_for_each_memslot_in_gfn_range(&iter, slots, start, end) {1968 if (iter.slot->id != id)1969 return true;1970 }1971 1972 return false;1973}1974 1975/*1976 * Allocate some memory and give it an address in the guest physical address1977 * space.1978 *1979 * Discontiguous memory is allowed, mostly for framebuffers.1980 *1981 * Must be called holding kvm->slots_lock for write.1982 */1983int __kvm_set_memory_region(struct kvm *kvm,1984 const struct kvm_userspace_memory_region2 *mem)1985{1986 struct kvm_memory_slot *old, *new;1987 struct kvm_memslots *slots;1988 enum kvm_mr_change change;1989 unsigned long npages;1990 gfn_t base_gfn;1991 int as_id, id;1992 int r;1993 1994 r = check_memory_region_flags(kvm, mem);1995 if (r)1996 return r;1997 1998 as_id = mem->slot >> 16;1999 id = (u16)mem->slot;2000 2001 /* General sanity checks */2002 if ((mem->memory_size & (PAGE_SIZE - 1)) ||2003 (mem->memory_size != (unsigned long)mem->memory_size))2004 return -EINVAL;2005 if (mem->guest_phys_addr & (PAGE_SIZE - 1))2006 return -EINVAL;2007 /* We can read the guest memory with __xxx_user() later on. */2008 if ((mem->userspace_addr & (PAGE_SIZE - 1)) ||2009 (mem->userspace_addr != untagged_addr(mem->userspace_addr)) ||2010 !access_ok((void __user *)(unsigned long)mem->userspace_addr,2011 mem->memory_size))2012 return -EINVAL;2013 if (mem->flags & KVM_MEM_GUEST_MEMFD &&2014 (mem->guest_memfd_offset & (PAGE_SIZE - 1) ||2015 mem->guest_memfd_offset + mem->memory_size < mem->guest_memfd_offset))2016 return -EINVAL;2017 if (as_id >= kvm_arch_nr_memslot_as_ids(kvm) || id >= KVM_MEM_SLOTS_NUM)2018 return -EINVAL;2019 if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)2020 return -EINVAL;2021 if ((mem->memory_size >> PAGE_SHIFT) > KVM_MEM_MAX_NR_PAGES)2022 return -EINVAL;2023 2024 slots = __kvm_memslots(kvm, as_id);2025 2026 /*2027 * Note, the old memslot (and the pointer itself!) may be invalidated2028 * and/or destroyed by kvm_set_memslot().2029 */2030 old = id_to_memslot(slots, id);2031 2032 if (!mem->memory_size) {2033 if (!old || !old->npages)2034 return -EINVAL;2035 2036 if (WARN_ON_ONCE(kvm->nr_memslot_pages < old->npages))2037 return -EIO;2038 2039 return kvm_set_memslot(kvm, old, NULL, KVM_MR_DELETE);2040 }2041 2042 base_gfn = (mem->guest_phys_addr >> PAGE_SHIFT);2043 npages = (mem->memory_size >> PAGE_SHIFT);2044 2045 if (!old || !old->npages) {2046 change = KVM_MR_CREATE;2047 2048 /*2049 * To simplify KVM internals, the total number of pages across2050 * all memslots must fit in an unsigned long.2051 */2052 if ((kvm->nr_memslot_pages + npages) < kvm->nr_memslot_pages)2053 return -EINVAL;2054 } else { /* Modify an existing slot. */2055 /* Private memslots are immutable, they can only be deleted. */2056 if (mem->flags & KVM_MEM_GUEST_MEMFD)2057 return -EINVAL;2058 if ((mem->userspace_addr != old->userspace_addr) ||2059 (npages != old->npages) ||2060 ((mem->flags ^ old->flags) & KVM_MEM_READONLY))2061 return -EINVAL;2062 2063 if (base_gfn != old->base_gfn)2064 change = KVM_MR_MOVE;2065 else if (mem->flags != old->flags)2066 change = KVM_MR_FLAGS_ONLY;2067 else /* Nothing to change. */2068 return 0;2069 }2070 2071 if ((change == KVM_MR_CREATE || change == KVM_MR_MOVE) &&2072 kvm_check_memslot_overlap(slots, id, base_gfn, base_gfn + npages))2073 return -EEXIST;2074 2075 /* Allocate a slot that will persist in the memslot. */2076 new = kzalloc(sizeof(*new), GFP_KERNEL_ACCOUNT);2077 if (!new)2078 return -ENOMEM;2079 2080 new->as_id = as_id;2081 new->id = id;2082 new->base_gfn = base_gfn;2083 new->npages = npages;2084 new->flags = mem->flags;2085 new->userspace_addr = mem->userspace_addr;2086 if (mem->flags & KVM_MEM_GUEST_MEMFD) {2087 r = kvm_gmem_bind(kvm, new, mem->guest_memfd, mem->guest_memfd_offset);2088 if (r)2089 goto out;2090 }2091 2092 r = kvm_set_memslot(kvm, old, new, change);2093 if (r)2094 goto out_unbind;2095 2096 return 0;2097 2098out_unbind:2099 if (mem->flags & KVM_MEM_GUEST_MEMFD)2100 kvm_gmem_unbind(new);2101out:2102 kfree(new);2103 return r;2104}2105EXPORT_SYMBOL_GPL(__kvm_set_memory_region);2106 2107int kvm_set_memory_region(struct kvm *kvm,2108 const struct kvm_userspace_memory_region2 *mem)2109{2110 int r;2111 2112 mutex_lock(&kvm->slots_lock);2113 r = __kvm_set_memory_region(kvm, mem);2114 mutex_unlock(&kvm->slots_lock);2115 return r;2116}2117EXPORT_SYMBOL_GPL(kvm_set_memory_region);2118 2119static int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,2120 struct kvm_userspace_memory_region2 *mem)2121{2122 if ((u16)mem->slot >= KVM_USER_MEM_SLOTS)2123 return -EINVAL;2124 2125 return kvm_set_memory_region(kvm, mem);2126}2127 2128#ifndef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT2129/**2130 * kvm_get_dirty_log - get a snapshot of dirty pages2131 * @kvm: pointer to kvm instance2132 * @log: slot id and address to which we copy the log2133 * @is_dirty: set to '1' if any dirty pages were found2134 * @memslot: set to the associated memslot, always valid on success2135 */2136int kvm_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log,2137 int *is_dirty, struct kvm_memory_slot **memslot)2138{2139 struct kvm_memslots *slots;2140 int i, as_id, id;2141 unsigned long n;2142 unsigned long any = 0;2143 2144 /* Dirty ring tracking may be exclusive to dirty log tracking */2145 if (!kvm_use_dirty_bitmap(kvm))2146 return -ENXIO;2147 2148 *memslot = NULL;2149 *is_dirty = 0;2150 2151 as_id = log->slot >> 16;2152 id = (u16)log->slot;2153 if (as_id >= kvm_arch_nr_memslot_as_ids(kvm) || id >= KVM_USER_MEM_SLOTS)2154 return -EINVAL;2155 2156 slots = __kvm_memslots(kvm, as_id);2157 *memslot = id_to_memslot(slots, id);2158 if (!(*memslot) || !(*memslot)->dirty_bitmap)2159 return -ENOENT;2160 2161 kvm_arch_sync_dirty_log(kvm, *memslot);2162 2163 n = kvm_dirty_bitmap_bytes(*memslot);2164 2165 for (i = 0; !any && i < n/sizeof(long); ++i)2166 any = (*memslot)->dirty_bitmap[i];2167 2168 if (copy_to_user(log->dirty_bitmap, (*memslot)->dirty_bitmap, n))2169 return -EFAULT;2170 2171 if (any)2172 *is_dirty = 1;2173 return 0;2174}2175EXPORT_SYMBOL_GPL(kvm_get_dirty_log);2176 2177#else /* CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT */2178/**2179 * kvm_get_dirty_log_protect - get a snapshot of dirty pages2180 * and reenable dirty page tracking for the corresponding pages.2181 * @kvm: pointer to kvm instance2182 * @log: slot id and address to which we copy the log2183 *2184 * We need to keep it in mind that VCPU threads can write to the bitmap2185 * concurrently. So, to avoid losing track of dirty pages we keep the2186 * following order:2187 *2188 * 1. Take a snapshot of the bit and clear it if needed.2189 * 2. Write protect the corresponding page.2190 * 3. Copy the snapshot to the userspace.2191 * 4. Upon return caller flushes TLB's if needed.2192 *2193 * Between 2 and 4, the guest may write to the page using the remaining TLB2194 * entry. This is not a problem because the page is reported dirty using2195 * the snapshot taken before and step 4 ensures that writes done after2196 * exiting to userspace will be logged for the next call.2197 *2198 */2199static int kvm_get_dirty_log_protect(struct kvm *kvm, struct kvm_dirty_log *log)2200{2201 struct kvm_memslots *slots;2202 struct kvm_memory_slot *memslot;2203 int i, as_id, id;2204 unsigned long n;2205 unsigned long *dirty_bitmap;2206 unsigned long *dirty_bitmap_buffer;2207 bool flush;2208 2209 /* Dirty ring tracking may be exclusive to dirty log tracking */2210 if (!kvm_use_dirty_bitmap(kvm))2211 return -ENXIO;2212 2213 as_id = log->slot >> 16;2214 id = (u16)log->slot;2215 if (as_id >= kvm_arch_nr_memslot_as_ids(kvm) || id >= KVM_USER_MEM_SLOTS)2216 return -EINVAL;2217 2218 slots = __kvm_memslots(kvm, as_id);2219 memslot = id_to_memslot(slots, id);2220 if (!memslot || !memslot->dirty_bitmap)2221 return -ENOENT;2222 2223 dirty_bitmap = memslot->dirty_bitmap;2224 2225 kvm_arch_sync_dirty_log(kvm, memslot);2226 2227 n = kvm_dirty_bitmap_bytes(memslot);2228 flush = false;2229 if (kvm->manual_dirty_log_protect) {2230 /*2231 * Unlike kvm_get_dirty_log, we always return false in *flush,2232 * because no flush is needed until KVM_CLEAR_DIRTY_LOG. There2233 * is some code duplication between this function and2234 * kvm_get_dirty_log, but hopefully all architecture2235 * transition to kvm_get_dirty_log_protect and kvm_get_dirty_log2236 * can be eliminated.2237 */2238 dirty_bitmap_buffer = dirty_bitmap;2239 } else {2240 dirty_bitmap_buffer = kvm_second_dirty_bitmap(memslot);2241 memset(dirty_bitmap_buffer, 0, n);2242 2243 KVM_MMU_LOCK(kvm);2244 for (i = 0; i < n / sizeof(long); i++) {2245 unsigned long mask;2246 gfn_t offset;2247 2248 if (!dirty_bitmap[i])2249 continue;2250 2251 flush = true;2252 mask = xchg(&dirty_bitmap[i], 0);2253 dirty_bitmap_buffer[i] = mask;2254 2255 offset = i * BITS_PER_LONG;2256 kvm_arch_mmu_enable_log_dirty_pt_masked(kvm, memslot,2257 offset, mask);2258 }2259 KVM_MMU_UNLOCK(kvm);2260 }2261 2262 if (flush)2263 kvm_flush_remote_tlbs_memslot(kvm, memslot);2264 2265 if (copy_to_user(log->dirty_bitmap, dirty_bitmap_buffer, n))2266 return -EFAULT;2267 return 0;2268}2269 2270 2271/**2272 * kvm_vm_ioctl_get_dirty_log - get and clear the log of dirty pages in a slot2273 * @kvm: kvm instance2274 * @log: slot id and address to which we copy the log2275 *2276 * Steps 1-4 below provide general overview of dirty page logging. See2277 * kvm_get_dirty_log_protect() function description for additional details.2278 *2279 * We call kvm_get_dirty_log_protect() to handle steps 1-3, upon return we2280 * always flush the TLB (step 4) even if previous step failed and the dirty2281 * bitmap may be corrupt. Regardless of previous outcome the KVM logging API2282 * does not preclude user space subsequent dirty log read. Flushing TLB ensures2283 * writes will be marked dirty for next log read.2284 *2285 * 1. Take a snapshot of the bit and clear it if needed.2286 * 2. Write protect the corresponding page.2287 * 3. Copy the snapshot to the userspace.2288 * 4. Flush TLB's if needed.2289 */2290static int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,2291 struct kvm_dirty_log *log)2292{2293 int r;2294 2295 mutex_lock(&kvm->slots_lock);2296 2297 r = kvm_get_dirty_log_protect(kvm, log);2298 2299 mutex_unlock(&kvm->slots_lock);2300 return r;2301}2302 2303/**2304 * kvm_clear_dirty_log_protect - clear dirty bits in the bitmap2305 * and reenable dirty page tracking for the corresponding pages.2306 * @kvm: pointer to kvm instance2307 * @log: slot id and address from which to fetch the bitmap of dirty pages2308 */2309static int kvm_clear_dirty_log_protect(struct kvm *kvm,2310 struct kvm_clear_dirty_log *log)2311{2312 struct kvm_memslots *slots;2313 struct kvm_memory_slot *memslot;2314 int as_id, id;2315 gfn_t offset;2316 unsigned long i, n;2317 unsigned long *dirty_bitmap;2318 unsigned long *dirty_bitmap_buffer;2319 bool flush;2320 2321 /* Dirty ring tracking may be exclusive to dirty log tracking */2322 if (!kvm_use_dirty_bitmap(kvm))2323 return -ENXIO;2324 2325 as_id = log->slot >> 16;2326 id = (u16)log->slot;2327 if (as_id >= kvm_arch_nr_memslot_as_ids(kvm) || id >= KVM_USER_MEM_SLOTS)2328 return -EINVAL;2329 2330 if (log->first_page & 63)2331 return -EINVAL;2332 2333 slots = __kvm_memslots(kvm, as_id);2334 memslot = id_to_memslot(slots, id);2335 if (!memslot || !memslot->dirty_bitmap)2336 return -ENOENT;2337 2338 dirty_bitmap = memslot->dirty_bitmap;2339 2340 n = ALIGN(log->num_pages, BITS_PER_LONG) / 8;2341 2342 if (log->first_page > memslot->npages ||2343 log->num_pages > memslot->npages - log->first_page ||2344 (log->num_pages < memslot->npages - log->first_page && (log->num_pages & 63)))2345 return -EINVAL;2346 2347 kvm_arch_sync_dirty_log(kvm, memslot);2348 2349 flush = false;2350 dirty_bitmap_buffer = kvm_second_dirty_bitmap(memslot);2351 if (copy_from_user(dirty_bitmap_buffer, log->dirty_bitmap, n))2352 return -EFAULT;2353 2354 KVM_MMU_LOCK(kvm);2355 for (offset = log->first_page, i = offset / BITS_PER_LONG,2356 n = DIV_ROUND_UP(log->num_pages, BITS_PER_LONG); n--;2357 i++, offset += BITS_PER_LONG) {2358 unsigned long mask = *dirty_bitmap_buffer++;2359 atomic_long_t *p = (atomic_long_t *) &dirty_bitmap[i];2360 if (!mask)2361 continue;2362 2363 mask &= atomic_long_fetch_andnot(mask, p);2364 2365 /*2366 * mask contains the bits that really have been cleared. This2367 * never includes any bits beyond the length of the memslot (if2368 * the length is not aligned to 64 pages), therefore it is not2369 * a problem if userspace sets them in log->dirty_bitmap.2370 */2371 if (mask) {2372 flush = true;2373 kvm_arch_mmu_enable_log_dirty_pt_masked(kvm, memslot,2374 offset, mask);2375 }2376 }2377 KVM_MMU_UNLOCK(kvm);2378 2379 if (flush)2380 kvm_flush_remote_tlbs_memslot(kvm, memslot);2381 2382 return 0;2383}2384 2385static int kvm_vm_ioctl_clear_dirty_log(struct kvm *kvm,2386 struct kvm_clear_dirty_log *log)2387{2388 int r;2389 2390 mutex_lock(&kvm->slots_lock);2391 2392 r = kvm_clear_dirty_log_protect(kvm, log);2393 2394 mutex_unlock(&kvm->slots_lock);2395 return r;2396}2397#endif /* CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT */2398 2399#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES2400static u64 kvm_supported_mem_attributes(struct kvm *kvm)2401{2402 if (!kvm || kvm_arch_has_private_mem(kvm))2403 return KVM_MEMORY_ATTRIBUTE_PRIVATE;2404 2405 return 0;2406}2407 2408/*2409 * Returns true if _all_ gfns in the range [@start, @end) have attributes2410 * such that the bits in @mask match @attrs.2411 */2412bool kvm_range_has_memory_attributes(struct kvm *kvm, gfn_t start, gfn_t end,2413 unsigned long mask, unsigned long attrs)2414{2415 XA_STATE(xas, &kvm->mem_attr_array, start);2416 unsigned long index;2417 void *entry;2418 2419 mask &= kvm_supported_mem_attributes(kvm);2420 if (attrs & ~mask)2421 return false;2422 2423 if (end == start + 1)2424 return (kvm_get_memory_attributes(kvm, start) & mask) == attrs;2425 2426 guard(rcu)();2427 if (!attrs)2428 return !xas_find(&xas, end - 1);2429 2430 for (index = start; index < end; index++) {2431 do {2432 entry = xas_next(&xas);2433 } while (xas_retry(&xas, entry));2434 2435 if (xas.xa_index != index ||2436 (xa_to_value(entry) & mask) != attrs)2437 return false;2438 }2439 2440 return true;2441}2442 2443static __always_inline void kvm_handle_gfn_range(struct kvm *kvm,2444 struct kvm_mmu_notifier_range *range)2445{2446 struct kvm_gfn_range gfn_range;2447 struct kvm_memory_slot *slot;2448 struct kvm_memslots *slots;2449 struct kvm_memslot_iter iter;2450 bool found_memslot = false;2451 bool ret = false;2452 int i;2453 2454 gfn_range.arg = range->arg;2455 gfn_range.may_block = range->may_block;2456 2457 for (i = 0; i < kvm_arch_nr_memslot_as_ids(kvm); i++) {2458 slots = __kvm_memslots(kvm, i);2459 2460 kvm_for_each_memslot_in_gfn_range(&iter, slots, range->start, range->end) {2461 slot = iter.slot;2462 gfn_range.slot = slot;2463 2464 gfn_range.start = max(range->start, slot->base_gfn);2465 gfn_range.end = min(range->end, slot->base_gfn + slot->npages);2466 if (gfn_range.start >= gfn_range.end)2467 continue;2468 2469 if (!found_memslot) {2470 found_memslot = true;2471 KVM_MMU_LOCK(kvm);2472 if (!IS_KVM_NULL_FN(range->on_lock))2473 range->on_lock(kvm);2474 }2475 2476 ret |= range->handler(kvm, &gfn_range);2477 }2478 }2479 2480 if (range->flush_on_ret && ret)2481 kvm_flush_remote_tlbs(kvm);2482 2483 if (found_memslot)2484 KVM_MMU_UNLOCK(kvm);2485}2486 2487static bool kvm_pre_set_memory_attributes(struct kvm *kvm,2488 struct kvm_gfn_range *range)2489{2490 /*2491 * Unconditionally add the range to the invalidation set, regardless of2492 * whether or not the arch callback actually needs to zap SPTEs. E.g.2493 * if KVM supports RWX attributes in the future and the attributes are2494 * going from R=>RW, zapping isn't strictly necessary. Unconditionally2495 * adding the range allows KVM to require that MMU invalidations add at2496 * least one range between begin() and end(), e.g. allows KVM to detect2497 * bugs where the add() is missed. Relaxing the rule *might* be safe,2498 * but it's not obvious that allowing new mappings while the attributes2499 * are in flux is desirable or worth the complexity.2500 */2501 kvm_mmu_invalidate_range_add(kvm, range->start, range->end);2502 2503 return kvm_arch_pre_set_memory_attributes(kvm, range);2504}2505 2506/* Set @attributes for the gfn range [@start, @end). */2507static int kvm_vm_set_mem_attributes(struct kvm *kvm, gfn_t start, gfn_t end,2508 unsigned long attributes)2509{2510 struct kvm_mmu_notifier_range pre_set_range = {2511 .start = start,2512 .end = end,2513 .handler = kvm_pre_set_memory_attributes,2514 .on_lock = kvm_mmu_invalidate_begin,2515 .flush_on_ret = true,2516 .may_block = true,2517 };2518 struct kvm_mmu_notifier_range post_set_range = {2519 .start = start,2520 .end = end,2521 .arg.attributes = attributes,2522 .handler = kvm_arch_post_set_memory_attributes,2523 .on_lock = kvm_mmu_invalidate_end,2524 .may_block = true,2525 };2526 unsigned long i;2527 void *entry;2528 int r = 0;2529 2530 entry = attributes ? xa_mk_value(attributes) : NULL;2531 2532 mutex_lock(&kvm->slots_lock);2533 2534 /* Nothing to do if the entire range as the desired attributes. */2535 if (kvm_range_has_memory_attributes(kvm, start, end, ~0, attributes))2536 goto out_unlock;2537 2538 /*2539 * Reserve memory ahead of time to avoid having to deal with failures2540 * partway through setting the new attributes.2541 */2542 for (i = start; i < end; i++) {2543 r = xa_reserve(&kvm->mem_attr_array, i, GFP_KERNEL_ACCOUNT);2544 if (r)2545 goto out_unlock;2546 }2547 2548 kvm_handle_gfn_range(kvm, &pre_set_range);2549 2550 for (i = start; i < end; i++) {2551 r = xa_err(xa_store(&kvm->mem_attr_array, i, entry,2552 GFP_KERNEL_ACCOUNT));2553 KVM_BUG_ON(r, kvm);2554 }2555 2556 kvm_handle_gfn_range(kvm, &post_set_range);2557 2558out_unlock:2559 mutex_unlock(&kvm->slots_lock);2560 2561 return r;2562}2563static int kvm_vm_ioctl_set_mem_attributes(struct kvm *kvm,2564 struct kvm_memory_attributes *attrs)2565{2566 gfn_t start, end;2567 2568 /* flags is currently not used. */2569 if (attrs->flags)2570 return -EINVAL;2571 if (attrs->attributes & ~kvm_supported_mem_attributes(kvm))2572 return -EINVAL;2573 if (attrs->size == 0 || attrs->address + attrs->size < attrs->address)2574 return -EINVAL;2575 if (!PAGE_ALIGNED(attrs->address) || !PAGE_ALIGNED(attrs->size))2576 return -EINVAL;2577 2578 start = attrs->address >> PAGE_SHIFT;2579 end = (attrs->address + attrs->size) >> PAGE_SHIFT;2580 2581 /*2582 * xarray tracks data using "unsigned long", and as a result so does2583 * KVM. For simplicity, supports generic attributes only on 64-bit2584 * architectures.2585 */2586 BUILD_BUG_ON(sizeof(attrs->attributes) != sizeof(unsigned long));2587 2588 return kvm_vm_set_mem_attributes(kvm, start, end, attrs->attributes);2589}2590#endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */2591 2592struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn)2593{2594 return __gfn_to_memslot(kvm_memslots(kvm), gfn);2595}2596EXPORT_SYMBOL_GPL(gfn_to_memslot);2597 2598struct kvm_memory_slot *kvm_vcpu_gfn_to_memslot(struct kvm_vcpu *vcpu, gfn_t gfn)2599{2600 struct kvm_memslots *slots = kvm_vcpu_memslots(vcpu);2601 u64 gen = slots->generation;2602 struct kvm_memory_slot *slot;2603 2604 /*2605 * This also protects against using a memslot from a different address space,2606 * since different address spaces have different generation numbers.2607 */2608 if (unlikely(gen != vcpu->last_used_slot_gen)) {2609 vcpu->last_used_slot = NULL;2610 vcpu->last_used_slot_gen = gen;2611 }2612 2613 slot = try_get_memslot(vcpu->last_used_slot, gfn);2614 if (slot)2615 return slot;2616 2617 /*2618 * Fall back to searching all memslots. We purposely use2619 * search_memslots() instead of __gfn_to_memslot() to avoid2620 * thrashing the VM-wide last_used_slot in kvm_memslots.2621 */2622 slot = search_memslots(slots, gfn, false);2623 if (slot) {2624 vcpu->last_used_slot = slot;2625 return slot;2626 }2627 2628 return NULL;2629}2630 2631bool kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn)2632{2633 struct kvm_memory_slot *memslot = gfn_to_memslot(kvm, gfn);2634 2635 return kvm_is_visible_memslot(memslot);2636}2637EXPORT_SYMBOL_GPL(kvm_is_visible_gfn);2638 2639bool kvm_vcpu_is_visible_gfn(struct kvm_vcpu *vcpu, gfn_t gfn)2640{2641 struct kvm_memory_slot *memslot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);2642 2643 return kvm_is_visible_memslot(memslot);2644}2645EXPORT_SYMBOL_GPL(kvm_vcpu_is_visible_gfn);2646 2647unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn)2648{2649 struct vm_area_struct *vma;2650 unsigned long addr, size;2651 2652 size = PAGE_SIZE;2653 2654 addr = kvm_vcpu_gfn_to_hva_prot(vcpu, gfn, NULL);2655 if (kvm_is_error_hva(addr))2656 return PAGE_SIZE;2657 2658 mmap_read_lock(current->mm);2659 vma = find_vma(current->mm, addr);2660 if (!vma)2661 goto out;2662 2663 size = vma_kernel_pagesize(vma);2664 2665out:2666 mmap_read_unlock(current->mm);2667 2668 return size;2669}2670 2671static bool memslot_is_readonly(const struct kvm_memory_slot *slot)2672{2673 return slot->flags & KVM_MEM_READONLY;2674}2675 2676static unsigned long __gfn_to_hva_many(const struct kvm_memory_slot *slot, gfn_t gfn,2677 gfn_t *nr_pages, bool write)2678{2679 if (!slot || slot->flags & KVM_MEMSLOT_INVALID)2680 return KVM_HVA_ERR_BAD;2681 2682 if (memslot_is_readonly(slot) && write)2683 return KVM_HVA_ERR_RO_BAD;2684 2685 if (nr_pages)2686 *nr_pages = slot->npages - (gfn - slot->base_gfn);2687 2688 return __gfn_to_hva_memslot(slot, gfn);2689}2690 2691static unsigned long gfn_to_hva_many(struct kvm_memory_slot *slot, gfn_t gfn,2692 gfn_t *nr_pages)2693{2694 return __gfn_to_hva_many(slot, gfn, nr_pages, true);2695}2696 2697unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot,2698 gfn_t gfn)2699{2700 return gfn_to_hva_many(slot, gfn, NULL);2701}2702EXPORT_SYMBOL_GPL(gfn_to_hva_memslot);2703 2704unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn)2705{2706 return gfn_to_hva_many(gfn_to_memslot(kvm, gfn), gfn, NULL);2707}2708EXPORT_SYMBOL_GPL(gfn_to_hva);2709 2710unsigned long kvm_vcpu_gfn_to_hva(struct kvm_vcpu *vcpu, gfn_t gfn)2711{2712 return gfn_to_hva_many(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn, NULL);2713}2714EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_hva);2715 2716/*2717 * Return the hva of a @gfn and the R/W attribute if possible.2718 *2719 * @slot: the kvm_memory_slot which contains @gfn2720 * @gfn: the gfn to be translated2721 * @writable: used to return the read/write attribute of the @slot if the hva2722 * is valid and @writable is not NULL2723 */2724unsigned long gfn_to_hva_memslot_prot(struct kvm_memory_slot *slot,2725 gfn_t gfn, bool *writable)2726{2727 unsigned long hva = __gfn_to_hva_many(slot, gfn, NULL, false);2728 2729 if (!kvm_is_error_hva(hva) && writable)2730 *writable = !memslot_is_readonly(slot);2731 2732 return hva;2733}2734 2735unsigned long gfn_to_hva_prot(struct kvm *kvm, gfn_t gfn, bool *writable)2736{2737 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);2738 2739 return gfn_to_hva_memslot_prot(slot, gfn, writable);2740}2741 2742unsigned long kvm_vcpu_gfn_to_hva_prot(struct kvm_vcpu *vcpu, gfn_t gfn, bool *writable)2743{2744 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);2745 2746 return gfn_to_hva_memslot_prot(slot, gfn, writable);2747}2748 2749static inline int check_user_page_hwpoison(unsigned long addr)2750{2751 int rc, flags = FOLL_HWPOISON | FOLL_WRITE;2752 2753 rc = get_user_pages(addr, 1, flags, NULL);2754 return rc == -EHWPOISON;2755}2756 2757/*2758 * The fast path to get the writable pfn which will be stored in @pfn,2759 * true indicates success, otherwise false is returned. It's also the2760 * only part that runs if we can in atomic context.2761 */2762static bool hva_to_pfn_fast(unsigned long addr, bool write_fault,2763 bool *writable, kvm_pfn_t *pfn)2764{2765 struct page *page[1];2766 2767 /*2768 * Fast pin a writable pfn only if it is a write fault request2769 * or the caller allows to map a writable pfn for a read fault2770 * request.2771 */2772 if (!(write_fault || writable))2773 return false;2774 2775 if (get_user_page_fast_only(addr, FOLL_WRITE, page)) {2776 *pfn = page_to_pfn(page[0]);2777 2778 if (writable)2779 *writable = true;2780 return true;2781 }2782 2783 return false;2784}2785 2786/*2787 * The slow path to get the pfn of the specified host virtual address,2788 * 1 indicates success, -errno is returned if error is detected.2789 */2790static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault,2791 bool interruptible, bool *writable, kvm_pfn_t *pfn)2792{2793 /*2794 * When a VCPU accesses a page that is not mapped into the secondary2795 * MMU, we lookup the page using GUP to map it, so the guest VCPU can2796 * make progress. We always want to honor NUMA hinting faults in that2797 * case, because GUP usage corresponds to memory accesses from the VCPU.2798 * Otherwise, we'd not trigger NUMA hinting faults once a page is2799 * mapped into the secondary MMU and gets accessed by a VCPU.2800 *2801 * Note that get_user_page_fast_only() and FOLL_WRITE for now2802 * implicitly honor NUMA hinting faults and don't need this flag.2803 */2804 unsigned int flags = FOLL_HWPOISON | FOLL_HONOR_NUMA_FAULT;2805 struct page *page;2806 int npages;2807 2808 might_sleep();2809 2810 if (writable)2811 *writable = write_fault;2812 2813 if (write_fault)2814 flags |= FOLL_WRITE;2815 if (async)2816 flags |= FOLL_NOWAIT;2817 if (interruptible)2818 flags |= FOLL_INTERRUPTIBLE;2819 2820 npages = get_user_pages_unlocked(addr, 1, &page, flags);2821 if (npages != 1)2822 return npages;2823 2824 /* map read fault as writable if possible */2825 if (unlikely(!write_fault) && writable) {2826 struct page *wpage;2827 2828 if (get_user_page_fast_only(addr, FOLL_WRITE, &wpage)) {2829 *writable = true;2830 put_page(page);2831 page = wpage;2832 }2833 }2834 *pfn = page_to_pfn(page);2835 return npages;2836}2837 2838static bool vma_is_valid(struct vm_area_struct *vma, bool write_fault)2839{2840 if (unlikely(!(vma->vm_flags & VM_READ)))2841 return false;2842 2843 if (write_fault && (unlikely(!(vma->vm_flags & VM_WRITE))))2844 return false;2845 2846 return true;2847}2848 2849static int kvm_try_get_pfn(kvm_pfn_t pfn)2850{2851 struct page *page = kvm_pfn_to_refcounted_page(pfn);2852 2853 if (!page)2854 return 1;2855 2856 return get_page_unless_zero(page);2857}2858 2859static int hva_to_pfn_remapped(struct vm_area_struct *vma,2860 unsigned long addr, bool write_fault,2861 bool *writable, kvm_pfn_t *p_pfn)2862{2863 struct follow_pfnmap_args args = { .vma = vma, .address = addr };2864 kvm_pfn_t pfn;2865 int r;2866 2867 r = follow_pfnmap_start(&args);2868 if (r) {2869 /*2870 * get_user_pages fails for VM_IO and VM_PFNMAP vmas and does2871 * not call the fault handler, so do it here.2872 */2873 bool unlocked = false;2874 r = fixup_user_fault(current->mm, addr,2875 (write_fault ? FAULT_FLAG_WRITE : 0),2876 &unlocked);2877 if (unlocked)2878 return -EAGAIN;2879 if (r)2880 return r;2881 2882 r = follow_pfnmap_start(&args);2883 if (r)2884 return r;2885 }2886 2887 if (write_fault && !args.writable) {2888 pfn = KVM_PFN_ERR_RO_FAULT;2889 goto out;2890 }2891 2892 if (writable)2893 *writable = args.writable;2894 pfn = args.pfn;2895 2896 /*2897 * Get a reference here because callers of *hva_to_pfn* and2898 * *gfn_to_pfn* ultimately call kvm_release_pfn_clean on the2899 * returned pfn. This is only needed if the VMA has VM_MIXEDMAP2900 * set, but the kvm_try_get_pfn/kvm_release_pfn_clean pair will2901 * simply do nothing for reserved pfns.2902 *2903 * Whoever called remap_pfn_range is also going to call e.g.2904 * unmap_mapping_range before the underlying pages are freed,2905 * causing a call to our MMU notifier.2906 *2907 * Certain IO or PFNMAP mappings can be backed with valid2908 * struct pages, but be allocated without refcounting e.g.,2909 * tail pages of non-compound higher order allocations, which2910 * would then underflow the refcount when the caller does the2911 * required put_page. Don't allow those pages here.2912 */2913 if (!kvm_try_get_pfn(pfn))2914 r = -EFAULT;2915out:2916 follow_pfnmap_end(&args);2917 *p_pfn = pfn;2918 2919 return r;2920}2921 2922/*2923 * Pin guest page in memory and return its pfn.2924 * @addr: host virtual address which maps memory to the guest2925 * @atomic: whether this function is forbidden from sleeping2926 * @interruptible: whether the process can be interrupted by non-fatal signals2927 * @async: whether this function need to wait IO complete if the2928 * host page is not in the memory2929 * @write_fault: whether we should get a writable host page2930 * @writable: whether it allows to map a writable host page for !@write_fault2931 *2932 * The function will map a writable host page for these two cases:2933 * 1): @write_fault = true2934 * 2): @write_fault = false && @writable, @writable will tell the caller2935 * whether the mapping is writable.2936 */2937kvm_pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool interruptible,2938 bool *async, bool write_fault, bool *writable)2939{2940 struct vm_area_struct *vma;2941 kvm_pfn_t pfn;2942 int npages, r;2943 2944 /* we can do it either atomically or asynchronously, not both */2945 BUG_ON(atomic && async);2946 2947 if (hva_to_pfn_fast(addr, write_fault, writable, &pfn))2948 return pfn;2949 2950 if (atomic)2951 return KVM_PFN_ERR_FAULT;2952 2953 npages = hva_to_pfn_slow(addr, async, write_fault, interruptible,2954 writable, &pfn);2955 if (npages == 1)2956 return pfn;2957 if (npages == -EINTR)2958 return KVM_PFN_ERR_SIGPENDING;2959 2960 mmap_read_lock(current->mm);2961 if (npages == -EHWPOISON ||2962 (!async && check_user_page_hwpoison(addr))) {2963 pfn = KVM_PFN_ERR_HWPOISON;2964 goto exit;2965 }2966 2967retry:2968 vma = vma_lookup(current->mm, addr);2969 2970 if (vma == NULL)2971 pfn = KVM_PFN_ERR_FAULT;2972 else if (vma->vm_flags & (VM_IO | VM_PFNMAP)) {2973 r = hva_to_pfn_remapped(vma, addr, write_fault, writable, &pfn);2974 if (r == -EAGAIN)2975 goto retry;2976 if (r < 0)2977 pfn = KVM_PFN_ERR_FAULT;2978 } else {2979 if (async && vma_is_valid(vma, write_fault))2980 *async = true;2981 pfn = KVM_PFN_ERR_FAULT;2982 }2983exit:2984 mmap_read_unlock(current->mm);2985 return pfn;2986}2987 2988kvm_pfn_t __gfn_to_pfn_memslot(const struct kvm_memory_slot *slot, gfn_t gfn,2989 bool atomic, bool interruptible, bool *async,2990 bool write_fault, bool *writable, hva_t *hva)2991{2992 unsigned long addr = __gfn_to_hva_many(slot, gfn, NULL, write_fault);2993 2994 if (hva)2995 *hva = addr;2996 2997 if (kvm_is_error_hva(addr)) {2998 if (writable)2999 *writable = false;3000 3001 return addr == KVM_HVA_ERR_RO_BAD ? KVM_PFN_ERR_RO_FAULT :3002 KVM_PFN_NOSLOT;3003 }3004 3005 /* Do not map writable pfn in the readonly memslot. */3006 if (writable && memslot_is_readonly(slot)) {3007 *writable = false;3008 writable = NULL;3009 }3010 3011 return hva_to_pfn(addr, atomic, interruptible, async, write_fault,3012 writable);3013}3014EXPORT_SYMBOL_GPL(__gfn_to_pfn_memslot);3015 3016kvm_pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault,3017 bool *writable)3018{3019 return __gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn, false, false,3020 NULL, write_fault, writable, NULL);3021}3022EXPORT_SYMBOL_GPL(gfn_to_pfn_prot);3023 3024kvm_pfn_t gfn_to_pfn_memslot(const struct kvm_memory_slot *slot, gfn_t gfn)3025{3026 return __gfn_to_pfn_memslot(slot, gfn, false, false, NULL, true,3027 NULL, NULL);3028}3029EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot);3030 3031kvm_pfn_t gfn_to_pfn_memslot_atomic(const struct kvm_memory_slot *slot, gfn_t gfn)3032{3033 return __gfn_to_pfn_memslot(slot, gfn, true, false, NULL, true,3034 NULL, NULL);3035}3036EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot_atomic);3037 3038kvm_pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn)3039{3040 return gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn);3041}3042EXPORT_SYMBOL_GPL(gfn_to_pfn);3043 3044int gfn_to_page_many_atomic(struct kvm_memory_slot *slot, gfn_t gfn,3045 struct page **pages, int nr_pages)3046{3047 unsigned long addr;3048 gfn_t entry = 0;3049 3050 addr = gfn_to_hva_many(slot, gfn, &entry);3051 if (kvm_is_error_hva(addr))3052 return -1;3053 3054 if (entry < nr_pages)3055 return 0;3056 3057 return get_user_pages_fast_only(addr, nr_pages, FOLL_WRITE, pages);3058}3059EXPORT_SYMBOL_GPL(gfn_to_page_many_atomic);3060 3061/*3062 * Do not use this helper unless you are absolutely certain the gfn _must_ be3063 * backed by 'struct page'. A valid example is if the backing memslot is3064 * controlled by KVM. Note, if the returned page is valid, it's refcount has3065 * been elevated by gfn_to_pfn().3066 */3067struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn)3068{3069 struct page *page;3070 kvm_pfn_t pfn;3071 3072 pfn = gfn_to_pfn(kvm, gfn);3073 3074 if (is_error_noslot_pfn(pfn))3075 return KVM_ERR_PTR_BAD_PAGE;3076 3077 page = kvm_pfn_to_refcounted_page(pfn);3078 if (!page)3079 return KVM_ERR_PTR_BAD_PAGE;3080 3081 return page;3082}3083EXPORT_SYMBOL_GPL(gfn_to_page);3084 3085void kvm_release_pfn(kvm_pfn_t pfn, bool dirty)3086{3087 if (dirty)3088 kvm_release_pfn_dirty(pfn);3089 else3090 kvm_release_pfn_clean(pfn);3091}3092 3093int kvm_vcpu_map(struct kvm_vcpu *vcpu, gfn_t gfn, struct kvm_host_map *map)3094{3095 kvm_pfn_t pfn;3096 void *hva = NULL;3097 struct page *page = KVM_UNMAPPED_PAGE;3098 3099 if (!map)3100 return -EINVAL;3101 3102 pfn = gfn_to_pfn(vcpu->kvm, gfn);3103 if (is_error_noslot_pfn(pfn))3104 return -EINVAL;3105 3106 if (pfn_valid(pfn)) {3107 page = pfn_to_page(pfn);3108 hva = kmap(page);3109#ifdef CONFIG_HAS_IOMEM3110 } else {3111 hva = memremap(pfn_to_hpa(pfn), PAGE_SIZE, MEMREMAP_WB);3112#endif3113 }3114 3115 if (!hva)3116 return -EFAULT;3117 3118 map->page = page;3119 map->hva = hva;3120 map->pfn = pfn;3121 map->gfn = gfn;3122 3123 return 0;3124}3125EXPORT_SYMBOL_GPL(kvm_vcpu_map);3126 3127void kvm_vcpu_unmap(struct kvm_vcpu *vcpu, struct kvm_host_map *map, bool dirty)3128{3129 if (!map)3130 return;3131 3132 if (!map->hva)3133 return;3134 3135 if (map->page != KVM_UNMAPPED_PAGE)3136 kunmap(map->page);3137#ifdef CONFIG_HAS_IOMEM3138 else3139 memunmap(map->hva);3140#endif3141 3142 if (dirty)3143 kvm_vcpu_mark_page_dirty(vcpu, map->gfn);3144 3145 kvm_release_pfn(map->pfn, dirty);3146 3147 map->hva = NULL;3148 map->page = NULL;3149}3150EXPORT_SYMBOL_GPL(kvm_vcpu_unmap);3151 3152static bool kvm_is_ad_tracked_page(struct page *page)3153{3154 /*3155 * Per page-flags.h, pages tagged PG_reserved "should in general not be3156 * touched (e.g. set dirty) except by its owner".3157 */3158 return !PageReserved(page);3159}3160 3161static void kvm_set_page_dirty(struct page *page)3162{3163 if (kvm_is_ad_tracked_page(page))3164 SetPageDirty(page);3165}3166 3167static void kvm_set_page_accessed(struct page *page)3168{3169 if (kvm_is_ad_tracked_page(page))3170 mark_page_accessed(page);3171}3172 3173void kvm_release_page_clean(struct page *page)3174{3175 WARN_ON(is_error_page(page));3176 3177 kvm_set_page_accessed(page);3178 put_page(page);3179}3180EXPORT_SYMBOL_GPL(kvm_release_page_clean);3181 3182void kvm_release_pfn_clean(kvm_pfn_t pfn)3183{3184 struct page *page;3185 3186 if (is_error_noslot_pfn(pfn))3187 return;3188 3189 page = kvm_pfn_to_refcounted_page(pfn);3190 if (!page)3191 return;3192 3193 kvm_release_page_clean(page);3194}3195EXPORT_SYMBOL_GPL(kvm_release_pfn_clean);3196 3197void kvm_release_page_dirty(struct page *page)3198{3199 WARN_ON(is_error_page(page));3200 3201 kvm_set_page_dirty(page);3202 kvm_release_page_clean(page);3203}3204EXPORT_SYMBOL_GPL(kvm_release_page_dirty);3205 3206void kvm_release_pfn_dirty(kvm_pfn_t pfn)3207{3208 struct page *page;3209 3210 if (is_error_noslot_pfn(pfn))3211 return;3212 3213 page = kvm_pfn_to_refcounted_page(pfn);3214 if (!page)3215 return;3216 3217 kvm_release_page_dirty(page);3218}3219EXPORT_SYMBOL_GPL(kvm_release_pfn_dirty);3220 3221/*3222 * Note, checking for an error/noslot pfn is the caller's responsibility when3223 * directly marking a page dirty/accessed. Unlike the "release" helpers, the3224 * "set" helpers are not to be used when the pfn might point at garbage.3225 */3226void kvm_set_pfn_dirty(kvm_pfn_t pfn)3227{3228 if (WARN_ON(is_error_noslot_pfn(pfn)))3229 return;3230 3231 if (pfn_valid(pfn))3232 kvm_set_page_dirty(pfn_to_page(pfn));3233}3234EXPORT_SYMBOL_GPL(kvm_set_pfn_dirty);3235 3236void kvm_set_pfn_accessed(kvm_pfn_t pfn)3237{3238 if (WARN_ON(is_error_noslot_pfn(pfn)))3239 return;3240 3241 if (pfn_valid(pfn))3242 kvm_set_page_accessed(pfn_to_page(pfn));3243}3244EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed);3245 3246static int next_segment(unsigned long len, int offset)3247{3248 if (len > PAGE_SIZE - offset)3249 return PAGE_SIZE - offset;3250 else3251 return len;3252}3253 3254/* Copy @len bytes from guest memory at '(@gfn * PAGE_SIZE) + @offset' to @data */3255static int __kvm_read_guest_page(struct kvm_memory_slot *slot, gfn_t gfn,3256 void *data, int offset, int len)3257{3258 int r;3259 unsigned long addr;3260 3261 if (WARN_ON_ONCE(offset + len > PAGE_SIZE))3262 return -EFAULT;3263 3264 addr = gfn_to_hva_memslot_prot(slot, gfn, NULL);3265 if (kvm_is_error_hva(addr))3266 return -EFAULT;3267 r = __copy_from_user(data, (void __user *)addr + offset, len);3268 if (r)3269 return -EFAULT;3270 return 0;3271}3272 3273int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset,3274 int len)3275{3276 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);3277 3278 return __kvm_read_guest_page(slot, gfn, data, offset, len);3279}3280EXPORT_SYMBOL_GPL(kvm_read_guest_page);3281 3282int kvm_vcpu_read_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, void *data,3283 int offset, int len)3284{3285 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);3286 3287 return __kvm_read_guest_page(slot, gfn, data, offset, len);3288}3289EXPORT_SYMBOL_GPL(kvm_vcpu_read_guest_page);3290 3291int kvm_read_guest(struct kvm *kvm, gpa_t gpa, void *data, unsigned long len)3292{3293 gfn_t gfn = gpa >> PAGE_SHIFT;3294 int seg;3295 int offset = offset_in_page(gpa);3296 int ret;3297 3298 while ((seg = next_segment(len, offset)) != 0) {3299 ret = kvm_read_guest_page(kvm, gfn, data, offset, seg);3300 if (ret < 0)3301 return ret;3302 offset = 0;3303 len -= seg;3304 data += seg;3305 ++gfn;3306 }3307 return 0;3308}3309EXPORT_SYMBOL_GPL(kvm_read_guest);3310 3311int kvm_vcpu_read_guest(struct kvm_vcpu *vcpu, gpa_t gpa, void *data, unsigned long len)3312{3313 gfn_t gfn = gpa >> PAGE_SHIFT;3314 int seg;3315 int offset = offset_in_page(gpa);3316 int ret;3317 3318 while ((seg = next_segment(len, offset)) != 0) {3319 ret = kvm_vcpu_read_guest_page(vcpu, gfn, data, offset, seg);3320 if (ret < 0)3321 return ret;3322 offset = 0;3323 len -= seg;3324 data += seg;3325 ++gfn;3326 }3327 return 0;3328}3329EXPORT_SYMBOL_GPL(kvm_vcpu_read_guest);3330 3331static int __kvm_read_guest_atomic(struct kvm_memory_slot *slot, gfn_t gfn,3332 void *data, int offset, unsigned long len)3333{3334 int r;3335 unsigned long addr;3336 3337 if (WARN_ON_ONCE(offset + len > PAGE_SIZE))3338 return -EFAULT;3339 3340 addr = gfn_to_hva_memslot_prot(slot, gfn, NULL);3341 if (kvm_is_error_hva(addr))3342 return -EFAULT;3343 pagefault_disable();3344 r = __copy_from_user_inatomic(data, (void __user *)addr + offset, len);3345 pagefault_enable();3346 if (r)3347 return -EFAULT;3348 return 0;3349}3350 3351int kvm_vcpu_read_guest_atomic(struct kvm_vcpu *vcpu, gpa_t gpa,3352 void *data, unsigned long len)3353{3354 gfn_t gfn = gpa >> PAGE_SHIFT;3355 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);3356 int offset = offset_in_page(gpa);3357 3358 return __kvm_read_guest_atomic(slot, gfn, data, offset, len);3359}3360EXPORT_SYMBOL_GPL(kvm_vcpu_read_guest_atomic);3361 3362/* Copy @len bytes from @data into guest memory at '(@gfn * PAGE_SIZE) + @offset' */3363static int __kvm_write_guest_page(struct kvm *kvm,3364 struct kvm_memory_slot *memslot, gfn_t gfn,3365 const void *data, int offset, int len)3366{3367 int r;3368 unsigned long addr;3369 3370 if (WARN_ON_ONCE(offset + len > PAGE_SIZE))3371 return -EFAULT;3372 3373 addr = gfn_to_hva_memslot(memslot, gfn);3374 if (kvm_is_error_hva(addr))3375 return -EFAULT;3376 r = __copy_to_user((void __user *)addr + offset, data, len);3377 if (r)3378 return -EFAULT;3379 mark_page_dirty_in_slot(kvm, memslot, gfn);3380 return 0;3381}3382 3383int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn,3384 const void *data, int offset, int len)3385{3386 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);3387 3388 return __kvm_write_guest_page(kvm, slot, gfn, data, offset, len);3389}3390EXPORT_SYMBOL_GPL(kvm_write_guest_page);3391 3392int kvm_vcpu_write_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn,3393 const void *data, int offset, int len)3394{3395 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);3396 3397 return __kvm_write_guest_page(vcpu->kvm, slot, gfn, data, offset, len);3398}3399EXPORT_SYMBOL_GPL(kvm_vcpu_write_guest_page);3400 3401int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data,3402 unsigned long len)3403{3404 gfn_t gfn = gpa >> PAGE_SHIFT;3405 int seg;3406 int offset = offset_in_page(gpa);3407 int ret;3408 3409 while ((seg = next_segment(len, offset)) != 0) {3410 ret = kvm_write_guest_page(kvm, gfn, data, offset, seg);3411 if (ret < 0)3412 return ret;3413 offset = 0;3414 len -= seg;3415 data += seg;3416 ++gfn;3417 }3418 return 0;3419}3420EXPORT_SYMBOL_GPL(kvm_write_guest);3421 3422int kvm_vcpu_write_guest(struct kvm_vcpu *vcpu, gpa_t gpa, const void *data,3423 unsigned long len)3424{3425 gfn_t gfn = gpa >> PAGE_SHIFT;3426 int seg;3427 int offset = offset_in_page(gpa);3428 int ret;3429 3430 while ((seg = next_segment(len, offset)) != 0) {3431 ret = kvm_vcpu_write_guest_page(vcpu, gfn, data, offset, seg);3432 if (ret < 0)3433 return ret;3434 offset = 0;3435 len -= seg;3436 data += seg;3437 ++gfn;3438 }3439 return 0;3440}3441EXPORT_SYMBOL_GPL(kvm_vcpu_write_guest);3442 3443static int __kvm_gfn_to_hva_cache_init(struct kvm_memslots *slots,3444 struct gfn_to_hva_cache *ghc,3445 gpa_t gpa, unsigned long len)3446{3447 int offset = offset_in_page(gpa);3448 gfn_t start_gfn = gpa >> PAGE_SHIFT;3449 gfn_t end_gfn = (gpa + len - 1) >> PAGE_SHIFT;3450 gfn_t nr_pages_needed = end_gfn - start_gfn + 1;3451 gfn_t nr_pages_avail;3452 3453 /* Update ghc->generation before performing any error checks. */3454 ghc->generation = slots->generation;3455 3456 if (start_gfn > end_gfn) {3457 ghc->hva = KVM_HVA_ERR_BAD;3458 return -EINVAL;3459 }3460 3461 /*3462 * If the requested region crosses two memslots, we still3463 * verify that the entire region is valid here.3464 */3465 for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {3466 ghc->memslot = __gfn_to_memslot(slots, start_gfn);3467 ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn,3468 &nr_pages_avail);3469 if (kvm_is_error_hva(ghc->hva))3470 return -EFAULT;3471 }3472 3473 /* Use the slow path for cross page reads and writes. */3474 if (nr_pages_needed == 1)3475 ghc->hva += offset;3476 else3477 ghc->memslot = NULL;3478 3479 ghc->gpa = gpa;3480 ghc->len = len;3481 return 0;3482}3483 3484int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc,3485 gpa_t gpa, unsigned long len)3486{3487 struct kvm_memslots *slots = kvm_memslots(kvm);3488 return __kvm_gfn_to_hva_cache_init(slots, ghc, gpa, len);3489}3490EXPORT_SYMBOL_GPL(kvm_gfn_to_hva_cache_init);3491 3492int kvm_write_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,3493 void *data, unsigned int offset,3494 unsigned long len)3495{3496 struct kvm_memslots *slots = kvm_memslots(kvm);3497 int r;3498 gpa_t gpa = ghc->gpa + offset;3499 3500 if (WARN_ON_ONCE(len + offset > ghc->len))3501 return -EINVAL;3502 3503 if (slots->generation != ghc->generation) {3504 if (__kvm_gfn_to_hva_cache_init(slots, ghc, ghc->gpa, ghc->len))3505 return -EFAULT;3506 }3507 3508 if (kvm_is_error_hva(ghc->hva))3509 return -EFAULT;3510 3511 if (unlikely(!ghc->memslot))3512 return kvm_write_guest(kvm, gpa, data, len);3513 3514 r = __copy_to_user((void __user *)ghc->hva + offset, data, len);3515 if (r)3516 return -EFAULT;3517 mark_page_dirty_in_slot(kvm, ghc->memslot, gpa >> PAGE_SHIFT);3518 3519 return 0;3520}3521EXPORT_SYMBOL_GPL(kvm_write_guest_offset_cached);3522 3523int kvm_write_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,3524 void *data, unsigned long len)3525{3526 return kvm_write_guest_offset_cached(kvm, ghc, data, 0, len);3527}3528EXPORT_SYMBOL_GPL(kvm_write_guest_cached);3529 3530int kvm_read_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,3531 void *data, unsigned int offset,3532 unsigned long len)3533{3534 struct kvm_memslots *slots = kvm_memslots(kvm);3535 int r;3536 gpa_t gpa = ghc->gpa + offset;3537 3538 if (WARN_ON_ONCE(len + offset > ghc->len))3539 return -EINVAL;3540 3541 if (slots->generation != ghc->generation) {3542 if (__kvm_gfn_to_hva_cache_init(slots, ghc, ghc->gpa, ghc->len))3543 return -EFAULT;3544 }3545 3546 if (kvm_is_error_hva(ghc->hva))3547 return -EFAULT;3548 3549 if (unlikely(!ghc->memslot))3550 return kvm_read_guest(kvm, gpa, data, len);3551 3552 r = __copy_from_user(data, (void __user *)ghc->hva + offset, len);3553 if (r)3554 return -EFAULT;3555 3556 return 0;3557}3558EXPORT_SYMBOL_GPL(kvm_read_guest_offset_cached);3559 3560int kvm_read_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,3561 void *data, unsigned long len)3562{3563 return kvm_read_guest_offset_cached(kvm, ghc, data, 0, len);3564}3565EXPORT_SYMBOL_GPL(kvm_read_guest_cached);3566 3567int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len)3568{3569 const void *zero_page = (const void *) __va(page_to_phys(ZERO_PAGE(0)));3570 gfn_t gfn = gpa >> PAGE_SHIFT;3571 int seg;3572 int offset = offset_in_page(gpa);3573 int ret;3574 3575 while ((seg = next_segment(len, offset)) != 0) {3576 ret = kvm_write_guest_page(kvm, gfn, zero_page, offset, seg);3577 if (ret < 0)3578 return ret;3579 offset = 0;3580 len -= seg;3581 ++gfn;3582 }3583 return 0;3584}3585EXPORT_SYMBOL_GPL(kvm_clear_guest);3586 3587void mark_page_dirty_in_slot(struct kvm *kvm,3588 const struct kvm_memory_slot *memslot,3589 gfn_t gfn)3590{3591 struct kvm_vcpu *vcpu = kvm_get_running_vcpu();3592 3593#ifdef CONFIG_HAVE_KVM_DIRTY_RING3594 if (WARN_ON_ONCE(vcpu && vcpu->kvm != kvm))3595 return;3596 3597 WARN_ON_ONCE(!vcpu && !kvm_arch_allow_write_without_running_vcpu(kvm));3598#endif3599 3600 if (memslot && kvm_slot_dirty_track_enabled(memslot)) {3601 unsigned long rel_gfn = gfn - memslot->base_gfn;3602 u32 slot = (memslot->as_id << 16) | memslot->id;3603 3604 if (kvm->dirty_ring_size && vcpu)3605 kvm_dirty_ring_push(vcpu, slot, rel_gfn);3606 else if (memslot->dirty_bitmap)3607 set_bit_le(rel_gfn, memslot->dirty_bitmap);3608 }3609}3610EXPORT_SYMBOL_GPL(mark_page_dirty_in_slot);3611 3612void mark_page_dirty(struct kvm *kvm, gfn_t gfn)3613{3614 struct kvm_memory_slot *memslot;3615 3616 memslot = gfn_to_memslot(kvm, gfn);3617 mark_page_dirty_in_slot(kvm, memslot, gfn);3618}3619EXPORT_SYMBOL_GPL(mark_page_dirty);3620 3621void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn)3622{3623 struct kvm_memory_slot *memslot;3624 3625 memslot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);3626 mark_page_dirty_in_slot(vcpu->kvm, memslot, gfn);3627}3628EXPORT_SYMBOL_GPL(kvm_vcpu_mark_page_dirty);3629 3630void kvm_sigset_activate(struct kvm_vcpu *vcpu)3631{3632 if (!vcpu->sigset_active)3633 return;3634 3635 /*3636 * This does a lockless modification of ->real_blocked, which is fine3637 * because, only current can change ->real_blocked and all readers of3638 * ->real_blocked don't care as long ->real_blocked is always a subset3639 * of ->blocked.3640 */3641 sigprocmask(SIG_SETMASK, &vcpu->sigset, ¤t->real_blocked);3642}3643 3644void kvm_sigset_deactivate(struct kvm_vcpu *vcpu)3645{3646 if (!vcpu->sigset_active)3647 return;3648 3649 sigprocmask(SIG_SETMASK, ¤t->real_blocked, NULL);3650 sigemptyset(¤t->real_blocked);3651}3652 3653static void grow_halt_poll_ns(struct kvm_vcpu *vcpu)3654{3655 unsigned int old, val, grow, grow_start;3656 3657 old = val = vcpu->halt_poll_ns;3658 grow_start = READ_ONCE(halt_poll_ns_grow_start);3659 grow = READ_ONCE(halt_poll_ns_grow);3660 if (!grow)3661 goto out;3662 3663 val *= grow;3664 if (val < grow_start)3665 val = grow_start;3666 3667 vcpu->halt_poll_ns = val;3668out:3669 trace_kvm_halt_poll_ns_grow(vcpu->vcpu_id, val, old);3670}3671 3672static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu)3673{3674 unsigned int old, val, shrink, grow_start;3675 3676 old = val = vcpu->halt_poll_ns;3677 shrink = READ_ONCE(halt_poll_ns_shrink);3678 grow_start = READ_ONCE(halt_poll_ns_grow_start);3679 if (shrink == 0)3680 val = 0;3681 else3682 val /= shrink;3683 3684 if (val < grow_start)3685 val = 0;3686 3687 vcpu->halt_poll_ns = val;3688 trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old);3689}3690 3691static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)3692{3693 int ret = -EINTR;3694 int idx = srcu_read_lock(&vcpu->kvm->srcu);3695 3696 if (kvm_arch_vcpu_runnable(vcpu))3697 goto out;3698 if (kvm_cpu_has_pending_timer(vcpu))3699 goto out;3700 if (signal_pending(current))3701 goto out;3702 if (kvm_check_request(KVM_REQ_UNBLOCK, vcpu))3703 goto out;3704 3705 ret = 0;3706out:3707 srcu_read_unlock(&vcpu->kvm->srcu, idx);3708 return ret;3709}3710 3711/*3712 * Block the vCPU until the vCPU is runnable, an event arrives, or a signal is3713 * pending. This is mostly used when halting a vCPU, but may also be used3714 * directly for other vCPU non-runnable states, e.g. x86's Wait-For-SIPI.3715 */3716bool kvm_vcpu_block(struct kvm_vcpu *vcpu)3717{3718 struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu);3719 bool waited = false;3720 3721 vcpu->stat.generic.blocking = 1;3722 3723 preempt_disable();3724 kvm_arch_vcpu_blocking(vcpu);3725 prepare_to_rcuwait(wait);3726 preempt_enable();3727 3728 for (;;) {3729 set_current_state(TASK_INTERRUPTIBLE);3730 3731 if (kvm_vcpu_check_block(vcpu) < 0)3732 break;3733 3734 waited = true;3735 schedule();3736 }3737 3738 preempt_disable();3739 finish_rcuwait(wait);3740 kvm_arch_vcpu_unblocking(vcpu);3741 preempt_enable();3742 3743 vcpu->stat.generic.blocking = 0;3744 3745 return waited;3746}3747 3748static inline void update_halt_poll_stats(struct kvm_vcpu *vcpu, ktime_t start,3749 ktime_t end, bool success)3750{3751 struct kvm_vcpu_stat_generic *stats = &vcpu->stat.generic;3752 u64 poll_ns = ktime_to_ns(ktime_sub(end, start));3753 3754 ++vcpu->stat.generic.halt_attempted_poll;3755 3756 if (success) {3757 ++vcpu->stat.generic.halt_successful_poll;3758 3759 if (!vcpu_valid_wakeup(vcpu))3760 ++vcpu->stat.generic.halt_poll_invalid;3761 3762 stats->halt_poll_success_ns += poll_ns;3763 KVM_STATS_LOG_HIST_UPDATE(stats->halt_poll_success_hist, poll_ns);3764 } else {3765 stats->halt_poll_fail_ns += poll_ns;3766 KVM_STATS_LOG_HIST_UPDATE(stats->halt_poll_fail_hist, poll_ns);3767 }3768}3769 3770static unsigned int kvm_vcpu_max_halt_poll_ns(struct kvm_vcpu *vcpu)3771{3772 struct kvm *kvm = vcpu->kvm;3773 3774 if (kvm->override_halt_poll_ns) {3775 /*3776 * Ensure kvm->max_halt_poll_ns is not read before3777 * kvm->override_halt_poll_ns.3778 *3779 * Pairs with the smp_wmb() when enabling KVM_CAP_HALT_POLL.3780 */3781 smp_rmb();3782 return READ_ONCE(kvm->max_halt_poll_ns);3783 }3784 3785 return READ_ONCE(halt_poll_ns);3786}3787 3788/*3789 * Emulate a vCPU halt condition, e.g. HLT on x86, WFI on arm, etc... If halt3790 * polling is enabled, busy wait for a short time before blocking to avoid the3791 * expensive block+unblock sequence if a wake event arrives soon after the vCPU3792 * is halted.3793 */3794void kvm_vcpu_halt(struct kvm_vcpu *vcpu)3795{3796 unsigned int max_halt_poll_ns = kvm_vcpu_max_halt_poll_ns(vcpu);3797 bool halt_poll_allowed = !kvm_arch_no_poll(vcpu);3798 ktime_t start, cur, poll_end;3799 bool waited = false;3800 bool do_halt_poll;3801 u64 halt_ns;3802 3803 if (vcpu->halt_poll_ns > max_halt_poll_ns)3804 vcpu->halt_poll_ns = max_halt_poll_ns;3805 3806 do_halt_poll = halt_poll_allowed && vcpu->halt_poll_ns;3807 3808 start = cur = poll_end = ktime_get();3809 if (do_halt_poll) {3810 ktime_t stop = ktime_add_ns(start, vcpu->halt_poll_ns);3811 3812 do {3813 if (kvm_vcpu_check_block(vcpu) < 0)3814 goto out;3815 cpu_relax();3816 poll_end = cur = ktime_get();3817 } while (kvm_vcpu_can_poll(cur, stop));3818 }3819 3820 waited = kvm_vcpu_block(vcpu);3821 3822 cur = ktime_get();3823 if (waited) {3824 vcpu->stat.generic.halt_wait_ns +=3825 ktime_to_ns(cur) - ktime_to_ns(poll_end);3826 KVM_STATS_LOG_HIST_UPDATE(vcpu->stat.generic.halt_wait_hist,3827 ktime_to_ns(cur) - ktime_to_ns(poll_end));3828 }3829out:3830 /* The total time the vCPU was "halted", including polling time. */3831 halt_ns = ktime_to_ns(cur) - ktime_to_ns(start);3832 3833 /*3834 * Note, halt-polling is considered successful so long as the vCPU was3835 * never actually scheduled out, i.e. even if the wake event arrived3836 * after of the halt-polling loop itself, but before the full wait.3837 */3838 if (do_halt_poll)3839 update_halt_poll_stats(vcpu, start, poll_end, !waited);3840 3841 if (halt_poll_allowed) {3842 /* Recompute the max halt poll time in case it changed. */3843 max_halt_poll_ns = kvm_vcpu_max_halt_poll_ns(vcpu);3844 3845 if (!vcpu_valid_wakeup(vcpu)) {3846 shrink_halt_poll_ns(vcpu);3847 } else if (max_halt_poll_ns) {3848 if (halt_ns <= vcpu->halt_poll_ns)3849 ;3850 /* we had a long block, shrink polling */3851 else if (vcpu->halt_poll_ns &&3852 halt_ns > max_halt_poll_ns)3853 shrink_halt_poll_ns(vcpu);3854 /* we had a short halt and our poll time is too small */3855 else if (vcpu->halt_poll_ns < max_halt_poll_ns &&3856 halt_ns < max_halt_poll_ns)3857 grow_halt_poll_ns(vcpu);3858 } else {3859 vcpu->halt_poll_ns = 0;3860 }3861 }3862 3863 trace_kvm_vcpu_wakeup(halt_ns, waited, vcpu_valid_wakeup(vcpu));3864}3865EXPORT_SYMBOL_GPL(kvm_vcpu_halt);3866 3867bool kvm_vcpu_wake_up(struct kvm_vcpu *vcpu)3868{3869 if (__kvm_vcpu_wake_up(vcpu)) {3870 WRITE_ONCE(vcpu->ready, true);3871 ++vcpu->stat.generic.halt_wakeup;3872 return true;3873 }3874 3875 return false;3876}3877EXPORT_SYMBOL_GPL(kvm_vcpu_wake_up);3878 3879#ifndef CONFIG_S3903880/*3881 * Kick a sleeping VCPU, or a guest VCPU in guest mode, into host kernel mode.3882 */3883void kvm_vcpu_kick(struct kvm_vcpu *vcpu)3884{3885 int me, cpu;3886 3887 if (kvm_vcpu_wake_up(vcpu))3888 return;3889 3890 me = get_cpu();3891 /*3892 * The only state change done outside the vcpu mutex is IN_GUEST_MODE3893 * to EXITING_GUEST_MODE. Therefore the moderately expensive "should3894 * kick" check does not need atomic operations if kvm_vcpu_kick is used3895 * within the vCPU thread itself.3896 */3897 if (vcpu == __this_cpu_read(kvm_running_vcpu)) {3898 if (vcpu->mode == IN_GUEST_MODE)3899 WRITE_ONCE(vcpu->mode, EXITING_GUEST_MODE);3900 goto out;3901 }3902 3903 /*3904 * Note, the vCPU could get migrated to a different pCPU at any point3905 * after kvm_arch_vcpu_should_kick(), which could result in sending an3906 * IPI to the previous pCPU. But, that's ok because the purpose of the3907 * IPI is to force the vCPU to leave IN_GUEST_MODE, and migrating the3908 * vCPU also requires it to leave IN_GUEST_MODE.3909 */3910 if (kvm_arch_vcpu_should_kick(vcpu)) {3911 cpu = READ_ONCE(vcpu->cpu);3912 if (cpu != me && (unsigned)cpu < nr_cpu_ids && cpu_online(cpu))3913 smp_send_reschedule(cpu);3914 }3915out:3916 put_cpu();3917}3918EXPORT_SYMBOL_GPL(kvm_vcpu_kick);3919#endif /* !CONFIG_S390 */3920 3921int kvm_vcpu_yield_to(struct kvm_vcpu *target)3922{3923 struct pid *pid;3924 struct task_struct *task = NULL;3925 int ret = 0;3926 3927 rcu_read_lock();3928 pid = rcu_dereference(target->pid);3929 if (pid)3930 task = get_pid_task(pid, PIDTYPE_PID);3931 rcu_read_unlock();3932 if (!task)3933 return ret;3934 ret = yield_to(task, 1);3935 put_task_struct(task);3936 3937 return ret;3938}3939EXPORT_SYMBOL_GPL(kvm_vcpu_yield_to);3940 3941/*3942 * Helper that checks whether a VCPU is eligible for directed yield.3943 * Most eligible candidate to yield is decided by following heuristics:3944 *3945 * (a) VCPU which has not done pl-exit or cpu relax intercepted recently3946 * (preempted lock holder), indicated by @in_spin_loop.3947 * Set at the beginning and cleared at the end of interception/PLE handler.3948 *3949 * (b) VCPU which has done pl-exit/ cpu relax intercepted but did not get3950 * chance last time (mostly it has become eligible now since we have probably3951 * yielded to lockholder in last iteration. This is done by toggling3952 * @dy_eligible each time a VCPU checked for eligibility.)3953 *3954 * Yielding to a recently pl-exited/cpu relax intercepted VCPU before yielding3955 * to preempted lock-holder could result in wrong VCPU selection and CPU3956 * burning. Giving priority for a potential lock-holder increases lock3957 * progress.3958 *3959 * Since algorithm is based on heuristics, accessing another VCPU data without3960 * locking does not harm. It may result in trying to yield to same VCPU, fail3961 * and continue with next VCPU and so on.3962 */3963static bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu)3964{3965#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT3966 bool eligible;3967 3968 eligible = !vcpu->spin_loop.in_spin_loop ||3969 vcpu->spin_loop.dy_eligible;3970 3971 if (vcpu->spin_loop.in_spin_loop)3972 kvm_vcpu_set_dy_eligible(vcpu, !vcpu->spin_loop.dy_eligible);3973 3974 return eligible;3975#else3976 return true;3977#endif3978}3979 3980/*3981 * Unlike kvm_arch_vcpu_runnable, this function is called outside3982 * a vcpu_load/vcpu_put pair. However, for most architectures3983 * kvm_arch_vcpu_runnable does not require vcpu_load.3984 */3985bool __weak kvm_arch_dy_runnable(struct kvm_vcpu *vcpu)3986{3987 return kvm_arch_vcpu_runnable(vcpu);3988}3989 3990static bool vcpu_dy_runnable(struct kvm_vcpu *vcpu)3991{3992 if (kvm_arch_dy_runnable(vcpu))3993 return true;3994 3995#ifdef CONFIG_KVM_ASYNC_PF3996 if (!list_empty_careful(&vcpu->async_pf.done))3997 return true;3998#endif3999 4000 return false;4001}4002 4003/*4004 * By default, simply query the target vCPU's current mode when checking if a4005 * vCPU was preempted in kernel mode. All architectures except x86 (or more4006 * specifical, except VMX) allow querying whether or not a vCPU is in kernel4007 * mode even if the vCPU is NOT loaded, i.e. using kvm_arch_vcpu_in_kernel()4008 * directly for cross-vCPU checks is functionally correct and accurate.4009 */4010bool __weak kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu)4011{4012 return kvm_arch_vcpu_in_kernel(vcpu);4013}4014 4015bool __weak kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu)4016{4017 return false;4018}4019 4020void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode)4021{4022 struct kvm *kvm = me->kvm;4023 struct kvm_vcpu *vcpu;4024 int last_boosted_vcpu;4025 unsigned long i;4026 int yielded = 0;4027 int try = 3;4028 int pass;4029 4030 last_boosted_vcpu = READ_ONCE(kvm->last_boosted_vcpu);4031 kvm_vcpu_set_in_spin_loop(me, true);4032 /*4033 * We boost the priority of a VCPU that is runnable but not4034 * currently running, because it got preempted by something4035 * else and called schedule in __vcpu_run. Hopefully that4036 * VCPU is holding the lock that we need and will release it.4037 * We approximate round-robin by starting at the last boosted VCPU.4038 */4039 for (pass = 0; pass < 2 && !yielded && try; pass++) {4040 kvm_for_each_vcpu(i, vcpu, kvm) {4041 if (!pass && i <= last_boosted_vcpu) {4042 i = last_boosted_vcpu;4043 continue;4044 } else if (pass && i > last_boosted_vcpu)4045 break;4046 if (!READ_ONCE(vcpu->ready))4047 continue;4048 if (vcpu == me)4049 continue;4050 if (kvm_vcpu_is_blocking(vcpu) && !vcpu_dy_runnable(vcpu))4051 continue;4052 4053 /*4054 * Treat the target vCPU as being in-kernel if it has a4055 * pending interrupt, as the vCPU trying to yield may4056 * be spinning waiting on IPI delivery, i.e. the target4057 * vCPU is in-kernel for the purposes of directed yield.4058 */4059 if (READ_ONCE(vcpu->preempted) && yield_to_kernel_mode &&4060 !kvm_arch_dy_has_pending_interrupt(vcpu) &&4061 !kvm_arch_vcpu_preempted_in_kernel(vcpu))4062 continue;4063 if (!kvm_vcpu_eligible_for_directed_yield(vcpu))4064 continue;4065 4066 yielded = kvm_vcpu_yield_to(vcpu);4067 if (yielded > 0) {4068 WRITE_ONCE(kvm->last_boosted_vcpu, i);4069 break;4070 } else if (yielded < 0) {4071 try--;4072 if (!try)4073 break;4074 }4075 }4076 }4077 kvm_vcpu_set_in_spin_loop(me, false);4078 4079 /* Ensure vcpu is not eligible during next spinloop */4080 kvm_vcpu_set_dy_eligible(me, false);4081}4082EXPORT_SYMBOL_GPL(kvm_vcpu_on_spin);4083 4084static bool kvm_page_in_dirty_ring(struct kvm *kvm, unsigned long pgoff)4085{4086#ifdef CONFIG_HAVE_KVM_DIRTY_RING4087 return (pgoff >= KVM_DIRTY_LOG_PAGE_OFFSET) &&4088 (pgoff < KVM_DIRTY_LOG_PAGE_OFFSET +4089 kvm->dirty_ring_size / PAGE_SIZE);4090#else4091 return false;4092#endif4093}4094 4095static vm_fault_t kvm_vcpu_fault(struct vm_fault *vmf)4096{4097 struct kvm_vcpu *vcpu = vmf->vma->vm_file->private_data;4098 struct page *page;4099 4100 if (vmf->pgoff == 0)4101 page = virt_to_page(vcpu->run);4102#ifdef CONFIG_X864103 else if (vmf->pgoff == KVM_PIO_PAGE_OFFSET)4104 page = virt_to_page(vcpu->arch.pio_data);4105#endif4106#ifdef CONFIG_KVM_MMIO4107 else if (vmf->pgoff == KVM_COALESCED_MMIO_PAGE_OFFSET)4108 page = virt_to_page(vcpu->kvm->coalesced_mmio_ring);4109#endif4110 else if (kvm_page_in_dirty_ring(vcpu->kvm, vmf->pgoff))4111 page = kvm_dirty_ring_get_page(4112 &vcpu->dirty_ring,4113 vmf->pgoff - KVM_DIRTY_LOG_PAGE_OFFSET);4114 else4115 return kvm_arch_vcpu_fault(vcpu, vmf);4116 get_page(page);4117 vmf->page = page;4118 return 0;4119}4120 4121static const struct vm_operations_struct kvm_vcpu_vm_ops = {4122 .fault = kvm_vcpu_fault,4123};4124 4125static int kvm_vcpu_mmap(struct file *file, struct vm_area_struct *vma)4126{4127 struct kvm_vcpu *vcpu = file->private_data;4128 unsigned long pages = vma_pages(vma);4129 4130 if ((kvm_page_in_dirty_ring(vcpu->kvm, vma->vm_pgoff) ||4131 kvm_page_in_dirty_ring(vcpu->kvm, vma->vm_pgoff + pages - 1)) &&4132 ((vma->vm_flags & VM_EXEC) || !(vma->vm_flags & VM_SHARED)))4133 return -EINVAL;4134 4135 vma->vm_ops = &kvm_vcpu_vm_ops;4136 return 0;4137}4138 4139static int kvm_vcpu_release(struct inode *inode, struct file *filp)4140{4141 struct kvm_vcpu *vcpu = filp->private_data;4142 4143 kvm_put_kvm(vcpu->kvm);4144 return 0;4145}4146 4147static struct file_operations kvm_vcpu_fops = {4148 .release = kvm_vcpu_release,4149 .unlocked_ioctl = kvm_vcpu_ioctl,4150 .mmap = kvm_vcpu_mmap,4151 .llseek = noop_llseek,4152 KVM_COMPAT(kvm_vcpu_compat_ioctl),4153};4154 4155/*4156 * Allocates an inode for the vcpu.4157 */4158static int create_vcpu_fd(struct kvm_vcpu *vcpu)4159{4160 char name[8 + 1 + ITOA_MAX_LEN + 1];4161 4162 snprintf(name, sizeof(name), "kvm-vcpu:%d", vcpu->vcpu_id);4163 return anon_inode_getfd(name, &kvm_vcpu_fops, vcpu, O_RDWR | O_CLOEXEC);4164}4165 4166#ifdef __KVM_HAVE_ARCH_VCPU_DEBUGFS4167static int vcpu_get_pid(void *data, u64 *val)4168{4169 struct kvm_vcpu *vcpu = data;4170 4171 rcu_read_lock();4172 *val = pid_nr(rcu_dereference(vcpu->pid));4173 rcu_read_unlock();4174 return 0;4175}4176 4177DEFINE_SIMPLE_ATTRIBUTE(vcpu_get_pid_fops, vcpu_get_pid, NULL, "%llu\n");4178 4179static void kvm_create_vcpu_debugfs(struct kvm_vcpu *vcpu)4180{4181 struct dentry *debugfs_dentry;4182 char dir_name[ITOA_MAX_LEN * 2];4183 4184 if (!debugfs_initialized())4185 return;4186 4187 snprintf(dir_name, sizeof(dir_name), "vcpu%d", vcpu->vcpu_id);4188 debugfs_dentry = debugfs_create_dir(dir_name,4189 vcpu->kvm->debugfs_dentry);4190 debugfs_create_file("pid", 0444, debugfs_dentry, vcpu,4191 &vcpu_get_pid_fops);4192 4193 kvm_arch_create_vcpu_debugfs(vcpu, debugfs_dentry);4194}4195#endif4196 4197/*4198 * Creates some virtual cpus. Good luck creating more than one.4199 */4200static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, unsigned long id)4201{4202 int r;4203 struct kvm_vcpu *vcpu;4204 struct page *page;4205 4206 /*4207 * KVM tracks vCPU IDs as 'int', be kind to userspace and reject4208 * too-large values instead of silently truncating.4209 *4210 * Ensure KVM_MAX_VCPU_IDS isn't pushed above INT_MAX without first4211 * changing the storage type (at the very least, IDs should be tracked4212 * as unsigned ints).4213 */4214 BUILD_BUG_ON(KVM_MAX_VCPU_IDS > INT_MAX);4215 if (id >= KVM_MAX_VCPU_IDS)4216 return -EINVAL;4217 4218 mutex_lock(&kvm->lock);4219 if (kvm->created_vcpus >= kvm->max_vcpus) {4220 mutex_unlock(&kvm->lock);4221 return -EINVAL;4222 }4223 4224 r = kvm_arch_vcpu_precreate(kvm, id);4225 if (r) {4226 mutex_unlock(&kvm->lock);4227 return r;4228 }4229 4230 kvm->created_vcpus++;4231 mutex_unlock(&kvm->lock);4232 4233 vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL_ACCOUNT);4234 if (!vcpu) {4235 r = -ENOMEM;4236 goto vcpu_decrement;4237 }4238 4239 BUILD_BUG_ON(sizeof(struct kvm_run) > PAGE_SIZE);4240 page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);4241 if (!page) {4242 r = -ENOMEM;4243 goto vcpu_free;4244 }4245 vcpu->run = page_address(page);4246 4247 kvm_vcpu_init(vcpu, kvm, id);4248 4249 r = kvm_arch_vcpu_create(vcpu);4250 if (r)4251 goto vcpu_free_run_page;4252 4253 if (kvm->dirty_ring_size) {4254 r = kvm_dirty_ring_alloc(&vcpu->dirty_ring,4255 id, kvm->dirty_ring_size);4256 if (r)4257 goto arch_vcpu_destroy;4258 }4259 4260 mutex_lock(&kvm->lock);4261 4262#ifdef CONFIG_LOCKDEP4263 /* Ensure that lockdep knows vcpu->mutex is taken *inside* kvm->lock */4264 mutex_lock(&vcpu->mutex);4265 mutex_unlock(&vcpu->mutex);4266#endif4267 4268 if (kvm_get_vcpu_by_id(kvm, id)) {4269 r = -EEXIST;4270 goto unlock_vcpu_destroy;4271 }4272 4273 vcpu->vcpu_idx = atomic_read(&kvm->online_vcpus);4274 r = xa_reserve(&kvm->vcpu_array, vcpu->vcpu_idx, GFP_KERNEL_ACCOUNT);4275 if (r)4276 goto unlock_vcpu_destroy;4277 4278 /* Now it's all set up, let userspace reach it */4279 kvm_get_kvm(kvm);4280 r = create_vcpu_fd(vcpu);4281 if (r < 0)4282 goto kvm_put_xa_release;4283 4284 if (KVM_BUG_ON(xa_store(&kvm->vcpu_array, vcpu->vcpu_idx, vcpu, 0), kvm)) {4285 r = -EINVAL;4286 goto kvm_put_xa_release;4287 }4288 4289 /*4290 * Pairs with smp_rmb() in kvm_get_vcpu. Store the vcpu4291 * pointer before kvm->online_vcpu's incremented value.4292 */4293 smp_wmb();4294 atomic_inc(&kvm->online_vcpus);4295 4296 mutex_unlock(&kvm->lock);4297 kvm_arch_vcpu_postcreate(vcpu);4298 kvm_create_vcpu_debugfs(vcpu);4299 return r;4300 4301kvm_put_xa_release:4302 kvm_put_kvm_no_destroy(kvm);4303 xa_release(&kvm->vcpu_array, vcpu->vcpu_idx);4304unlock_vcpu_destroy:4305 mutex_unlock(&kvm->lock);4306 kvm_dirty_ring_free(&vcpu->dirty_ring);4307arch_vcpu_destroy:4308 kvm_arch_vcpu_destroy(vcpu);4309vcpu_free_run_page:4310 free_page((unsigned long)vcpu->run);4311vcpu_free:4312 kmem_cache_free(kvm_vcpu_cache, vcpu);4313vcpu_decrement:4314 mutex_lock(&kvm->lock);4315 kvm->created_vcpus--;4316 mutex_unlock(&kvm->lock);4317 return r;4318}4319 4320static int kvm_vcpu_ioctl_set_sigmask(struct kvm_vcpu *vcpu, sigset_t *sigset)4321{4322 if (sigset) {4323 sigdelsetmask(sigset, sigmask(SIGKILL)|sigmask(SIGSTOP));4324 vcpu->sigset_active = 1;4325 vcpu->sigset = *sigset;4326 } else4327 vcpu->sigset_active = 0;4328 return 0;4329}4330 4331static ssize_t kvm_vcpu_stats_read(struct file *file, char __user *user_buffer,4332 size_t size, loff_t *offset)4333{4334 struct kvm_vcpu *vcpu = file->private_data;4335 4336 return kvm_stats_read(vcpu->stats_id, &kvm_vcpu_stats_header,4337 &kvm_vcpu_stats_desc[0], &vcpu->stat,4338 sizeof(vcpu->stat), user_buffer, size, offset);4339}4340 4341static int kvm_vcpu_stats_release(struct inode *inode, struct file *file)4342{4343 struct kvm_vcpu *vcpu = file->private_data;4344 4345 kvm_put_kvm(vcpu->kvm);4346 return 0;4347}4348 4349static const struct file_operations kvm_vcpu_stats_fops = {4350 .owner = THIS_MODULE,4351 .read = kvm_vcpu_stats_read,4352 .release = kvm_vcpu_stats_release,4353 .llseek = noop_llseek,4354};4355 4356static int kvm_vcpu_ioctl_get_stats_fd(struct kvm_vcpu *vcpu)4357{4358 int fd;4359 struct file *file;4360 char name[15 + ITOA_MAX_LEN + 1];4361 4362 snprintf(name, sizeof(name), "kvm-vcpu-stats:%d", vcpu->vcpu_id);4363 4364 fd = get_unused_fd_flags(O_CLOEXEC);4365 if (fd < 0)4366 return fd;4367 4368 file = anon_inode_getfile(name, &kvm_vcpu_stats_fops, vcpu, O_RDONLY);4369 if (IS_ERR(file)) {4370 put_unused_fd(fd);4371 return PTR_ERR(file);4372 }4373 4374 kvm_get_kvm(vcpu->kvm);4375 4376 file->f_mode |= FMODE_PREAD;4377 fd_install(fd, file);4378 4379 return fd;4380}4381 4382#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY4383static int kvm_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,4384 struct kvm_pre_fault_memory *range)4385{4386 int idx;4387 long r;4388 u64 full_size;4389 4390 if (range->flags)4391 return -EINVAL;4392 4393 if (!PAGE_ALIGNED(range->gpa) ||4394 !PAGE_ALIGNED(range->size) ||4395 range->gpa + range->size <= range->gpa)4396 return -EINVAL;4397 4398 vcpu_load(vcpu);4399 idx = srcu_read_lock(&vcpu->kvm->srcu);4400 4401 full_size = range->size;4402 do {4403 if (signal_pending(current)) {4404 r = -EINTR;4405 break;4406 }4407 4408 r = kvm_arch_vcpu_pre_fault_memory(vcpu, range);4409 if (WARN_ON_ONCE(r == 0 || r == -EIO))4410 break;4411 4412 if (r < 0)4413 break;4414 4415 range->size -= r;4416 range->gpa += r;4417 cond_resched();4418 } while (range->size);4419 4420 srcu_read_unlock(&vcpu->kvm->srcu, idx);4421 vcpu_put(vcpu);4422 4423 /* Return success if at least one page was mapped successfully. */4424 return full_size == range->size ? r : 0;4425}4426#endif4427 4428static long kvm_vcpu_ioctl(struct file *filp,4429 unsigned int ioctl, unsigned long arg)4430{4431 struct kvm_vcpu *vcpu = filp->private_data;4432 void __user *argp = (void __user *)arg;4433 int r;4434 struct kvm_fpu *fpu = NULL;4435 struct kvm_sregs *kvm_sregs = NULL;4436 4437 if (vcpu->kvm->mm != current->mm || vcpu->kvm->vm_dead)4438 return -EIO;4439 4440 if (unlikely(_IOC_TYPE(ioctl) != KVMIO))4441 return -EINVAL;4442 4443 /*4444 * Some architectures have vcpu ioctls that are asynchronous to vcpu4445 * execution; mutex_lock() would break them.4446 */4447 r = kvm_arch_vcpu_async_ioctl(filp, ioctl, arg);4448 if (r != -ENOIOCTLCMD)4449 return r;4450 4451 if (mutex_lock_killable(&vcpu->mutex))4452 return -EINTR;4453 switch (ioctl) {4454 case KVM_RUN: {4455 struct pid *oldpid;4456 r = -EINVAL;4457 if (arg)4458 goto out;4459 oldpid = rcu_access_pointer(vcpu->pid);4460 if (unlikely(oldpid != task_pid(current))) {4461 /* The thread running this VCPU changed. */4462 struct pid *newpid;4463 4464 r = kvm_arch_vcpu_run_pid_change(vcpu);4465 if (r)4466 break;4467 4468 newpid = get_task_pid(current, PIDTYPE_PID);4469 rcu_assign_pointer(vcpu->pid, newpid);4470 if (oldpid)4471 synchronize_rcu();4472 put_pid(oldpid);4473 }4474 vcpu->wants_to_run = !READ_ONCE(vcpu->run->immediate_exit__unsafe);4475 r = kvm_arch_vcpu_ioctl_run(vcpu);4476 vcpu->wants_to_run = false;4477 4478 trace_kvm_userspace_exit(vcpu->run->exit_reason, r);4479 break;4480 }4481 case KVM_GET_REGS: {4482 struct kvm_regs *kvm_regs;4483 4484 r = -ENOMEM;4485 kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL);4486 if (!kvm_regs)4487 goto out;4488 r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs);4489 if (r)4490 goto out_free1;4491 r = -EFAULT;4492 if (copy_to_user(argp, kvm_regs, sizeof(struct kvm_regs)))4493 goto out_free1;4494 r = 0;4495out_free1:4496 kfree(kvm_regs);4497 break;4498 }4499 case KVM_SET_REGS: {4500 struct kvm_regs *kvm_regs;4501 4502 kvm_regs = memdup_user(argp, sizeof(*kvm_regs));4503 if (IS_ERR(kvm_regs)) {4504 r = PTR_ERR(kvm_regs);4505 goto out;4506 }4507 r = kvm_arch_vcpu_ioctl_set_regs(vcpu, kvm_regs);4508 kfree(kvm_regs);4509 break;4510 }4511 case KVM_GET_SREGS: {4512 kvm_sregs = kzalloc(sizeof(struct kvm_sregs), GFP_KERNEL);4513 r = -ENOMEM;4514 if (!kvm_sregs)4515 goto out;4516 r = kvm_arch_vcpu_ioctl_get_sregs(vcpu, kvm_sregs);4517 if (r)4518 goto out;4519 r = -EFAULT;4520 if (copy_to_user(argp, kvm_sregs, sizeof(struct kvm_sregs)))4521 goto out;4522 r = 0;4523 break;4524 }4525 case KVM_SET_SREGS: {4526 kvm_sregs = memdup_user(argp, sizeof(*kvm_sregs));4527 if (IS_ERR(kvm_sregs)) {4528 r = PTR_ERR(kvm_sregs);4529 kvm_sregs = NULL;4530 goto out;4531 }4532 r = kvm_arch_vcpu_ioctl_set_sregs(vcpu, kvm_sregs);4533 break;4534 }4535 case KVM_GET_MP_STATE: {4536 struct kvm_mp_state mp_state;4537 4538 r = kvm_arch_vcpu_ioctl_get_mpstate(vcpu, &mp_state);4539 if (r)4540 goto out;4541 r = -EFAULT;4542 if (copy_to_user(argp, &mp_state, sizeof(mp_state)))4543 goto out;4544 r = 0;4545 break;4546 }4547 case KVM_SET_MP_STATE: {4548 struct kvm_mp_state mp_state;4549 4550 r = -EFAULT;4551 if (copy_from_user(&mp_state, argp, sizeof(mp_state)))4552 goto out;4553 r = kvm_arch_vcpu_ioctl_set_mpstate(vcpu, &mp_state);4554 break;4555 }4556 case KVM_TRANSLATE: {4557 struct kvm_translation tr;4558 4559 r = -EFAULT;4560 if (copy_from_user(&tr, argp, sizeof(tr)))4561 goto out;4562 r = kvm_arch_vcpu_ioctl_translate(vcpu, &tr);4563 if (r)4564 goto out;4565 r = -EFAULT;4566 if (copy_to_user(argp, &tr, sizeof(tr)))4567 goto out;4568 r = 0;4569 break;4570 }4571 case KVM_SET_GUEST_DEBUG: {4572 struct kvm_guest_debug dbg;4573 4574 r = -EFAULT;4575 if (copy_from_user(&dbg, argp, sizeof(dbg)))4576 goto out;4577 r = kvm_arch_vcpu_ioctl_set_guest_debug(vcpu, &dbg);4578 break;4579 }4580 case KVM_SET_SIGNAL_MASK: {4581 struct kvm_signal_mask __user *sigmask_arg = argp;4582 struct kvm_signal_mask kvm_sigmask;4583 sigset_t sigset, *p;4584 4585 p = NULL;4586 if (argp) {4587 r = -EFAULT;4588 if (copy_from_user(&kvm_sigmask, argp,4589 sizeof(kvm_sigmask)))4590 goto out;4591 r = -EINVAL;4592 if (kvm_sigmask.len != sizeof(sigset))4593 goto out;4594 r = -EFAULT;4595 if (copy_from_user(&sigset, sigmask_arg->sigset,4596 sizeof(sigset)))4597 goto out;4598 p = &sigset;4599 }4600 r = kvm_vcpu_ioctl_set_sigmask(vcpu, p);4601 break;4602 }4603 case KVM_GET_FPU: {4604 fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL);4605 r = -ENOMEM;4606 if (!fpu)4607 goto out;4608 r = kvm_arch_vcpu_ioctl_get_fpu(vcpu, fpu);4609 if (r)4610 goto out;4611 r = -EFAULT;4612 if (copy_to_user(argp, fpu, sizeof(struct kvm_fpu)))4613 goto out;4614 r = 0;4615 break;4616 }4617 case KVM_SET_FPU: {4618 fpu = memdup_user(argp, sizeof(*fpu));4619 if (IS_ERR(fpu)) {4620 r = PTR_ERR(fpu);4621 fpu = NULL;4622 goto out;4623 }4624 r = kvm_arch_vcpu_ioctl_set_fpu(vcpu, fpu);4625 break;4626 }4627 case KVM_GET_STATS_FD: {4628 r = kvm_vcpu_ioctl_get_stats_fd(vcpu);4629 break;4630 }4631#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY4632 case KVM_PRE_FAULT_MEMORY: {4633 struct kvm_pre_fault_memory range;4634 4635 r = -EFAULT;4636 if (copy_from_user(&range, argp, sizeof(range)))4637 break;4638 r = kvm_vcpu_pre_fault_memory(vcpu, &range);4639 /* Pass back leftover range. */4640 if (copy_to_user(argp, &range, sizeof(range)))4641 r = -EFAULT;4642 break;4643 }4644#endif4645 default:4646 r = kvm_arch_vcpu_ioctl(filp, ioctl, arg);4647 }4648out:4649 mutex_unlock(&vcpu->mutex);4650 kfree(fpu);4651 kfree(kvm_sregs);4652 return r;4653}4654 4655#ifdef CONFIG_KVM_COMPAT4656static long kvm_vcpu_compat_ioctl(struct file *filp,4657 unsigned int ioctl, unsigned long arg)4658{4659 struct kvm_vcpu *vcpu = filp->private_data;4660 void __user *argp = compat_ptr(arg);4661 int r;4662 4663 if (vcpu->kvm->mm != current->mm || vcpu->kvm->vm_dead)4664 return -EIO;4665 4666 switch (ioctl) {4667 case KVM_SET_SIGNAL_MASK: {4668 struct kvm_signal_mask __user *sigmask_arg = argp;4669 struct kvm_signal_mask kvm_sigmask;4670 sigset_t sigset;4671 4672 if (argp) {4673 r = -EFAULT;4674 if (copy_from_user(&kvm_sigmask, argp,4675 sizeof(kvm_sigmask)))4676 goto out;4677 r = -EINVAL;4678 if (kvm_sigmask.len != sizeof(compat_sigset_t))4679 goto out;4680 r = -EFAULT;4681 if (get_compat_sigset(&sigset,4682 (compat_sigset_t __user *)sigmask_arg->sigset))4683 goto out;4684 r = kvm_vcpu_ioctl_set_sigmask(vcpu, &sigset);4685 } else4686 r = kvm_vcpu_ioctl_set_sigmask(vcpu, NULL);4687 break;4688 }4689 default:4690 r = kvm_vcpu_ioctl(filp, ioctl, arg);4691 }4692 4693out:4694 return r;4695}4696#endif4697 4698static int kvm_device_mmap(struct file *filp, struct vm_area_struct *vma)4699{4700 struct kvm_device *dev = filp->private_data;4701 4702 if (dev->ops->mmap)4703 return dev->ops->mmap(dev, vma);4704 4705 return -ENODEV;4706}4707 4708static int kvm_device_ioctl_attr(struct kvm_device *dev,4709 int (*accessor)(struct kvm_device *dev,4710 struct kvm_device_attr *attr),4711 unsigned long arg)4712{4713 struct kvm_device_attr attr;4714 4715 if (!accessor)4716 return -EPERM;4717 4718 if (copy_from_user(&attr, (void __user *)arg, sizeof(attr)))4719 return -EFAULT;4720 4721 return accessor(dev, &attr);4722}4723 4724static long kvm_device_ioctl(struct file *filp, unsigned int ioctl,4725 unsigned long arg)4726{4727 struct kvm_device *dev = filp->private_data;4728 4729 if (dev->kvm->mm != current->mm || dev->kvm->vm_dead)4730 return -EIO;4731 4732 switch (ioctl) {4733 case KVM_SET_DEVICE_ATTR:4734 return kvm_device_ioctl_attr(dev, dev->ops->set_attr, arg);4735 case KVM_GET_DEVICE_ATTR:4736 return kvm_device_ioctl_attr(dev, dev->ops->get_attr, arg);4737 case KVM_HAS_DEVICE_ATTR:4738 return kvm_device_ioctl_attr(dev, dev->ops->has_attr, arg);4739 default:4740 if (dev->ops->ioctl)4741 return dev->ops->ioctl(dev, ioctl, arg);4742 4743 return -ENOTTY;4744 }4745}4746 4747static int kvm_device_release(struct inode *inode, struct file *filp)4748{4749 struct kvm_device *dev = filp->private_data;4750 struct kvm *kvm = dev->kvm;4751 4752 if (dev->ops->release) {4753 mutex_lock(&kvm->lock);4754 list_del_rcu(&dev->vm_node);4755 synchronize_rcu();4756 dev->ops->release(dev);4757 mutex_unlock(&kvm->lock);4758 }4759 4760 kvm_put_kvm(kvm);4761 return 0;4762}4763 4764static struct file_operations kvm_device_fops = {4765 .unlocked_ioctl = kvm_device_ioctl,4766 .release = kvm_device_release,4767 KVM_COMPAT(kvm_device_ioctl),4768 .mmap = kvm_device_mmap,4769};4770 4771struct kvm_device *kvm_device_from_filp(struct file *filp)4772{4773 if (filp->f_op != &kvm_device_fops)4774 return NULL;4775 4776 return filp->private_data;4777}4778 4779static const struct kvm_device_ops *kvm_device_ops_table[KVM_DEV_TYPE_MAX] = {4780#ifdef CONFIG_KVM_MPIC4781 [KVM_DEV_TYPE_FSL_MPIC_20] = &kvm_mpic_ops,4782 [KVM_DEV_TYPE_FSL_MPIC_42] = &kvm_mpic_ops,4783#endif4784};4785 4786int kvm_register_device_ops(const struct kvm_device_ops *ops, u32 type)4787{4788 if (type >= ARRAY_SIZE(kvm_device_ops_table))4789 return -ENOSPC;4790 4791 if (kvm_device_ops_table[type] != NULL)4792 return -EEXIST;4793 4794 kvm_device_ops_table[type] = ops;4795 return 0;4796}4797 4798void kvm_unregister_device_ops(u32 type)4799{4800 if (kvm_device_ops_table[type] != NULL)4801 kvm_device_ops_table[type] = NULL;4802}4803 4804static int kvm_ioctl_create_device(struct kvm *kvm,4805 struct kvm_create_device *cd)4806{4807 const struct kvm_device_ops *ops;4808 struct kvm_device *dev;4809 bool test = cd->flags & KVM_CREATE_DEVICE_TEST;4810 int type;4811 int ret;4812 4813 if (cd->type >= ARRAY_SIZE(kvm_device_ops_table))4814 return -ENODEV;4815 4816 type = array_index_nospec(cd->type, ARRAY_SIZE(kvm_device_ops_table));4817 ops = kvm_device_ops_table[type];4818 if (ops == NULL)4819 return -ENODEV;4820 4821 if (test)4822 return 0;4823 4824 dev = kzalloc(sizeof(*dev), GFP_KERNEL_ACCOUNT);4825 if (!dev)4826 return -ENOMEM;4827 4828 dev->ops = ops;4829 dev->kvm = kvm;4830 4831 mutex_lock(&kvm->lock);4832 ret = ops->create(dev, type);4833 if (ret < 0) {4834 mutex_unlock(&kvm->lock);4835 kfree(dev);4836 return ret;4837 }4838 list_add_rcu(&dev->vm_node, &kvm->devices);4839 mutex_unlock(&kvm->lock);4840 4841 if (ops->init)4842 ops->init(dev);4843 4844 kvm_get_kvm(kvm);4845 ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC);4846 if (ret < 0) {4847 kvm_put_kvm_no_destroy(kvm);4848 mutex_lock(&kvm->lock);4849 list_del_rcu(&dev->vm_node);4850 synchronize_rcu();4851 if (ops->release)4852 ops->release(dev);4853 mutex_unlock(&kvm->lock);4854 if (ops->destroy)4855 ops->destroy(dev);4856 return ret;4857 }4858 4859 cd->fd = ret;4860 return 0;4861}4862 4863static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)4864{4865 switch (arg) {4866 case KVM_CAP_USER_MEMORY:4867 case KVM_CAP_USER_MEMORY2:4868 case KVM_CAP_DESTROY_MEMORY_REGION_WORKS:4869 case KVM_CAP_JOIN_MEMORY_REGIONS_WORKS:4870 case KVM_CAP_INTERNAL_ERROR_DATA:4871#ifdef CONFIG_HAVE_KVM_MSI4872 case KVM_CAP_SIGNAL_MSI:4873#endif4874#ifdef CONFIG_HAVE_KVM_IRQCHIP4875 case KVM_CAP_IRQFD:4876#endif4877 case KVM_CAP_IOEVENTFD_ANY_LENGTH:4878 case KVM_CAP_CHECK_EXTENSION_VM:4879 case KVM_CAP_ENABLE_CAP_VM:4880 case KVM_CAP_HALT_POLL:4881 return 1;4882#ifdef CONFIG_KVM_MMIO4883 case KVM_CAP_COALESCED_MMIO:4884 return KVM_COALESCED_MMIO_PAGE_OFFSET;4885 case KVM_CAP_COALESCED_PIO:4886 return 1;4887#endif4888#ifdef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT4889 case KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2:4890 return KVM_DIRTY_LOG_MANUAL_CAPS;4891#endif4892#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING4893 case KVM_CAP_IRQ_ROUTING:4894 return KVM_MAX_IRQ_ROUTES;4895#endif4896#if KVM_MAX_NR_ADDRESS_SPACES > 14897 case KVM_CAP_MULTI_ADDRESS_SPACE:4898 if (kvm)4899 return kvm_arch_nr_memslot_as_ids(kvm);4900 return KVM_MAX_NR_ADDRESS_SPACES;4901#endif4902 case KVM_CAP_NR_MEMSLOTS:4903 return KVM_USER_MEM_SLOTS;4904 case KVM_CAP_DIRTY_LOG_RING:4905#ifdef CONFIG_HAVE_KVM_DIRTY_RING_TSO4906 return KVM_DIRTY_RING_MAX_ENTRIES * sizeof(struct kvm_dirty_gfn);4907#else4908 return 0;4909#endif4910 case KVM_CAP_DIRTY_LOG_RING_ACQ_REL:4911#ifdef CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL4912 return KVM_DIRTY_RING_MAX_ENTRIES * sizeof(struct kvm_dirty_gfn);4913#else4914 return 0;4915#endif4916#ifdef CONFIG_NEED_KVM_DIRTY_RING_WITH_BITMAP4917 case KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP:4918#endif4919 case KVM_CAP_BINARY_STATS_FD:4920 case KVM_CAP_SYSTEM_EVENT_DATA:4921 case KVM_CAP_DEVICE_CTRL:4922 return 1;4923#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES4924 case KVM_CAP_MEMORY_ATTRIBUTES:4925 return kvm_supported_mem_attributes(kvm);4926#endif4927#ifdef CONFIG_KVM_PRIVATE_MEM4928 case KVM_CAP_GUEST_MEMFD:4929 return !kvm || kvm_arch_has_private_mem(kvm);4930#endif4931 default:4932 break;4933 }4934 return kvm_vm_ioctl_check_extension(kvm, arg);4935}4936 4937static int kvm_vm_ioctl_enable_dirty_log_ring(struct kvm *kvm, u32 size)4938{4939 int r;4940 4941 if (!KVM_DIRTY_LOG_PAGE_OFFSET)4942 return -EINVAL;4943 4944 /* the size should be power of 2 */4945 if (!size || (size & (size - 1)))4946 return -EINVAL;4947 4948 /* Should be bigger to keep the reserved entries, or a page */4949 if (size < kvm_dirty_ring_get_rsvd_entries() *4950 sizeof(struct kvm_dirty_gfn) || size < PAGE_SIZE)4951 return -EINVAL;4952 4953 if (size > KVM_DIRTY_RING_MAX_ENTRIES *4954 sizeof(struct kvm_dirty_gfn))4955 return -E2BIG;4956 4957 /* We only allow it to set once */4958 if (kvm->dirty_ring_size)4959 return -EINVAL;4960 4961 mutex_lock(&kvm->lock);4962 4963 if (kvm->created_vcpus) {4964 /* We don't allow to change this value after vcpu created */4965 r = -EINVAL;4966 } else {4967 kvm->dirty_ring_size = size;4968 r = 0;4969 }4970 4971 mutex_unlock(&kvm->lock);4972 return r;4973}4974 4975static int kvm_vm_ioctl_reset_dirty_pages(struct kvm *kvm)4976{4977 unsigned long i;4978 struct kvm_vcpu *vcpu;4979 int cleared = 0;4980 4981 if (!kvm->dirty_ring_size)4982 return -EINVAL;4983 4984 mutex_lock(&kvm->slots_lock);4985 4986 kvm_for_each_vcpu(i, vcpu, kvm)4987 cleared += kvm_dirty_ring_reset(vcpu->kvm, &vcpu->dirty_ring);4988 4989 mutex_unlock(&kvm->slots_lock);4990 4991 if (cleared)4992 kvm_flush_remote_tlbs(kvm);4993 4994 return cleared;4995}4996 4997int __attribute__((weak)) kvm_vm_ioctl_enable_cap(struct kvm *kvm,4998 struct kvm_enable_cap *cap)4999{5000 return -EINVAL;5001}5002 5003bool kvm_are_all_memslots_empty(struct kvm *kvm)5004{5005 int i;5006 5007 lockdep_assert_held(&kvm->slots_lock);5008 5009 for (i = 0; i < kvm_arch_nr_memslot_as_ids(kvm); i++) {5010 if (!kvm_memslots_empty(__kvm_memslots(kvm, i)))5011 return false;5012 }5013 5014 return true;5015}5016EXPORT_SYMBOL_GPL(kvm_are_all_memslots_empty);5017 5018static int kvm_vm_ioctl_enable_cap_generic(struct kvm *kvm,5019 struct kvm_enable_cap *cap)5020{5021 switch (cap->cap) {5022#ifdef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT5023 case KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2: {5024 u64 allowed_options = KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE;5025 5026 if (cap->args[0] & KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE)5027 allowed_options = KVM_DIRTY_LOG_MANUAL_CAPS;5028 5029 if (cap->flags || (cap->args[0] & ~allowed_options))5030 return -EINVAL;5031 kvm->manual_dirty_log_protect = cap->args[0];5032 return 0;5033 }5034#endif5035 case KVM_CAP_HALT_POLL: {5036 if (cap->flags || cap->args[0] != (unsigned int)cap->args[0])5037 return -EINVAL;5038 5039 kvm->max_halt_poll_ns = cap->args[0];5040 5041 /*5042 * Ensure kvm->override_halt_poll_ns does not become visible5043 * before kvm->max_halt_poll_ns.5044 *5045 * Pairs with the smp_rmb() in kvm_vcpu_max_halt_poll_ns().5046 */5047 smp_wmb();5048 kvm->override_halt_poll_ns = true;5049 5050 return 0;5051 }5052 case KVM_CAP_DIRTY_LOG_RING:5053 case KVM_CAP_DIRTY_LOG_RING_ACQ_REL:5054 if (!kvm_vm_ioctl_check_extension_generic(kvm, cap->cap))5055 return -EINVAL;5056 5057 return kvm_vm_ioctl_enable_dirty_log_ring(kvm, cap->args[0]);5058 case KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP: {5059 int r = -EINVAL;5060 5061 if (!IS_ENABLED(CONFIG_NEED_KVM_DIRTY_RING_WITH_BITMAP) ||5062 !kvm->dirty_ring_size || cap->flags)5063 return r;5064 5065 mutex_lock(&kvm->slots_lock);5066 5067 /*5068 * For simplicity, allow enabling ring+bitmap if and only if5069 * there are no memslots, e.g. to ensure all memslots allocate5070 * a bitmap after the capability is enabled.5071 */5072 if (kvm_are_all_memslots_empty(kvm)) {5073 kvm->dirty_ring_with_bitmap = true;5074 r = 0;5075 }5076 5077 mutex_unlock(&kvm->slots_lock);5078 5079 return r;5080 }5081 default:5082 return kvm_vm_ioctl_enable_cap(kvm, cap);5083 }5084}5085 5086static ssize_t kvm_vm_stats_read(struct file *file, char __user *user_buffer,5087 size_t size, loff_t *offset)5088{5089 struct kvm *kvm = file->private_data;5090 5091 return kvm_stats_read(kvm->stats_id, &kvm_vm_stats_header,5092 &kvm_vm_stats_desc[0], &kvm->stat,5093 sizeof(kvm->stat), user_buffer, size, offset);5094}5095 5096static int kvm_vm_stats_release(struct inode *inode, struct file *file)5097{5098 struct kvm *kvm = file->private_data;5099 5100 kvm_put_kvm(kvm);5101 return 0;5102}5103 5104static const struct file_operations kvm_vm_stats_fops = {5105 .owner = THIS_MODULE,5106 .read = kvm_vm_stats_read,5107 .release = kvm_vm_stats_release,5108 .llseek = noop_llseek,5109};5110 5111static int kvm_vm_ioctl_get_stats_fd(struct kvm *kvm)5112{5113 int fd;5114 struct file *file;5115 5116 fd = get_unused_fd_flags(O_CLOEXEC);5117 if (fd < 0)5118 return fd;5119 5120 file = anon_inode_getfile("kvm-vm-stats",5121 &kvm_vm_stats_fops, kvm, O_RDONLY);5122 if (IS_ERR(file)) {5123 put_unused_fd(fd);5124 return PTR_ERR(file);5125 }5126 5127 kvm_get_kvm(kvm);5128 5129 file->f_mode |= FMODE_PREAD;5130 fd_install(fd, file);5131 5132 return fd;5133}5134 5135#define SANITY_CHECK_MEM_REGION_FIELD(field) \5136do { \5137 BUILD_BUG_ON(offsetof(struct kvm_userspace_memory_region, field) != \5138 offsetof(struct kvm_userspace_memory_region2, field)); \5139 BUILD_BUG_ON(sizeof_field(struct kvm_userspace_memory_region, field) != \5140 sizeof_field(struct kvm_userspace_memory_region2, field)); \5141} while (0)5142 5143static long kvm_vm_ioctl(struct file *filp,5144 unsigned int ioctl, unsigned long arg)5145{5146 struct kvm *kvm = filp->private_data;5147 void __user *argp = (void __user *)arg;5148 int r;5149 5150 if (kvm->mm != current->mm || kvm->vm_dead)5151 return -EIO;5152 switch (ioctl) {5153 case KVM_CREATE_VCPU:5154 r = kvm_vm_ioctl_create_vcpu(kvm, arg);5155 break;5156 case KVM_ENABLE_CAP: {5157 struct kvm_enable_cap cap;5158 5159 r = -EFAULT;5160 if (copy_from_user(&cap, argp, sizeof(cap)))5161 goto out;5162 r = kvm_vm_ioctl_enable_cap_generic(kvm, &cap);5163 break;5164 }5165 case KVM_SET_USER_MEMORY_REGION2:5166 case KVM_SET_USER_MEMORY_REGION: {5167 struct kvm_userspace_memory_region2 mem;5168 unsigned long size;5169 5170 if (ioctl == KVM_SET_USER_MEMORY_REGION) {5171 /*5172 * Fields beyond struct kvm_userspace_memory_region shouldn't be5173 * accessed, but avoid leaking kernel memory in case of a bug.5174 */5175 memset(&mem, 0, sizeof(mem));5176 size = sizeof(struct kvm_userspace_memory_region);5177 } else {5178 size = sizeof(struct kvm_userspace_memory_region2);5179 }5180 5181 /* Ensure the common parts of the two structs are identical. */5182 SANITY_CHECK_MEM_REGION_FIELD(slot);5183 SANITY_CHECK_MEM_REGION_FIELD(flags);5184 SANITY_CHECK_MEM_REGION_FIELD(guest_phys_addr);5185 SANITY_CHECK_MEM_REGION_FIELD(memory_size);5186 SANITY_CHECK_MEM_REGION_FIELD(userspace_addr);5187 5188 r = -EFAULT;5189 if (copy_from_user(&mem, argp, size))5190 goto out;5191 5192 r = -EINVAL;5193 if (ioctl == KVM_SET_USER_MEMORY_REGION &&5194 (mem.flags & ~KVM_SET_USER_MEMORY_REGION_V1_FLAGS))5195 goto out;5196 5197 r = kvm_vm_ioctl_set_memory_region(kvm, &mem);5198 break;5199 }5200 case KVM_GET_DIRTY_LOG: {5201 struct kvm_dirty_log log;5202 5203 r = -EFAULT;5204 if (copy_from_user(&log, argp, sizeof(log)))5205 goto out;5206 r = kvm_vm_ioctl_get_dirty_log(kvm, &log);5207 break;5208 }5209#ifdef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT5210 case KVM_CLEAR_DIRTY_LOG: {5211 struct kvm_clear_dirty_log log;5212 5213 r = -EFAULT;5214 if (copy_from_user(&log, argp, sizeof(log)))5215 goto out;5216 r = kvm_vm_ioctl_clear_dirty_log(kvm, &log);5217 break;5218 }5219#endif5220#ifdef CONFIG_KVM_MMIO5221 case KVM_REGISTER_COALESCED_MMIO: {5222 struct kvm_coalesced_mmio_zone zone;5223 5224 r = -EFAULT;5225 if (copy_from_user(&zone, argp, sizeof(zone)))5226 goto out;5227 r = kvm_vm_ioctl_register_coalesced_mmio(kvm, &zone);5228 break;5229 }5230 case KVM_UNREGISTER_COALESCED_MMIO: {5231 struct kvm_coalesced_mmio_zone zone;5232 5233 r = -EFAULT;5234 if (copy_from_user(&zone, argp, sizeof(zone)))5235 goto out;5236 r = kvm_vm_ioctl_unregister_coalesced_mmio(kvm, &zone);5237 break;5238 }5239#endif5240 case KVM_IRQFD: {5241 struct kvm_irqfd data;5242 5243 r = -EFAULT;5244 if (copy_from_user(&data, argp, sizeof(data)))5245 goto out;5246 r = kvm_irqfd(kvm, &data);5247 break;5248 }5249 case KVM_IOEVENTFD: {5250 struct kvm_ioeventfd data;5251 5252 r = -EFAULT;5253 if (copy_from_user(&data, argp, sizeof(data)))5254 goto out;5255 r = kvm_ioeventfd(kvm, &data);5256 break;5257 }5258#ifdef CONFIG_HAVE_KVM_MSI5259 case KVM_SIGNAL_MSI: {5260 struct kvm_msi msi;5261 5262 r = -EFAULT;5263 if (copy_from_user(&msi, argp, sizeof(msi)))5264 goto out;5265 r = kvm_send_userspace_msi(kvm, &msi);5266 break;5267 }5268#endif5269#ifdef __KVM_HAVE_IRQ_LINE5270 case KVM_IRQ_LINE_STATUS:5271 case KVM_IRQ_LINE: {5272 struct kvm_irq_level irq_event;5273 5274 r = -EFAULT;5275 if (copy_from_user(&irq_event, argp, sizeof(irq_event)))5276 goto out;5277 5278 r = kvm_vm_ioctl_irq_line(kvm, &irq_event,5279 ioctl == KVM_IRQ_LINE_STATUS);5280 if (r)5281 goto out;5282 5283 r = -EFAULT;5284 if (ioctl == KVM_IRQ_LINE_STATUS) {5285 if (copy_to_user(argp, &irq_event, sizeof(irq_event)))5286 goto out;5287 }5288 5289 r = 0;5290 break;5291 }5292#endif5293#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING5294 case KVM_SET_GSI_ROUTING: {5295 struct kvm_irq_routing routing;5296 struct kvm_irq_routing __user *urouting;5297 struct kvm_irq_routing_entry *entries = NULL;5298 5299 r = -EFAULT;5300 if (copy_from_user(&routing, argp, sizeof(routing)))5301 goto out;5302 r = -EINVAL;5303 if (!kvm_arch_can_set_irq_routing(kvm))5304 goto out;5305 if (routing.nr > KVM_MAX_IRQ_ROUTES)5306 goto out;5307 if (routing.flags)5308 goto out;5309 if (routing.nr) {5310 urouting = argp;5311 entries = vmemdup_array_user(urouting->entries,5312 routing.nr, sizeof(*entries));5313 if (IS_ERR(entries)) {5314 r = PTR_ERR(entries);5315 goto out;5316 }5317 }5318 r = kvm_set_irq_routing(kvm, entries, routing.nr,5319 routing.flags);5320 kvfree(entries);5321 break;5322 }5323#endif /* CONFIG_HAVE_KVM_IRQ_ROUTING */5324#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES5325 case KVM_SET_MEMORY_ATTRIBUTES: {5326 struct kvm_memory_attributes attrs;5327 5328 r = -EFAULT;5329 if (copy_from_user(&attrs, argp, sizeof(attrs)))5330 goto out;5331 5332 r = kvm_vm_ioctl_set_mem_attributes(kvm, &attrs);5333 break;5334 }5335#endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */5336 case KVM_CREATE_DEVICE: {5337 struct kvm_create_device cd;5338 5339 r = -EFAULT;5340 if (copy_from_user(&cd, argp, sizeof(cd)))5341 goto out;5342 5343 r = kvm_ioctl_create_device(kvm, &cd);5344 if (r)5345 goto out;5346 5347 r = -EFAULT;5348 if (copy_to_user(argp, &cd, sizeof(cd)))5349 goto out;5350 5351 r = 0;5352 break;5353 }5354 case KVM_CHECK_EXTENSION:5355 r = kvm_vm_ioctl_check_extension_generic(kvm, arg);5356 break;5357 case KVM_RESET_DIRTY_RINGS:5358 r = kvm_vm_ioctl_reset_dirty_pages(kvm);5359 break;5360 case KVM_GET_STATS_FD:5361 r = kvm_vm_ioctl_get_stats_fd(kvm);5362 break;5363#ifdef CONFIG_KVM_PRIVATE_MEM5364 case KVM_CREATE_GUEST_MEMFD: {5365 struct kvm_create_guest_memfd guest_memfd;5366 5367 r = -EFAULT;5368 if (copy_from_user(&guest_memfd, argp, sizeof(guest_memfd)))5369 goto out;5370 5371 r = kvm_gmem_create(kvm, &guest_memfd);5372 break;5373 }5374#endif5375 default:5376 r = kvm_arch_vm_ioctl(filp, ioctl, arg);5377 }5378out:5379 return r;5380}5381 5382#ifdef CONFIG_KVM_COMPAT5383struct compat_kvm_dirty_log {5384 __u32 slot;5385 __u32 padding1;5386 union {5387 compat_uptr_t dirty_bitmap; /* one bit per page */5388 __u64 padding2;5389 };5390};5391 5392struct compat_kvm_clear_dirty_log {5393 __u32 slot;5394 __u32 num_pages;5395 __u64 first_page;5396 union {5397 compat_uptr_t dirty_bitmap; /* one bit per page */5398 __u64 padding2;5399 };5400};5401 5402long __weak kvm_arch_vm_compat_ioctl(struct file *filp, unsigned int ioctl,5403 unsigned long arg)5404{5405 return -ENOTTY;5406}5407 5408static long kvm_vm_compat_ioctl(struct file *filp,5409 unsigned int ioctl, unsigned long arg)5410{5411 struct kvm *kvm = filp->private_data;5412 int r;5413 5414 if (kvm->mm != current->mm || kvm->vm_dead)5415 return -EIO;5416 5417 r = kvm_arch_vm_compat_ioctl(filp, ioctl, arg);5418 if (r != -ENOTTY)5419 return r;5420 5421 switch (ioctl) {5422#ifdef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT5423 case KVM_CLEAR_DIRTY_LOG: {5424 struct compat_kvm_clear_dirty_log compat_log;5425 struct kvm_clear_dirty_log log;5426 5427 if (copy_from_user(&compat_log, (void __user *)arg,5428 sizeof(compat_log)))5429 return -EFAULT;5430 log.slot = compat_log.slot;5431 log.num_pages = compat_log.num_pages;5432 log.first_page = compat_log.first_page;5433 log.padding2 = compat_log.padding2;5434 log.dirty_bitmap = compat_ptr(compat_log.dirty_bitmap);5435 5436 r = kvm_vm_ioctl_clear_dirty_log(kvm, &log);5437 break;5438 }5439#endif5440 case KVM_GET_DIRTY_LOG: {5441 struct compat_kvm_dirty_log compat_log;5442 struct kvm_dirty_log log;5443 5444 if (copy_from_user(&compat_log, (void __user *)arg,5445 sizeof(compat_log)))5446 return -EFAULT;5447 log.slot = compat_log.slot;5448 log.padding1 = compat_log.padding1;5449 log.padding2 = compat_log.padding2;5450 log.dirty_bitmap = compat_ptr(compat_log.dirty_bitmap);5451 5452 r = kvm_vm_ioctl_get_dirty_log(kvm, &log);5453 break;5454 }5455 default:5456 r = kvm_vm_ioctl(filp, ioctl, arg);5457 }5458 return r;5459}5460#endif5461 5462static struct file_operations kvm_vm_fops = {5463 .release = kvm_vm_release,5464 .unlocked_ioctl = kvm_vm_ioctl,5465 .llseek = noop_llseek,5466 KVM_COMPAT(kvm_vm_compat_ioctl),5467};5468 5469bool file_is_kvm(struct file *file)5470{5471 return file && file->f_op == &kvm_vm_fops;5472}5473EXPORT_SYMBOL_GPL(file_is_kvm);5474 5475static int kvm_dev_ioctl_create_vm(unsigned long type)5476{5477 char fdname[ITOA_MAX_LEN + 1];5478 int r, fd;5479 struct kvm *kvm;5480 struct file *file;5481 5482 fd = get_unused_fd_flags(O_CLOEXEC);5483 if (fd < 0)5484 return fd;5485 5486 snprintf(fdname, sizeof(fdname), "%d", fd);5487 5488 kvm = kvm_create_vm(type, fdname);5489 if (IS_ERR(kvm)) {5490 r = PTR_ERR(kvm);5491 goto put_fd;5492 }5493 5494 file = anon_inode_getfile("kvm-vm", &kvm_vm_fops, kvm, O_RDWR);5495 if (IS_ERR(file)) {5496 r = PTR_ERR(file);5497 goto put_kvm;5498 }5499 5500 /*5501 * Don't call kvm_put_kvm anymore at this point; file->f_op is5502 * already set, with ->release() being kvm_vm_release(). In error5503 * cases it will be called by the final fput(file) and will take5504 * care of doing kvm_put_kvm(kvm).5505 */5506 kvm_uevent_notify_change(KVM_EVENT_CREATE_VM, kvm);5507 5508 fd_install(fd, file);5509 return fd;5510 5511put_kvm:5512 kvm_put_kvm(kvm);5513put_fd:5514 put_unused_fd(fd);5515 return r;5516}5517 5518static long kvm_dev_ioctl(struct file *filp,5519 unsigned int ioctl, unsigned long arg)5520{5521 int r = -EINVAL;5522 5523 switch (ioctl) {5524 case KVM_GET_API_VERSION:5525 if (arg)5526 goto out;5527 r = KVM_API_VERSION;5528 break;5529 case KVM_CREATE_VM:5530 r = kvm_dev_ioctl_create_vm(arg);5531 break;5532 case KVM_CHECK_EXTENSION:5533 r = kvm_vm_ioctl_check_extension_generic(NULL, arg);5534 break;5535 case KVM_GET_VCPU_MMAP_SIZE:5536 if (arg)5537 goto out;5538 r = PAGE_SIZE; /* struct kvm_run */5539#ifdef CONFIG_X865540 r += PAGE_SIZE; /* pio data page */5541#endif5542#ifdef CONFIG_KVM_MMIO5543 r += PAGE_SIZE; /* coalesced mmio ring page */5544#endif5545 break;5546 default:5547 return kvm_arch_dev_ioctl(filp, ioctl, arg);5548 }5549out:5550 return r;5551}5552 5553static struct file_operations kvm_chardev_ops = {5554 .unlocked_ioctl = kvm_dev_ioctl,5555 .llseek = noop_llseek,5556 KVM_COMPAT(kvm_dev_ioctl),5557};5558 5559static struct miscdevice kvm_dev = {5560 KVM_MINOR,5561 "kvm",5562 &kvm_chardev_ops,5563};5564 5565#ifdef CONFIG_KVM_GENERIC_HARDWARE_ENABLING5566static bool enable_virt_at_load = true;5567module_param(enable_virt_at_load, bool, 0444);5568 5569__visible bool kvm_rebooting;5570EXPORT_SYMBOL_GPL(kvm_rebooting);5571 5572static DEFINE_PER_CPU(bool, virtualization_enabled);5573static DEFINE_MUTEX(kvm_usage_lock);5574static int kvm_usage_count;5575 5576__weak void kvm_arch_enable_virtualization(void)5577{5578 5579}5580 5581__weak void kvm_arch_disable_virtualization(void)5582{5583 5584}5585 5586static int kvm_enable_virtualization_cpu(void)5587{5588 if (__this_cpu_read(virtualization_enabled))5589 return 0;5590 5591 if (kvm_arch_enable_virtualization_cpu()) {5592 pr_info("kvm: enabling virtualization on CPU%d failed\n",5593 raw_smp_processor_id());5594 return -EIO;5595 }5596 5597 __this_cpu_write(virtualization_enabled, true);5598 return 0;5599}5600 5601static int kvm_online_cpu(unsigned int cpu)5602{5603 /*5604 * Abort the CPU online process if hardware virtualization cannot5605 * be enabled. Otherwise running VMs would encounter unrecoverable5606 * errors when scheduled to this CPU.5607 */5608 return kvm_enable_virtualization_cpu();5609}5610 5611static void kvm_disable_virtualization_cpu(void *ign)5612{5613 if (!__this_cpu_read(virtualization_enabled))5614 return;5615 5616 kvm_arch_disable_virtualization_cpu();5617 5618 __this_cpu_write(virtualization_enabled, false);5619}5620 5621static int kvm_offline_cpu(unsigned int cpu)5622{5623 kvm_disable_virtualization_cpu(NULL);5624 return 0;5625}5626 5627static void kvm_shutdown(void)5628{5629 /*5630 * Disable hardware virtualization and set kvm_rebooting to indicate5631 * that KVM has asynchronously disabled hardware virtualization, i.e.5632 * that relevant errors and exceptions aren't entirely unexpected.5633 * Some flavors of hardware virtualization need to be disabled before5634 * transferring control to firmware (to perform shutdown/reboot), e.g.5635 * on x86, virtualization can block INIT interrupts, which are used by5636 * firmware to pull APs back under firmware control. Note, this path5637 * is used for both shutdown and reboot scenarios, i.e. neither name is5638 * 100% comprehensive.5639 */5640 pr_info("kvm: exiting hardware virtualization\n");5641 kvm_rebooting = true;5642 on_each_cpu(kvm_disable_virtualization_cpu, NULL, 1);5643}5644 5645static int kvm_suspend(void)5646{5647 /*5648 * Secondary CPUs and CPU hotplug are disabled across the suspend/resume5649 * callbacks, i.e. no need to acquire kvm_usage_lock to ensure the usage5650 * count is stable. Assert that kvm_usage_lock is not held to ensure5651 * the system isn't suspended while KVM is enabling hardware. Hardware5652 * enabling can be preempted, but the task cannot be frozen until it has5653 * dropped all locks (userspace tasks are frozen via a fake signal).5654 */5655 lockdep_assert_not_held(&kvm_usage_lock);5656 lockdep_assert_irqs_disabled();5657 5658 kvm_disable_virtualization_cpu(NULL);5659 return 0;5660}5661 5662static void kvm_resume(void)5663{5664 lockdep_assert_not_held(&kvm_usage_lock);5665 lockdep_assert_irqs_disabled();5666 5667 WARN_ON_ONCE(kvm_enable_virtualization_cpu());5668}5669 5670static struct syscore_ops kvm_syscore_ops = {5671 .suspend = kvm_suspend,5672 .resume = kvm_resume,5673 .shutdown = kvm_shutdown,5674};5675 5676static int kvm_enable_virtualization(void)5677{5678 int r;5679 5680 guard(mutex)(&kvm_usage_lock);5681 5682 if (kvm_usage_count++)5683 return 0;5684 5685 kvm_arch_enable_virtualization();5686 5687 r = cpuhp_setup_state(CPUHP_AP_KVM_ONLINE, "kvm/cpu:online",5688 kvm_online_cpu, kvm_offline_cpu);5689 if (r)5690 goto err_cpuhp;5691 5692 register_syscore_ops(&kvm_syscore_ops);5693 5694 /*5695 * Undo virtualization enabling and bail if the system is going down.5696 * If userspace initiated a forced reboot, e.g. reboot -f, then it's5697 * possible for an in-flight operation to enable virtualization after5698 * syscore_shutdown() is called, i.e. without kvm_shutdown() being5699 * invoked. Note, this relies on system_state being set _before_5700 * kvm_shutdown(), e.g. to ensure either kvm_shutdown() is invoked5701 * or this CPU observes the impending shutdown. Which is why KVM uses5702 * a syscore ops hook instead of registering a dedicated reboot5703 * notifier (the latter runs before system_state is updated).5704 */5705 if (system_state == SYSTEM_HALT || system_state == SYSTEM_POWER_OFF ||5706 system_state == SYSTEM_RESTART) {5707 r = -EBUSY;5708 goto err_rebooting;5709 }5710 5711 return 0;5712 5713err_rebooting:5714 unregister_syscore_ops(&kvm_syscore_ops);5715 cpuhp_remove_state(CPUHP_AP_KVM_ONLINE);5716err_cpuhp:5717 kvm_arch_disable_virtualization();5718 --kvm_usage_count;5719 return r;5720}5721 5722static void kvm_disable_virtualization(void)5723{5724 guard(mutex)(&kvm_usage_lock);5725 5726 if (--kvm_usage_count)5727 return;5728 5729 unregister_syscore_ops(&kvm_syscore_ops);5730 cpuhp_remove_state(CPUHP_AP_KVM_ONLINE);5731 kvm_arch_disable_virtualization();5732}5733 5734static int kvm_init_virtualization(void)5735{5736 if (enable_virt_at_load)5737 return kvm_enable_virtualization();5738 5739 return 0;5740}5741 5742static void kvm_uninit_virtualization(void)5743{5744 if (enable_virt_at_load)5745 kvm_disable_virtualization();5746}5747#else /* CONFIG_KVM_GENERIC_HARDWARE_ENABLING */5748static int kvm_enable_virtualization(void)5749{5750 return 0;5751}5752 5753static int kvm_init_virtualization(void)5754{5755 return 0;5756}5757 5758static void kvm_disable_virtualization(void)5759{5760 5761}5762 5763static void kvm_uninit_virtualization(void)5764{5765 5766}5767#endif /* CONFIG_KVM_GENERIC_HARDWARE_ENABLING */5768 5769static void kvm_iodevice_destructor(struct kvm_io_device *dev)5770{5771 if (dev->ops->destructor)5772 dev->ops->destructor(dev);5773}5774 5775static void kvm_io_bus_destroy(struct kvm_io_bus *bus)5776{5777 int i;5778 5779 for (i = 0; i < bus->dev_count; i++) {5780 struct kvm_io_device *pos = bus->range[i].dev;5781 5782 kvm_iodevice_destructor(pos);5783 }5784 kfree(bus);5785}5786 5787static inline int kvm_io_bus_cmp(const struct kvm_io_range *r1,5788 const struct kvm_io_range *r2)5789{5790 gpa_t addr1 = r1->addr;5791 gpa_t addr2 = r2->addr;5792 5793 if (addr1 < addr2)5794 return -1;5795 5796 /* If r2->len == 0, match the exact address. If r2->len != 0,5797 * accept any overlapping write. Any order is acceptable for5798 * overlapping ranges, because kvm_io_bus_get_first_dev ensures5799 * we process all of them.5800 */5801 if (r2->len) {5802 addr1 += r1->len;5803 addr2 += r2->len;5804 }5805 5806 if (addr1 > addr2)5807 return 1;5808 5809 return 0;5810}5811 5812static int kvm_io_bus_sort_cmp(const void *p1, const void *p2)5813{5814 return kvm_io_bus_cmp(p1, p2);5815}5816 5817static int kvm_io_bus_get_first_dev(struct kvm_io_bus *bus,5818 gpa_t addr, int len)5819{5820 struct kvm_io_range *range, key;5821 int off;5822 5823 key = (struct kvm_io_range) {5824 .addr = addr,5825 .len = len,5826 };5827 5828 range = bsearch(&key, bus->range, bus->dev_count,5829 sizeof(struct kvm_io_range), kvm_io_bus_sort_cmp);5830 if (range == NULL)5831 return -ENOENT;5832 5833 off = range - bus->range;5834 5835 while (off > 0 && kvm_io_bus_cmp(&key, &bus->range[off-1]) == 0)5836 off--;5837 5838 return off;5839}5840 5841static int __kvm_io_bus_write(struct kvm_vcpu *vcpu, struct kvm_io_bus *bus,5842 struct kvm_io_range *range, const void *val)5843{5844 int idx;5845 5846 idx = kvm_io_bus_get_first_dev(bus, range->addr, range->len);5847 if (idx < 0)5848 return -EOPNOTSUPP;5849 5850 while (idx < bus->dev_count &&5851 kvm_io_bus_cmp(range, &bus->range[idx]) == 0) {5852 if (!kvm_iodevice_write(vcpu, bus->range[idx].dev, range->addr,5853 range->len, val))5854 return idx;5855 idx++;5856 }5857 5858 return -EOPNOTSUPP;5859}5860 5861/* kvm_io_bus_write - called under kvm->slots_lock */5862int kvm_io_bus_write(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr,5863 int len, const void *val)5864{5865 struct kvm_io_bus *bus;5866 struct kvm_io_range range;5867 int r;5868 5869 range = (struct kvm_io_range) {5870 .addr = addr,5871 .len = len,5872 };5873 5874 bus = srcu_dereference(vcpu->kvm->buses[bus_idx], &vcpu->kvm->srcu);5875 if (!bus)5876 return -ENOMEM;5877 r = __kvm_io_bus_write(vcpu, bus, &range, val);5878 return r < 0 ? r : 0;5879}5880EXPORT_SYMBOL_GPL(kvm_io_bus_write);5881 5882/* kvm_io_bus_write_cookie - called under kvm->slots_lock */5883int kvm_io_bus_write_cookie(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx,5884 gpa_t addr, int len, const void *val, long cookie)5885{5886 struct kvm_io_bus *bus;5887 struct kvm_io_range range;5888 5889 range = (struct kvm_io_range) {5890 .addr = addr,5891 .len = len,5892 };5893 5894 bus = srcu_dereference(vcpu->kvm->buses[bus_idx], &vcpu->kvm->srcu);5895 if (!bus)5896 return -ENOMEM;5897 5898 /* First try the device referenced by cookie. */5899 if ((cookie >= 0) && (cookie < bus->dev_count) &&5900 (kvm_io_bus_cmp(&range, &bus->range[cookie]) == 0))5901 if (!kvm_iodevice_write(vcpu, bus->range[cookie].dev, addr, len,5902 val))5903 return cookie;5904 5905 /*5906 * cookie contained garbage; fall back to search and return the5907 * correct cookie value.5908 */5909 return __kvm_io_bus_write(vcpu, bus, &range, val);5910}5911 5912static int __kvm_io_bus_read(struct kvm_vcpu *vcpu, struct kvm_io_bus *bus,5913 struct kvm_io_range *range, void *val)5914{5915 int idx;5916 5917 idx = kvm_io_bus_get_first_dev(bus, range->addr, range->len);5918 if (idx < 0)5919 return -EOPNOTSUPP;5920 5921 while (idx < bus->dev_count &&5922 kvm_io_bus_cmp(range, &bus->range[idx]) == 0) {5923 if (!kvm_iodevice_read(vcpu, bus->range[idx].dev, range->addr,5924 range->len, val))5925 return idx;5926 idx++;5927 }5928 5929 return -EOPNOTSUPP;5930}5931 5932/* kvm_io_bus_read - called under kvm->slots_lock */5933int kvm_io_bus_read(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr,5934 int len, void *val)5935{5936 struct kvm_io_bus *bus;5937 struct kvm_io_range range;5938 int r;5939 5940 range = (struct kvm_io_range) {5941 .addr = addr,5942 .len = len,5943 };5944 5945 bus = srcu_dereference(vcpu->kvm->buses[bus_idx], &vcpu->kvm->srcu);5946 if (!bus)5947 return -ENOMEM;5948 r = __kvm_io_bus_read(vcpu, bus, &range, val);5949 return r < 0 ? r : 0;5950}5951 5952int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,5953 int len, struct kvm_io_device *dev)5954{5955 int i;5956 struct kvm_io_bus *new_bus, *bus;5957 struct kvm_io_range range;5958 5959 lockdep_assert_held(&kvm->slots_lock);5960 5961 bus = kvm_get_bus(kvm, bus_idx);5962 if (!bus)5963 return -ENOMEM;5964 5965 /* exclude ioeventfd which is limited by maximum fd */5966 if (bus->dev_count - bus->ioeventfd_count > NR_IOBUS_DEVS - 1)5967 return -ENOSPC;5968 5969 new_bus = kmalloc(struct_size(bus, range, bus->dev_count + 1),5970 GFP_KERNEL_ACCOUNT);5971 if (!new_bus)5972 return -ENOMEM;5973 5974 range = (struct kvm_io_range) {5975 .addr = addr,5976 .len = len,5977 .dev = dev,5978 };5979 5980 for (i = 0; i < bus->dev_count; i++)5981 if (kvm_io_bus_cmp(&bus->range[i], &range) > 0)5982 break;5983 5984 memcpy(new_bus, bus, sizeof(*bus) + i * sizeof(struct kvm_io_range));5985 new_bus->dev_count++;5986 new_bus->range[i] = range;5987 memcpy(new_bus->range + i + 1, bus->range + i,5988 (bus->dev_count - i) * sizeof(struct kvm_io_range));5989 rcu_assign_pointer(kvm->buses[bus_idx], new_bus);5990 synchronize_srcu_expedited(&kvm->srcu);5991 kfree(bus);5992 5993 return 0;5994}5995 5996int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,5997 struct kvm_io_device *dev)5998{5999 int i;6000 struct kvm_io_bus *new_bus, *bus;6001 6002 lockdep_assert_held(&kvm->slots_lock);6003 6004 bus = kvm_get_bus(kvm, bus_idx);6005 if (!bus)6006 return 0;6007 6008 for (i = 0; i < bus->dev_count; i++) {6009 if (bus->range[i].dev == dev) {6010 break;6011 }6012 }6013 6014 if (i == bus->dev_count)6015 return 0;6016 6017 new_bus = kmalloc(struct_size(bus, range, bus->dev_count - 1),6018 GFP_KERNEL_ACCOUNT);6019 if (new_bus) {6020 memcpy(new_bus, bus, struct_size(bus, range, i));6021 new_bus->dev_count--;6022 memcpy(new_bus->range + i, bus->range + i + 1,6023 flex_array_size(new_bus, range, new_bus->dev_count - i));6024 }6025 6026 rcu_assign_pointer(kvm->buses[bus_idx], new_bus);6027 synchronize_srcu_expedited(&kvm->srcu);6028 6029 /*6030 * If NULL bus is installed, destroy the old bus, including all the6031 * attached devices. Otherwise, destroy the caller's device only.6032 */6033 if (!new_bus) {6034 pr_err("kvm: failed to shrink bus, removing it completely\n");6035 kvm_io_bus_destroy(bus);6036 return -ENOMEM;6037 }6038 6039 kvm_iodevice_destructor(dev);6040 kfree(bus);6041 return 0;6042}6043 6044struct kvm_io_device *kvm_io_bus_get_dev(struct kvm *kvm, enum kvm_bus bus_idx,6045 gpa_t addr)6046{6047 struct kvm_io_bus *bus;6048 int dev_idx, srcu_idx;6049 struct kvm_io_device *iodev = NULL;6050 6051 srcu_idx = srcu_read_lock(&kvm->srcu);6052 6053 bus = srcu_dereference(kvm->buses[bus_idx], &kvm->srcu);6054 if (!bus)6055 goto out_unlock;6056 6057 dev_idx = kvm_io_bus_get_first_dev(bus, addr, 1);6058 if (dev_idx < 0)6059 goto out_unlock;6060 6061 iodev = bus->range[dev_idx].dev;6062 6063out_unlock:6064 srcu_read_unlock(&kvm->srcu, srcu_idx);6065 6066 return iodev;6067}6068EXPORT_SYMBOL_GPL(kvm_io_bus_get_dev);6069 6070static int kvm_debugfs_open(struct inode *inode, struct file *file,6071 int (*get)(void *, u64 *), int (*set)(void *, u64),6072 const char *fmt)6073{6074 int ret;6075 struct kvm_stat_data *stat_data = inode->i_private;6076 6077 /*6078 * The debugfs files are a reference to the kvm struct which6079 * is still valid when kvm_destroy_vm is called. kvm_get_kvm_safe6080 * avoids the race between open and the removal of the debugfs directory.6081 */6082 if (!kvm_get_kvm_safe(stat_data->kvm))6083 return -ENOENT;6084 6085 ret = simple_attr_open(inode, file, get,6086 kvm_stats_debugfs_mode(stat_data->desc) & 02226087 ? set : NULL, fmt);6088 if (ret)6089 kvm_put_kvm(stat_data->kvm);6090 6091 return ret;6092}6093 6094static int kvm_debugfs_release(struct inode *inode, struct file *file)6095{6096 struct kvm_stat_data *stat_data = inode->i_private;6097 6098 simple_attr_release(inode, file);6099 kvm_put_kvm(stat_data->kvm);6100 6101 return 0;6102}6103 6104static int kvm_get_stat_per_vm(struct kvm *kvm, size_t offset, u64 *val)6105{6106 *val = *(u64 *)((void *)(&kvm->stat) + offset);6107 6108 return 0;6109}6110 6111static int kvm_clear_stat_per_vm(struct kvm *kvm, size_t offset)6112{6113 *(u64 *)((void *)(&kvm->stat) + offset) = 0;6114 6115 return 0;6116}6117 6118static int kvm_get_stat_per_vcpu(struct kvm *kvm, size_t offset, u64 *val)6119{6120 unsigned long i;6121 struct kvm_vcpu *vcpu;6122 6123 *val = 0;6124 6125 kvm_for_each_vcpu(i, vcpu, kvm)6126 *val += *(u64 *)((void *)(&vcpu->stat) + offset);6127 6128 return 0;6129}6130 6131static int kvm_clear_stat_per_vcpu(struct kvm *kvm, size_t offset)6132{6133 unsigned long i;6134 struct kvm_vcpu *vcpu;6135 6136 kvm_for_each_vcpu(i, vcpu, kvm)6137 *(u64 *)((void *)(&vcpu->stat) + offset) = 0;6138 6139 return 0;6140}6141 6142static int kvm_stat_data_get(void *data, u64 *val)6143{6144 int r = -EFAULT;6145 struct kvm_stat_data *stat_data = data;6146 6147 switch (stat_data->kind) {6148 case KVM_STAT_VM:6149 r = kvm_get_stat_per_vm(stat_data->kvm,6150 stat_data->desc->desc.offset, val);6151 break;6152 case KVM_STAT_VCPU:6153 r = kvm_get_stat_per_vcpu(stat_data->kvm,6154 stat_data->desc->desc.offset, val);6155 break;6156 }6157 6158 return r;6159}6160 6161static int kvm_stat_data_clear(void *data, u64 val)6162{6163 int r = -EFAULT;6164 struct kvm_stat_data *stat_data = data;6165 6166 if (val)6167 return -EINVAL;6168 6169 switch (stat_data->kind) {6170 case KVM_STAT_VM:6171 r = kvm_clear_stat_per_vm(stat_data->kvm,6172 stat_data->desc->desc.offset);6173 break;6174 case KVM_STAT_VCPU:6175 r = kvm_clear_stat_per_vcpu(stat_data->kvm,6176 stat_data->desc->desc.offset);6177 break;6178 }6179 6180 return r;6181}6182 6183static int kvm_stat_data_open(struct inode *inode, struct file *file)6184{6185 __simple_attr_check_format("%llu\n", 0ull);6186 return kvm_debugfs_open(inode, file, kvm_stat_data_get,6187 kvm_stat_data_clear, "%llu\n");6188}6189 6190static const struct file_operations stat_fops_per_vm = {6191 .owner = THIS_MODULE,6192 .open = kvm_stat_data_open,6193 .release = kvm_debugfs_release,6194 .read = simple_attr_read,6195 .write = simple_attr_write,6196};6197 6198static int vm_stat_get(void *_offset, u64 *val)6199{6200 unsigned offset = (long)_offset;6201 struct kvm *kvm;6202 u64 tmp_val;6203 6204 *val = 0;6205 mutex_lock(&kvm_lock);6206 list_for_each_entry(kvm, &vm_list, vm_list) {6207 kvm_get_stat_per_vm(kvm, offset, &tmp_val);6208 *val += tmp_val;6209 }6210 mutex_unlock(&kvm_lock);6211 return 0;6212}6213 6214static int vm_stat_clear(void *_offset, u64 val)6215{6216 unsigned offset = (long)_offset;6217 struct kvm *kvm;6218 6219 if (val)6220 return -EINVAL;6221 6222 mutex_lock(&kvm_lock);6223 list_for_each_entry(kvm, &vm_list, vm_list) {6224 kvm_clear_stat_per_vm(kvm, offset);6225 }6226 mutex_unlock(&kvm_lock);6227 6228 return 0;6229}6230 6231DEFINE_SIMPLE_ATTRIBUTE(vm_stat_fops, vm_stat_get, vm_stat_clear, "%llu\n");6232DEFINE_SIMPLE_ATTRIBUTE(vm_stat_readonly_fops, vm_stat_get, NULL, "%llu\n");6233 6234static int vcpu_stat_get(void *_offset, u64 *val)6235{6236 unsigned offset = (long)_offset;6237 struct kvm *kvm;6238 u64 tmp_val;6239 6240 *val = 0;6241 mutex_lock(&kvm_lock);6242 list_for_each_entry(kvm, &vm_list, vm_list) {6243 kvm_get_stat_per_vcpu(kvm, offset, &tmp_val);6244 *val += tmp_val;6245 }6246 mutex_unlock(&kvm_lock);6247 return 0;6248}6249 6250static int vcpu_stat_clear(void *_offset, u64 val)6251{6252 unsigned offset = (long)_offset;6253 struct kvm *kvm;6254 6255 if (val)6256 return -EINVAL;6257 6258 mutex_lock(&kvm_lock);6259 list_for_each_entry(kvm, &vm_list, vm_list) {6260 kvm_clear_stat_per_vcpu(kvm, offset);6261 }6262 mutex_unlock(&kvm_lock);6263 6264 return 0;6265}6266 6267DEFINE_SIMPLE_ATTRIBUTE(vcpu_stat_fops, vcpu_stat_get, vcpu_stat_clear,6268 "%llu\n");6269DEFINE_SIMPLE_ATTRIBUTE(vcpu_stat_readonly_fops, vcpu_stat_get, NULL, "%llu\n");6270 6271static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)6272{6273 struct kobj_uevent_env *env;6274 unsigned long long created, active;6275 6276 if (!kvm_dev.this_device || !kvm)6277 return;6278 6279 mutex_lock(&kvm_lock);6280 if (type == KVM_EVENT_CREATE_VM) {6281 kvm_createvm_count++;6282 kvm_active_vms++;6283 } else if (type == KVM_EVENT_DESTROY_VM) {6284 kvm_active_vms--;6285 }6286 created = kvm_createvm_count;6287 active = kvm_active_vms;6288 mutex_unlock(&kvm_lock);6289 6290 env = kzalloc(sizeof(*env), GFP_KERNEL);6291 if (!env)6292 return;6293 6294 add_uevent_var(env, "CREATED=%llu", created);6295 add_uevent_var(env, "COUNT=%llu", active);6296 6297 if (type == KVM_EVENT_CREATE_VM) {6298 add_uevent_var(env, "EVENT=create");6299 kvm->userspace_pid = task_pid_nr(current);6300 } else if (type == KVM_EVENT_DESTROY_VM) {6301 add_uevent_var(env, "EVENT=destroy");6302 }6303 add_uevent_var(env, "PID=%d", kvm->userspace_pid);6304 6305 if (!IS_ERR(kvm->debugfs_dentry)) {6306 char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL);6307 6308 if (p) {6309 tmp = dentry_path_raw(kvm->debugfs_dentry, p, PATH_MAX);6310 if (!IS_ERR(tmp))6311 add_uevent_var(env, "STATS_PATH=%s", tmp);6312 kfree(p);6313 }6314 }6315 /* no need for checks, since we are adding at most only 5 keys */6316 env->envp[env->envp_idx++] = NULL;6317 kobject_uevent_env(&kvm_dev.this_device->kobj, KOBJ_CHANGE, env->envp);6318 kfree(env);6319}6320 6321static void kvm_init_debug(void)6322{6323 const struct file_operations *fops;6324 const struct _kvm_stats_desc *pdesc;6325 int i;6326 6327 kvm_debugfs_dir = debugfs_create_dir("kvm", NULL);6328 6329 for (i = 0; i < kvm_vm_stats_header.num_desc; ++i) {6330 pdesc = &kvm_vm_stats_desc[i];6331 if (kvm_stats_debugfs_mode(pdesc) & 0222)6332 fops = &vm_stat_fops;6333 else6334 fops = &vm_stat_readonly_fops;6335 debugfs_create_file(pdesc->name, kvm_stats_debugfs_mode(pdesc),6336 kvm_debugfs_dir,6337 (void *)(long)pdesc->desc.offset, fops);6338 }6339 6340 for (i = 0; i < kvm_vcpu_stats_header.num_desc; ++i) {6341 pdesc = &kvm_vcpu_stats_desc[i];6342 if (kvm_stats_debugfs_mode(pdesc) & 0222)6343 fops = &vcpu_stat_fops;6344 else6345 fops = &vcpu_stat_readonly_fops;6346 debugfs_create_file(pdesc->name, kvm_stats_debugfs_mode(pdesc),6347 kvm_debugfs_dir,6348 (void *)(long)pdesc->desc.offset, fops);6349 }6350}6351 6352static inline6353struct kvm_vcpu *preempt_notifier_to_vcpu(struct preempt_notifier *pn)6354{6355 return container_of(pn, struct kvm_vcpu, preempt_notifier);6356}6357 6358static void kvm_sched_in(struct preempt_notifier *pn, int cpu)6359{6360 struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn);6361 6362 WRITE_ONCE(vcpu->preempted, false);6363 WRITE_ONCE(vcpu->ready, false);6364 6365 __this_cpu_write(kvm_running_vcpu, vcpu);6366 kvm_arch_vcpu_load(vcpu, cpu);6367 6368 WRITE_ONCE(vcpu->scheduled_out, false);6369}6370 6371static void kvm_sched_out(struct preempt_notifier *pn,6372 struct task_struct *next)6373{6374 struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn);6375 6376 WRITE_ONCE(vcpu->scheduled_out, true);6377 6378 if (task_is_runnable(current) && vcpu->wants_to_run) {6379 WRITE_ONCE(vcpu->preempted, true);6380 WRITE_ONCE(vcpu->ready, true);6381 }6382 kvm_arch_vcpu_put(vcpu);6383 __this_cpu_write(kvm_running_vcpu, NULL);6384}6385 6386/**6387 * kvm_get_running_vcpu - get the vcpu running on the current CPU.6388 *6389 * We can disable preemption locally around accessing the per-CPU variable,6390 * and use the resolved vcpu pointer after enabling preemption again,6391 * because even if the current thread is migrated to another CPU, reading6392 * the per-CPU value later will give us the same value as we update the6393 * per-CPU variable in the preempt notifier handlers.6394 */6395struct kvm_vcpu *kvm_get_running_vcpu(void)6396{6397 struct kvm_vcpu *vcpu;6398 6399 preempt_disable();6400 vcpu = __this_cpu_read(kvm_running_vcpu);6401 preempt_enable();6402 6403 return vcpu;6404}6405EXPORT_SYMBOL_GPL(kvm_get_running_vcpu);6406 6407/**6408 * kvm_get_running_vcpus - get the per-CPU array of currently running vcpus.6409 */6410struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void)6411{6412 return &kvm_running_vcpu;6413}6414 6415#ifdef CONFIG_GUEST_PERF_EVENTS6416static unsigned int kvm_guest_state(void)6417{6418 struct kvm_vcpu *vcpu = kvm_get_running_vcpu();6419 unsigned int state;6420 6421 if (!kvm_arch_pmi_in_guest(vcpu))6422 return 0;6423 6424 state = PERF_GUEST_ACTIVE;6425 if (!kvm_arch_vcpu_in_kernel(vcpu))6426 state |= PERF_GUEST_USER;6427 6428 return state;6429}6430 6431static unsigned long kvm_guest_get_ip(void)6432{6433 struct kvm_vcpu *vcpu = kvm_get_running_vcpu();6434 6435 /* Retrieving the IP must be guarded by a call to kvm_guest_state(). */6436 if (WARN_ON_ONCE(!kvm_arch_pmi_in_guest(vcpu)))6437 return 0;6438 6439 return kvm_arch_vcpu_get_ip(vcpu);6440}6441 6442static struct perf_guest_info_callbacks kvm_guest_cbs = {6443 .state = kvm_guest_state,6444 .get_ip = kvm_guest_get_ip,6445 .handle_intel_pt_intr = NULL,6446};6447 6448void kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void))6449{6450 kvm_guest_cbs.handle_intel_pt_intr = pt_intr_handler;6451 perf_register_guest_info_callbacks(&kvm_guest_cbs);6452}6453void kvm_unregister_perf_callbacks(void)6454{6455 perf_unregister_guest_info_callbacks(&kvm_guest_cbs);6456}6457#endif6458 6459int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module)6460{6461 int r;6462 int cpu;6463 6464 /* A kmem cache lets us meet the alignment requirements of fx_save. */6465 if (!vcpu_align)6466 vcpu_align = __alignof__(struct kvm_vcpu);6467 kvm_vcpu_cache =6468 kmem_cache_create_usercopy("kvm_vcpu", vcpu_size, vcpu_align,6469 SLAB_ACCOUNT,6470 offsetof(struct kvm_vcpu, arch),6471 offsetofend(struct kvm_vcpu, stats_id)6472 - offsetof(struct kvm_vcpu, arch),6473 NULL);6474 if (!kvm_vcpu_cache)6475 return -ENOMEM;6476 6477 for_each_possible_cpu(cpu) {6478 if (!alloc_cpumask_var_node(&per_cpu(cpu_kick_mask, cpu),6479 GFP_KERNEL, cpu_to_node(cpu))) {6480 r = -ENOMEM;6481 goto err_cpu_kick_mask;6482 }6483 }6484 6485 r = kvm_irqfd_init();6486 if (r)6487 goto err_irqfd;6488 6489 r = kvm_async_pf_init();6490 if (r)6491 goto err_async_pf;6492 6493 kvm_chardev_ops.owner = module;6494 kvm_vm_fops.owner = module;6495 kvm_vcpu_fops.owner = module;6496 kvm_device_fops.owner = module;6497 6498 kvm_preempt_ops.sched_in = kvm_sched_in;6499 kvm_preempt_ops.sched_out = kvm_sched_out;6500 6501 kvm_init_debug();6502 6503 r = kvm_vfio_ops_init();6504 if (WARN_ON_ONCE(r))6505 goto err_vfio;6506 6507 kvm_gmem_init(module);6508 6509 r = kvm_init_virtualization();6510 if (r)6511 goto err_virt;6512 6513 /*6514 * Registration _must_ be the very last thing done, as this exposes6515 * /dev/kvm to userspace, i.e. all infrastructure must be setup!6516 */6517 r = misc_register(&kvm_dev);6518 if (r) {6519 pr_err("kvm: misc device register failed\n");6520 goto err_register;6521 }6522 6523 return 0;6524 6525err_register:6526 kvm_uninit_virtualization();6527err_virt:6528 kvm_vfio_ops_exit();6529err_vfio:6530 kvm_async_pf_deinit();6531err_async_pf:6532 kvm_irqfd_exit();6533err_irqfd:6534err_cpu_kick_mask:6535 for_each_possible_cpu(cpu)6536 free_cpumask_var(per_cpu(cpu_kick_mask, cpu));6537 kmem_cache_destroy(kvm_vcpu_cache);6538 return r;6539}6540EXPORT_SYMBOL_GPL(kvm_init);6541 6542void kvm_exit(void)6543{6544 int cpu;6545 6546 /*6547 * Note, unregistering /dev/kvm doesn't strictly need to come first,6548 * fops_get(), a.k.a. try_module_get(), prevents acquiring references6549 * to KVM while the module is being stopped.6550 */6551 misc_deregister(&kvm_dev);6552 6553 kvm_uninit_virtualization();6554 6555 debugfs_remove_recursive(kvm_debugfs_dir);6556 for_each_possible_cpu(cpu)6557 free_cpumask_var(per_cpu(cpu_kick_mask, cpu));6558 kmem_cache_destroy(kvm_vcpu_cache);6559 kvm_vfio_ops_exit();6560 kvm_async_pf_deinit();6561 kvm_irqfd_exit();6562}6563EXPORT_SYMBOL_GPL(kvm_exit);6564 6565struct kvm_vm_worker_thread_context {6566 struct kvm *kvm;6567 struct task_struct *parent;6568 struct completion init_done;6569 kvm_vm_thread_fn_t thread_fn;6570 uintptr_t data;6571 int err;6572};6573 6574static int kvm_vm_worker_thread(void *context)6575{6576 /*6577 * The init_context is allocated on the stack of the parent thread, so6578 * we have to locally copy anything that is needed beyond initialization6579 */6580 struct kvm_vm_worker_thread_context *init_context = context;6581 struct task_struct *parent;6582 struct kvm *kvm = init_context->kvm;6583 kvm_vm_thread_fn_t thread_fn = init_context->thread_fn;6584 uintptr_t data = init_context->data;6585 int err;6586 6587 err = kthread_park(current);6588 /* kthread_park(current) is never supposed to return an error */6589 WARN_ON(err != 0);6590 if (err)6591 goto init_complete;6592 6593 err = cgroup_attach_task_all(init_context->parent, current);6594 if (err) {6595 kvm_err("%s: cgroup_attach_task_all failed with err %d\n",6596 __func__, err);6597 goto init_complete;6598 }6599 6600 set_user_nice(current, task_nice(init_context->parent));6601 6602init_complete:6603 init_context->err = err;6604 complete(&init_context->init_done);6605 init_context = NULL;6606 6607 if (err)6608 goto out;6609 6610 /* Wait to be woken up by the spawner before proceeding. */6611 kthread_parkme();6612 6613 if (!kthread_should_stop())6614 err = thread_fn(kvm, data);6615 6616out:6617 /*6618 * Move kthread back to its original cgroup to prevent it lingering in6619 * the cgroup of the VM process, after the latter finishes its6620 * execution.6621 *6622 * kthread_stop() waits on the 'exited' completion condition which is6623 * set in exit_mm(), via mm_release(), in do_exit(). However, the6624 * kthread is removed from the cgroup in the cgroup_exit() which is6625 * called after the exit_mm(). This causes the kthread_stop() to return6626 * before the kthread actually quits the cgroup.6627 */6628 rcu_read_lock();6629 parent = rcu_dereference(current->real_parent);6630 get_task_struct(parent);6631 rcu_read_unlock();6632 cgroup_attach_task_all(parent, current);6633 put_task_struct(parent);6634 6635 return err;6636}6637 6638int kvm_vm_create_worker_thread(struct kvm *kvm, kvm_vm_thread_fn_t thread_fn,6639 uintptr_t data, const char *name,6640 struct task_struct **thread_ptr)6641{6642 struct kvm_vm_worker_thread_context init_context = {};6643 struct task_struct *thread;6644 6645 *thread_ptr = NULL;6646 init_context.kvm = kvm;6647 init_context.parent = current;6648 init_context.thread_fn = thread_fn;6649 init_context.data = data;6650 init_completion(&init_context.init_done);6651 6652 thread = kthread_run(kvm_vm_worker_thread, &init_context,6653 "%s-%d", name, task_pid_nr(current));6654 if (IS_ERR(thread))6655 return PTR_ERR(thread);6656 6657 /* kthread_run is never supposed to return NULL */6658 WARN_ON(thread == NULL);6659 6660 wait_for_completion(&init_context.init_done);6661 6662 if (!init_context.err)6663 *thread_ptr = thread;6664 6665 return init_context.err;6666}6667