Symbol: imsic
arch/riscv/kvm/aia_imsic.c
1006
imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
1007
if (!imsic)
arch/riscv/kvm/aia_imsic.c
1011
return imsic_mrif_isel_check(imsic->nr_eix, isel);
arch/riscv/kvm/aia_imsic.c
1016
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
1018
if (!imsic)
arch/riscv/kvm/aia_imsic.c
1023
memset(imsic->swfile, 0, sizeof(*imsic->swfile));
arch/riscv/kvm/aia_imsic.c
1031
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
1034
if (!imsic || !iid || guest_index ||
arch/riscv/kvm/aia_imsic.c
1040
if (imsic->nr_msis <= iid)
arch/riscv/kvm/aia_imsic.c
1043
read_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
1045
if (imsic->vsfile_cpu >= 0) {
arch/riscv/kvm/aia_imsic.c
1046
writel(iid, imsic->vsfile_va + IMSIC_MMIO_SETIPNUM_LE);
arch/riscv/kvm/aia_imsic.c
1048
eix = &imsic->swfile->eix[iid / BITS_PER_TYPE(u64)];
arch/riscv/kvm/aia_imsic.c
1053
read_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
1093
struct imsic *imsic;
arch/riscv/kvm/aia_imsic.c
1102
imsic = kzalloc_obj(*imsic);
arch/riscv/kvm/aia_imsic.c
1103
if (!imsic)
arch/riscv/kvm/aia_imsic.c
1105
vcpu->arch.aia_context.imsic_state = imsic;
arch/riscv/kvm/aia_imsic.c
1108
imsic->nr_msis = kvm->arch.aia.nr_ids + 1;
arch/riscv/kvm/aia_imsic.c
1109
rwlock_init(&imsic->vsfile_lock);
arch/riscv/kvm/aia_imsic.c
1110
imsic->nr_eix = BITS_TO_U64(imsic->nr_msis);
arch/riscv/kvm/aia_imsic.c
1111
imsic->nr_hw_eix = BITS_TO_U64(kvm_riscv_aia_max_ids);
arch/riscv/kvm/aia_imsic.c
1112
imsic->vsfile_hgei = imsic->vsfile_cpu = -1;
arch/riscv/kvm/aia_imsic.c
1116
get_order(sizeof(*imsic->swfile)));
arch/riscv/kvm/aia_imsic.c
1121
imsic->swfile = page_to_virt(swfile_page);
arch/riscv/kvm/aia_imsic.c
1122
imsic->swfile_pa = page_to_phys(swfile_page);
arch/riscv/kvm/aia_imsic.c
1123
raw_spin_lock_init(&imsic->swfile_extirq_lock);
arch/riscv/kvm/aia_imsic.c
1126
kvm_iodevice_init(&imsic->iodev, &imsic_iodoev_ops);
arch/riscv/kvm/aia_imsic.c
1131
&imsic->iodev);
arch/riscv/kvm/aia_imsic.c
1139
free_pages((unsigned long)imsic->swfile,
arch/riscv/kvm/aia_imsic.c
1140
get_order(sizeof(*imsic->swfile)));
arch/riscv/kvm/aia_imsic.c
1143
kfree(imsic);
arch/riscv/kvm/aia_imsic.c
1150
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
1152
if (!imsic)
arch/riscv/kvm/aia_imsic.c
1155
imsic_vsfile_cleanup(imsic);
arch/riscv/kvm/aia_imsic.c
1158
kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &imsic->iodev);
arch/riscv/kvm/aia_imsic.c
1161
free_pages((unsigned long)imsic->swfile,
arch/riscv/kvm/aia_imsic.c
1162
get_order(sizeof(*imsic->swfile)));
arch/riscv/kvm/aia_imsic.c
1165
kfree(imsic);
arch/riscv/kvm/aia_imsic.c
589
static void imsic_vsfile_cleanup(struct imsic *imsic)
arch/riscv/kvm/aia_imsic.c
600
write_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
601
old_vsfile_hgei = imsic->vsfile_hgei;
arch/riscv/kvm/aia_imsic.c
602
old_vsfile_cpu = imsic->vsfile_cpu;
arch/riscv/kvm/aia_imsic.c
603
imsic->vsfile_cpu = imsic->vsfile_hgei = -1;
arch/riscv/kvm/aia_imsic.c
604
imsic->vsfile_va = NULL;
arch/riscv/kvm/aia_imsic.c
605
imsic->vsfile_pa = 0;
arch/riscv/kvm/aia_imsic.c
606
write_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
608
memset(imsic->swfile, 0, sizeof(*imsic->swfile));
arch/riscv/kvm/aia_imsic.c
616
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
617
struct imsic_mrif *mrif = imsic->swfile;
arch/riscv/kvm/aia_imsic.c
626
raw_spin_lock_irqsave(&imsic->swfile_extirq_lock, flags);
arch/riscv/kvm/aia_imsic.c
629
imsic_mrif_topei(mrif, imsic->nr_eix, imsic->nr_msis))
arch/riscv/kvm/aia_imsic.c
634
raw_spin_unlock_irqrestore(&imsic->swfile_extirq_lock, flags);
arch/riscv/kvm/aia_imsic.c
640
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
649
memcpy(mrif, imsic->swfile, sizeof(*mrif));
arch/riscv/kvm/aia_imsic.c
651
memset(imsic->swfile, 0, sizeof(*imsic->swfile));
arch/riscv/kvm/aia_imsic.c
661
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
662
struct imsic_mrif *smrif = imsic->swfile;
arch/riscv/kvm/aia_imsic.c
666
for (i = 0; i < imsic->nr_eix; i++) {
arch/riscv/kvm/aia_imsic.c
682
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
691
read_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
692
if (imsic->vsfile_cpu > -1) {
arch/riscv/kvm/aia_imsic.c
701
if (imsic->vsfile_cpu != vcpu->cpu)
arch/riscv/kvm/aia_imsic.c
704
ret = !!(csr_read(CSR_HGEIP) & BIT(imsic->vsfile_hgei));
arch/riscv/kvm/aia_imsic.c
706
read_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
722
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
728
read_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
729
if (imsic->vsfile_cpu > -1)
arch/riscv/kvm/aia_imsic.c
730
csr_set(CSR_HGEIE, BIT(imsic->vsfile_hgei));
arch/riscv/kvm/aia_imsic.c
731
read_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
739
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
742
write_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
743
old_vsfile_hgei = imsic->vsfile_hgei;
arch/riscv/kvm/aia_imsic.c
744
old_vsfile_cpu = imsic->vsfile_cpu;
arch/riscv/kvm/aia_imsic.c
745
imsic->vsfile_cpu = imsic->vsfile_hgei = -1;
arch/riscv/kvm/aia_imsic.c
746
imsic->vsfile_va = NULL;
arch/riscv/kvm/aia_imsic.c
747
imsic->vsfile_pa = 0;
arch/riscv/kvm/aia_imsic.c
748
write_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
774
imsic_vsfile_read(old_vsfile_hgei, old_vsfile_cpu, imsic->nr_hw_eix,
arch/riscv/kvm/aia_imsic.c
793
struct imsic *imsic = vaia->imsic_state;
arch/riscv/kvm/aia_imsic.c
801
if (!imsic)
arch/riscv/kvm/aia_imsic.c
805
read_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
806
old_vsfile_hgei = imsic->vsfile_hgei;
arch/riscv/kvm/aia_imsic.c
807
old_vsfile_cpu = imsic->vsfile_cpu;
arch/riscv/kvm/aia_imsic.c
808
read_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
846
imsic_vsfile_local_clear(new_vsfile_hgei, imsic->nr_hw_eix);
arch/riscv/kvm/aia_imsic.c
858
write_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
859
imsic->vsfile_hgei = new_vsfile_hgei;
arch/riscv/kvm/aia_imsic.c
860
imsic->vsfile_cpu = vcpu->cpu;
arch/riscv/kvm/aia_imsic.c
861
imsic->vsfile_va = new_vsfile_va;
arch/riscv/kvm/aia_imsic.c
862
imsic->vsfile_pa = new_vsfile_pa;
arch/riscv/kvm/aia_imsic.c
863
write_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
875
imsic->nr_hw_eix, true, &tmrif);
arch/riscv/kvm/aia_imsic.c
885
imsic_vsfile_local_update(new_vsfile_hgei, imsic->nr_hw_eix, &tmrif);
arch/riscv/kvm/aia_imsic.c
909
struct imsic *imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
912
if (!imsic)
arch/riscv/kvm/aia_imsic.c
917
topei = imsic_mrif_topei(imsic->swfile, imsic->nr_eix,
arch/riscv/kvm/aia_imsic.c
918
imsic->nr_msis);
arch/riscv/kvm/aia_imsic.c
926
eix = &imsic->swfile->eix[topei /
arch/riscv/kvm/aia_imsic.c
933
r = imsic_mrif_rmw(imsic->swfile, imsic->nr_eix, isel,
arch/riscv/kvm/aia_imsic.c
951
struct imsic *imsic;
arch/riscv/kvm/aia_imsic.c
963
imsic = vcpu->arch.aia_context.imsic_state;
arch/riscv/kvm/aia_imsic.c
964
if (!imsic)
arch/riscv/kvm/aia_imsic.c
968
read_lock_irqsave(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
971
vsfile_hgei = imsic->vsfile_hgei;
arch/riscv/kvm/aia_imsic.c
972
vsfile_cpu = imsic->vsfile_cpu;
arch/riscv/kvm/aia_imsic.c
975
rc = imsic_mrif_rmw(imsic->swfile, imsic->nr_eix,
arch/riscv/kvm/aia_imsic.c
979
rc = imsic_mrif_rmw(imsic->swfile, imsic->nr_eix,
arch/riscv/kvm/aia_imsic.c
983
read_unlock_irqrestore(&imsic->vsfile_lock, flags);
arch/riscv/kvm/aia_imsic.c
986
rc = imsic_vsfile_rw(vsfile_hgei, vsfile_cpu, imsic->nr_eix,
arch/riscv/kvm/aia_imsic.c
995
struct imsic *imsic;
drivers/irqchip/irq-riscv-imsic-early.c
116
if (unlikely(local_id > imsic->global.nr_ids)) {
drivers/irqchip/irq-riscv-imsic-early.c
260
struct acpi_madt_imsic *imsic = (struct acpi_madt_imsic *)header;
drivers/irqchip/irq-riscv-imsic-early.c
270
rc = imsic_setup_state(imsic_acpi_fwnode, imsic);
drivers/irqchip/irq-riscv-imsic-early.c
39
struct imsic_local_config *local = per_cpu_ptr(imsic->global.local, cpu);
drivers/irqchip/irq-riscv-imsic-early.c
78
pr_info("%pfwP: providing IPIs using interrupt %d\n", imsic->fwnode, IMSIC_IPI_ID);
drivers/irqchip/irq-riscv-imsic-early.c
95
struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
drivers/irqchip/irq-riscv-imsic-platform.c
312
.host_data = imsic,
drivers/irqchip/irq-riscv-imsic-platform.c
316
if (!imsic || !imsic->fwnode) {
drivers/irqchip/irq-riscv-imsic-platform.c
32
global = &imsic->global;
drivers/irqchip/irq-riscv-imsic-platform.c
321
if (imsic->base_domain) {
drivers/irqchip/irq-riscv-imsic-platform.c
322
pr_err("%pfwP: irq domain already created\n", imsic->fwnode);
drivers/irqchip/irq-riscv-imsic-platform.c
327
info.fwnode = imsic->fwnode,
drivers/irqchip/irq-riscv-imsic-platform.c
328
imsic->base_domain = msi_create_parent_irq_domain(&info, &imsic_msi_parent_ops);
drivers/irqchip/irq-riscv-imsic-platform.c
329
if (!imsic->base_domain) {
drivers/irqchip/irq-riscv-imsic-platform.c
330
pr_err("%pfwP: failed to create IMSIC base domain\n", imsic->fwnode);
drivers/irqchip/irq-riscv-imsic-platform.c
334
global = &imsic->global;
drivers/irqchip/irq-riscv-imsic-platform.c
336
imsic->fwnode, global->hart_index_bits, global->guest_index_bits);
drivers/irqchip/irq-riscv-imsic-platform.c
338
imsic->fwnode, global->group_index_bits, global->group_index_shift);
drivers/irqchip/irq-riscv-imsic-platform.c
340
imsic->fwnode, global->nr_ids, &global->base_addr);
drivers/irqchip/irq-riscv-imsic-platform.c
342
imsic->fwnode, num_possible_cpus() * (global->nr_ids - 1));
drivers/irqchip/irq-riscv-imsic-platform.c
349
if (imsic && imsic->fwnode != fwnode) {
drivers/irqchip/irq-riscv-imsic-platform.c
62
local = per_cpu_ptr(imsic->global.local, vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
136
for_each_set_bit(i, lpriv->dirty_bitmap, imsic->global.nr_ids + 1) {
drivers/irqchip/irq-riscv-imsic-state.c
186
tlocal = per_cpu_ptr(imsic->global.local, tvec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
190
mlocal = per_cpu_ptr(imsic->global.local, mvec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
195
mlocal = per_cpu_ptr(imsic->global.local, mvec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
228
struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
drivers/irqchip/irq-riscv-imsic-state.c
234
bitmap_fill(lpriv->dirty_bitmap, imsic->global.nr_ids + 1);
drivers/irqchip/irq-riscv-imsic-state.c
296
lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
318
lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
342
lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
387
old_lpriv = per_cpu_ptr(imsic->lpriv, old_vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
391
new_lpriv = per_cpu_ptr(imsic->lpriv, new_vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
412
lpriv = per_cpu_ptr(imsic->lpriv, vec->cpu);
drivers/irqchip/irq-riscv-imsic-state.c
433
irq_matrix_debug_show(m, imsic->matrix, ind);
drivers/irqchip/irq-riscv-imsic-state.c
445
raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
446
local_id = irq_matrix_alloc(imsic->matrix, mask, false, &cpu);
drivers/irqchip/irq-riscv-imsic-state.c
447
raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
451
lpriv = per_cpu_ptr(imsic->lpriv, cpu);
drivers/irqchip/irq-riscv-imsic-state.c
465
raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
467
irq_matrix_free(imsic->matrix, vec->cpu, vec->local_id, false);
drivers/irqchip/irq-riscv-imsic-state.c
468
raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
477
lpriv = per_cpu_ptr(imsic->lpriv, cpu);
drivers/irqchip/irq-riscv-imsic-state.c
483
free_percpu(imsic->lpriv);
drivers/irqchip/irq-riscv-imsic-state.c
488
struct imsic_global_config *global = &imsic->global;
drivers/irqchip/irq-riscv-imsic-state.c
494
imsic->lpriv = alloc_percpu(typeof(*imsic->lpriv));
drivers/irqchip/irq-riscv-imsic-state.c
495
if (!imsic->lpriv)
drivers/irqchip/irq-riscv-imsic-state.c
500
lpriv = per_cpu_ptr(imsic->lpriv, cpu);
drivers/irqchip/irq-riscv-imsic-state.c
540
raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
541
irq_matrix_online(imsic->matrix);
drivers/irqchip/irq-riscv-imsic-state.c
542
raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
549
raw_spin_lock_irqsave(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
550
irq_matrix_offline(imsic->matrix);
drivers/irqchip/irq-riscv-imsic-state.c
551
raw_spin_unlock_irqrestore(&imsic->matrix_lock, flags);
drivers/irqchip/irq-riscv-imsic-state.c
554
struct imsic_local_priv *lpriv = this_cpu_ptr(imsic->lpriv);
drivers/irqchip/irq-riscv-imsic-state.c
564
struct imsic_global_config *global = &imsic->global;
drivers/irqchip/irq-riscv-imsic-state.c
566
raw_spin_lock_init(&imsic->matrix_lock);
drivers/irqchip/irq-riscv-imsic-state.c
567
imsic->matrix = irq_alloc_matrix(global->nr_ids + 1,
drivers/irqchip/irq-riscv-imsic-state.c
569
if (!imsic->matrix)
drivers/irqchip/irq-riscv-imsic-state.c
573
irq_matrix_assign_system(imsic->matrix, 0, false);
drivers/irqchip/irq-riscv-imsic-state.c
577
irq_matrix_assign_system(imsic->matrix, IMSIC_IPI_ID, false);
drivers/irqchip/irq-riscv-imsic-state.c
59
struct imsic_priv *imsic;
drivers/irqchip/irq-riscv-imsic-state.c
63
return imsic ? &imsic->global : NULL;
drivers/irqchip/irq-riscv-imsic-state.c
640
struct acpi_madt_imsic *imsic = (struct acpi_madt_imsic *)opaque;
drivers/irqchip/irq-riscv-imsic-state.c
642
global->guest_index_bits = imsic->guest_index_bits;
drivers/irqchip/irq-riscv-imsic-state.c
643
global->hart_index_bits = imsic->hart_index_bits;
drivers/irqchip/irq-riscv-imsic-state.c
644
global->group_index_bits = imsic->group_index_bits;
drivers/irqchip/irq-riscv-imsic-state.c
645
global->group_index_shift = imsic->group_index_shift;
drivers/irqchip/irq-riscv-imsic-state.c
646
global->nr_ids = imsic->num_ids;
drivers/irqchip/irq-riscv-imsic-state.c
647
global->nr_guest_ids = imsic->num_guest_ids;
drivers/irqchip/irq-riscv-imsic-state.c
803
if (imsic) {
drivers/irqchip/irq-riscv-imsic-state.c
813
imsic = kzalloc_obj(*imsic);
drivers/irqchip/irq-riscv-imsic-state.c
814
if (!imsic)
drivers/irqchip/irq-riscv-imsic-state.c
816
imsic->fwnode = fwnode;
drivers/irqchip/irq-riscv-imsic-state.c
817
global = &imsic->global;
drivers/irqchip/irq-riscv-imsic-state.c
964
free_percpu(imsic->global.local);
drivers/irqchip/irq-riscv-imsic-state.c
966
kfree(imsic);
drivers/irqchip/irq-riscv-imsic-state.c
967
imsic = NULL;
drivers/irqchip/irq-riscv-imsic-state.h
65
extern struct imsic_priv *imsic;