summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/sunvdc.c24
-rw-r--r--drivers/net/sunvnet.c34
2 files changed, 34 insertions, 24 deletions
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
index 8dbbeac..0f5e3ca 100644
--- a/drivers/block/sunvdc.c
+++ b/drivers/block/sunvdc.c
@@ -750,7 +750,7 @@ static struct vio_driver_ops vdc_vio_ops = {
static int __devinit vdc_port_probe(struct vio_dev *vdev,
const struct vio_device_id *id)
{
- struct mdesc_node *endp;
+ struct mdesc_handle *hp;
struct vdc_port *port;
unsigned long flags;
struct vdc *vp;
@@ -763,26 +763,24 @@ static int __devinit vdc_port_probe(struct vio_dev *vdev,
return -ENODEV;
}
- endp = vio_find_endpoint(vdev);
- if (!endp) {
- printk(KERN_ERR PFX "Port lacks channel-endpoint.\n");
- return -ENODEV;
- }
+ hp = mdesc_grab();
- port_id = md_get_property(vdev->mp, "id", NULL);
+ port_id = mdesc_get_property(hp, vdev->mp, "id", NULL);
+ err = -ENODEV;
if (!port_id) {
printk(KERN_ERR PFX "Port lacks id property.\n");
- return -ENODEV;
+ goto err_out_release_mdesc;
}
if ((*port_id << PARTITION_SHIFT) & ~(u64)MINORMASK) {
printk(KERN_ERR PFX "Port id [%lu] too large.\n", *port_id);
- return -ENODEV;
+ goto err_out_release_mdesc;
}
port = kzalloc(sizeof(*port), GFP_KERNEL);
+ err = -ENOMEM;
if (!port) {
printk(KERN_ERR PFX "Cannot allocate vdc_port.\n");
- return -ENOMEM;
+ goto err_out_release_mdesc;
}
port->vp = vp;
@@ -797,7 +795,7 @@ static int __devinit vdc_port_probe(struct vio_dev *vdev,
snprintf(port->disk_name, sizeof(port->disk_name),
VDCBLK_NAME "%c", 'a' + (port->dev_no % 26));
- err = vio_driver_init(&port->vio, vdev, VDEV_DISK, endp,
+ err = vio_driver_init(&port->vio, vdev, VDEV_DISK,
vdc_versions, ARRAY_SIZE(vdc_versions),
&vdc_vio_ops, port->disk_name);
if (err)
@@ -828,6 +826,8 @@ static int __devinit vdc_port_probe(struct vio_dev *vdev,
dev_set_drvdata(&vdev->dev, port);
+ mdesc_release(hp);
+
return 0;
err_out_free_tx_ring:
@@ -839,6 +839,8 @@ err_out_free_ldc:
err_out_free_port:
kfree(port);
+err_out_release_mdesc:
+ mdesc_release(hp);
return err;
}
diff --git a/drivers/net/sunvnet.c b/drivers/net/sunvnet.c
index d764e4c..8a667c1 100644
--- a/drivers/net/sunvnet.c
+++ b/drivers/net/sunvnet.c
@@ -892,7 +892,7 @@ const char *remote_macaddr_prop = "remote-mac-address";
static int __devinit vnet_port_probe(struct vio_dev *vdev,
const struct vio_device_id *id)
{
- struct mdesc_node *endp;
+ struct mdesc_handle *hp;
struct vnet_port *port;
unsigned long flags;
struct vnet *vp;
@@ -905,23 +905,21 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
return -ENODEV;
}
- rmac = md_get_property(vdev->mp, remote_macaddr_prop, &len);
+ hp = mdesc_grab();
+
+ rmac = mdesc_get_property(hp, vdev->mp, remote_macaddr_prop, &len);
+ err = -ENODEV;
if (!rmac) {
printk(KERN_ERR PFX "Port lacks %s property.\n",
remote_macaddr_prop);
- return -ENODEV;
- }
-
- endp = vio_find_endpoint(vdev);
- if (!endp) {
- printk(KERN_ERR PFX "Port lacks channel-endpoint.\n");
- return -ENODEV;
+ goto err_out_put_mdesc;
}
port = kzalloc(sizeof(*port), GFP_KERNEL);
+ err = -ENOMEM;
if (!port) {
printk(KERN_ERR PFX "Cannot allocate vnet_port.\n");
- return -ENOMEM;
+ goto err_out_put_mdesc;
}
for (i = 0; i < ETH_ALEN; i++)
@@ -929,7 +927,7 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
port->vp = vp;
- err = vio_driver_init(&port->vio, vdev, VDEV_NETWORK, endp,
+ err = vio_driver_init(&port->vio, vdev, VDEV_NETWORK,
vnet_versions, ARRAY_SIZE(vnet_versions),
&vnet_vio_ops, vp->dev->name);
if (err)
@@ -947,7 +945,7 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
INIT_LIST_HEAD(&port->list);
switch_port = 0;
- if (md_get_property(vdev->mp, "switch-port", NULL) != NULL)
+ if (mdesc_get_property(hp, vdev->mp, "switch-port", NULL) != NULL)
switch_port = 1;
spin_lock_irqsave(&vp->lock, flags);
@@ -969,6 +967,8 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
vio_port_up(&port->vio);
+ mdesc_release(hp);
+
return 0;
err_out_free_ldc:
@@ -977,6 +977,8 @@ err_out_free_ldc:
err_out_free_port:
kfree(port);
+err_out_put_mdesc:
+ mdesc_release(hp);
return err;
}
@@ -1029,6 +1031,7 @@ static int __devinit vnet_probe(struct vio_dev *vdev,
const struct vio_device_id *id)
{
static int vnet_version_printed;
+ struct mdesc_handle *hp;
struct net_device *dev;
struct vnet *vp;
const u64 *mac;
@@ -1037,7 +1040,9 @@ static int __devinit vnet_probe(struct vio_dev *vdev,
if (vnet_version_printed++ == 0)
printk(KERN_INFO "%s", version);
- mac = md_get_property(vdev->mp, local_mac_prop, &len);
+ hp = mdesc_grab();
+
+ mac = mdesc_get_property(hp, vdev->mp, local_mac_prop, &len);
if (!mac) {
printk(KERN_ERR PFX "vnet lacks %s property.\n",
local_mac_prop);
@@ -1093,12 +1098,15 @@ static int __devinit vnet_probe(struct vio_dev *vdev,
dev_set_drvdata(&vdev->dev, vp);
+ mdesc_release(hp);
+
return 0;
err_out_free_dev:
free_netdev(dev);
err_out:
+ mdesc_release(hp);
return err;
}
OpenPOWER on IntegriCloud