All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] xen: fix the error handling of msi setup
@ 2009-08-28  8:28 Qing He
  2009-08-28  8:29 ` [PATCH 2/2] xen: decouple irq and pirq for MSI Qing He
  2009-08-28 18:22 ` [PATCH 1/2] xen: fix the error handling of msi setup Jeremy Fitzhardinge
  0 siblings, 2 replies; 3+ messages in thread
From: Qing He @ 2009-08-28  8:28 UTC (permalink / raw)
  To: xen-devel; +Cc: jeremy, yunhong.jiang

Fix the error handling of msi setup, the return value of failure
is -1, not 0.

Signed-off-by: Qing He <qing.he@intel.com>

---
 arch/x86/xen/pci.c   |    5 ++---
 drivers/xen/events.c |    4 ++--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/x86/xen/pci.c b/arch/x86/xen/pci.c
index 60bab67..44d91ad 100644
--- a/arch/x86/xen/pci.c
+++ b/arch/x86/xen/pci.c
@@ -90,13 +90,12 @@ void __init xen_setup_pirqs(void)
 #ifdef CONFIG_PCI_MSI
 int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
 {
-	unsigned int irq;
-	int ret;
+	int irq, ret;
 	struct msi_desc *msidesc;
 
 	list_for_each_entry(msidesc, &dev->msi_list, list) {
 		irq = xen_create_msi_irq(dev, msidesc, type);
-		if (irq == 0)
+		if (irq < 0)
 			return -1;
 
 		ret = set_irq_msi(irq, msidesc);
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index 007b1d7..a3d430b 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -591,7 +591,7 @@ int xen_destroy_irq(int irq)
 	unmap_irq.domid = DOMID_SELF;
 	rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq);
 	if (rc) {
-		printk(KERN_WARNING "unmap irq failed %x\n", rc);
+		printk(KERN_WARNING "unmap irq failed %d\n", rc);
 		goto out;
 	}
 
@@ -643,7 +643,7 @@ int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type)
 	rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
 	if (rc) {
 
-		printk(KERN_WARNING "xen map irq failed %x\n", rc);
+		printk(KERN_WARNING "xen map irq failed %d\n", rc);
 
 		dynamic_irq_cleanup(irq);

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] xen: decouple irq and pirq for MSI
  2009-08-28  8:28 [PATCH 1/2] xen: fix the error handling of msi setup Qing He
@ 2009-08-28  8:29 ` Qing He
  2009-08-28 18:22 ` [PATCH 1/2] xen: fix the error handling of msi setup Jeremy Fitzhardinge
  1 sibling, 0 replies; 3+ messages in thread
From: Qing He @ 2009-08-28  8:29 UTC (permalink / raw)
  To: xen-devel; +Cc: jeremy, yunhong.jiang

don't assume irq == pirq, let xen to allocation pirq instead

Signed-off-by: Qing He <qing.he@intel.com>

---
 drivers/xen/events.c |   25 +++++++++++++------------
 1 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index a3d430b..2a44456 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -89,7 +89,7 @@ struct irq_info
 		unsigned short virq;
 		enum ipi_vector ipi;
 		struct {
-			unsigned short gsi;
+			unsigned short nr;
 			unsigned char vector;
 			unsigned char flags;
 		} pirq;
