Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43d368a1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

Pull irq fixes from Ingo Molnar:
 "Three irqchip driver fixes, and an affinity mask helper function bug
  fix affecting x86"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  Revert "genirq: Restrict effective affinity to interrupts actually using it"
  irqchip.mips-gic: Fix shared interrupt mask writes
  irqchip/gic-v4: Fix building with ancient gcc
  irqchip/gic-v3: Iterate over possible CPUs by for_each_possible_cpu()
parents a4306434 cf00ab84
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -1042,7 +1042,7 @@ static int get_cpu_number(struct device_node *dn)
{
{
	const __be32 *cell;
	const __be32 *cell;
	u64 hwid;
	u64 hwid;
	int i;
	int cpu;


	cell = of_get_property(dn, "reg", NULL);
	cell = of_get_property(dn, "reg", NULL);
	if (!cell)
	if (!cell)
@@ -1056,9 +1056,9 @@ static int get_cpu_number(struct device_node *dn)
	if (hwid & ~MPIDR_HWID_BITMASK)
	if (hwid & ~MPIDR_HWID_BITMASK)
		return -1;
		return -1;


	for (i = 0; i < num_possible_cpus(); i++)
	for_each_possible_cpu(cpu)
		if (cpu_logical_map(i) == hwid)
		if (cpu_logical_map(cpu) == hwid)
			return i;
			return cpu;


	return -1;
	return -1;
}
}
+9 −3
Original line number Original line Diff line number Diff line
@@ -173,7 +173,9 @@ int its_map_vlpi(int irq, struct its_vlpi_map *map)
{
{
	struct its_cmd_info info = {
	struct its_cmd_info info = {
		.cmd_type = MAP_VLPI,
		.cmd_type = MAP_VLPI,
		{
			.map      = map,
			.map      = map,
		},
	};
	};


	/*
	/*
@@ -189,7 +191,9 @@ int its_get_vlpi(int irq, struct its_vlpi_map *map)
{
{
	struct its_cmd_info info = {
	struct its_cmd_info info = {
		.cmd_type = GET_VLPI,
		.cmd_type = GET_VLPI,
		{
			.map      = map,
			.map      = map,
		},
	};
	};


	return irq_set_vcpu_affinity(irq, &info);
	return irq_set_vcpu_affinity(irq, &info);
@@ -205,7 +209,9 @@ int its_prop_update_vlpi(int irq, u8 config, bool inv)
{
{
	struct its_cmd_info info = {
	struct its_cmd_info info = {
		.cmd_type = inv ? PROP_UPDATE_AND_INV_VLPI : PROP_UPDATE_VLPI,
		.cmd_type = inv ? PROP_UPDATE_AND_INV_VLPI : PROP_UPDATE_VLPI,
		{
			.config   = config,
			.config   = config,
		},
	};
	};


	return irq_set_vcpu_affinity(irq, &info);
	return irq_set_vcpu_affinity(irq, &info);
+3 −3
Original line number Original line Diff line number Diff line
@@ -169,7 +169,7 @@ static void gic_mask_irq(struct irq_data *d)
{
{
	unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
	unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);


	write_gic_rmask(BIT(intr));
	write_gic_rmask(intr);
	gic_clear_pcpu_masks(intr);
	gic_clear_pcpu_masks(intr);
}
}


@@ -179,7 +179,7 @@ static void gic_unmask_irq(struct irq_data *d)
	unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
	unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
	unsigned int cpu;
	unsigned int cpu;


	write_gic_smask(BIT(intr));
	write_gic_smask(intr);


	gic_clear_pcpu_masks(intr);
	gic_clear_pcpu_masks(intr);
	cpu = cpumask_first_and(affinity, cpu_online_mask);
	cpu = cpumask_first_and(affinity, cpu_online_mask);
@@ -767,7 +767,7 @@ static int __init gic_of_init(struct device_node *node,
	for (i = 0; i < gic_shared_intrs; i++) {
	for (i = 0; i < gic_shared_intrs; i++) {
		change_gic_pol(i, GIC_POL_ACTIVE_HIGH);
		change_gic_pol(i, GIC_POL_ACTIVE_HIGH);
		change_gic_trig(i, GIC_TRIG_LEVEL);
		change_gic_trig(i, GIC_TRIG_LEVEL);
		write_gic_rmask(BIT(i));
		write_gic_rmask(i);
	}
	}


	for (i = 0; i < gic_vpes; i++) {
	for (i = 0; i < gic_vpes; i++) {
+1 −4
Original line number Original line Diff line number Diff line
@@ -783,10 +783,7 @@ static inline struct cpumask *irq_data_get_affinity_mask(struct irq_data *d)
static inline
static inline
struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d)
struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d)
{
{
	if (!cpumask_empty(d->common->effective_affinity))
	return d->common->effective_affinity;
	return d->common->effective_affinity;

	return d->common->affinity;
}
}
static inline void irq_data_update_effective_affinity(struct irq_data *d,
static inline void irq_data_update_effective_affinity(struct irq_data *d,
						      const struct cpumask *m)
						      const struct cpumask *m)