Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Thomas Gleixner:
"Two fixes for interrupt controller drivers:

- Skip IRQ_M_EXT entries in the device tree when initializing the
RISCV PLIC controller to avoid a double init attempt.

- Use the correct ITS list when issuing the VMOVP synchronization
command so the operation works only on the ITS instances which are
associated to a VM"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/sifive-plic: Skip contexts except supervisor in plic_init()
irqchip/gic-v3-its: Use the exact ITSList for VMOVP

Changed files
+20 -5
drivers
+18 -3
drivers/irqchip/irq-gic-v3-its.c
··· 175 175 #define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base) 176 176 #define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K) 177 177 178 + static u16 get_its_list(struct its_vm *vm) 179 + { 180 + struct its_node *its; 181 + unsigned long its_list = 0; 182 + 183 + list_for_each_entry(its, &its_nodes, entry) { 184 + if (!its->is_v4) 185 + continue; 186 + 187 + if (vm->vlpi_count[its->list_nr]) 188 + __set_bit(its->list_nr, &its_list); 189 + } 190 + 191 + return (u16)its_list; 192 + } 193 + 178 194 static struct its_collection *dev_event_to_col(struct its_device *its_dev, 179 195 u32 event) 180 196 { ··· 992 976 993 977 static void its_send_vmovp(struct its_vpe *vpe) 994 978 { 995 - struct its_cmd_desc desc; 979 + struct its_cmd_desc desc = {}; 996 980 struct its_node *its; 997 981 unsigned long flags; 998 982 int col_id = vpe->col_idx; 999 983 1000 984 desc.its_vmovp_cmd.vpe = vpe; 1001 - desc.its_vmovp_cmd.its_list = (u16)its_list_map; 1002 985 1003 986 if (!its_list_map) { 1004 987 its = list_first_entry(&its_nodes, struct its_node, entry); 1005 - desc.its_vmovp_cmd.seq_num = 0; 1006 988 desc.its_vmovp_cmd.col = &its->collections[col_id]; 1007 989 its_send_single_vcommand(its, its_build_vmovp_cmd, &desc); 1008 990 return; ··· 1017 1003 raw_spin_lock_irqsave(&vmovp_lock, flags); 1018 1004 1019 1005 desc.its_vmovp_cmd.seq_num = vmovp_seq_num++; 1006 + desc.its_vmovp_cmd.its_list = get_its_list(vpe->its_vm); 1020 1007 1021 1008 /* Emit VMOVPs */ 1022 1009 list_for_each_entry(its, &its_nodes, entry) {
+2 -2
drivers/irqchip/irq-sifive-plic.c
··· 252 252 continue; 253 253 } 254 254 255 - /* skip context holes */ 256 - if (parent.args[0] == -1) 255 + /* skip contexts other than supervisor external interrupt */ 256 + if (parent.args[0] != IRQ_S_EXT) 257 257 continue; 258 258 259 259 hartid = plic_find_hart_id(parent.np);