@@ -140,10 +140,10 @@ static struct irq_info mk_virq_info(unsigned short evtchn, unsigned short virq)
 }
 
 static struct irq_info mk_pirq_info(unsigned short evtchn,
-				    unsigned short gsi, unsigned short vector)
+				    unsigned short pirq, unsigned short vector)
 {
 	return (struct irq_info) { .type = IRQT_PIRQ, .evtchn = evtchn,
-			.cpu = 0, .u.pirq = { .gsi = gsi, .vector = vector } };
+			.cpu = 0, .u.pirq = { .nr = pirq, .vector = vector } };
 }
 
 /*
@@ -192,7 +192,7 @@ static unsigned gsi_from_irq(unsigned irq)
 	BUG_ON(info == NULL);
 	BUG_ON(info->type != IRQT_PIRQ);
 
-	return info->u.pirq.gsi;
+	return info->u.pirq.nr;
 }
 
 static unsigned vector_from_irq(unsigned irq)
@@ -387,7 +387,8 @@ static bool identity_mapped_irq(unsigned irq)
 
 static void pirq_unmask_notify(int irq)
 {
-	struct physdev_eoi eoi = { .irq = irq };
+	struct irq_info *info = info_for_irq(irq);
+	struct physdev_eoi eoi = { .irq = info->u.pirq.nr };
 
 	if (unlikely(pirq_needs_eoi(irq))) {
 		int rc = HYPERVISOR_physdev_op(PHYSDEVOP_eoi, &eoi);
@@ -402,7 +403,7 @@ static void pirq_query_unmask(int irq)
 
 	BUG_ON(info->type != IRQT_PIRQ);
 
-	irq_status.irq = irq;
+	irq_status.irq = info->u.pirq.nr;
 	if (HYPERVISOR_physdev_op(PHYSDEVOP_irq_status_query, &irq_status))
 		irq_status.flags = 0;
 
@@ -430,7 +431,7 @@ static unsigned int startup_pirq(unsigned int irq)
 	if (VALID_EVTCHN(evtchn))
 		goto out;
 
-	bind_pirq.pirq = irq;
+	bind_pirq.pirq = info->u.pirq.nr;
 	/* NB. We are happy to share unless we are probing. */
 	bind_pirq.flags = probing_irq(irq) ? 0 : BIND_PIRQ__WILL_SHARE;
 	rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq);
@@ -561,7 +562,7 @@ int xen_allocate_pirq(unsigned gsi, char *name)
 	set_irq_chip_and_handler_name(irq, &xen_pirq_chip,
 				      handle_level_irq, name);
 
-	irq_op.irq = irq;
+	irq_op.irq = gsi;
 	if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op)) {
 		dynamic_irq_cleanup(irq);
 		irq = -ENOSPC;
@@ -579,6 +580,7 @@ int xen_destroy_irq(int irq)
 {
 	struct irq_desc *desc;
 	struct physdev_unmap_pirq unmap_irq;
+	struct irq_info *info = info_for_irq(irq);
 	int rc = -ENOENT;
 
 	spin_lock(&irq_mapping_update_lock);
@@ -587,7 +589,7 @@ int xen_destroy_irq(int irq)
 	if (!desc)
 		goto out;
 
-	unmap_irq.pirq = irq;
+	unmap_irq.pirq = info->u.pirq.nr;
 	unmap_irq.domid = DOMID_SELF;
 	rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq);
 	if (rc) {
@@ -617,6 +619,7 @@ int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type)
 	map_irq.domid = domid;
 	map_irq.type = MAP_PIRQ_TYPE_MSI;
 	map_irq.index = -1;
+	map_irq.pirq = -1;
 	map_irq.bus = dev->bus->number;
 	map_irq.devfn = dev->devfn;
 
@@ -638,8 +641,6 @@ int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type)
 	if (irq == -1)
 		goto out;
 
-	map_irq.pirq = irq;
-
 	rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
 	if (rc) {
 
@@ -651,7 +652,7 @@ int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type)
 		goto out;
 	}
 
-	irq_info[irq] = mk_pirq_info(0, -1, map_irq.index);
+	irq_info[irq] = mk_pirq_info(0, map_irq.pirq, map_irq.index);
 	set_irq_chip_and_handler_name(irq, &xen_pirq_chip,
 			handle_level_irq,
 			(type == PCI_CAP_ID_MSIX) ? "msi-x":"msi");

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] xen: fix the error handling of msi setup
  2009-08-28  8:28 [PATCH 1/2] xen: fix the error handling of msi setup Qing He
  2009-08-28  8:29 ` [PATCH 2/2] xen: decouple irq and pirq for MSI Qing He
@ 2009-08-28 18:22 ` Jeremy Fitzhardinge
  1 sibling, 0 replies; 3+ messages in thread
From: Jeremy Fitzhardinge @ 2009-08-28 18:22 UTC (permalink / raw)
  To: Qing He; +Cc: xen-devel, yunhong.jiang

On 08/28/09 01:28, Qing He wrote:
> Fix the error handling of msi setup, the return value of failure
> is -1, not 0.
>   

Thanks, both applied.

    J

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-08-28 18:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-28  8:28 [PATCH 1/2] xen: fix the error handling of msi setup Qing He
2009-08-28  8:29 ` [PATCH 2/2] xen: decouple irq and pirq for MSI Qing He
2009-08-28 18:22 ` [PATCH 1/2] xen: fix the error handling of msi setup Jeremy Fitzhardinge

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.