staging: vme: change static device array to pointers

Change the static array of 'struct device''s in struct vme_bridge
to instead use an array of pointers. This is in accordance with the
requirement that all kobjects be dynamically allocated (see
Documentation/kobject.txt) and never be statically allocated.

Signed-off-by: Manohar Vanga <manohar.vanga@cern.ch>
Acked-by: Martyn Welch <martyn.welch@ge.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Manohar Vanga 2011-09-01 11:15:24 +02:00 committed by Greg Kroah-Hartman
parent 2192e60654
commit f6c39d4f2d
2 changed files with 18 additions and 5 deletions

View file

@ -1338,6 +1338,11 @@ static void vme_remove_bus(struct vme_bridge *bridge)
mutex_unlock(&vme_buses_lock);
}
static void vme_dev_release(struct device *dev)
{
kfree(dev);
}
int vme_register_bridge(struct vme_bridge *bridge)
{
struct device *dev;
@ -1353,11 +1358,17 @@ int vme_register_bridge(struct vme_bridge *bridge)
* specification.
*/
for (i = 0; i < VME_SLOTS_MAX; i++) {
dev = &bridge->dev[i];
bridge->dev[i] = kzalloc(sizeof(struct device), GFP_KERNEL);
if (!bridge->dev[i]) {
retval = -ENOMEM;
goto err_devalloc;
}
dev = bridge->dev[i];
memset(dev, 0, sizeof(struct device));
dev->parent = bridge->parent;
dev->bus = &vme_bus_type;
dev->release = vme_dev_release;
/*
* We save a pointer to the bridge in platform_data so that we
* can get to it later. We keep driver_data for use by the
@ -1374,8 +1385,10 @@ int vme_register_bridge(struct vme_bridge *bridge)
return retval;
err_reg:
kfree(dev);
err_devalloc:
while (--i >= 0) {
dev = &bridge->dev[i];
dev = bridge->dev[i];
device_unregister(dev);
}
vme_remove_bus(bridge);
@ -1390,7 +1403,7 @@ void vme_unregister_bridge(struct vme_bridge *bridge)
for (i = 0; i < VME_SLOTS_MAX; i++) {
dev = &bridge->dev[i];
dev = bridge->dev[i];
device_unregister(dev);
}
vme_remove_bus(bridge);
@ -1427,7 +1440,7 @@ static int vme_calc_slot(struct device *dev)
/* Determine slot number */
num = 0;
while (num < VME_SLOTS_MAX) {
if (&bridge->dev[num] == dev)
if (bridge->dev[num] == dev)
break;
num++;

View file

@ -114,7 +114,7 @@ struct vme_bridge {
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
struct device *dev[VME_SLOTS_MAX]; /* Device registered with
* device model on VME bus
*/