From: Martyn Welch <martyn.welch@ge.com>
To: "Emilio G. Cota" <cota@braap.org>
Cc: Greg KH <greg@kroah.com>, LKML <linux-kernel@vger.kernel.org>,
devel@driverdev.osuosl.org,
Juan David Gonzalez Cobas <david.cobas@gmail.com>,
Bill Pemberton <wfp5p@virginia.edu>
Subject: Re: [PATCH 04/30] staging/vme: allow non-dynamic allocation of bus numbers
Date: Wed, 27 Oct 2010 10:41:18 +0100 [thread overview]
Message-ID: <4CC7F3BE.5090503@ge.com> (raw)
In-Reply-To: <1288055476-19438-5-git-send-email-cota@braap.org>
On 26/10/10 02:10, Emilio G. Cota wrote:
> From: Emilio G. Cota <cota@braap.org>
>
> In a configuration with several bridges, each bridge is
> assigned a certain bus number depending on the order in which
> vme_register_bridge is called. This can complicate multi-bridge
> installations because the eventual bus numbers will depend
> on the order the bridges were loaded.
>
> The appended allows bridges to register with a bus number of
> their choice, while keeping the previous 'first come, first
> served' behaviour as the default.
>
I can't see where this is being used. I assume this is a part of future
changes you wish to make?
Martyn
> Signed-off-by: Emilio G. Cota <cota@braap.org>
> ---
> drivers/staging/vme/bridges/vme_ca91cx42.c | 1 +
> drivers/staging/vme/bridges/vme_tsi148.c | 1 +
> drivers/staging/vme/vme.c | 46 +++++++++++++++++++++-------
> drivers/staging/vme/vme.h | 1 +
> 4 files changed, 38 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c
> index 1f2089f..14e10a6 100644
> --- a/drivers/staging/vme/bridges/vme_ca91cx42.c
> +++ b/drivers/staging/vme/bridges/vme_ca91cx42.c
> @@ -1600,6 +1600,7 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> }
>
> ca91cx42_bridge->driver_priv = ca91cx42_device;
> + ca91cx42_bridge->num = -1;
>
> /* Enable the device */
> retval = pci_enable_device(pdev);
> diff --git a/drivers/staging/vme/bridges/vme_tsi148.c b/drivers/staging/vme/bridges/vme_tsi148.c
> index 1cba1fa..e341122 100644
> --- a/drivers/staging/vme/bridges/vme_tsi148.c
> +++ b/drivers/staging/vme/bridges/vme_tsi148.c
> @@ -2247,6 +2247,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> }
>
> tsi148_bridge->driver_priv = tsi148_device;
> + tsi148_bridge->num = -1;
>
> /* Enable the device */
> retval = pci_enable_device(pdev);
> diff --git a/drivers/staging/vme/vme.c b/drivers/staging/vme/vme.c
> index 47e9d5c..9fa0609 100644
> --- a/drivers/staging/vme/vme.c
> +++ b/drivers/staging/vme/vme.c
> @@ -1307,20 +1307,42 @@ EXPORT_SYMBOL(vme_slot_get);
>
> /* - Bridge Registration --------------------------------------------------- */
>
> -static int vme_alloc_bus_num(void)
> +/* call with vme_bus_num_mtx held */
> +static int __vme_alloc_bus_num(int *bus)
> {
> - int i;
> -
> - mutex_lock(&vme_bus_num_mtx);
> - for (i = 0; i < sizeof(vme_bus_numbers) * 8; i++) {
> - if (((vme_bus_numbers >> i) & 0x1) == 0) {
> - vme_bus_numbers |= (0x1 << i);
> - break;
> + int index;
> +
> + if (*bus == -1) {
> + /* try to find a free bus number */
> + for (index = 0; index < VME_MAX_BRIDGES; index++) {
> + if (~vme_bus_numbers & 1 << index) {
> + *bus = index;
> + break;
> + }
> + }
> + if (index == VME_MAX_BRIDGES) {
> + pr_warn("vme: No bus numbers left\n");
> + return -ENODEV;
> + }
> + } else {
> + /* check if the given bus number is already in use */
> + if (vme_bus_numbers & (1 << *bus)) {
> + pr_warn("vme: bus number %d already in use\n", *bus);
> + return -EBUSY;
> }
> }
> - mutex_unlock(&vme_bus_num_mtx);
> + vme_bus_numbers |= 1 << *bus;
> + return 0;
> +}
> +
> +static int vme_alloc_bus_num(int *bus)
> +{
> + int ret;
>
> - return i;
> + mutex_lock(&vme_bus_num_mtx);
> + ret = __vme_alloc_bus_num(bus);
> + mutex_unlock(&vme_bus_num_mtx);
> + return ret;
> }
>
> static void vme_free_bus_num(int bus)
> @@ -1336,7 +1358,9 @@ int vme_register_bridge(struct vme_bridge *bridge)
> int retval;
> int i;
>
> - bridge->num = vme_alloc_bus_num();
> + retval = vme_alloc_bus_num(&bridge->num);
> + if (retval)
> + return retval;
>
> /* This creates 32 vme "slot" devices. This equates to a slot for each
> * ID available in a system conforming to the ANSI/VITA 1-1994
> diff --git a/drivers/staging/vme/vme.h b/drivers/staging/vme/vme.h
> index 48768ca..5cdfa52 100644
> --- a/drivers/staging/vme/vme.h
> +++ b/drivers/staging/vme/vme.h
> @@ -88,6 +88,7 @@ struct vme_resource {
>
> extern struct bus_type vme_bus_type;
>
> +#define VME_MAX_BRIDGES 32
> #define VME_SLOT_CURRENT -1
> #define VME_SLOT_ALL -2
>
--
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:[~2010-10-27 9:42 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-26 1:10 [re-send][-next] staging/vme: various fixes + new driver model for VME Emilio G. Cota
2010-10-26 1:10 ` [PATCH 01/30] staging/vme: style: convert '&(foo)' to '&foo' Emilio G. Cota
2010-10-27 9:17 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 02/30] staging/vme_user: return the appropriate error code when module_init fails Emilio G. Cota
2010-10-27 9:25 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 03/30] staging/vme_user: remove unreachable line Emilio G. Cota
2010-10-27 9:39 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 04/30] staging/vme: allow non-dynamic allocation of bus numbers Emilio G. Cota
2010-10-27 9:41 ` Martyn Welch [this message]
2010-10-27 15:13 ` Emilio G. Cota
2010-11-04 3:40 ` Emilio G. Cota
2010-11-05 16:29 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 05/30] staging/vme: fix bogus clearing of the bus number in vme_free_bus_num Emilio G. Cota
2010-10-27 9:49 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 06/30] staging/vme/tsi148: use list_for_each_safe when deleting resources in .remove Emilio G. Cota
2010-10-27 9:51 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 07/30] staging/vme/tsi148: remove double freeing of the IRQ " Emilio G. Cota
2010-10-27 10:01 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 08/30] staging/vme/tsi148: fix warning in free_irq Emilio G. Cota
2010-10-27 10:23 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 09/30] staging/vme: fill in struct device's .release, even if it's a NOOP Emilio G. Cota
2010-10-27 10:54 ` Martyn Welch
2010-10-27 14:46 ` Emilio G. Cota
2010-10-27 15:03 ` Martyn Welch
2010-10-27 15:15 ` Emilio G. Cota
2010-10-28 1:17 ` Greg KH
2010-10-28 6:07 ` Emilio G. Cota
2010-10-28 17:56 ` Greg KH
2010-11-12 11:13 ` [PATCH 00/17] Series short description Martyn Welch
2010-11-12 11:14 ` [PATCH 01/17] staging/vme: style: convert '&(foo)' to '&foo' Martyn Welch
2010-11-12 11:14 ` [PATCH 02/17] staging/vme_user: return the appropriate error code when module_init fails Martyn Welch
2010-11-12 11:14 ` [PATCH 03/17] staging/vme_user: remove unreachable line Martyn Welch
2010-11-12 11:14 ` [PATCH 04/17] staging/vme: fix bogus clearing of the bus number in vme_free_bus_num Martyn Welch
2010-11-12 11:14 ` [PATCH 05/17] staging/vme/tsi148: use list_for_each_safe when deleting resources in .remove Martyn Welch
2010-11-12 11:14 ` [PATCH 06/17] staging/vme/tsi148: remove double freeing of the IRQ " Martyn Welch
2010-11-12 11:14 ` [PATCH 07/17] staging/vme/tsi148: fix warning in free_irq Martyn Welch
2010-11-12 11:14 ` [PATCH 08/17] staging/vme/tsi148: remove unreachable line Martyn Welch
2010-11-12 11:15 ` [PATCH 09/17] staging/vme/tsi148: declare static functions as such Martyn Welch
2010-11-12 11:15 ` [PATCH 10/17] staging/vme/ca91cx42: " Martyn Welch
2010-11-12 11:15 ` [PATCH 11/17] staging/vme_user: declare private variables as static Martyn Welch
2010-11-12 11:15 ` [PATCH 12/17] staging/vme_user: use an unsigned int for counting the number of kparams Martyn Welch
2010-11-12 11:15 ` [PATCH 13/17] staging/vme_user: remove __iomem marking from kern_buf and derivates Martyn Welch
2010-11-12 11:15 ` [PATCH 14/17] staging/vme_user: mark user-space buffers with __user Martyn Welch
2010-11-12 11:15 ` [PATCH 15/17] staging/vme: mark struct vme_master_resource's base address pointer as __iomem Martyn Welch
2010-11-12 11:15 ` [PATCH 16/17] staging/vme/tsi148: mark the registers' " Martyn Welch
2010-11-12 11:15 ` [PATCH 17/17] staging/vme/ca91cx42: " Martyn Welch
2010-11-12 11:23 ` [PATCH 00/17] Series short description Martyn Welch
2010-11-12 15:11 ` Emilio G. Cota
2010-11-12 15:52 ` Martyn Welch
2010-11-16 19:40 ` Greg KH
2010-10-26 1:10 ` [PATCH 10/30] staging/vme/tsi148: remove unreachable line Emilio G. Cota
2010-10-27 11:06 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 11/30] staging/vme/tsi148: declare static functions as such Emilio G. Cota
2010-10-27 11:23 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 12/30] staging/vme/ca91cx42: " Emilio G. Cota
2010-10-27 11:24 ` Martyn Welch
2010-10-26 1:10 ` [PATCH 13/30] staging/vme_user: declare private variables as static Emilio G. Cota
2010-10-27 11:29 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 14/30] staging/vme_user: use an unsigned int for counting the number of kparams Emilio G. Cota
2010-10-27 11:29 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 15/30] staging/vme_user: remove __iomem marking from kern_buf and derivates Emilio G. Cota
2010-10-27 12:20 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 16/30] staging/vme_user: mark user-space buffers with __user Emilio G. Cota
2010-10-27 12:20 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 17/30] staging/vme: mark struct vme_master_resource's base address pointer as __iomem Emilio G. Cota
2010-10-27 12:20 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 18/30] staging/vme/tsi148: mark the registers' " Emilio G. Cota
2010-10-27 12:20 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 19/30] staging/vme/ca91cx42: " Emilio G. Cota
2010-10-27 12:20 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 20/30] staging/vme: trivial: rename vme_bus_num_mtx to vme_buses_lock Emilio G. Cota
2010-10-26 1:11 ` [PATCH 21/30] staging/vme: keep a list of registered buses (bridges) Emilio G. Cota
2010-10-26 1:11 ` [PATCH 22/30] staging/vme/vme_user: use __dev{init,exit} for .probe and .remove Emilio G. Cota
2010-12-03 13:44 ` [PATCH] staging/vme/vme_user: use __dev{init, exit} " Martyn Welch
2010-10-26 1:11 ` [PATCH 23/30] staging/vme_user: fix usage of the slave resources after they've been freed Emilio G. Cota
2010-12-03 9:05 ` [PATCH] " Martyn Welch
2010-10-26 1:11 ` [PATCH 24/30] staging/vme_user: remove unnecessary call to vme_slave_set Emilio G. Cota
2010-10-27 12:24 ` Martyn Welch
2010-10-27 14:59 ` Emilio G. Cota
2010-10-26 1:11 ` [PATCH 25/30] staging/vme_user: add missing calls to vme_master_free calls in .remove Emilio G. Cota
2010-12-03 14:20 ` [PATCH] " Martyn Welch
2010-12-03 14:44 ` Greg KH
2010-12-03 15:29 ` Martyn Welch
2010-10-26 1:11 ` [PATCH 26/30] staging/vme: move all contents of vme_bridge.h to vme.h 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
2010-10-26 1:11 ` [PATCH 28/30] staging/vme: convert vme_* users to vme_*_ng Emilio G. Cota
2010-10-26 1:11 ` [PATCH 29/30] staging/vme: remove unused vme_* functions and related code Emilio G. Cota
2010-10-26 1:11 ` [PATCH 30/30] staging/vme: remove _ng suffixes Emilio G. Cota
2010-11-09 23:12 ` [re-send][-next] staging/vme: various fixes + new driver model for VME Greg KH
-- strict thread matches above, loose matches on Subject: below --
2010-10-22 6:36 [-next] " Emilio G. Cota
2010-10-22 6:36 ` [PATCH 04/30] staging/vme: allow non-dynamic allocation of bus numbers 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=4CC7F3BE.5090503@ge.com \
--to=martyn.welch@ge.com \
--cc=cota@braap.org \
--cc=david.cobas@gmail.com \
--cc=devel@driverdev.osuosl.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=wfp5p@virginia.edu \
/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.