All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <htejun@gmail.com>
To: brking@us.ibm.com
Cc: jgarzik@pobox.com, alan@lxorguk.ukuu.org.uk, albertcc@tw.ibm.com,
	uchang@tw.ibm.com, linux-ide@vger.kernel.org
Subject: Re: [PATCHSET] libata: implement new initialization model w/ iomap support, take 2
Date: Fri, 01 Sep 2006 22:45:44 +0900	[thread overview]
Message-ID: <44F83988.20102@gmail.com> (raw)
In-Reply-To: <44F5FBE2.3030201@us.ibm.com>

Hello, Brian.

Brian King wrote:
>> Making the array dynamically-sized isn't difficult at all; however, the 
>> current libata code assumes that ata_host->ports[] array is packed - ie. 
>> no intervening empty entry.  Can SAS keep this restriction or does it 
>> need more flexibility?
> 
> This could be made to work with the addition of a new API. Rather than
> having just ata_sas_port_destroy, we would need ata_sas_port_delete
> and ata_sas_port_free. ata_sas_port_delete would remove the port from
> the ata_host and do everything except free the ata port since there
> could still be references to it. Then ata_sas_port_free would get called
> once all the references were deleted.

I see.

>> Hmmm.... I was kind of hoping SAS could use ata_host_alloc() and store 
>> its pointer and then later release it w/ ata_host_free(), hmmm.. maybe 
>> you can call ata_host_free from ->slave_destroy?.  That gives libata 
>> more control over the host structure (e.g. if we implement dynamic ports 
>> array, it needs to be freed too).  Port lifetime rules aren't changed by 
>> these updates and host free does need some changes but IMHO that 
>> shouldn't be difficult.
> 
> The current design for SAS is to have a single ata_host per scsi host.
> This means the ata_host is really tied to the object lifetime rules
> of the scsi host. In the current SAS code, ata_host_set does not get allocated
> as a separate piece of memory, but rather as part of the scsi_host
> object. This means the memory for the ata_host doesn't get freed until
> the last reference to the scsi host is released. Making ata_host
> a separate allocation changes these rules and forces the caller to
> know when to free the ata_host memory, which they currently do not know.

You're right.  I was confused that ->slave_destroy() is called on host 
release.  SCSI doesn't have host release callback.  What do you think 
about adding a host release callback?  That should make things easier 
and it is generally useful.

> In order to do what you are proposing, I think we would need to add
> some refcounting to the ata_host object. Each allocated ata_port would
> get a reference to its parent ata_host and would put a reference when the
> port is freed. Otherwise I am concerned that we would end up in the situation
> where the ata_host is freed before all the ata ports and the scsi_host is
> freed. It might be appropriate to create an ata_host class device and
> an ata_port class device...

Or we can just keep ata_host_init() and let sas allocate ata_host as 
part of SCSI host and free all dynamic stuff when all ports are 
detached.  It's a bit hacky but should work for the time being.

>> Hmmm.... I see.  Something like ata_dev_attach(adev) after initialized 
>> by SAS maybe?
> 
> Possibly. Are you proposing that ata_dev_attach would then end up calling
> scsi_add_device after doing the ATA initialization stuff?

For SAS, libata isn't controlling SCSI host, so I think it's more 
logical to leave SCSI devices to SAS too.  Would that make much difference?

Thanks.

-- 
tejun


  reply	other threads:[~2006-09-01 15:10 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-19  8:57 [PATCHSET] libata: implement new initialization model w/ iomap support, take 2 Tejun Heo
2006-08-19  8:59 ` [PATCH 2/20] libata: implement ata_host_start/stop() Tejun Heo
2006-08-19  8:59 ` [PATCH 1/20] libata: kill ata_host_stop() Tejun Heo
2006-08-19 14:51   ` Jeff Garzik
2006-08-19 15:29     ` Tejun Heo
2006-09-19  4:46   ` Jeff Garzik
2006-09-19  4:50     ` Tejun Heo
2006-08-19  8:59 ` [PATCH 3/20] libata: implement ata_host_detach() and ata_host_free() Tejun Heo
2006-09-19  4:59   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 5/20] libata: implement several LLD init helpers Tejun Heo
2006-08-22 22:11   ` Brian King
2006-08-27  9:52     ` Tejun Heo
2006-08-30 21:16       ` Brian King
2006-09-19  5:16   ` Jeff Garzik
2006-09-19  5:57     ` Tejun Heo
2006-08-19  8:59 ` [PATCH 4/20] libata: separate out ata_host_alloc() and ata_host_attach() Tejun Heo
2006-09-19  5:08   ` Jeff Garzik
2006-09-19  5:48     ` Tejun Heo
2006-08-19  8:59 ` [PATCH 6/20] libata: implement legacy ATA init helpers Tejun Heo
2006-09-19  5:26   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 7/20] libata: implement PCI " Tejun Heo
2006-09-19  5:29   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 8/20] libata: reimplement ata_pci_init_one() using new " Tejun Heo
2006-09-19  5:32   ` Jeff Garzik
2006-09-19  6:04     ` Tejun Heo
2006-09-19  6:09       ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 10/20] libata: reimplement ata_pci_remove_one() using new PCI " Tejun Heo
2006-08-19  8:59 ` [PATCH 12/20] libata: kill old " Tejun Heo
2006-08-19  8:59 ` [PATCH 11/20] libata: use remove_one() for deinit instead of ->host_stop() Tejun Heo
2006-09-19  5:42   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 13/20] libata: kill unused ->host_stop() operation and related functions Tejun Heo
2006-09-19  5:42   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 19/20] libata: kill unused ATA_FLAG_MMIO Tejun Heo
2006-08-19  8:59 ` [PATCH 14/20] libata: use LLD name where possible Tejun Heo
2006-09-19  5:43   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 17/20] libata: make ata_pci_acquire_resources() handle iomap Tejun Heo
2006-09-19  5:47   ` Jeff Garzik
2006-09-19  6:27     ` Tejun Heo
2006-09-19  6:32       ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 16/20] libata: make ata_host_alloc() take care of hpriv alloc/free Tejun Heo
2006-09-19  5:45   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 15/20] libata: move ->irq_handler from port_ops to port_info Tejun Heo
2006-09-19  5:43   ` Jeff Garzik
2006-08-19  8:59 ` [PATCH 20/20] libata: move scattered PCI ATA functions into liata-pci.c Tejun Heo
2006-09-19  5:50   ` Jeff Garzik
2006-08-22 22:10 ` [PATCHSET] libata: implement new initialization model w/ iomap support, take 2 Brian King
2006-08-27 10:12   ` Tejun Heo
2006-08-30 20:58     ` Brian King
2006-09-01 13:45       ` Tejun Heo [this message]
2006-09-07 13:22         ` Brian King

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=44F83988.20102@gmail.com \
    --to=htejun@gmail.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=albertcc@tw.ibm.com \
    --cc=brking@us.ibm.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=uchang@tw.ibm.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.