From: Martyn Welch <martyn.welch@ge.com>
To: "Emilio G. Cota" <cota@braap.org>
Cc: "devel@driverdev.osuosl.org" <devel@driverdev.osuosl.org>,
Greg KH <gregkh@suse.de>, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 5/8] staging: vme: add functions for bridge module refcounting
Date: Tue, 09 Aug 2011 10:00:09 +0100 [thread overview]
Message-ID: <4E40F719.1020100@ge.com> (raw)
In-Reply-To: <20110808172216.GA2311@flamenco.cs.columbia.edu>
On 08/08/11 18:22, Emilio G. Cota wrote:
> On Mon, Aug 08, 2011 at 12:06:37 +0100, Martyn Welch wrote:
>> On 08/08/11 11:11, Emilio G. Cota wrote:
>>> On Mon, Aug 08, 2011 at 10:26:50 +0100, Martyn Welch wrote:
>>>> On 08/08/11 10:14, Emilio G. Cota wrote:
>>>>> Martyn, no one in the kernel is doing what you propose, for
>>>>> good reason. Look at USB, PCI, RapidIO. They all provide get
>>>>> and put functions to be called from probe and release.
>>>>
>>>> Really, which functions are these for PCI?
>>>
>>> pci_get_dev/put in drivers/pci/pci-driver.c.
>>>
>>
>> Which isn't explicitly used by the vast majority of PCI drivers. In fact the
>> instances which I did find where this was used by a PCI device driver, it
>> appears to be using the old-style PCI probing.
>
>> This is taken care of automatically for drivers using the "newer" PCI driver
>> registration model as part of the probe.
>
> And I don't care. The new model is not doing that nor what you suggest
> anyway, AFAIK it's not incrementing any refcounts for devices--perhaps
> because it cannot be built as a module? I dunno.
>
> Look at other subsystems that usually sit under PCI, like USB
> or RapidIO.
>
Just did.
RapidIO, defines rio_dev_put() in rio-driver.c, used in the rio_device_probe
function, so handled much like it is in PCI. Can't see any explicit
refcounting in the rionet driver.
USB, interestingly here the functions are defined as usb_get_dev() and
usb_put_dev() (not usb_dev_get() and usb_dev_put()). Here the situation is a
little different, the refcounting is more explicit, I assume because of the
hotplug and/or hierarchical nature of the USB bus (maybe Greg would be kind
enough to explain the rationale?)
So, out of the 3 bus types you have used to demonstrate that refcounts should
always be handled explicitly, 2 of the 3 (at least to me) appear to implicitly
handling refcounting.
>> No, your driver will be told the resource isn't available by vme_lm_request(),
>> it would return null. It would then be up to you as the driver writer to
>> handle that gracefully. In fact, just as you'd have to do if the location
>> monitor was already being used by a different VME device driver which had
>> positioned them where it needed them.
>
> Ok, we may not oops, but this is unnecessary pain for the driver--and
> probably not what the driver wanted.
>
The location monitor is a single, (location) configurable resource. If it's
being used for one purpose in one location by a driver, it can't be
repositioned and used for another purpose by another driver without adversely
affecting the operation of the first.
>>> Remember that we're writing a bus driver here, we shouldn't
>>> get on the way of the drivers for the devices on the bus, no
>>> matter how crazy they are.
>>
>> Actually we're providing resource management and a bridge independent VME API
>> for VME device drivers as part of a bus specific core, much as USB and PCI do.
>> The VME bridge drivers bind under it, the VME device drivers bind on top of it.
>>
>> Crazy probably equates to not portable across different VME bridges
>
> ?? Crazy means crazy. ftrace is crazy, linux-rt is crazy. And
> they're great.
>
I'm sure they are great, not sure I'd describe them as crazy though.
>> , so no I don't agree. I'm in favour of providing as much flexibility to VME device
>> driver authors as possible, without impacting the flexibility of the user to
>> use the drivers on top of different VME bridges.
>
> This is nonsense.
>
>>> IMHO in order to make sure we're on
>>> the right track we must look at other bus drivers. And these
>>> other drivers just keep things simple and stupid, which is
>>> flexible, safe and "Obviously Correct(tm)".
>>
>> Though I don't think the approach you are advocating is simple for the VME
>> device driver writer (new style PCI drivers don't as a rule directly manage
>> refcounting, in the same way your approach would add complexity for the
>> individual VME device drivers); it's not safe (I deem it unsafe to expect
>> every VME device driver writer to manage the refcounting in their drivers
>> explicitly, just as it appears is the case for PCI devices) and as a result
>> not "Obviously Correct(tm)".
>
> By your definition there are lots of drivers in the kernel
> that are unsafe..
>
It appears to me that both PCI and RapidIO (both buses that you have tried to
use to defend your position) don't seem to me to by-and-large expect drivers
to explicitly manage refcounting. That leaves USB, which I'd argue is a very
different bus to VME.
> I'm tired of your non-arguments. I'm just trying to persuade you
> to do what everyone else is doing, with technical reasons. To me
> (and to everybody else in this list, I'd imagine) refcounting
> should be explicit. You're going against what I perceive are
> well-established pratices in the kernel. I can't understand it.
Which I have yet to see you convincingly backup. I see a large amount of bluff
about oppses and how buses apparently deal with refcounting. I also know I
have had a number of commits to the VME code by a number of others (which is a
matter of public record, you can look at the commits in git) that haven't
complained about how the bus code is structured.
You have proposed a completely different structure. Manohar has proposed some
changes and I am trying to work with him to find a solution that satisfies
both of us. I'm not going to make any claims about others views, simply
because as they haven't aired them, I don't currently actually know what they are.
Martyn
--
Martyn Welch (Principal Software Engineer) | Registered in England and
GE Intelligent Platforms | Wales (3828642) at 100
T +44(0)127322748 | Barbirolli Square, Manchester,
E martyn.welch@ge.com | M2 3AB VAT:GB 927559189
next prev parent reply other threads:[~2011-08-09 9:00 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-01 10:20 [PATCH 0/8] VME Driver Fixes Manohar Vanga
2011-08-01 10:20 ` [PATCH 1/8] staging: vme_user: change kmalloc+memset to kzalloc Manohar Vanga
2011-08-01 10:52 ` Martyn Welch
2011-08-10 7:44 ` Martyn Welch
2011-08-01 10:20 ` [PATCH 2/8] staging: vme: allow explicit assignment of bus numbers Manohar Vanga
2011-08-01 11:10 ` Dan Carpenter
2011-08-01 12:12 ` Manohar Vanga
2011-08-01 13:06 ` Martyn Welch
2011-08-01 14:31 ` Manohar Vanga
2011-08-01 15:50 ` Martyn Welch
2011-08-02 11:54 ` Manohar Vanga
2011-08-02 14:57 ` Martyn Welch
2011-08-03 8:54 ` Martyn Welch
2011-08-04 9:16 ` Manohar Vanga
2011-08-01 10:20 ` [PATCH 3/8] staging: vme: make [alloc|free]_consistent bridge specific Manohar Vanga
2011-08-01 11:10 ` Dan Carpenter
2011-08-01 12:24 ` Manohar Vanga
2011-08-01 13:41 ` Martyn Welch
2011-08-01 13:40 ` Manohar Vanga
2011-08-01 14:00 ` Manohar Vanga
2011-08-01 14:05 ` Martyn Welch
2011-08-01 10:20 ` [PATCH 4/8] staging: vme: keep track of registered buses Manohar Vanga
2011-08-01 10:20 ` [PATCH 5/8] staging: vme: add functions for bridge module refcounting Manohar Vanga
2011-08-03 14:04 ` Martyn Welch
2011-08-03 14:06 ` Manohar Vanga
2011-08-03 15:23 ` Emilio G. Cota
2011-08-04 7:23 ` Martyn Welch
2011-08-04 16:34 ` Emilio G. Cota
2011-08-05 7:45 ` Martyn Welch
2011-08-05 9:04 ` Manohar Vanga
2011-08-05 9:24 ` Martyn Welch
2011-08-05 17:47 ` Emilio G. Cota
2011-08-08 8:01 ` Martyn Welch
2011-08-08 9:14 ` Emilio G. Cota
2011-08-08 9:42 ` Martyn Welch
[not found] ` <4E3FABDA.8080204@ge.com>
[not found] ` <20110808101140.GA21300@flamenco.cs.columbia.edu>
2011-08-08 11:06 ` Martyn Welch
2011-08-08 17:22 ` Emilio G. Cota
2011-08-08 18:04 ` Greg KH
2011-08-09 9:00 ` Martyn Welch [this message]
2011-08-09 19:19 ` Emilio G. Cota
2011-08-10 7:39 ` Martyn Welch
2011-08-10 9:15 ` Emilio G. Cota
2011-08-10 9:50 ` Martyn Welch
2011-08-10 18:35 ` Emilio G. Cota
2011-08-09 13:24 ` Manohar Vanga
2011-08-09 14:26 ` Martyn Welch
2011-08-09 14:35 ` Manohar Vanga
2011-08-09 15:05 ` Martyn Welch
2011-08-09 18:49 ` Emilio G. Cota
2011-08-10 6:52 ` Manohar Vanga
2011-08-01 10:20 ` [PATCH 6/8] staging: vme: rename *_slot_get to *_get_slot Manohar Vanga
2011-08-01 12:29 ` Martyn Welch
2011-08-01 12:31 ` Manohar Vanga
2011-08-09 15:18 ` Martyn Welch
2011-08-09 15:25 ` Greg KH
2011-08-09 15:32 ` Manohar Vanga
2011-08-01 10:20 ` [PATCH 7/8] staging: vme: add struct vme_dev for VME devices Manohar Vanga
2011-08-09 15:19 ` Martyn Welch
2011-08-01 10:20 ` [PATCH 8/8] staging: vme: make match() driver specific to improve non-VME64x support Manohar Vanga
2011-08-03 9:16 ` Martyn Welch
2011-08-03 12:18 ` Manohar Vanga
2011-08-01 14:29 ` [PATCH 0/8] VME Driver Fixes Martyn Welch
2011-08-01 14:32 ` Manohar Vanga
2011-08-23 22:07 ` Greg KH
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=4E40F719.1020100@ge.com \
--to=martyn.welch@ge.com \
--cc=cota@braap.org \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
/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.