Commit 1486b7b4 authored by Thomas Gleixner's avatar Thomas Gleixner

Merge tag 'irqchip-fixes-5.4-2' of...

Merge tag 'irqchip-fixes-5.4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent

Pull the second lot of irqchip updates for 5.4 from Marc Zyngier:

- Sifive PLIC: force driver to skip non-relevant contexts
- GICv4: Don't send VMOVP commands to ITSs that don't have
  this vPE mapped
parents 7d194c21 41860cc4
...@@ -175,6 +175,22 @@ static DEFINE_IDA(its_vpeid_ida); ...@@ -175,6 +175,22 @@ static DEFINE_IDA(its_vpeid_ida);
#define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base) #define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base)
#define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K) #define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K)
static u16 get_its_list(struct its_vm *vm)
{
struct its_node *its;
unsigned long its_list = 0;
list_for_each_entry(its, &its_nodes, entry) {
if (!its->is_v4)
continue;
if (vm->vlpi_count[its->list_nr])
__set_bit(its->list_nr, &its_list);
}
return (u16)its_list;
}
static struct its_collection *dev_event_to_col(struct its_device *its_dev, static struct its_collection *dev_event_to_col(struct its_device *its_dev,
u32 event) u32 event)
{ {
...@@ -976,17 +992,15 @@ static void its_send_vmapp(struct its_node *its, ...@@ -976,17 +992,15 @@ static void its_send_vmapp(struct its_node *its,
static void its_send_vmovp(struct its_vpe *vpe) static void its_send_vmovp(struct its_vpe *vpe)
{ {
struct its_cmd_desc desc; struct its_cmd_desc desc = {};
struct its_node *its; struct its_node *its;
unsigned long flags; unsigned long flags;
int col_id = vpe->col_idx; int col_id = vpe->col_idx;
desc.its_vmovp_cmd.vpe = vpe; desc.its_vmovp_cmd.vpe = vpe;
desc.its_vmovp_cmd.its_list = (u16)its_list_map;
if (!its_list_map) { if (!its_list_map) {
its = list_first_entry(&its_nodes, struct its_node, entry); its = list_first_entry(&its_nodes, struct its_node, entry);
desc.its_vmovp_cmd.seq_num = 0;
desc.its_vmovp_cmd.col = &its->collections[col_id]; desc.its_vmovp_cmd.col = &its->collections[col_id];
its_send_single_vcommand(its, its_build_vmovp_cmd, &desc); its_send_single_vcommand(its, its_build_vmovp_cmd, &desc);
return; return;
...@@ -1003,6 +1017,7 @@ static void its_send_vmovp(struct its_vpe *vpe) ...@@ -1003,6 +1017,7 @@ static void its_send_vmovp(struct its_vpe *vpe)
raw_spin_lock_irqsave(&vmovp_lock, flags); raw_spin_lock_irqsave(&vmovp_lock, flags);
desc.its_vmovp_cmd.seq_num = vmovp_seq_num++; desc.its_vmovp_cmd.seq_num = vmovp_seq_num++;
desc.its_vmovp_cmd.its_list = get_its_list(vpe->its_vm);
/* Emit VMOVPs */ /* Emit VMOVPs */
list_for_each_entry(its, &its_nodes, entry) { list_for_each_entry(its, &its_nodes, entry) {
......
...@@ -252,8 +252,8 @@ static int __init plic_init(struct device_node *node, ...@@ -252,8 +252,8 @@ static int __init plic_init(struct device_node *node,
continue; continue;
} }
/* skip context holes */ /* skip contexts other than supervisor external interrupt */
if (parent.args[0] == -1) if (parent.args[0] != IRQ_S_EXT)
continue; continue;
hartid = plic_find_hart_id(parent.np); hartid = plic_find_hart_id(parent.np);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment