arcnet_outb(0x00, ioaddr, COM20020_REG_W_COMMAND);
                arcnet_inb(ioaddr, COM20020_REG_R_DIAGSTAT);
  
+               SET_NETDEV_DEV(dev, &pdev->dev);
                dev->base_addr = ioaddr;
                dev->dev_addr[0] = node;
 +              dev->sysfs_groups[0] = &com20020_state_group;
                dev->irq = pdev->irq;
                lp->card_name = "PCI COM20020";
                lp->card_flags = ci->flags;
                lp->timeout = timeout;
                lp->hw.owner = THIS_MODULE;
  
 +              lp->backplane = (inb(priv->misc) >> (2 + i)) & 0x1;
 +
 +              if (!strncmp(ci->name, "EAE PLX-PCI FB2", 15))
 +                      lp->backplane = 1;
 +
                /* Get the dev_id from the PLX rotary coder */
                if (!strncmp(ci->name, "EAE PLX-PCI MA1", 15))
-                       dev->dev_id = 0xc;
-               dev->dev_id ^= inb(priv->misc + ci->rotary) >> 4;
+                       dev_id_mask = 0x3;
+               dev->dev_id = (inb(priv->misc + ci->rotary) >> 4) & dev_id_mask;
  
                snprintf(dev->name, sizeof(dev->name), "arc%d-%d", dev->dev_id, i);
  
 
                                        unsigned long event)
  {
        struct net_device *real_dev = vlan_dev_real_dev(vlan_dev);
 -      struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(vlan_dev);
        u16 vid = vlan_dev_vlan_id(vlan_dev);
  
+       if (netif_is_bridge_port(vlan_dev))
+               return 0;
+ 
        if (mlxsw_sp_port_dev_check(real_dev))
 -              return mlxsw_sp_inetaddr_vport_event(vlan_dev, real_dev, event,
 -                                                   vid);
 +              return mlxsw_sp_inetaddr_port_vlan_event(vlan_dev, real_dev,
 +                                                       event, vid);
        else if (netif_is_lag_master(real_dev))
                return __mlxsw_sp_inetaddr_lag_event(vlan_dev, real_dev, event,
                                                     vid);
 
                *index = entry->index;
                resolved = false;
        } else if (removing) {
-               ofdpa_neigh_del(found);
                *index = found->index;
 -              ofdpa_neigh_del(trans, found);
++              ofdpa_neigh_del(found);
        } else if (updating) {
 -              ofdpa_neigh_update(found, trans, NULL, false);
 +              ofdpa_neigh_update(found, NULL, false);
                resolved = !is_zero_ether_addr(found->eth_dst);
                *index = found->index;
        } else {
 
        if (!is_valid_ether_addr(addr->sa_data))
                return -EADDRNOTAVAIL;
  
-       if (vlan->mode == MACVLAN_MODE_PASSTHRU)
+       /* If the addresses are the same, this is a no-op */
+       if (ether_addr_equal(dev->dev_addr, addr->sa_data))
+               return 0;
+ 
+       if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
+               macvlan_set_addr_change(vlan->port);
 -              dev_set_mac_address(vlan->lowerdev, addr);
 -              return 0;
 +              return dev_set_mac_address(vlan->lowerdev, addr);
+       }
  
        return macvlan_sync_address(dev, addr->sa_data);
  }
 
        if (err)
                return err;
  
+       if (is_pointer_value(env, insn->src_reg)) {
+               verbose("R%d leaks addr into mem\n", insn->src_reg);
+               return -EACCES;
+       }
+ 
        /* check whether atomic_add can read the memory */
 -      err = check_mem_access(env, insn->dst_reg, insn->off,
 +      err = check_mem_access(env, insn_idx, insn->dst_reg, insn->off,
                               BPF_SIZE(insn->code), BPF_READ, -1);
        if (err)
                return err;
 
        return true;
  }
  EXPORT_SYMBOL_GPL(xfrm_dev_offload_ok);
+ #endif
  
 -int xfrm_dev_register(struct net_device *dev)
 +static int xfrm_dev_register(struct net_device *dev)
  {
        if ((dev->features & NETIF_F_HW_ESP) && !dev->xfrmdev_ops)
                return NOTIFY_BAD;