Implement mask/unmask for virtual SGIs by calling into the configuration helper.
Unified · Split
| @@ -3944,6 +3944,22 @@ static void its_configure_sgi(struct irq_data *d, bool clear) · 3943 unmodified lines | ||
| 3944 | 3944 | its_send_single_vcommand(find_4_1_its(), its_build_vsgi_cmd, &desc); |
| 3945 | 3945 | } |
| 3946 | 3946 | |
| 3947 | +static void its_sgi_mask_irq(struct irq_data *d) | |
| 3948 | +{ | |
| 3949 | + struct its_vpe *vpe = irq_data_get_irq_chip_data(d); | |
| 3950 | + | |
| 3951 | + vpe->sgi_config[d->hwirq].enabled = false; | |
| 3952 | + its_configure_sgi(d, false); | |
| 3953 | +} | |
| 3954 | + | |
| 3955 | +static void its_sgi_unmask_irq(struct irq_data *d) | |
| 3956 | +{ | |
| 3957 | + struct its_vpe *vpe = irq_data_get_irq_chip_data(d); | |
| 3958 | + | |
| 3959 | + vpe->sgi_config[d->hwirq].enabled = true; | |
| 3960 | + its_configure_sgi(d, false); | |
| 3961 | +} | |
| 3962 | + | |
| 3947 | 3963 | static int its_sgi_set_affinity(struct irq_data *d, |
| 3948 | 3964 | const struct cpumask *mask_val, |
| 3949 | 3965 | bool force) |
| @@ -3958,6 +3974,8 @@ static int its_sgi_set_affinity(struct irq_data *d, · 8 unmodified lines | ||
| 3958 | 3974 | |
| 3959 | 3975 | static struct irq_chip its_sgi_irq_chip = { |
| 3960 | 3976 | .name = "GICv4.1-sgi", |
| 3977 | + .irq_mask = its_sgi_mask_irq, | |
| 3978 | + .irq_unmask = its_sgi_unmask_irq, | |
| 3961 | 3979 | .irq_set_affinity = its_sgi_set_affinity, |
| 3962 | 3980 | }; |
| 3963 | 3981 | |