linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <htejun@gmail.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: "zhao, forrest" <forrest.zhao@intel.com>,
	alan@lxorguk.ukuu.org.uk, axboe@suse.de, albertcc@tw.ibm.com,
	lkosewsk@gmail.com, linux-ide@vger.kernel.org
Subject: Re: [PATCHSET 9/9] add hotplug support
Date: Fri, 14 Apr 2006 01:50:32 +0900	[thread overview]
Message-ID: <443E8158.40302@gmail.com> (raw)
In-Reply-To: <443E7739.9080706@pobox.com>

Jeff Garzik wrote:
> Tejun Heo wrote:
>> zhao, forrest wrote:
>>> On Tue, 2006-04-11 at 23:14 +0900, Tejun Heo wrote:
>>>
>>>> Warm unplug/plug comes at almost no cost for LLDDs implementing new EH
>>>> - adding a call to ata_eh_hotplug() at the end of ->error_handler is
>>>> enough (even this is unnecessary if it's using bmdma error_handler).
>>>> e.g. ata_piix isn't changed by hotplug patchsets at all but still
>>>> supports warm plugging (even PATA warm plugging works although it's
>>>> electronically unsafe).
>>>>
>>>> To support full hot unplug/plug, all a LLDD has to do are enabling PHY
>>>> status changed interrupt and, when PHY RDY status changes, call
>>>> ata_schedule_probe() and schedule EH.  ahci, sata_sil and sata_sil24
>>>> are converted this way and hotplugging works perfectly for those
>>>> drivers.
>>>>
>>> In order to make ata_eh_hotplug() called, LLDD have to schedule EH
>>> in its interrupt handler(i.e. invoke scsi_eh_schedule_host() directly
>>> or indirectly), but I didn't find such code in your patch set.
>>> Did I miss anything?
>>>
>> The last three patches do that.  All hotplug interrupts end up invoking
>> EH by calling ata_eh_schedule_port(ap, ATA_EH_FREEZE).
> 
> It's certainly nicer and more readable, if the LLDD calls a function
> like ata_eh_hotplug().
> 

Hi, Jeff.

Currently, a LLDD has to do the following two to schedule hotplug.

* call ata_schedule_probe(ap);
* invoke EH by calling ata_eh_schedule_port(ap, ATA_EH_FREEZE);

Calling ata_schedule_probe() can be done from interrupt handler or
inside EH.  It just has to be done before actual hotplug operation begins.

ata_schedule_probe() can be changed to include a call to
ata_eh_schedule_port() but, as can be seen from three converted drivers,
it isn't really necessary.  Scheduling hotplug is usually done by the
standard ata_eh_autopsy() function in EH after looking at the SError
register.  So, actually, all an interrupt handler has to do is just to
call in to EH if something looks weird.  Standard EH will do all the
jobs for it including scheduling hotplug operation.

Only sata_sil24 calls ata_schedule_probe() explicitly because its SError
is sort of flimsy.  And even that is not done from the interrupt
handler.  It's done by sil24_autopsy() function which is the first thing
sata_sil24 EH does on entry.

So, there really isn't much point in making ata_schedule_port() and
ata_eh_schedule_port() done in one step.  For most controllers, the
latter doesn't need to be called at all and even, when it does, there's
a good chance that it will be done from EH making scheduling EH kind of
silly, still safe though.

Hmmmm... but maybe ata_schedule_hotplug() is a better name than
ata_schedule_probe().  Or ata_eh_schedule_hotplug()?  ata_eh_hotplug()
is already taken by the function which does actual hotplug.

The reason why I chose ata_schedule_probe() was the word 'hotplug' is
currently used to mean both plugging and unplugging operations, and warm
operations too.  It means the general facility to attach and detach
devices dynamically.  So, calling it ata_schedule_hotplug() or something
similar is sort of confusing as some hotplug operations happen whether
the function is called or not.

The terms I've used are...

* hotplug	: as said above, general facility and operations to
		  dynamically add and remove devices, warm or hot.
* attach	: the action of adding a new device
* detach	: the action of removing a device
* probe		: an operation to discover new devices on a port and
		  attach them

Thanks.

-- 
tejun

  reply	other threads:[~2006-04-13 16:50 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-11 14:14 [PATCHSET 9/9] add hotplug support Tejun Heo
2006-04-11 14:14 ` [PATCH 03/15] libata-hp: implement ata_eh_scsi_hotplug() Tejun Heo
2006-04-11 14:14 ` [PATCH 06/15] libata-hp: use ata_scsi_slave_destroy() in low level drivers Tejun Heo
2006-04-11 14:14 ` [PATCH 05/15] libata-hp: implement ata_scsi_slave_destroy() Tejun Heo
2006-04-12  5:27   ` Tejun Heo
2006-04-12 22:32     ` Jeff Garzik
2006-04-13  3:46       ` Tejun Heo
2006-04-11 14:14 ` [PATCH 07/15] libata-hp: implement transportt->user_scan Tejun Heo
2006-04-11 14:14 ` [PATCH 02/15] libata-hp: implement ata_eh_hotplug() Tejun Heo
2006-04-11 14:14 ` [PATCH 01/15] libata-hp: implement ata_eh_detach_dev() Tejun Heo
2006-04-11 14:14 ` [PATCH 08/15] libata-hp: add hotplug hooks into regular EH Tejun Heo
2006-04-11 14:14 ` [PATCH 04/15] libata-hp: connect ATA hotplug events to SCSI hotplug Tejun Heo
2006-04-11 14:14 ` [PATCH 09/15] libata-hp: activate hotplug by adding a call to ata_eh_hotplug() from EH Tejun Heo
2006-04-13  8:18   ` zhao, forrest
2006-04-13  8:45     ` Tejun Heo
2006-04-13  9:00       ` zhao, forrest
2006-04-13  9:30         ` Tejun Heo
2006-04-11 14:14 ` [PATCH 10/15] libata-hp: skip EH reset if no device to recover and hotplug pending Tejun Heo
2006-04-11 14:14 ` [PATCH 12/15] sata_sil: new interrupt handler Tejun Heo
2006-04-11 14:14 ` [PATCH 15/15] sata_sil24: add hotplug support Tejun Heo
2006-04-11 14:14 ` [PATCH 13/15] sata_sil: " Tejun Heo
2006-04-11 14:14 ` [PATCH 11/15] sata_sil: add new constants in preparation for new interrupt handler Tejun Heo
2006-04-11 14:14 ` [PATCH 14/15] ahci: add hotplug support Tejun Heo
2006-04-12  1:49 ` [PATCHSET 9/9] " Tejun Heo
2006-04-13  7:53 ` zhao, forrest
2006-04-13  8:49   ` Tejun Heo
2006-04-13 16:07     ` Jeff Garzik
2006-04-13 16:50       ` Tejun Heo [this message]
2006-04-27  9:29 ` Jeff Garzik
2006-04-27 10:53   ` Tejun Heo
2006-04-27 11:29     ` Jeff Garzik
2006-04-27 12:38       ` Tejun Heo

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=443E8158.40302@gmail.com \
    --to=htejun@gmail.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=albertcc@tw.ibm.com \
    --cc=axboe@suse.de \
    --cc=forrest.zhao@intel.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=lkosewsk@gmail.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 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).