From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: jim burns <jim_burn@bellsouth.net>,
Ian Campbell <Ian.Campbell@eu.citrix.com>
Cc: Todd Deshane <todd.deshane@xen.org>,
xen-devel@lists.xensource.com, xen-users@lists.xensource.com,
Fedora Xen List <fedora-xen@redhat.com>
Subject: Re: Re: [Xen-users] Continuing BUG:-iness booting Fedora Rawhide 3.1.0-rc's (was Summary: Experiences setting up a debug serial port)
Date: Wed, 14 Sep 2011 06:57:11 -0400 [thread overview]
Message-ID: <20110914105711.GA16284@phenom.oracle.com> (raw)
In-Reply-To: <20110914090806.GD25628@phenom.oracle.com>
[-- Attachment #1: Type: text/plain, Size: 5727 bytes --]
On Wed, Sep 14, 2011 at 05:08:06AM -0400, Konrad Rzeszutek Wilk wrote:
> > Rawhide just came out with 3.1.0-0.rc6.git0.0.fc17.x86_64 , and the BUG:s are
> > still the same as in the last log I sent. However, as promised I have attached
> > the initcall_debug log, but for rc6.
>
> Hey Jim,
>
> We are quite sure we know the cause of this. I was wondering if you would be
> up for beta-testing a patch for this?
Specifically this patch seems to fix it for me:
commit 690dc11498b192db25762de77988224753517c96
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Wed Sep 14 05:10:00 2011 -0400
xen/irq: Alter the locking to be a mutex.
When we allocate/change the IRQ informations, we do not
need to use a psinlock. We can use a mutex (which is
what the generic IRQ code does for allocations/changes.
Suggested-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index da70f5c..7523719 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -54,7 +54,7 @@
* This lock protects updates to the following mapping and reference-count
* arrays. The lock does not need to be acquired to read the mapping tables.
*/
-static DEFINE_SPINLOCK(irq_mapping_update_lock);
+static DEFINE_MUTEX(irq_mapping_update_lock);
static LIST_HEAD(xen_irq_list_head);
@@ -631,7 +631,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi,
int irq = -1;
struct physdev_irq irq_op;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = find_irq_by_gsi(gsi);
if (irq != -1) {
@@ -684,7 +684,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi,
handle_edge_irq, name);
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -710,7 +710,7 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
{
int irq, ret;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = xen_allocate_irq_dynamic();
if (irq == -1)
@@ -724,10 +724,10 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
if (ret < 0)
goto error_irq;
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
error_irq:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
xen_free_irq(irq);
return -1;
}
@@ -740,7 +740,7 @@ int xen_destroy_irq(int irq)
struct irq_info *info = info_for_irq(irq);
int rc = -ENOENT;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
desc = irq_to_desc(irq);
if (!desc)
@@ -766,7 +766,7 @@ int xen_destroy_irq(int irq)
xen_free_irq(irq);
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return rc;
}
@@ -776,7 +776,7 @@ int xen_irq_from_pirq(unsigned pirq)
struct irq_info *info;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
list_for_each_entry(info, &xen_irq_list_head, list) {
if (info == NULL || info->type != IRQT_PIRQ)
@@ -787,7 +787,7 @@ int xen_irq_from_pirq(unsigned pirq)
}
irq = -1;
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -802,7 +802,7 @@ int bind_evtchn_to_irq(unsigned int evtchn)
{
int irq;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = evtchn_to_irq[evtchn];
@@ -818,7 +818,7 @@ int bind_evtchn_to_irq(unsigned int evtchn)
}
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -829,7 +829,7 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
struct evtchn_bind_ipi bind_ipi;
int evtchn, irq;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = per_cpu(ipi_to_irq, cpu)[ipi];
@@ -853,7 +853,7 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
}
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -878,7 +878,7 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
struct evtchn_bind_virq bind_virq;
int evtchn, irq;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = per_cpu(virq_to_irq, cpu)[virq];
@@ -903,7 +903,7 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
}
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -913,7 +913,7 @@ static void unbind_from_irq(unsigned int irq)
struct evtchn_close close;
int evtchn = evtchn_from_irq(irq);
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
if (VALID_EVTCHN(evtchn)) {
close.port = evtchn;
@@ -943,7 +943,7 @@ static void unbind_from_irq(unsigned int irq)
xen_free_irq(irq);
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
}
int bind_evtchn_to_irqhandler(unsigned int evtchn,
@@ -1279,7 +1279,7 @@ void rebind_evtchn_irq(int evtchn, int irq)
will also be masked. */
disable_irq(irq);
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
/* After resume the irq<->evtchn mappings are all cleared out */
BUG_ON(evtchn_to_irq[evtchn] != -1);
@@ -1289,7 +1289,7 @@ void rebind_evtchn_irq(int evtchn, int irq)
xen_irq_info_evtchn_init(irq, evtchn);
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
/* new event channels are always bound to cpu 0 */
irq_set_affinity(irq, cpumask_of(0));
[-- Attachment #2: mutex_instead_of_spinlock.patch --]
[-- Type: text/x-diff, Size: 5261 bytes --]
commit 690dc11498b192db25762de77988224753517c96
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Wed Sep 14 05:10:00 2011 -0400
xen/irq: Alter the locking to be a mutex.
When we allocate/change the IRQ informations, we do not
need to use a psinlock. We can use a mutex (which is
what the generic IRQ code does for allocations/changes.
Suggested-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index da70f5c..7523719 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -54,7 +54,7 @@
* This lock protects updates to the following mapping and reference-count
* arrays. The lock does not need to be acquired to read the mapping tables.
*/
-static DEFINE_SPINLOCK(irq_mapping_update_lock);
+static DEFINE_MUTEX(irq_mapping_update_lock);
static LIST_HEAD(xen_irq_list_head);
@@ -631,7 +631,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi,
int irq = -1;
struct physdev_irq irq_op;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = find_irq_by_gsi(gsi);
if (irq != -1) {
@@ -684,7 +684,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi,
handle_edge_irq, name);
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -710,7 +710,7 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
{
int irq, ret;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = xen_allocate_irq_dynamic();
if (irq == -1)
@@ -724,10 +724,10 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
if (ret < 0)
goto error_irq;
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
error_irq:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
xen_free_irq(irq);
return -1;
}
@@ -740,7 +740,7 @@ int xen_destroy_irq(int irq)
struct irq_info *info = info_for_irq(irq);
int rc = -ENOENT;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
desc = irq_to_desc(irq);
if (!desc)
@@ -766,7 +766,7 @@ int xen_destroy_irq(int irq)
xen_free_irq(irq);
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return rc;
}
@@ -776,7 +776,7 @@ int xen_irq_from_pirq(unsigned pirq)
struct irq_info *info;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
list_for_each_entry(info, &xen_irq_list_head, list) {
if (info == NULL || info->type != IRQT_PIRQ)
@@ -787,7 +787,7 @@ int xen_irq_from_pirq(unsigned pirq)
}
irq = -1;
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -802,7 +802,7 @@ int bind_evtchn_to_irq(unsigned int evtchn)
{
int irq;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = evtchn_to_irq[evtchn];
@@ -818,7 +818,7 @@ int bind_evtchn_to_irq(unsigned int evtchn)
}
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -829,7 +829,7 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
struct evtchn_bind_ipi bind_ipi;
int evtchn, irq;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = per_cpu(ipi_to_irq, cpu)[ipi];
@@ -853,7 +853,7 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
}
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -878,7 +878,7 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
struct evtchn_bind_virq bind_virq;
int evtchn, irq;
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
irq = per_cpu(virq_to_irq, cpu)[virq];
@@ -903,7 +903,7 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
}
out:
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
return irq;
}
@@ -913,7 +913,7 @@ static void unbind_from_irq(unsigned int irq)
struct evtchn_close close;
int evtchn = evtchn_from_irq(irq);
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
if (VALID_EVTCHN(evtchn)) {
close.port = evtchn;
@@ -943,7 +943,7 @@ static void unbind_from_irq(unsigned int irq)
xen_free_irq(irq);
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
}
int bind_evtchn_to_irqhandler(unsigned int evtchn,
@@ -1279,7 +1279,7 @@ void rebind_evtchn_irq(int evtchn, int irq)
will also be masked. */
disable_irq(irq);
- spin_lock(&irq_mapping_update_lock);
+ mutex_lock(&irq_mapping_update_lock);
/* After resume the irq<->evtchn mappings are all cleared out */
BUG_ON(evtchn_to_irq[evtchn] != -1);
@@ -1289,7 +1289,7 @@ void rebind_evtchn_irq(int evtchn, int irq)
xen_irq_info_evtchn_init(irq, evtchn);
- spin_unlock(&irq_mapping_update_lock);
+ mutex_unlock(&irq_mapping_update_lock);
/* new event channels are always bound to cpu 0 */
irq_set_affinity(irq, cpumask_of(0));
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2011-09-14 10:57 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <201107231426.56811.jim_burn@bellsouth.net>
[not found] ` <201107251548.19324.jim_burn@bellsouth.net>
[not found] ` <20110725195723.GM32373@reaktio.net>
[not found] ` <201107251639.17471.jim_burn@bellsouth.net>
2011-07-25 21:05 ` Updating Xen 4.1.x xmexamples files (vfb line required for HVM guests) Pasi Kärkkäinen
2011-07-26 15:39 ` Ian Campbell
2011-07-26 17:00 ` Pasi Kärkkäinen
2011-07-26 22:20 ` [Xen-devel] " jim burns
2011-08-01 21:12 ` Pasi Kärkkäinen
2011-08-01 23:06 ` Re: [Xen-devel] " jim burns
2011-08-02 5:04 ` [Xen-users] Re: " Boris Derzhavets
2011-08-02 9:38 ` Re: [Xen-devel] " jim burns
2011-08-02 13:07 ` [Xen-users] " Boris Derzhavets
2011-08-02 17:13 ` Pasi Kärkkäinen
2011-08-02 17:17 ` Konrad Rzeszutek Wilk
2011-08-02 17:37 ` M A Young
2011-08-02 21:57 ` Re: Re: [Xen-devel] " jim burns
2011-08-03 1:05 ` Re: [Xen-users] " Boris Derzhavets
2011-08-03 1:33 ` Re: Re: Re: [Xen-devel] " jim burns
2011-08-02 17:42 ` [Xen-users] " M A Young
2011-08-02 18:34 ` Re: [Xen-devel] " Boris Derzhavets
2011-08-02 18:39 ` [Xen-users] " Boris Derzhavets
2011-08-02 19:03 ` Konrad Rzeszutek Wilk
2011-08-02 19:37 ` Attempt to load kernel 2.6.40-4.fc15.x86_64 under Xen 4.1.1 on Fedora 15 Boris Derzhavets
2011-08-02 19:55 ` Pasi Kärkkäinen
2011-08-03 0:55 ` [Xen-devel] " Boris Derzhavets
2011-08-02 17:13 ` [Xen-users] Re: Updating Xen 4.1.x xmexamples files (vfb line required for HVM guests) Pasi Kärkkäinen
2011-09-26 14:42 ` Konrad Rzeszutek Wilk
[not found] ` <1816797.G1BumNNXCy@dell4550>
[not found] ` <CAMrPLWKoenO5p3BJDU9KMb4y1qcMR3hcAgtss2bdbX_wKnfwZg@mail.gmail.com>
[not found] ` <3588908.GoxUj34Eqr@dell4550>
2011-09-09 13:14 ` [Fedora-xen] Continuing BUG:-iness booting Fedora Rawhide 3.1.0-rc's (was Summary: Experiences setting up a debug serial port) Pasi Kärkkäinen
2011-09-09 13:52 ` jim burns
2011-09-12 7:36 ` Pasi Kärkkäinen
2011-09-12 20:07 ` jim burns
2011-09-13 8:55 ` [Fedora-xen] [Xen-users] " Pasi Kärkkäinen
2011-09-13 23:50 ` [Xen-users] " jim burns
2011-09-14 1:44 ` jim burns
2011-09-14 9:08 ` [Fedora-xen] [Xen-devel] " Konrad Rzeszutek Wilk
2011-09-14 10:57 ` Konrad Rzeszutek Wilk [this message]
2011-09-14 20:18 ` Andy Burns
2011-09-18 8:08 ` Andy Burns
2011-09-18 10:33 ` Andy Burns
2011-09-18 10:46 ` Andy Burns
2011-09-18 14:03 ` Andy Burns
2011-09-18 14:54 ` Andy Burns
2011-09-21 18:03 ` Konrad Rzeszutek Wilk
2011-09-21 19:43 ` Andy Burns
2011-09-22 20:15 ` Andy Burns
2011-09-22 20:21 ` Konrad Rzeszutek Wilk
2011-09-14 21:07 ` jim burns
2011-09-14 22:12 ` [Fedora-xen] [Xen-devel] " Konrad Rzeszutek Wilk
2011-09-14 23:05 ` [Xen-devel] " jim burns
2011-09-14 23:38 ` [Fedora-xen] [Xen-devel] Re: [Xen-users] " M A Young
2011-09-15 1:18 ` [Fedora-xen] " jim burns
2011-09-15 15:20 ` [Fedora-xen] [Xen-devel] " Konrad Rzeszutek Wilk
2011-09-15 7:53 ` [Fedora-xen] " Konrad Rzeszutek Wilk
2011-09-16 14:55 ` [Fedora-xen] [Xen-devel] " jim burns
2011-09-16 17:38 ` [Fedora-xen] [Xen-devel] Re: [Xen-users] " Konrad Rzeszutek Wilk
2011-09-16 20:06 ` [Fedora-xen] [Xen-devel] " jim burns
2011-09-16 22:42 ` [Fedora-xen] Re: [Xen-users] " jim burns
2011-09-23 17:33 ` jim burns
2011-09-26 7:22 ` Andy Burns
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110914105711.GA16284@phenom.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=Ian.Campbell@eu.citrix.com \
--cc=fedora-xen@redhat.com \
--cc=jim_burn@bellsouth.net \
--cc=todd.deshane@xen.org \
--cc=xen-devel@lists.xensource.com \
--cc=xen-users@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.