linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Garzik <jgarzik@pobox.com>
To: Mark Lord <lkml@rtr.ca>
Cc: James Bottomley <James.Bottomley@SteelEye.com>,
	Christoph Hellwig <hch@infradead.org>, Mark Lord <lsml@rtr.ca>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	SCSI Mailing List <linux-scsi@vger.kernel.org>
Subject: driver hacking tips (was Re: [PATCH] QStor SATA/RAID driver for 2.6.9-rc3)
Date: Tue, 12 Oct 2004 14:25:13 -0400	[thread overview]
Message-ID: <416C2189.4080302@pobox.com> (raw)
In-Reply-To: <416C19B9.7000806@rtr.ca>

[subject changed as this knowledge can benefit others as well]

In addition to agreeing with James' most recently assessment of 
qs_process_sff_entry(), I wanted to interject a bit of more general 
discussion...

Two main, but unrelated, driver-writing points:

1) Putting almost all your in-irq code into a tasklet can be quite 
convenient, if your situation is amenable to that.  The benefits are

a) your irq handler is tiny,

	ack irqs
	tasklet_schedule()

b) data can be synchronized without a lock, if the data is only used in 
the tasklet or in between tasklet_disable/tasklet_enable pairs.

c) you can "call" your in-irq code from places other than your irq 
handler, and let the tasklet subsystem synchronize the tasklet schedule. 
  no worries about disabling interrupts, they will just do (a) as 
described above.


2) You want to avoid a model (like qs_process_sff_entry, alas) where you 
have one single, huge "event completion" path, called from various 
points in the driver.  Instead, do your best to make sure event/action 
as fine-grained as possible.

Storage drivers that want to handle long-running events, or events that 
need process context, typically want to either fire off events 
_asynchronously_ via schedule_work(), or have a long-running thread that 
does nothing but processes an internal driver event queue.  It's really 
programmer's preference at that point, as having a single (or per-host) 
event queue thread can sometimes be more simple than async work queue code.

	Jeff




  parent reply	other threads:[~2004-10-12 18:25 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-04 19:11 [PATCH] QStor SATA/RAID driver for 2.6.9-rc3 Mark Lord
2004-10-07 13:42 ` Mark Lord
2004-10-07 14:07   ` Christoph Hellwig
2004-10-07 15:35     ` Mark Lord
2004-10-07 15:50       ` Jeff Garzik
2004-10-07 20:17         ` Mark Lord
2004-10-07 20:30           ` Jeff Garzik
2004-10-07 20:34             ` Mark Lord
2004-10-07 20:46               ` Jeff Garzik
2004-10-07 20:54                 ` Mark Lord
2004-10-07 21:15                   ` Christoph Hellwig
2004-10-07 22:03                     ` Mark Lord
2004-10-20 15:44                       ` Christoph Hellwig
2004-10-07 23:39                     ` PATCH] " Mark Lord
2004-10-13 18:56                       ` [PATCH] QStor SATA/RAID driver for 2.6.9-rc4 Mark Lord
2004-10-08 13:19                     ` [PATCH] QStor SATA/RAID driver for 2.6.9-rc3 James Bottomley
2004-10-08 15:15                       ` Mark Lord
2004-10-08 15:27                         ` James Bottomley
2004-10-08 15:34                           ` Mark Lord
2004-10-08 15:38                             ` Jeff Garzik
2004-10-08 16:01                             ` James Bottomley
2004-10-12 17:00                               ` Mark Lord
2004-10-12 17:05                                 ` Jeff Garzik
2004-10-12 17:09                                   ` James Bottomley
2004-10-12 17:31                                     ` Jeff Garzik
2004-10-08 15:38                           ` Mark Lord
2004-10-08 15:47                             ` James Bottomley
2004-10-08 15:49                               ` Jeff Garzik
2004-10-12 16:59                               ` Mark Lord
2004-10-12 17:03                                 ` Jeff Garzik
2004-10-12 17:14                                   ` Mark Lord
2004-10-12 17:19                                     ` Jeff Garzik
2004-10-12 17:23                                     ` Jeff Garzik
2004-10-12 17:17                                 ` James Bottomley
2004-10-12 17:22                                   ` Mark Lord
2004-10-12 17:30                                     ` James Bottomley
2004-10-12 17:33                                       ` Mark Lord
2004-10-12 17:42                                         ` Jeff Garzik
2004-10-12 17:51                                           ` Mark Lord
2004-10-12 18:12                                             ` James Bottomley
2004-10-12 18:36                                               ` Mark Lord
2004-10-12 18:25                                             ` Jeff Garzik [this message]
2004-10-12 19:18                                               ` driver hacking tips (was Re: [PATCH] QStor SATA/RAID driver for 2.6.9-rc3) Mark Lord
2004-10-12 19:40                                                 ` Jeff Garzik
2004-10-12 17:34                                     ` [PATCH] QStor SATA/RAID driver for 2.6.9-rc3 Jeff Garzik
2004-10-07 20:31           ` Christoph Hellwig
2004-10-07 20:35           ` Jeff Garzik
2004-10-07 21:16 ` Mark Lord
2004-10-07 21:44   ` Jeff Garzik
2004-10-07 21:45   ` Jeff Garzik
2004-10-13 20:04   ` Jeff Garzik
2004-10-13 22:16     ` Mark Lord
2004-10-13 22:41       ` Jeff Garzik
2004-10-13 23:24         ` Mark Lord
2004-10-13 23:39           ` Jeff Garzik
2004-10-14 16:30             ` Mark Lord
2004-10-14 16:37               ` Mark Lord
2004-10-14 16:52               ` [PATCH] Export ata_scsi_simulate() for use by non-libata drivers Mark Lord
2004-10-14 17:04                 ` Jeff Garzik
2004-10-14 18:44                   ` Mark Lord
2004-10-15  5:04                     ` Jeff Garzik
2004-10-15 13:25                       ` John W. Linville
2004-10-15 14:59                         ` Randy.Dunlap
2004-10-15 15:38                           ` Jeff Garzik

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=416C2189.4080302@pobox.com \
    --to=jgarzik@pobox.com \
    --cc=James.Bottomley@SteelEye.com \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=lkml@rtr.ca \
    --cc=lsml@rtr.ca \
    /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;
as well as URLs for NNTP newsgroup(s).