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

Commit c9e265e0 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Konrad Rzeszutek Wilk
Browse files

xen: Switch to new irq_chip functions



Convert Xen to the new irq_chip functions. Brings us closer to enable
CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Acked-by: default avatarIan Campbell <ian.campbell@citrix.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent 149f256f
Loading
Loading
Loading
Loading
+51 −44
Original line number Original line Diff line number Diff line
@@ -277,7 +277,7 @@ static void bind_evtchn_to_cpu(unsigned int chn, unsigned int cpu)


	BUG_ON(irq == -1);
	BUG_ON(irq == -1);
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
	cpumask_copy(irq_to_desc(irq)->affinity, cpumask_of(cpu));
	cpumask_copy(irq_to_desc(irq)->irq_data.affinity, cpumask_of(cpu));
#endif
#endif


	clear_bit(chn, cpu_evtchn_mask(cpu_from_irq(irq)));
	clear_bit(chn, cpu_evtchn_mask(cpu_from_irq(irq)));
@@ -294,7 +294,7 @@ static void init_evtchn_cpu_bindings(void)


	/* By default all event channels notify CPU#0. */
	/* By default all event channels notify CPU#0. */
	for_each_irq_desc(i, desc) {
	for_each_irq_desc(i, desc) {
		cpumask_copy(desc->affinity, cpumask_of(0));
		cpumask_copy(desc->irq_data.affinity, cpumask_of(0));
	}
	}
#endif
#endif


@@ -474,7 +474,7 @@ static bool probing_irq(int irq)
	return desc && desc->action == NULL;
	return desc && desc->action == NULL;
}
}


static unsigned int startup_pirq(unsigned int irq)
static unsigned int __startup_pirq(unsigned int irq)
{
{
	struct evtchn_bind_pirq bind_pirq;
	struct evtchn_bind_pirq bind_pirq;
	struct irq_info *info = info_for_irq(irq);
	struct irq_info *info = info_for_irq(irq);
@@ -512,9 +512,15 @@ static unsigned int startup_pirq(unsigned int irq)
	return 0;
	return 0;
}
}


static void shutdown_pirq(unsigned int irq)
static unsigned int startup_pirq(struct irq_data *data)
{
	return __startup_pirq(data->irq);
}

static void shutdown_pirq(struct irq_data *data)
{
{
	struct evtchn_close close;
	struct evtchn_close close;
	unsigned int irq = data->irq;
	struct irq_info *info = info_for_irq(irq);
	struct irq_info *info = info_for_irq(irq);
	int evtchn = evtchn_from_irq(irq);
	int evtchn = evtchn_from_irq(irq);


@@ -534,20 +540,20 @@ static void shutdown_pirq(unsigned int irq)
	info->evtchn = 0;
	info->evtchn = 0;
}
}


static void enable_pirq(unsigned int irq)
static void enable_pirq(struct irq_data *data)
{
{
	startup_pirq(irq);
	startup_pirq(data);
}
}


static void disable_pirq(unsigned int irq)
static void disable_pirq(struct irq_data *data)
{
{
}
}


static void ack_pirq(unsigned int irq)
static void ack_pirq(struct irq_data *data)
{
{
	int evtchn = evtchn_from_irq(irq);
	int evtchn = evtchn_from_irq(data->irq);


	move_native_irq(irq);
	irq_move_irq(data);


	if (VALID_EVTCHN(evtchn)) {
	if (VALID_EVTCHN(evtchn)) {
		mask_evtchn(evtchn);
		mask_evtchn(evtchn);
@@ -1215,11 +1221,12 @@ static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
	return 0;
	return 0;
}
}


static int set_affinity_irq(unsigned irq, const struct cpumask *dest)
static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest,
			    bool force)
{
{
	unsigned tcpu = cpumask_first(dest);
	unsigned tcpu = cpumask_first(dest);


	return rebind_irq_to_cpu(irq, tcpu);
	return rebind_irq_to_cpu(data->irq, tcpu);
}
}


int resend_irq_on_evtchn(unsigned int irq)
int resend_irq_on_evtchn(unsigned int irq)
@@ -1238,35 +1245,35 @@ int resend_irq_on_evtchn(unsigned int irq)
	return 1;
	return 1;
}
}


