From: Guenter Roeck <linux@roeck-us.net>
To: Arkadiusz Miskiewicz <a.miskiewicz@gmail.com>
Cc: Wim Van Sebroeck <wim@iguana.be>,
linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: 3.8.3 and 3.9git occasional watchdog oops
Date: Fri, 5 Apr 2013 20:47:50 -0700 [thread overview]
Message-ID: <20130406034750.GA25339@roeck-us.net> (raw)
In-Reply-To: <20130405015959.GA2566@roeck-us.net>
On Thu, Apr 04, 2013 at 06:59:59PM -0700, Guenter Roeck wrote:
> On Fri, Apr 05, 2013 at 12:23:30AM +0200, Arkadiusz Miskiewicz wrote:
> > On Thursday 14 of March 2013, Arkadiusz Miśkiewicz wrote:
> > > Hi.
> > >
> > > Just hit watchdog related oops in 3.8.3 kernel. Unfortunately photos only.
> > >
> > > http://ixion.pld-linux.org/~arekm/watchdog-oops-3.8.3/IMG_8942.JPG
> > > http://ixion.pld-linux.org/~arekm/watchdog-oops-3.8.3/IMG_8941.JPG
> >
> > 3.9git from today isn't any better unfortunately:
> >
> > http://ixion.pld-linux.org/~arekm/watchdog-oops-3.9git.jpg
> >
> > >
> > > oops started after I enabled systemd watchdog functionality. Cannot
> > > reproduce easily.
> > >
> > > watchdog here (thinkpad t400) is:
> > > iTCO_wdt: Found a ICH9M-E TCO device (Version=2, TCOBASE=0x1060)
> >
> >
> Wonder if there is a race condition in the watchdog driver: The watchdog device
> is opened before watchdog_register_device returns. I suspect systemd waits for
> a udev event, or by some other means detects that /dev/watchdog was created,
> and opens it immediately.
>
> I just have no idea where exactly the race condition, if there is one, is
> hiding. Or maybe I am completely off track.
>
I _think_ I understand the sequence of events.
- The driver is the first watchdog driver to register.
- watchdog_dev_register() gets called and creates the watchdog misc device
by calling misc_register().
At that time, the matching character device (/dev/watchdog0) does not yet
exist, and old_wdd is not set either.
- Userspace gets an event and opens /dev/watchdog
- watchdog_open() is called and sets sets wdd = old_wdd, which is still NULL,
and tries to dereference it. Bang.
If this is the problem, a simple fix would be to set old_wdd before calling
misc_register().
Can you test a patch ?
Guenter
--
To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net>
To: Arkadiusz Miskiewicz <a.miskiewicz@gmail.com>
Cc: Wim Van Sebroeck <wim@iguana.be>,
linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: 3.8.3 and 3.9git occasional watchdog oops
Date: Fri, 5 Apr 2013 20:47:50 -0700 [thread overview]
Message-ID: <20130406034750.GA25339@roeck-us.net> (raw)
In-Reply-To: <20130405015959.GA2566@roeck-us.net>
On Thu, Apr 04, 2013 at 06:59:59PM -0700, Guenter Roeck wrote:
> On Fri, Apr 05, 2013 at 12:23:30AM +0200, Arkadiusz Miskiewicz wrote:
> > On Thursday 14 of March 2013, Arkadiusz Miśkiewicz wrote:
> > > Hi.
> > >
> > > Just hit watchdog related oops in 3.8.3 kernel. Unfortunately photos only.
> > >
> > > http://ixion.pld-linux.org/~arekm/watchdog-oops-3.8.3/IMG_8942.JPG
> > > http://ixion.pld-linux.org/~arekm/watchdog-oops-3.8.3/IMG_8941.JPG
> >
> > 3.9git from today isn't any better unfortunately:
> >
> > http://ixion.pld-linux.org/~arekm/watchdog-oops-3.9git.jpg
> >
> > >
> > > oops started after I enabled systemd watchdog functionality. Cannot
> > > reproduce easily.
> > >
> > > watchdog here (thinkpad t400) is:
> > > iTCO_wdt: Found a ICH9M-E TCO device (Version=2, TCOBASE=0x1060)
> >
> >
> Wonder if there is a race condition in the watchdog driver: The watchdog device
> is opened before watchdog_register_device returns. I suspect systemd waits for
> a udev event, or by some other means detects that /dev/watchdog was created,
> and opens it immediately.
>
> I just have no idea where exactly the race condition, if there is one, is
> hiding. Or maybe I am completely off track.
>
I _think_ I understand the sequence of events.
- The driver is the first watchdog driver to register.
- watchdog_dev_register() gets called and creates the watchdog misc device
by calling misc_register().
At that time, the matching character device (/dev/watchdog0) does not yet
exist, and old_wdd is not set either.
- Userspace gets an event and opens /dev/watchdog
- watchdog_open() is called and sets sets wdd = old_wdd, which is still NULL,
and tries to dereference it. Bang.
If this is the problem, a simple fix would be to set old_wdd before calling
misc_register().
Can you test a patch ?
Guenter
next prev parent reply other threads:[~2013-04-06 3:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <201303142154.20501.arekm@maven.pl>
2013-04-04 22:23 ` 3.8.3 and 3.9git occasional watchdog oops Arkadiusz Miskiewicz
2013-04-04 22:23 ` Arkadiusz Miskiewicz
2013-04-05 1:59 ` Guenter Roeck
2013-04-05 1:59 ` Guenter Roeck
2013-04-06 3:47 ` Guenter Roeck [this message]
2013-04-06 3:47 ` Guenter Roeck
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=20130406034750.GA25339@roeck-us.net \
--to=linux@roeck-us.net \
--cc=a.miskiewicz@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=wim@iguana.be \
/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.