can: Fix SJA1000 command register writes on SMP systems
[safe/jmp/linux-2.6] / drivers / net / sunvnet.c
index 4a0035f..d281a7b 100644 (file)
@@ -1,6 +1,6 @@
 /* sunvnet.c: Sun LDOM Virtual Network Driver.
  *
- * Copyright (C) 2007 David S. Miller <davem@davemloft.net>
+ * Copyright (C) 2007, 2008 David S. Miller <davem@davemloft.net>
  */
 
 #include <linux/module.h>
@@ -336,7 +336,7 @@ static int vnet_walk_rx_one(struct vnet_port *port,
        if (IS_ERR(desc))
                return PTR_ERR(desc);
 
-       viodbg(DATA, "vio_walk_rx_one desc[%02x:%02x:%08x:%08x:%lx:%lx]\n",
+       viodbg(DATA, "vio_walk_rx_one desc[%02x:%02x:%08x:%08x:%llx:%llx]\n",
               desc->hdr.state, desc->hdr.ack,
               desc->size, desc->ncookies,
               desc->cookies[0].cookie_addr,
@@ -394,14 +394,14 @@ static int vnet_rx(struct vnet_port *port, void *msgbuf)
        struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_RX_RING];
        struct vio_driver_state *vio = &port->vio;
 
-       viodbg(DATA, "vnet_rx stype_env[%04x] seq[%016lx] rcv_nxt[%016lx]\n",
+       viodbg(DATA, "vnet_rx stype_env[%04x] seq[%016llx] rcv_nxt[%016llx]\n",
               pkt->tag.stype_env, pkt->seq, dr->rcv_nxt);
 
        if (unlikely(pkt->tag.stype_env != VIO_DRING_DATA))
                return 0;
        if (unlikely(pkt->seq != dr->rcv_nxt)) {
-               printk(KERN_ERR PFX "RX out of sequence seq[0x%lx] "
-                      "rcv_nxt[0x%lx]\n", pkt->seq, dr->rcv_nxt);
+               printk(KERN_ERR PFX "RX out of sequence seq[0x%llx] "
+                      "rcv_nxt[0x%llx]\n", pkt->seq, dr->rcv_nxt);
                return 0;
        }
 
@@ -717,7 +717,6 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        dev_kfree_skb(skb);
 
-       dev->trans_start = jiffies;
        return NETDEV_TX_OK;
 
 out_dropped_unlock:
@@ -763,12 +762,12 @@ static struct vnet_mcast_entry *__vnet_mc_find(struct vnet *vp, u8 *addr)
 
 static void __update_mc_list(struct vnet *vp, struct net_device *dev)
 {
-       struct dev_addr_list *p;
+       struct netdev_hw_addr *ha;
 
-       for (p = dev->mc_list; p; p = p->next) {
+       netdev_for_each_mc_addr(ha, dev) {
                struct vnet_mcast_entry *m;
 
-               m = __vnet_mc_find(vp, p->dmi_addr);
+               m = __vnet_mc_find(vp, ha->addr);
                if (m) {
                        m->hit = 1;
                        continue;
@@ -778,7 +777,7 @@ static void __update_mc_list(struct vnet *vp, struct net_device *dev)
                        m = kzalloc(sizeof(*m), GFP_ATOMIC);
                        if (!m)
                                continue;
-                       memcpy(m->addr, p->dmi_addr, ETH_ALEN);
+                       memcpy(m->addr, ha->addr, ETH_ALEN);
                        m->hit = 1;
 
                        m->next = vp->mcast_list;
@@ -1012,6 +1011,17 @@ err_out:
 static LIST_HEAD(vnet_list);
 static DEFINE_MUTEX(vnet_list_mutex);
 
+static const struct net_device_ops vnet_ops = {
+       .ndo_open               = vnet_open,
+       .ndo_stop               = vnet_close,
+       .ndo_set_multicast_list = vnet_set_rx_mode,
+       .ndo_set_mac_address    = vnet_set_mac_addr,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_tx_timeout         = vnet_tx_timeout,
+       .ndo_change_mtu         = vnet_change_mtu,
+       .ndo_start_xmit         = vnet_start_xmit,
+};
+
 static struct vnet * __devinit vnet_new(const u64 *local_mac)
 {
        struct net_device *dev;
@@ -1040,15 +1050,9 @@ static struct vnet * __devinit vnet_new(const u64 *local_mac)
        INIT_LIST_HEAD(&vp->list);
        vp->local_mac = *local_mac;
 
-       dev->open = vnet_open;
-       dev->stop = vnet_close;
-       dev->set_multicast_list = vnet_set_rx_mode;
-       dev->set_mac_address = vnet_set_mac_addr;
-       dev->tx_timeout = vnet_tx_timeout;
+       dev->netdev_ops = &vnet_ops;
        dev->ethtool_ops = &vnet_ethtool_ops;
        dev->watchdog_timeo = VNET_TX_TIMEOUT;
-       dev->change_mtu = vnet_change_mtu;
-       dev->hard_start_xmit = vnet_start_xmit;
 
        err = register_netdev(dev);
        if (err) {
@@ -1057,10 +1061,7 @@ static struct vnet * __devinit vnet_new(const u64 *local_mac)
                goto err_out_free_dev;
        }
 
-       printk(KERN_INFO "%s: Sun LDOM vnet ", dev->name);
-
-       for (i = 0; i < 6; i++)
-               printk("%2.2x%c", dev->dev_addr[i], i == 5 ? '\n' : ':');
+       printk(KERN_INFO "%s: Sun LDOM vnet %pM\n", dev->name, dev->dev_addr);
 
        list_add(&vp->list, &vnet_list);
 
@@ -1130,7 +1131,7 @@ static struct vio_driver_ops vnet_vio_ops = {
        .handshake_complete     = vnet_handshake_complete,
 };
 
-static void print_version(void)
+static void __devinit print_version(void)
 {
        static int version_printed;
 
@@ -1149,7 +1150,6 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
        struct vnet *vp;
        const u64 *rmac;
        int len, i, err, switch_port;
-       DECLARE_MAC_BUF(mac);
 
        print_version();
 
@@ -1214,8 +1214,8 @@ static int __devinit vnet_port_probe(struct vio_dev *vdev,
 
        dev_set_drvdata(&vdev->dev, port);
 
-       printk(KERN_INFO "%s: PORT ( remote-mac %s%s )\n",
-              vp->dev->name, print_mac(mac, port->raddr),
+       printk(KERN_INFO "%s: PORT ( remote-mac %pM%s )\n",
+              vp->dev->name, port->raddr,
               switch_port ? " switch-port" : "");
 
        vio_port_up(&port->vio);
@@ -1260,7 +1260,7 @@ static int vnet_port_remove(struct vio_dev *vdev)
        return 0;
 }
 
-static struct vio_device_id vnet_port_match[] = {
+static const struct vio_device_id vnet_port_match[] = {
        {
                .type = "vnet-port",
        },