synic 530 arch/x86/include/asm/kvm_host.h struct kvm_vcpu_hv_synic synic; synic 42 arch/x86/kvm/hyperv.c static inline u64 synic_read_sint(struct kvm_vcpu_hv_synic *synic, int sint) synic 44 arch/x86/kvm/hyperv.c return atomic64_read(&synic->sint[sint]); synic 54 arch/x86/kvm/hyperv.c static bool synic_has_vector_connected(struct kvm_vcpu_hv_synic *synic, synic 59 arch/x86/kvm/hyperv.c for (i = 0; i < ARRAY_SIZE(synic->sint); i++) { synic 60 arch/x86/kvm/hyperv.c if (synic_get_sint_vector(synic_read_sint(synic, i)) == vector) synic 66 arch/x86/kvm/hyperv.c static bool synic_has_vector_auto_eoi(struct kvm_vcpu_hv_synic *synic, synic 72 arch/x86/kvm/hyperv.c for (i = 0; i < ARRAY_SIZE(synic->sint); i++) { synic 73 arch/x86/kvm/hyperv.c sint_value = synic_read_sint(synic, i); synic 81 arch/x86/kvm/hyperv.c static void synic_update_vector(struct kvm_vcpu_hv_synic *synic, synic 87 arch/x86/kvm/hyperv.c if (synic_has_vector_connected(synic, vector)) synic 88 arch/x86/kvm/hyperv.c __set_bit(vector, synic->vec_bitmap); synic 90 arch/x86/kvm/hyperv.c __clear_bit(vector, synic->vec_bitmap); synic 92 arch/x86/kvm/hyperv.c if (synic_has_vector_auto_eoi(synic, vector)) synic 93 arch/x86/kvm/hyperv.c __set_bit(vector, synic->auto_eoi_bitmap); synic 95 arch/x86/kvm/hyperv.c __clear_bit(vector, synic->auto_eoi_bitmap); synic 98 arch/x86/kvm/hyperv.c static int synic_set_sint(struct kvm_vcpu_hv_synic *synic, int sint, synic 120 arch/x86/kvm/hyperv.c old_vector = synic_read_sint(synic, sint) & HV_SYNIC_SINT_VECTOR_MASK; synic 122 arch/x86/kvm/hyperv.c atomic64_set(&synic->sint[sint], data); synic 124 arch/x86/kvm/hyperv.c synic_update_vector(synic, old_vector); synic 126 arch/x86/kvm/hyperv.c synic_update_vector(synic, vector); synic 129 arch/x86/kvm/hyperv.c kvm_make_request(KVM_REQ_SCAN_IOAPIC, synic_to_vcpu(synic)); synic 153 arch/x86/kvm/hyperv.c struct kvm_vcpu_hv_synic *synic; synic 158 arch/x86/kvm/hyperv.c synic = vcpu_to_synic(vcpu); synic 159 arch/x86/kvm/hyperv.c return (synic->active) ? synic : NULL; synic 165 arch/x86/kvm/hyperv.c struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); synic 182 arch/x86/kvm/hyperv.c gsi = atomic_read(&synic->sint_to_gsi[sint]); synic 188 arch/x86/kvm/hyperv.c static void synic_exit(struct kvm_vcpu_hv_synic *synic, u32 msr) synic 190 arch/x86/kvm/hyperv.c struct kvm_vcpu *vcpu = synic_to_vcpu(synic); synic 194 arch/x86/kvm/hyperv.c hv_vcpu->exit.u.synic.msr = msr; synic 195 arch/x86/kvm/hyperv.c hv_vcpu->exit.u.synic.control = synic->control; synic 196 arch/x86/kvm/hyperv.c hv_vcpu->exit.u.synic.evt_page = synic->evt_page; synic 197 arch/x86/kvm/hyperv.c hv_vcpu->exit.u.synic.msg_page = synic->msg_page; synic 202 arch/x86/kvm/hyperv.c static int synic_set_msr(struct kvm_vcpu_hv_synic *synic, synic 205 arch/x86/kvm/hyperv.c struct kvm_vcpu *vcpu = synic_to_vcpu(synic); synic 208 arch/x86/kvm/hyperv.c if (!synic->active && !host) synic 216 arch/x86/kvm/hyperv.c synic->control = data; synic 218 arch/x86/kvm/hyperv.c synic_exit(synic, msr); synic 225 arch/x86/kvm/hyperv.c synic->version = data; synic 229 arch/x86/kvm/hyperv.c !synic->dont_zero_synic_pages) synic 235 arch/x86/kvm/hyperv.c synic->evt_page = data; synic 237 arch/x86/kvm/hyperv.c synic_exit(synic, msr); synic 241 arch/x86/kvm/hyperv.c !synic->dont_zero_synic_pages) synic 247 arch/x86/kvm/hyperv.c synic->msg_page = data; synic 249 arch/x86/kvm/hyperv.c synic_exit(synic, msr); synic 254 arch/x86/kvm/hyperv.c for (i = 0; i < ARRAY_SIZE(synic->sint); i++) synic 259 arch/x86/kvm/hyperv.c ret = synic_set_sint(synic, msr - HV_X64_MSR_SINT0, data, host); synic 268 arch/x86/kvm/hyperv.c static int synic_get_msr(struct kvm_vcpu_hv_synic *synic, u32 msr, u64 *pdata, synic 273 arch/x86/kvm/hyperv.c if (!synic->active && !host) synic 279 arch/x86/kvm/hyperv.c *pdata = synic->control; synic 282 arch/x86/kvm/hyperv.c *pdata = synic->version; synic 285 arch/x86/kvm/hyperv.c *pdata = synic->evt_page; synic 288 arch/x86/kvm/hyperv.c *pdata = synic->msg_page; synic 294 arch/x86/kvm/hyperv.c *pdata = atomic64_read(&synic->sint[msr - HV_X64_MSR_SINT0]); synic 303 arch/x86/kvm/hyperv.c static int synic_set_irq(struct kvm_vcpu_hv_synic *synic, u32 sint) synic 305 arch/x86/kvm/hyperv.c struct kvm_vcpu *vcpu = synic_to_vcpu(synic); synic 309 arch/x86/kvm/hyperv.c if (sint >= ARRAY_SIZE(synic->sint)) synic 312 arch/x86/kvm/hyperv.c vector = synic_get_sint_vector(synic_read_sint(synic, sint)); synic 330 arch/x86/kvm/hyperv.c struct kvm_vcpu_hv_synic *synic; synic 332 arch/x86/kvm/hyperv.c synic = synic_get(kvm, vpidx); synic 333 arch/x86/kvm/hyperv.c if (!synic) synic 336 arch/x86/kvm/hyperv.c return synic_set_irq(synic, sint); synic 341 arch/x86/kvm/hyperv.c struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); synic 346 arch/x86/kvm/hyperv.c for (i = 0; i < ARRAY_SIZE(synic->sint); i++) synic 347 arch/x86/kvm/hyperv.c if (synic_get_sint_vector(synic_read_sint(synic, i)) == vector) synic 353 arch/x86/kvm/hyperv.c struct kvm_vcpu_hv_synic *synic; synic 355 arch/x86/kvm/hyperv.c synic = synic_get(kvm, vpidx); synic 356 arch/x86/kvm/hyperv.c if (!synic) synic 359 arch/x86/kvm/hyperv.c if (sint >= ARRAY_SIZE(synic->sint_to_gsi)) synic 362 arch/x86/kvm/hyperv.c atomic_set(&synic->sint_to_gsi[sint], gsi); synic 384 arch/x86/kvm/hyperv.c static void synic_init(struct kvm_vcpu_hv_synic *synic) synic 388 arch/x86/kvm/hyperv.c memset(synic, 0, sizeof(*synic)); synic 389 arch/x86/kvm/hyperv.c synic->version = HV_SYNIC_VERSION_1; synic 390 arch/x86/kvm/hyperv.c for (i = 0; i < ARRAY_SIZE(synic->sint); i++) { synic 391 arch/x86/kvm/hyperv.c atomic64_set(&synic->sint[i], HV_SYNIC_SINT_MASKED); synic 392 arch/x86/kvm/hyperv.c atomic_set(&synic->sint_to_gsi[i], -1); synic 564 arch/x86/kvm/hyperv.c static int synic_deliver_msg(struct kvm_vcpu_hv_synic *synic, u32 sint, synic 567 arch/x86/kvm/hyperv.c struct kvm_vcpu *vcpu = synic_to_vcpu(synic); synic 573 arch/x86/kvm/hyperv.c if (!(synic->msg_page & HV_SYNIC_SIMP_ENABLE)) synic 576 arch/x86/kvm/hyperv.c msg_page_gfn = synic->msg_page >> PAGE_SHIFT; synic 613 arch/x86/kvm/hyperv.c r = synic_set_irq(synic, sint); synic 758 arch/x86/kvm/hyperv.c synic_init(&hv_vcpu->synic); synic 774 arch/x86/kvm/hyperv.c struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); synic 781 arch/x86/kvm/hyperv.c synic->active = true; synic 782 arch/x86/kvm/hyperv.c synic->dont_zero_synic_pages = dont_zero_synic_pages; synic 41 arch/x86/kvm/hyperv.h return &vcpu->arch.hyperv.synic; synic 44 arch/x86/kvm/hyperv.h static inline struct kvm_vcpu *synic_to_vcpu(struct kvm_vcpu_hv_synic *synic) synic 46 arch/x86/kvm/hyperv.h return hv_vcpu_to_vcpu(container_of(synic, struct kvm_vcpu_hv, synic)); synic 198 include/uapi/linux/kvm.h } synic; synic 198 tools/include/uapi/linux/kvm.h } synic;