static void enable_dynirq(unsigned int irq)
static void enable_dynirq(struct irq_data *data)
{
{
	int evtchn = evtchn_from_irq(irq);
	int evtchn = evtchn_from_irq(data->irq);


	if (VALID_EVTCHN(evtchn))
	if (VALID_EVTCHN(evtchn))
		unmask_evtchn(evtchn);
		unmask_evtchn(evtchn);
}
}


static void disable_dynirq(unsigned int irq)
static void disable_dynirq(struct irq_data *data)
{
{
	int evtchn = evtchn_from_irq(irq);
	int evtchn = evtchn_from_irq(data->irq);


	if (VALID_EVTCHN(evtchn))
	if (VALID_EVTCHN(evtchn))
		mask_evtchn(evtchn);
		mask_evtchn(evtchn);
}
}


static void ack_dynirq(unsigned int irq)
static void ack_dynirq(struct irq_data *data)
{
{
	int evtchn = evtchn_from_irq(irq);
	int evtchn = evtchn_from_irq(data->irq);


	move_masked_irq(irq);
	move_masked_irq(data->irq);


	if (VALID_EVTCHN(evtchn))
	if (VALID_EVTCHN(evtchn))
		unmask_evtchn(evtchn);
		unmask_evtchn(evtchn);
}
}


static int retrigger_dynirq(unsigned int irq)
static int retrigger_dynirq(struct irq_data *data)
{
{
	int evtchn = evtchn_from_irq(irq);
	int evtchn = evtchn_from_irq(data->irq);
	struct shared_info *sh = HYPERVISOR_shared_info;
	struct shared_info *sh = HYPERVISOR_shared_info;
	int ret = 0;
	int ret = 0;


@@ -1315,7 +1322,7 @@ static void restore_cpu_pirqs(void)


		printk(KERN_DEBUG "xen: --> irq=%d, pirq=%d\n", irq, map_irq.pirq);
		printk(KERN_DEBUG "xen: --> irq=%d, pirq=%d\n", irq, map_irq.pirq);


		startup_pirq(irq);
		__startup_pirq(irq);
	}
	}
}
}


@@ -1469,42 +1476,42 @@ void xen_irq_resume(void)
static struct irq_chip xen_dynamic_chip __read_mostly = {
static struct irq_chip xen_dynamic_chip __read_mostly = {
	.name			= "xen-dyn",
	.name			= "xen-dyn",


	.disable	= disable_dynirq,
	.irq_disable		= disable_dynirq,
	.mask		= disable_dynirq,
	.irq_mask		= disable_dynirq,
	.unmask		= enable_dynirq,
	.irq_unmask		= enable_dynirq,


	.eoi		= ack_dynirq,
	.irq_eoi		= ack_dynirq,
	.set_affinity	= set_affinity_irq,
	.irq_set_affinity	= set_affinity_irq,
	.retrigger	= retrigger_dynirq,
	.irq_retrigger		= retrigger_dynirq,
};
};


static struct irq_chip xen_pirq_chip __read_mostly = {
static struct irq_chip xen_pirq_chip __read_mostly = {
	.name			= "xen-pirq",
	.name			= "xen-pirq",


	.startup	= startup_pirq,
	.irq_startup		= startup_pirq,
	.shutdown	= shutdown_pirq,
	.irq_shutdown		= shutdown_pirq,


	.enable		= enable_pirq,
	.irq_enable		= enable_pirq,
	.unmask		= enable_pirq,
	.irq_unmask		= enable_pirq,


	.disable	= disable_pirq,
	.irq_disable		= disable_pirq,
	.mask		= disable_pirq,
	.irq_mask		= disable_pirq,


	.ack		= ack_pirq,
	.irq_ack		= ack_pirq,


	.set_affinity	= set_affinity_irq,
	.irq_set_affinity	= set_affinity_irq,


	.retrigger	= retrigger_dynirq,
	.irq_retrigger		= retrigger_dynirq,
};
};


static struct irq_chip xen_percpu_chip __read_mostly = {
static struct irq_chip xen_percpu_chip __read_mostly = {
	.name			= "xen-percpu",
	.name			= "xen-percpu",


	.disable	= disable_dynirq,
	.irq_disable		= disable_dynirq,
	.mask		= disable_dynirq,
	.irq_mask		= disable_dynirq,
	.unmask		= enable_dynirq,
	.irq_unmask		= enable_dynirq,


	.ack		= ack_dynirq,
	.irq_ack		= ack_dynirq,
};
};


int xen_set_callback_via(uint64_t via)
int xen_set_callback_via(uint64_t via)