From: Martyn Welch <martyn.welch@ge.com>
To: Manohar Vanga <manohar.vanga@cern.ch>
Cc: gregkh@suse.de, cota@braap.org, devel@driverdev.osuosl.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/5] staging: vme: keep track of registered buses
Date: Tue, 16 Aug 2011 09:16:40 +0100 [thread overview]
Message-ID: <4E4A2768.7090503@ge.com> (raw)
In-Reply-To: <1313145051-13397-3-git-send-email-manohar.vanga@cern.ch>
On 12/08/11 11:30, Manohar Vanga wrote:
> This patch adds a list which keeps track of all registered VME
> buses. This is required for adding refcounting later to bridge
> modules, something that is not currently implemented.
>
> This is based on the changes introduced by Emilio G. Cota in the
> patch:
>
> https://lkml.org/lkml/2010/10/25/486
>
> Signed-off-by: Manohar Vanga <manohar.vanga@cern.ch>
Acked-by: Martyn Welch <martyn.welch@ge.com>
> ---
> drivers/staging/vme/vme.c | 38 +++++++++++++++++++++++---------------
> drivers/staging/vme/vme_bridge.h | 1 +
> 2 files changed, 24 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/staging/vme/vme.c b/drivers/staging/vme/vme.c
> index d243a4a..feb2d00 100644
> --- a/drivers/staging/vme/vme.c
> +++ b/drivers/staging/vme/vme.c
> @@ -34,9 +34,10 @@
> #include "vme.h"
> #include "vme_bridge.h"
>
> -/* Bitmask and mutex to keep track of bridge numbers */
> +/* Bitmask and list of registered buses both protected by common mutex */
> static unsigned int vme_bus_numbers;
> -static DEFINE_MUTEX(vme_bus_num_mtx);
> +static LIST_HEAD(vme_bus_list);
> +static DEFINE_MUTEX(vme_buses_lock);
>
> static void __exit vme_exit(void);
> static int __init vme_init(void);
> @@ -1309,27 +1310,32 @@ EXPORT_SYMBOL(vme_slot_get);
>
> /* - Bridge Registration --------------------------------------------------- */
>
> -static int vme_alloc_bus_num(void)
> +static int vme_add_bus(struct vme_bridge *bridge)
> {
> int i;
> + int ret = -1;
>
> - mutex_lock(&vme_bus_num_mtx);
> + mutex_lock(&vme_buses_lock);
> for (i = 0; i < sizeof(vme_bus_numbers) * 8; i++) {
> - if (((vme_bus_numbers >> i) & 0x1) == 0) {
> - vme_bus_numbers |= (0x1 << i);
> + if ((vme_bus_numbers & (1 << i)) == 0) {
> + vme_bus_numbers |= (1 << i);
> + bridge->num = i;
> + list_add_tail(&bridge->bus_list, &vme_bus_list);
> + ret = 0;
> break;
> }
> }
> - mutex_unlock(&vme_bus_num_mtx);
> + mutex_unlock(&vme_buses_lock);
>
> - return i;
> + return ret;
> }
>
> -static void vme_free_bus_num(int bus)
> +static void vme_remove_bus(struct vme_bridge *bridge)
> {
> - mutex_lock(&vme_bus_num_mtx);
> - vme_bus_numbers &= ~(0x1 << bus);
> - mutex_unlock(&vme_bus_num_mtx);
> + mutex_lock(&vme_buses_lock);
> + vme_bus_numbers &= ~(1 << bridge->num);
> + list_del(&bridge->bus_list);
> + mutex_unlock(&vme_buses_lock);
> }
>
> int vme_register_bridge(struct vme_bridge *bridge)
> @@ -1338,7 +1344,9 @@ int vme_register_bridge(struct vme_bridge *bridge)
> int retval;
> int i;
>
> - bridge->num = vme_alloc_bus_num();
> + retval = vme_add_bus(bridge);
> + 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
> @@ -1370,7 +1378,7 @@ err_reg:
> dev = &bridge->dev[i];
> device_unregister(dev);
> }
> - vme_free_bus_num(bridge->num);
> + vme_remove_bus(bridge);
> return retval;
> }
> EXPORT_SYMBOL(vme_register_bridge);
> @@ -1385,7 +1393,7 @@ void vme_unregister_bridge(struct vme_bridge *bridge)
> dev = &bridge->dev[i];
> device_unregister(dev);
> }
> - vme_free_bus_num(bridge->num);
> + vme_remove_bus(bridge);
> }
> EXPORT_SYMBOL(vme_unregister_bridge);
>
> diff --git a/drivers/staging/vme/vme_bridge.h b/drivers/staging/vme/vme_bridge.h
> index a9084f0..8959670 100644
> --- a/drivers/staging/vme/vme_bridge.h
> +++ b/drivers/staging/vme/vme_bridge.h
> @@ -112,6 +112,7 @@ struct vme_bridge {
> /* Bridge Info - XXX Move to private structure? */
> struct device *parent; /* Parent device (eg. pdev->dev for PCI) */
> void *driver_priv; /* Private pointer for the bridge driver */
> + struct list_head bus_list; /* list of VME buses */
>
> struct device dev[VME_SLOTS_MAX]; /* Device registered with
> * device model on VME bus
--
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-16 8:16 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-12 10:30 [PATCH 0/5] [RESEND v2] VME Framework Fixes Manohar Vanga
2011-08-12 10:30 ` [PATCH 1/5] staging: vme: make [alloc|free]_consistent bridge specific Manohar Vanga
2011-08-16 8:15 ` Martyn Welch
2011-08-12 10:30 ` [PATCH 2/5] staging: vme: keep track of registered buses Manohar Vanga
2011-08-16 8:16 ` Martyn Welch [this message]
2011-08-12 10:30 ` [PATCH 3/5] staging: vme: add functions for bridge module refcounting Manohar Vanga
2011-08-13 7:47 ` Emilio G. Cota
2011-08-15 10:05 ` Manohar Vanga
2011-08-15 18:49 ` Emilio G. Cota
2011-08-22 12:24 ` Martyn Welch
2011-08-23 9:09 ` Manohar Vanga
2011-08-13 8:54 ` Emilio G. Cota
2011-08-19 8:32 ` Martyn Welch
2011-08-19 8:42 ` Martyn Welch
2011-08-12 10:30 ` [PATCH 4/5] staging: vme: add struct vme_dev for VME devices Manohar Vanga
2011-08-12 10:30 ` [PATCH 5/5] staging: vme: make match() driver specific to improve non-VME64x support Manohar Vanga
2011-08-13 8:50 ` Emilio G. Cota
2011-08-23 22:14 ` [PATCH 0/5] [RESEND v2] VME Framework Fixes Greg KH
2011-08-24 7:40 ` Martyn Welch
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=4E4A2768.7090503@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 \
--cc=manohar.vanga@cern.ch \
/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.