From: Joe Jin <joe.jin@oracle.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: jeremy@goop.org, ian.campbell@citrix.com,
Andrew Morton <akpm@linux-foundation.org>,
linux-fbdev@vger.kernel.org, xen-devel@lists.xensource.com,
linux-kernel@vger.kernel.org, gurudas.pai@oracle.com,
greg.marsden@oracle.com, guru.anbalagane@oracle.com
Subject: Re: [patch] xenfb: fix xenfb suspend/resume race
Date: Fri, 31 Dec 2010 00:56:13 +0000 [thread overview]
Message-ID: <4D1D2A2D.80206@oracle.com> (raw)
In-Reply-To: <20101230164051.GC24313@dumpdata.com>
On 12/31/10 00:40, Konrad Rzeszutek Wilk wrote:
> On Thu, Dec 30, 2010 at 08:56:16PM +0800, Joe Jin wrote:
>> Hi,
>
> Joe,
>
> Patch looks good, however..
>
> I am unclear from your description whether the patch fixes
> the problem (I would presume so). Or does it take a long time
> to hit this race?
>
Yes, more than 100 migrations. we hit this issue around 3 times.
I dumped vmcore when guest crashed, from vmcore everything
looked good, fb_info, xenfb_info and so on.
Checked the calltrace I suspected when guest resuming, the process kevent
scheduled and refresh xenfb. look like when call notify_remote_via_irq(), better
to confirm irq is valid?
Please review new patch.
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
video/xen-fbfront.c | 19 +++++++++++--------
xen/events.c | 2 ++
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c
index dc72563..367fb1c 100644
--- a/drivers/video/xen-fbfront.c
+++ b/drivers/video/xen-fbfront.c
@@ -561,26 +561,24 @@ static void xenfb_init_shared_page(struct xenfb_info *info,
static int xenfb_connect_backend(struct xenbus_device *dev,
struct xenfb_info *info)
{
- int ret, evtchn;
+ int ret, evtchn, irq;
struct xenbus_transaction xbt;
ret = xenbus_alloc_evtchn(dev, &evtchn);
if (ret)
return ret;
- ret = bind_evtchn_to_irqhandler(evtchn, xenfb_event_handler,
+ irq = bind_evtchn_to_irqhandler(evtchn, xenfb_event_handler,
0, dev->devicetype, info);
- if (ret < 0) {
+ if (irq < 0) {
xenbus_free_evtchn(dev, evtchn);
xenbus_dev_fatal(dev, ret, "bind_evtchn_to_irqhandler");
- return ret;
+ return irq;
}
- info->irq = ret;
-
again:
ret = xenbus_transaction_start(&xbt);
if (ret) {
xenbus_dev_fatal(dev, ret, "starting transaction");
- return ret;
+ goto unbind_irq;
}
ret = xenbus_printf(xbt, dev->nodename, "page-ref", "%lu",
virt_to_mfn(info->page));
@@ -602,15 +600,20 @@ static int xenfb_connect_backend(struct xenbus_device *dev,
if (ret = -EAGAIN)
goto again;
xenbus_dev_fatal(dev, ret, "completing transaction");
- return ret;
+ goto unbind_irq;
}
xenbus_switch_state(dev, XenbusStateInitialised);
+ info->irq = irq;
return 0;
error_xenbus:
xenbus_transaction_end(xbt, 1);
xenbus_dev_fatal(dev, ret, "writing xenstore");
+ unbind_irq:
+ printk(KERN_ERR "xenfb_connect_backend failed!\n");
+ unbind_from_irqhandler(irq, info);
+ xenbus_free_evtchn(dev, evtchn);
return ret;
}
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index ac7b42f..4cfb5e2 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -175,6 +175,8 @@ static struct irq_info *info_for_irq(unsigned irq)
static unsigned int evtchn_from_irq(unsigned irq)
{
+ if (unlikely(irq < 0 || irq >= nr_irqs))
+ return 0;
return info_for_irq(irq)->evtchn;
}
WARNING: multiple messages have this Message-ID (diff)
From: Joe Jin <joe.jin@oracle.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: jeremy@goop.org, ian.campbell@citrix.com,
Andrew Morton <akpm@linux-foundation.org>,
linux-fbdev@vger.kernel.org, xen-devel@lists.xensource.com,
linux-kernel@vger.kernel.org, gurudas.pai@oracle.com,
greg.marsden@oracle.com, guru.anbalagane@oracle.com
Subject: Re: [patch] xenfb: fix xenfb suspend/resume race
Date: Fri, 31 Dec 2010 08:56:13 +0800 [thread overview]
Message-ID: <4D1D2A2D.80206@oracle.com> (raw)
In-Reply-To: <20101230164051.GC24313@dumpdata.com>
On 12/31/10 00:40, Konrad Rzeszutek Wilk wrote:
> On Thu, Dec 30, 2010 at 08:56:16PM +0800, Joe Jin wrote:
>> Hi,
>
> Joe,
>
> Patch looks good, however..
>
> I am unclear from your description whether the patch fixes
> the problem (I would presume so). Or does it take a long time
> to hit this race?
>
Yes, more than 100 migrations. we hit this issue around 3 times.
I dumped vmcore when guest crashed, from vmcore everything
looked good, fb_info, xenfb_info and so on.
Checked the calltrace I suspected when guest resuming, the process kevent
scheduled and refresh xenfb. look like when call notify_remote_via_irq(), better
to confirm irq is valid?
Please review new patch.
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
video/xen-fbfront.c | 19 +++++++++++--------
xen/events.c | 2 ++
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c
index dc72563..367fb1c 100644
--- a/drivers/video/xen-fbfront.c
+++ b/drivers/video/xen-fbfront.c
@@ -561,26 +561,24 @@ static void xenfb_init_shared_page(struct xenfb_info *info,
static int xenfb_connect_backend(struct xenbus_device *dev,
struct xenfb_info *info)
{
- int ret, evtchn;
+ int ret, evtchn, irq;
struct xenbus_transaction xbt;
ret = xenbus_alloc_evtchn(dev, &evtchn);
if (ret)
return ret;
- ret = bind_evtchn_to_irqhandler(evtchn, xenfb_event_handler,
+ irq = bind_evtchn_to_irqhandler(evtchn, xenfb_event_handler,
0, dev->devicetype, info);
- if (ret < 0) {
+ if (irq < 0) {
xenbus_free_evtchn(dev, evtchn);
xenbus_dev_fatal(dev, ret, "bind_evtchn_to_irqhandler");
- return ret;
+ return irq;
}
- info->irq = ret;
-
again:
ret = xenbus_transaction_start(&xbt);
if (ret) {
xenbus_dev_fatal(dev, ret, "starting transaction");
- return ret;
+ goto unbind_irq;
}
ret = xenbus_printf(xbt, dev->nodename, "page-ref", "%lu",
virt_to_mfn(info->page));
@@ -602,15 +600,20 @@ static int xenfb_connect_backend(struct xenbus_device *dev,
if (ret == -EAGAIN)
goto again;
xenbus_dev_fatal(dev, ret, "completing transaction");
- return ret;
+ goto unbind_irq;
}
xenbus_switch_state(dev, XenbusStateInitialised);
+ info->irq = irq;
return 0;
error_xenbus:
xenbus_transaction_end(xbt, 1);
xenbus_dev_fatal(dev, ret, "writing xenstore");
+ unbind_irq:
+ printk(KERN_ERR "xenfb_connect_backend failed!\n");
+ unbind_from_irqhandler(irq, info);
+ xenbus_free_evtchn(dev, evtchn);
return ret;
}
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index ac7b42f..4cfb5e2 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -175,6 +175,8 @@ static struct irq_info *info_for_irq(unsigned irq)
static unsigned int evtchn_from_irq(unsigned irq)
{
+ if (unlikely(irq < 0 || irq >= nr_irqs))
+ return 0;
return info_for_irq(irq)->evtchn;
}
next prev parent reply other threads:[~2010-12-31 0:56 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-30 12:56 [patch] xenfb: fix xenfb suspend/resume race Joe Jin
2010-12-30 12:56 ` Joe Jin
2010-12-30 16:40 ` Konrad Rzeszutek Wilk
2010-12-30 16:40 ` Konrad Rzeszutek Wilk
2010-12-30 16:40 ` Konrad Rzeszutek Wilk
2010-12-31 0:56 ` Joe Jin [this message]
2010-12-31 0:56 ` Joe Jin
2011-01-03 16:34 ` [Xen-devel] " Konrad Rzeszutek Wilk
2011-01-03 16:34 ` Konrad Rzeszutek Wilk
2011-01-04 0:34 ` Joe Jin
2011-01-04 0:34 ` Joe Jin
2011-01-04 11:15 ` Ian Campbell
2011-01-04 11:15 ` Ian Campbell
2011-01-06 7:14 ` Joe Jin
2011-01-06 7:14 ` Joe Jin
2011-01-06 8:02 ` Ian Campbell
2011-01-06 8:02 ` Ian Campbell
2011-01-06 8:14 ` Joe Jin
2011-01-06 8:14 ` Joe Jin
2011-01-07 6:43 ` [Xen-devel] " Joe Jin
2011-01-07 6:43 ` Joe Jin
2011-01-06 8:47 ` Ian Campbell
2011-01-06 8:47 ` Ian Campbell
-- strict thread matches above, loose matches on Subject: below --
2011-01-07 6:40 Joe Jin
2011-01-07 6:40 ` Joe Jin
2011-01-07 9:17 ` Ian Campbell
2011-01-07 9:17 ` Ian Campbell
2011-01-07 9:17 ` Ian Campbell
2011-01-07 10:17 ` Joe Jin
2011-01-07 10:17 ` Joe Jin
2011-01-07 10:17 ` Joe Jin
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=4D1D2A2D.80206@oracle.com \
--to=joe.jin@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=greg.marsden@oracle.com \
--cc=guru.anbalagane@oracle.com \
--cc=gurudas.pai@oracle.com \
--cc=ian.campbell@citrix.com \
--cc=jeremy@goop.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=xen-devel@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.