Lines Matching +full:partition +full:-
1 // SPDX-License-Identifier: GPL-2.0-only
18 int mshv_update_routing_table(struct mshv_partition *partition, in mshv_update_routing_table() argument
31 return -EINVAL; in mshv_update_routing_table()
34 return -EINVAL; in mshv_update_routing_table()
43 return -ENOMEM; in mshv_update_routing_table()
45 new->num_rt_entries = nr_rt_entries; in mshv_update_routing_table()
49 girq = &new->mshv_girq_info_tbl[ue[i].gsi]; in mshv_update_routing_table()
54 if (girq->guest_irq_num != 0) { in mshv_update_routing_table()
55 r = -EINVAL; in mshv_update_routing_table()
59 girq->guest_irq_num = ue[i].gsi; in mshv_update_routing_table()
60 girq->girq_addr_lo = ue[i].address_lo; in mshv_update_routing_table()
61 girq->girq_addr_hi = ue[i].address_hi; in mshv_update_routing_table()
62 girq->girq_irq_data = ue[i].data; in mshv_update_routing_table()
63 girq->girq_entry_valid = true; in mshv_update_routing_table()
67 mutex_lock(&partition->pt_irq_lock); in mshv_update_routing_table()
68 old = rcu_dereference_protected(partition->pt_girq_tbl, 1); in mshv_update_routing_table()
69 rcu_assign_pointer(partition->pt_girq_tbl, new); in mshv_update_routing_table()
70 mshv_irqfd_routing_update(partition); in mshv_update_routing_table()
71 mutex_unlock(&partition->pt_irq_lock); in mshv_update_routing_table()
73 synchronize_srcu_expedited(&partition->pt_irq_srcu); in mshv_update_routing_table()
83 void mshv_free_routing_table(struct mshv_partition *partition) in mshv_free_routing_table() argument
86 rcu_access_pointer(partition->pt_girq_tbl); in mshv_free_routing_table()
92 mshv_ret_girq_entry(struct mshv_partition *partition, u32 irqnum) in mshv_ret_girq_entry() argument
97 girq_tbl = srcu_dereference_check(partition->pt_girq_tbl, in mshv_ret_girq_entry()
98 &partition->pt_irq_srcu, in mshv_ret_girq_entry()
99 lockdep_is_held(&partition->pt_irq_lock)); in mshv_ret_girq_entry()
100 if (!girq_tbl || irqnum >= girq_tbl->num_rt_entries) { in mshv_ret_girq_entry()
109 return girq_tbl->mshv_girq_info_tbl[irqnum]; in mshv_ret_girq_entry()
116 if (!ent || !ent->girq_entry_valid) in mshv_copy_girq_info()
119 lirq->lapic_vector = ent->girq_irq_data & 0xFF; in mshv_copy_girq_info()
120 lirq->lapic_apic_id = (ent->girq_addr_lo >> 12) & 0xFF; in mshv_copy_girq_info()
121 lirq->lapic_control.interrupt_type = (ent->girq_irq_data & 0x700) >> 8; in mshv_copy_girq_info()
122 lirq->lapic_control.level_triggered = (ent->girq_irq_data >> 15) & 0x1; in mshv_copy_girq_info()
123 lirq->lapic_control.logical_dest_mode = (ent->girq_addr_lo >> 2) & 0x1; in mshv_copy_girq_info()