aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sunvnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sunvnet.c')
-rw-r--r--drivers/net/sunvnet.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/drivers/net/sunvnet.c b/drivers/net/sunvnet.c
index d764e4ccba56..8a667c13faef 100644
--- a/drivers/net/sunvnet.c
+++ b/drivers/net/sunvnet.c
@@ -892,7 +892,7 @@ const char *remote_macaddr_prop = "remote-mac-address";
892static int __devinit vnet_port_probe(struct vio_dev *vdev, 892static int __devinit vnet_port_probe(struct vio_dev *vdev,
893 const struct vio_device_id *id) 893 const struct vio_device_id *id)
894{ 894{
895 struct mdesc_node *endp; 895 struct mdesc_handle *hp;
896 struct vnet_port *port; 896 struct vnet_port *port;
897 unsigned long flags; 897 unsigned long flags;
898 struct vnet *vp; 898 struct vnet *vp;
@@ -905,23 +905,21 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
905 return -ENODEV; 905 return -ENODEV;
906 } 906 }
907 907
908 rmac = md_get_property(vdev->mp, remote_macaddr_prop, &len); 908 hp = mdesc_grab();
909
910 rmac = mdesc_get_property(hp, vdev->mp, remote_macaddr_prop, &len);
911 err = -ENODEV;
909 if (!rmac) { 912 if (!rmac) {
910 printk(KERN_ERR PFX "Port lacks %s property.\n", 913 printk(KERN_ERR PFX "Port lacks %s property.\n",
911 remote_macaddr_prop); 914 remote_macaddr_prop);
912 return -ENODEV; 915 goto err_out_put_mdesc;
913 }
914
915 endp = vio_find_endpoint(vdev);
916 if (!endp) {
917 printk(KERN_ERR PFX "Port lacks channel-endpoint.\n");
918 return -ENODEV;
919 } 916 }
920 917
921 port = kzalloc(sizeof(*port), GFP_KERNEL); 918 port = kzalloc(sizeof(*port), GFP_KERNEL);
919 err = -ENOMEM;
922 if (!port) { 920 if (!port) {
923 printk(KERN_ERR PFX "Cannot allocate vnet_port.\n"); 921 printk(KERN_ERR PFX "Cannot allocate vnet_port.\n");
924 return -ENOMEM; 922 goto err_out_put_mdesc;
925 } 923 }
926 924
927 for (i = 0; i < ETH_ALEN; i++) 925 for (i = 0; i < ETH_ALEN; i++)
@@ -929,7 +927,7 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
929 927
930 port->vp = vp; 928 port->vp = vp;
931 929
932 err = vio_driver_init(&port->vio, vdev, VDEV_NETWORK, endp, 930 err = vio_driver_init(&port->vio, vdev, VDEV_NETWORK,
933 vnet_versions, ARRAY_SIZE(vnet_versions), 931 vnet_versions, ARRAY_SIZE(vnet_versions),
934 &vnet_vio_ops, vp->dev->name); 932 &vnet_vio_ops, vp->dev->name);
935 if (err) 933 if (err)
@@ -947,7 +945,7 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
947 INIT_LIST_HEAD(&port->list); 945 INIT_LIST_HEAD(&port->list);
948 946
949 switch_port = 0; 947 switch_port = 0;
950 if (md_get_property(vdev->mp, "switch-port", NULL) != NULL) 948 if (mdesc_get_property(hp, vdev->mp, "switch-port", NULL) != NULL)
951 switch_port = 1; 949 switch_port = 1;
952 950
953 spin_lock_irqsave(&vp->lock, flags); 951 spin_lock_irqsave(&vp->lock, flags);
@@ -969,6 +967,8 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
969 967
970 vio_port_up(&port->vio); 968 vio_port_up(&port->vio);
971 969
970 mdesc_release(hp);
971
972 return 0; 972 return 0;
973 973
974err_out_free_ldc: 974err_out_free_ldc:
@@ -977,6 +977,8 @@ err_out_free_ldc:
977err_out_free_port: 977err_out_free_port:
978 kfree(port); 978 kfree(port);
979 979
980err_out_put_mdesc:
981 mdesc_release(hp);
980 return err; 982 return err;
981} 983}
982 984
@@ -1029,6 +1031,7 @@ static int __devinit vnet_probe(struct vio_dev *vdev,
1029 const struct vio_device_id *id) 1031 const struct vio_device_id *id)
1030{ 1032{
1031 static int vnet_version_printed; 1033 static int vnet_version_printed;
1034 struct mdesc_handle *hp;
1032 struct net_device *dev; 1035 struct net_device *dev;
1033 struct vnet *vp; 1036 struct vnet *vp;
1034 const u64 *mac; 1037 const u64 *mac;
@@ -1037,7 +1040,9 @@ static int __devinit vnet_probe(struct vio_dev *vdev,
1037 if (vnet_version_printed++ == 0) 1040 if (vnet_version_printed++ == 0)
1038 printk(KERN_INFO "%s", version); 1041 printk(KERN_INFO "%s", version);
1039 1042
1040 mac = md_get_property(vdev->mp, local_mac_prop, &len); 1043 hp = mdesc_grab();
1044
1045 mac = mdesc_get_property(hp, vdev->mp, local_mac_prop, &len);
1041 if (!mac) { 1046 if (!mac) {
1042 printk(KERN_ERR PFX "vnet lacks %s property.\n", 1047 printk(KERN_ERR PFX "vnet lacks %s property.\n",
1043 local_mac_prop); 1048 local_mac_prop);
@@ -1093,12 +1098,15 @@ static int __devinit vnet_probe(struct vio_dev *vdev,
1093 1098
1094 dev_set_drvdata(&vdev->dev, vp); 1099 dev_set_drvdata(&vdev->dev, vp);
1095 1100
1101 mdesc_release(hp);
1102
1096 return 0; 1103 return 0;
1097 1104
1098err_out_free_dev: 1105err_out_free_dev:
1099 free_netdev(dev); 1106 free_netdev(dev);
1100 1107
1101err_out: 1108err_out:
1109 mdesc_release(hp);
1102 return err; 1110 return err;
1103} 1111}
1104 1112