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 | its_send_single_vcommand(find_4_1_its(), its_build_vsgi_cmd, &desc); | 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 | static int its_sgi_set_affinity(struct irq_data *d, | 3963 | static int its_sgi_set_affinity(struct irq_data *d, |
| 3948 | const struct cpumask *mask_val, | 3964 | const struct cpumask *mask_val, |
| 3949 | bool force) | 3965 | bool force) |
| @@ -3958,6 +3974,8 @@ static int its_sgi_set_affinity(struct irq_data *d, · 8 unmodified lines | |||
| 3958 | 3974 | ||
| 3959 | static struct irq_chip its_sgi_irq_chip = { | 3975 | static struct irq_chip its_sgi_irq_chip = { |
| 3960 | .name = "GICv4.1-sgi", | 3976 | .name = "GICv4.1-sgi", |
| 3977 | .irq_mask = its_sgi_mask_irq, | ||
| 3978 | .irq_unmask = its_sgi_unmask_irq, | ||
| 3961 | .irq_set_affinity = its_sgi_set_affinity, | 3979 | .irq_set_affinity = its_sgi_set_affinity, |
| 3962 | }; | 3980 | }; |
| 3963 | 3981 | ||