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

Commit 02893afd authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

xen: Get rid of the last irq_desc abuse



Warn if any PIRQ cannot be bound to an event channel. Remove the check
for irq_desc->action. This hypercall never fails in practice so we can
emit a warning unconditionally.

Remove a check for a valid irq desc. The only caller of
xen_destroy_irq() will only do so if the irq was previously fully
setup, which means the descriptor has been allocated as well.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Xen <xen-devel@lists.xenproject.org>
Cc: David Vrabel <david.vrabel@citrix.com>
Link: http://lkml.kernel.org/r/20140223212738.579581220@linutronix.de


Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 589d03e9
Loading
Loading
Loading
Loading
+1 −14
Original line number Original line Diff line number Diff line
@@ -487,13 +487,6 @@ static void pirq_query_unmask(int irq)
		info->u.pirq.flags |= PIRQ_NEEDS_EOI;
		info->u.pirq.flags |= PIRQ_NEEDS_EOI;
}
}


static bool probing_irq(int irq)
{
	struct irq_desc *desc = irq_to_desc(irq);

	return desc && desc->action == NULL;
}

static void eoi_pirq(struct irq_data *data)
static void eoi_pirq(struct irq_data *data)
{
{
	int evtchn = evtchn_from_irq(data->irq);
	int evtchn = evtchn_from_irq(data->irq);
@@ -535,8 +528,7 @@ static unsigned int __startup_pirq(unsigned int irq)
					BIND_PIRQ__WILL_SHARE : 0;
					BIND_PIRQ__WILL_SHARE : 0;
	rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq);
	rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq);
	if (rc != 0) {
	if (rc != 0) {
		if (!probing_irq(irq))
		pr_warn("Failed to obtain physical IRQ %d\n", irq);
			pr_info("Failed to obtain physical IRQ %d\n", irq);
		return 0;
		return 0;
	}
	}
	evtchn = bind_pirq.port;
	evtchn = bind_pirq.port;
@@ -769,17 +761,12 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,


int xen_destroy_irq(int irq)
int xen_destroy_irq(int irq)
{
{
	struct irq_desc *desc;
	struct physdev_unmap_pirq unmap_irq;
	struct physdev_unmap_pirq unmap_irq;
	struct irq_info *info = info_for_irq(irq);
	struct irq_info *info = info_for_irq(irq);
	int rc = -ENOENT;
	int rc = -ENOENT;


	mutex_lock(&irq_mapping_update_lock);
	mutex_lock(&irq_mapping_update_lock);


	desc = irq_to_desc(irq);
	if (!desc)
		goto out;

	if (xen_initial_domain()) {
	if (xen_initial_domain()) {
		unmap_irq.pirq = info->u.pirq.pirq;
		unmap_irq.pirq = info->u.pirq.pirq;
		unmap_irq.domid = info->u.pirq.domid;
		unmap_irq.domid = info->u.pirq.domid;