From: "Emilio G. Cota" <cota@braap.org>
To: Martyn Welch <martyn.welch@ge.com>
Cc: Greg KH <greg@kroah.com>, LKML <linux-kernel@vger.kernel.org>,
Juan David Gonzalez Cobas <david.cobas@gmail.com>
Subject: Re: [PATCH 27/30] staging/vme: rework the bus model
Date: Sat, 23 Oct 2010 00:27:22 +0100 [thread overview]
Message-ID: <20101022232707.GA1370@braap.org> (raw)
In-Reply-To: <1287729412-24356-28-git-send-email-cota@braap.org>
On Fri, Oct 22, 2010 at 10:26:11 +0100, Martyn Welch wrote:
> Hi Emilio,
>
> Thank you for the fixes. After a quick glance, there seem to be a number
> of valid fixes here, but I'm very concerned by the patches that change
> the driver model. We discussed this approach in August last year, I am
> still yet to be convinced by the approach you wish to take.
(snip)
> As I've said above - I am still not convinced by the change in approach.
I'd like to know what exactly doesn't convince you.
Let's re-visit the commit message:
Emilio G. Cota wrote:
> From: Emilio G. Cota <cota@braap.org>
>
> The way in which VME devices and drivers are currently bound together
> involves unnecessary contortions. Controlling a device with a VME driver
> requires the following steps, in this order:
>
> - installing the VME core, eg insmod vme.ko
> - installing the VME boards' drivers, where the devices to be controlled
> are passed to the VME core through the so-called bind tables. Note that
> these modules are hooking stuff onto the VME core while the bridge driver
> that provides the bus they'll to attach hasn't yet been loaded.
> - insmod of the VME bridge driver. 32 devices (called slots) are _always_
> created, and then the bus's .match method is called for each of them.
> This works because the boards' drivers have already hooked stuff onto
> the VME core (see previous step.)
>
> There are a few things I dislike about the above:
>
> * installing drivers even before the bridges they need are present
> seems counter-intuitive and wrong.
> * a VME bus may need more than 32 devices--the relation to the 32 slots on
> a VME crate is artificial and confusing:
> * Some VME cards may be best treated in the kernel as several
> independent devices, and therefore it is pointless to limit the
> number of devices on the bus.
> * In VME jargon, a slot is a physical place where hardware is sitting,
> and is clearly out of the kernel's control. Users may thus have a
> misleading impression of 'this is what's on slot X', and then go
> to the crate and see that slot X is empty.
> * .probe and .remove pass a pointer to a struct device representing a VME
> bridge, instead of representing the device to be added/removed.
> * a bridge's module may be removed anytime and things do fall over;
> there is no refcounting at all and thus all drivers attached to
> the removed bus will oops.
> * the so-called "bind table" is tricky, unnecessary and boring code that just
> duplicates what modparam's arrays do.
Do we first agree on the shortcomings mentioned above?
Because if we don't, then there's no point in discussing alternatives.
This is what the patch does:
> The appended implements a new driver model for VME that is free of the
> shortcomings described above.
>
> In short, a VME driver calls vme_register_driver, which takes the number of
> devices to be matched as a parameter, say n. Then the driver's .match method
> is called n times for each bus registered on the VME core. That is,
> if there are m VME buses registered, m * n devices are created and passed
> to .match. Devices that do match are probed, while devices that don't match
> are removed. The only difference between this and what happens in most
> buses is that here .match is passed down from the bus to the drivers, which
> in VME are the only ones that can tell whether or not a particular device is
> present.
>
> A VME device is thus uniquely identified by the triplet
> (driver_name,bus_id,dev_id), formatted as '$driver_name-$bus_id.$dev_id'.
>
> The VME bus has no auto-discovery capabilities, an illness which the ISA
> bus also suffers from. Not surprisingly then, most of the appended code has
> been adapted from drivers/base/isa.c, added to the kernel in a5117ba7da. For
> further explanations please read that a5117ba7da's commit message. The major
> difference here is that several VME buses can coexist whereas in ISA only
> a single bus is supported.
The key here is to realise that .match is passed down to the drivers.
This way drivers don't need to do contortions like the bind table
and things flow naturally--e.g. when a bridge is installed, vme
drivers can be installed/uninstalled on top of it, not the other
way around.
This is not my idea; I took it from ISA, where they had the same problem.
The code is there, it works, and aligns the VME driver model closer with
that of other buses supported by the kernel.
Again, please let me know the precise source of your concerns.
Thanks
Emilio
next prev parent reply other threads:[~2010-10-22 23:27 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-22 6:36 [-next] staging/vme: various fixes + new driver model for VME Emilio G. Cota
2010-10-22 6:36 ` [PATCH 01/30] staging/vme: style: convert '&(foo)' to '&foo' Emilio G. Cota
2010-10-22 6:36 ` [PATCH 02/30] staging/vme_user: return the appropriate error code when module_init fails Emilio G. Cota
2010-10-22 6:36 ` [PATCH 03/30] staging/vme_user: remove unreachable line Emilio G. Cota
2010-10-22 6:36 ` [PATCH 04/30] staging/vme: allow non-dynamic allocation of bus numbers Emilio G. Cota
2010-10-22 6:36 ` [PATCH 05/30] staging/vme: fix bogus clearing of the bus number in vme_free_bus_num Emilio G. Cota
2010-10-22 6:36 ` [PATCH 06/30] staging/vme/tsi148: use list_for_each_safe when deleting resources in .remove Emilio G. Cota
2010-10-22 6:36 ` [PATCH 07/30] staging/vme/tsi148: remove double freeing of the IRQ " Emilio G. Cota
2010-10-22 6:36 ` [PATCH 08/30] staging/vme/tsi148: fix warning in free_irq Emilio G. Cota
2010-10-22 6:36 ` [PATCH 09/30] staging/vme: fill in struct device's .release, even if it's a NOOP Emilio G. Cota
2010-10-22 6:36 ` [PATCH 10/30] staging/vme/tsi148: remove unreachable line Emilio G. Cota
2010-10-22 6:36 ` [PATCH 11/30] staging/vme/tsi148: declare static functions as such Emilio G. Cota
2010-10-22 6:36 ` [PATCH 12/30] staging/vme/ca91cx42: " Emilio G. Cota
2010-10-22 6:36 ` [PATCH 13/30] staging/vme_user: declare private variables as static Emilio G. Cota
2010-10-22 6:36 ` [PATCH 14/30] staging/vme_user: use an unsigned int for counting the number of kparams Emilio G. Cota
2010-10-22 6:36 ` [PATCH 15/30] staging/vme_user: remove __iomem marking from kern_buf and derivates Emilio G. Cota
2010-10-22 6:36 ` [PATCH 16/30] staging/vme_user: mark user-space buffers with __user Emilio G. Cota
2010-10-22 6:36 ` [PATCH 17/30] staging/vme: mark struct vme_master_resource's base address pointer as __iomem Emilio G. Cota
2010-10-22 6:36 ` [PATCH 18/30] staging/vme/tsi148: mark the registers' " Emilio G. Cota
2010-10-22 6:36 ` [PATCH 19/30] staging/vme/ca91cx42: " Emilio G. Cota
2010-10-22 6:36 ` [PATCH 20/30] staging/vme: trivial: rename vme_bus_num_mtx to vme_buses_lock Emilio G. Cota
2010-10-22 6:36 ` [PATCH 21/30] staging/vme: keep a list of registered buses (bridges) Emilio G. Cota
2010-10-22 6:36 ` [PATCH 22/30] staging/vme/vme_user: use __dev{init,exit} for .probe and .remove Emilio G. Cota
2010-10-22 6:36 ` [PATCH 23/30] staging/vme_user: fix usage of the slave resources after they've been freed Emilio G. Cota
2010-10-22 6:36 ` [PATCH 24/30] staging/vme_user: remove unnecessary call to vme_slave_set Emilio G. Cota
2010-10-22 6:36 ` [PATCH 25/30] staging/vme_user: add missing calls to vme_master_free calls in .remove Emilio G. Cota
2010-10-22 6:36 ` [PATCH 26/30] staging/vme: move all contents of vme_bridge.h to vme.h Emilio G. Cota
2010-10-22 6:36 ` [PATCH 27/30] staging/vme: rework the bus model Emilio G. Cota
2010-10-22 23:27 ` Emilio G. Cota [this message]
2010-10-25 11:24 ` Martyn Welch
2010-10-26 1:02 ` Emilio G. Cota
2010-10-27 9:16 ` Martyn Welch
2010-10-27 15:40 ` Emilio G. Cota
2010-10-22 6:36 ` [PATCH 28/30] staging/vme: convert vme_* users to vme_*_ng Emilio G. Cota
2010-10-22 6:36 ` [PATCH 29/30] staging/vme: remove unused vme_* functions and related code Emilio G. Cota
2010-10-22 6:36 ` [PATCH 30/30] staging/vme: remove _ng suffixes Emilio G. Cota
2010-10-22 9:26 ` [-next] staging/vme: various fixes + new driver model for VME Martyn Welch
2010-10-22 23:03 ` Emilio G. Cota
2010-10-22 10:08 ` Martyn Welch
2010-10-22 23:04 ` Emilio G. Cota
2010-10-22 13:56 ` Greg KH
2010-10-22 22:56 ` Emilio G. Cota
-- strict thread matches above, loose matches on Subject: below --
2010-10-26 1:10 [re-send][-next] " Emilio G. Cota
2010-10-26 1:11 ` [PATCH 27/30] staging/vme: rework the bus model Emilio G. Cota
2010-11-04 4:16 ` Emilio G. Cota
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=20101022232707.GA1370@braap.org \
--to=cota@braap.org \
--cc=david.cobas@gmail.com \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=martyn.welch@ge.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