From: Jeff Garzik <jgarzik@mandrakesoft.com>
To: Christer Weinigel <wingel@acolyte.hack.org>
Cc: wingel@nano-system.com, zwane@linux.realnet.co.sz,
roy@karlsbakk.net, alan@lxorguk.ukuu.org.uk,
linux-kernel@vger.kernel.org
Subject: Re: [DRIVER][RFC] SC1200 Watchdog driver
Date: Thu, 21 Feb 2002 07:22:48 -0500 [thread overview]
Message-ID: <3C74E698.D3A0BFEB@mandrakesoft.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0202211134080.7649-100000@netfinity.realnet.co.sz> <3C74C8C7.25D7BCD@mandrakesoft.com> <20020221111910.57235F5B@acolyte.hack.org> <20020221115916.9FD5AF5B@acolyte.hack.org>
Christer Weinigel wrote:
> static int margin = 60; /* in seconds */
> MODULE_PARM(margin, "i");
>
> static int nowayout = CONFIG_WATCHDOG_NOWAYOUT;
> MODULE_PARM(nowayout, "i");
MODULE_PARM_DESC would be nice
> static void scx200_watchdog_update_margin(void)
> {
> printk(KERN_INFO "%s: timer margin %d seconds\n", name, margin);
> wdto_restart = 32768 / 1024 * margin;
> scx200_watchdog_ping();
> }
if you can turn multiplication and division of powers-of-2 into left and
right shifts, other simplications sometimes follow. Certainly you want
to avoid division especially and multiplication also if possible.
> static int scx200_watchdog_open(struct inode *inode, struct file *file)
> {
> /* only allow one at a time */
> if (down_trylock(&open_sem))
> return -EBUSY;
> scx200_watchdog_enable();
> expect_close = 0;
>
> return 0;
> }
now, a policy question -- do you want to fail or simply put to sleep
multiple openers? if you want to fail, this should be ok I think. if
you want to sleep, you can look at sound/oss/* in 2.5.x or
drivers/sound/* in 2.4.x for some examples of semaphore use on open(2).
> static int scx200_watchdog_release(struct inode *inode, struct file *file)
> {
> if (!expect_close) {
> printk(KERN_WARNING "%s: watchdog device closed unexpectedly, "
> "will not disable the watchdog timer\n", name);
I wonder why 'name' is not simply a macro defining a string constant?
Oh yeah, it matters very little. You might want to make 'name' const,
though.
> static struct notifier_block scx200_watchdog_notifier =
> {
> scx200_watchdog_notify_sys,
> NULL,
> 0
> };
use name:value style of struct initialization, and omit any struct
members which are 0/NULL (that's implicit).
> static int __init scx200_watchdog_init(void)
> {
> int r;
Here's a big one, I still don't like this lack of probing in the
driver. Sure we have "probed elsewhere", but IMO each driver like this
one needs to check -something- to ensure that SC1200 hardware is
present. Otherwise, a random user from a distro-that-builds-all-drivers
might "modprobe sc1200_watchdog" and things go boom.
If the upper levels have set up resources correctly, for example, then
there should be a resource for the watchdog that is -not- marked busy,
which the watchdog subsequently calls request_region on. Or, the
resource is already marked busy (this is present state, as you
indicated) and you peek at the resource strings for the one you want.
Tiny drivers for hardware embedded on some larger device tends to need
little hacks like that to check for the presence of hardware... but you
need that sanity check somewhere in each driver.
Jeff
--
Jeff Garzik | "Why is it that attractive girls like you
Building 1024 | always seem to have a boyfriend?"
MandrakeSoft | "Because I'm a nympho that owns a brewery?"
| - BBC TV show "Coupling"
next prev parent reply other threads:[~2002-02-21 12:23 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-20 13:32 SC1200 support? Roy Sigurd Karlsbakk
2002-02-20 15:14 ` Alan Cox
2002-02-21 5:54 ` [DRIVER][RFC] SC1200 Watchdog driver Zwane Mwaikambo
2002-02-21 9:39 ` Jeff Garzik
2002-02-21 9:48 ` Zwane Mwaikambo
2002-02-21 10:15 ` Jeff Garzik
2002-02-21 10:10 ` Zwane Mwaikambo
2002-02-21 11:19 ` Christer Weinigel
2002-02-21 11:59 ` Christer Weinigel
2002-02-21 12:07 ` Zwane Mwaikambo
2002-02-21 13:37 ` Alan Cox
2002-02-21 14:27 ` Zwane Mwaikambo
2002-02-21 14:54 ` Dave Jones
2002-02-21 15:16 ` Alan Cox
2002-02-21 12:22 ` Jeff Garzik [this message]
2002-02-21 12:32 ` Zwane Mwaikambo
2002-02-21 12:46 ` Jeff Garzik
2002-02-21 12:57 ` Christer Weinigel
2002-02-21 13:20 ` Jeff Garzik
2002-02-22 19:57 ` Christer Weinigel
[not found] ` <20020222210107.A6828@fafner.intra.cogenit.fr>
2002-02-22 20:48 ` Christer Weinigel
2002-02-22 22:56 ` Joel Becker
2002-02-25 22:20 ` Randy.Dunlap
2002-02-26 1:22 ` Christer Weinigel
2002-02-26 1:37 ` Christer Weinigel
2002-02-26 1:59 ` Jakob Østergaard
2002-02-26 2:42 ` Alan Cox
2002-02-21 15:53 ` Joel Becker
2002-02-24 17:30 ` Roy Sigurd Karlsbakk
2002-02-25 8:22 ` Zwane Mwaikambo
2002-02-25 21:01 ` Roy Sigurd Karlsbakk
2002-02-21 0:02 ` SC1200 support? Christer Weinigel
2002-02-21 0:27 ` Keith Owens
2002-02-21 6:19 ` Zwane Mwaikambo
2002-02-21 6:35 ` nick
2002-02-21 6:31 ` Zwane Mwaikambo
2002-02-21 12:05 ` Christer Weinigel
2002-02-21 10:56 ` Christer Weinigel
2002-02-21 11:14 ` Keith Owens
2002-02-21 11:24 ` David Woodhouse
-- strict thread matches above, loose matches on Subject: below --
2002-02-22 10:15 [DRIVER][RFC] SC1200 Watchdog driver Zwane Mwaikambo
2002-02-22 19:32 ` Roy Sigurd Karlsbakk
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=3C74E698.D3A0BFEB@mandrakesoft.com \
--to=jgarzik@mandrakesoft.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=roy@karlsbakk.net \
--cc=wingel@acolyte.hack.org \
--cc=wingel@nano-system.com \
--cc=zwane@linux.realnet.co.sz \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox