diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 19 | ||||
| -rw-r--r-- | drivers/net/bonding/bonding.h | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/dec/tulip/interrupt.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/renesas/sh_eth.c | 15 | ||||
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/ti/davinci_mdio.c | 9 | ||||
| -rw-r--r-- | drivers/net/macvlan.c | 20 | ||||
| -rw-r--r-- | drivers/net/xen-netback/netback.c | 11 | ||||
| -rw-r--r-- | drivers/s390/net/netiucv.c | 6 |
11 files changed, 74 insertions, 29 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 29b846cbfb48..02d9ae7d527e 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -764,8 +764,8 @@ static void bond_resend_igmp_join_requests(struct bonding *bond) | |||
| 764 | struct net_device *bond_dev, *vlan_dev, *upper_dev; | 764 | struct net_device *bond_dev, *vlan_dev, *upper_dev; |
| 765 | struct vlan_entry *vlan; | 765 | struct vlan_entry *vlan; |
| 766 | 766 | ||
| 767 | rcu_read_lock(); | ||
| 768 | read_lock(&bond->lock); | 767 | read_lock(&bond->lock); |
| 768 | rcu_read_lock(); | ||
| 769 | 769 | ||
| 770 | bond_dev = bond->dev; | 770 | bond_dev = bond->dev; |
| 771 | 771 | ||
| @@ -787,12 +787,19 @@ static void bond_resend_igmp_join_requests(struct bonding *bond) | |||
| 787 | if (vlan_dev) | 787 | if (vlan_dev) |
| 788 | __bond_resend_igmp_join_requests(vlan_dev); | 788 | __bond_resend_igmp_join_requests(vlan_dev); |
| 789 | } | 789 | } |
| 790 | rcu_read_unlock(); | ||
| 790 | 791 | ||
| 791 | if (--bond->igmp_retrans > 0) | 792 | /* We use curr_slave_lock to protect against concurrent access to |
| 793 | * igmp_retrans from multiple running instances of this function and | ||
| 794 | * bond_change_active_slave | ||
| 795 | */ | ||
| 796 | write_lock_bh(&bond->curr_slave_lock); | ||
| 797 | if (bond->igmp_retrans > 1) { | ||
| 798 | bond->igmp_retrans--; | ||
| 792 | queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5); | 799 | queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5); |
| 793 | 800 | } | |
| 801 | write_unlock_bh(&bond->curr_slave_lock); | ||
| 794 | read_unlock(&bond->lock); | 802 | read_unlock(&bond->lock); |
| 795 | rcu_read_unlock(); | ||
| 796 | } | 803 | } |
| 797 | 804 | ||
| 798 | static void bond_resend_igmp_join_requests_delayed(struct work_struct *work) | 805 | static void bond_resend_igmp_join_requests_delayed(struct work_struct *work) |
| @@ -1957,6 +1964,10 @@ err_free: | |||
| 1957 | 1964 | ||
| 1958 | err_undo_flags: | 1965 | err_undo_flags: |
| 1959 | bond_compute_features(bond); | 1966 | bond_compute_features(bond); |
| 1967 | /* Enslave of first slave has failed and we need to fix master's mac */ | ||
| 1968 | if (bond->slave_cnt == 0 && | ||
| 1969 | ether_addr_equal(bond_dev->dev_addr, slave_dev->dev_addr)) | ||
| 1970 | eth_hw_addr_random(bond_dev); | ||
| 1960 | 1971 | ||
| 1961 | return res; | 1972 | return res; |
| 1962 | } | 1973 | } |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index 2baec24388b1..f989e1529a29 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
| @@ -225,7 +225,7 @@ struct bonding { | |||
| 225 | rwlock_t curr_slave_lock; | 225 | rwlock_t curr_slave_lock; |
| 226 | u8 send_peer_notif; | 226 | u8 send_peer_notif; |
| 227 | s8 setup_by_slave; | 227 | s8 setup_by_slave; |
| 228 | s8 igmp_retrans; | 228 | u8 igmp_retrans; |
| 229 | #ifdef CONFIG_PROC_FS | 229 | #ifdef CONFIG_PROC_FS |
| 230 | struct proc_dir_entry *proc_entry; | 230 | struct proc_dir_entry *proc_entry; |
| 231 | char proc_file_name[IFNAMSIZ]; | 231 | char proc_file_name[IFNAMSIZ]; |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 0f493c8dc28b..c777b9013164 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
| @@ -1800,6 +1800,9 @@ static int tg3_poll_fw(struct tg3 *tp) | |||
| 1800 | int i; | 1800 | int i; |
| 1801 | u32 val; | 1801 | u32 val; |
| 1802 | 1802 | ||
| 1803 | if (tg3_flag(tp, NO_FWARE_REPORTED)) | ||
| 1804 | return 0; | ||
| 1805 | |||
| 1803 | if (tg3_flag(tp, IS_SSB_CORE)) { | 1806 | if (tg3_flag(tp, IS_SSB_CORE)) { |
| 1804 | /* We don't use firmware. */ | 1807 | /* We don't use firmware. */ |
| 1805 | return 0; | 1808 | return 0; |
| @@ -10404,6 +10407,13 @@ static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) | |||
| 10404 | */ | 10407 | */ |
| 10405 | static int tg3_init_hw(struct tg3 *tp, bool reset_phy) | 10408 | static int tg3_init_hw(struct tg3 *tp, bool reset_phy) |
| 10406 | { | 10409 | { |
| 10410 | /* Chip may have been just powered on. If so, the boot code may still | ||
| 10411 | * be running initialization. Wait for it to finish to avoid races in | ||
| 10412 | * accessing the hardware. | ||
| 10413 | */ | ||
| 10414 | tg3_enable_register_access(tp); | ||
| 10415 | tg3_poll_fw(tp); | ||
| 10416 | |||
| 10407 | tg3_switch_clocks(tp); | 10417 | tg3_switch_clocks(tp); |
| 10408 | 10418 | ||
| 10409 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); | 10419 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); |
diff --git a/drivers/net/ethernet/dec/tulip/interrupt.c b/drivers/net/ethernet/dec/tulip/interrupt.c index 28a5e425fecf..92306b320840 100644 --- a/drivers/net/ethernet/dec/tulip/interrupt.c +++ b/drivers/net/ethernet/dec/tulip/interrupt.c | |||
| @@ -76,6 +76,12 @@ int tulip_refill_rx(struct net_device *dev) | |||
| 76 | 76 | ||
| 77 | mapping = pci_map_single(tp->pdev, skb->data, PKT_BUF_SZ, | 77 | mapping = pci_map_single(tp->pdev, skb->data, PKT_BUF_SZ, |
| 78 | PCI_DMA_FROMDEVICE); | 78 | PCI_DMA_FROMDEVICE); |
| 79 | if (dma_mapping_error(&tp->pdev->dev, mapping)) { | ||
| 80 | dev_kfree_skb(skb); | ||
| 81 | tp->rx_buffers[entry].skb = NULL; | ||
| 82 | break; | ||
| 83 | } | ||
| 84 | |||
| 79 | tp->rx_buffers[entry].mapping = mapping; | 85 | tp->rx_buffers[entry].mapping = mapping; |
| 80 | 86 | ||
| 81 | tp->rx_ring[entry].buffer1 = cpu_to_le32(mapping); | 87 | tp->rx_ring[entry].buffer1 = cpu_to_le32(mapping); |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 8bc1b21b1c79..a0b4be51f0d1 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
| @@ -4262,6 +4262,9 @@ static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id) | |||
| 4262 | netdev->features |= NETIF_F_HIGHDMA; | 4262 | netdev->features |= NETIF_F_HIGHDMA; |
| 4263 | } else { | 4263 | } else { |
| 4264 | status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); | 4264 | status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
| 4265 | if (!status) | ||
| 4266 | status = dma_set_coherent_mask(&pdev->dev, | ||
| 4267 | DMA_BIT_MASK(32)); | ||
| 4265 | if (status) { | 4268 | if (status) { |
| 4266 | dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); | 4269 | dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); |
| 4267 | goto free_netdev; | 4270 | goto free_netdev; |
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index b4479b5aaee4..5e3982fc5398 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
| @@ -1401,16 +1401,23 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status) | |||
| 1401 | desc_status = edmac_to_cpu(mdp, rxdesc->status); | 1401 | desc_status = edmac_to_cpu(mdp, rxdesc->status); |
| 1402 | pkt_len = rxdesc->frame_length; | 1402 | pkt_len = rxdesc->frame_length; |
| 1403 | 1403 | ||
| 1404 | #if defined(CONFIG_ARCH_R8A7740) | ||
| 1405 | desc_status >>= 16; | ||
| 1406 | #endif | ||
| 1407 | |||
| 1408 | if (--boguscnt < 0) | 1404 | if (--boguscnt < 0) |
| 1409 | break; | 1405 | break; |
| 1410 | 1406 | ||
| 1411 | if (!(desc_status & RDFEND)) | 1407 | if (!(desc_status & RDFEND)) |
| 1412 | ndev->stats.rx_length_errors++; | 1408 | ndev->stats.rx_length_errors++; |
| 1413 | 1409 | ||
| 1410 | #if defined(CONFIG_ARCH_R8A7740) | ||
| 1411 | /* | ||
| 1412 | * In case of almost all GETHER/ETHERs, the Receive Frame State | ||
| 1413 | * (RFS) bits in the Receive Descriptor 0 are from bit 9 to | ||
| 1414 | * bit 0. However, in case of the R8A7740's GETHER, the RFS | ||
| 1415 | * bits are from bit 25 to bit 16. So, the driver needs right | ||
| 1416 | * shifting by 16. | ||
| 1417 | */ | ||
| 1418 | desc_status >>= 16; | ||
| 1419 | #endif | ||
| 1420 | |||
| 1414 | if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | | 1421 | if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | |
| 1415 | RD_RFS5 | RD_RFS6 | RD_RFS10)) { | 1422 | RD_RFS5 | RD_RFS6 | RD_RFS10)) { |
| 1416 | ndev->stats.rx_errors++; | 1423 | ndev->stats.rx_errors++; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 618446ae1ec1..ee919ca8b8a0 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
| @@ -1899,7 +1899,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 1899 | 1899 | ||
| 1900 | #ifdef STMMAC_XMIT_DEBUG | 1900 | #ifdef STMMAC_XMIT_DEBUG |
| 1901 | if (netif_msg_pktdata(priv)) { | 1901 | if (netif_msg_pktdata(priv)) { |
| 1902 | pr_info("%s: curr %d dirty=%d entry=%d, first=%p, nfrags=%d" | 1902 | pr_info("%s: curr %d dirty=%d entry=%d, first=%p, nfrags=%d", |
| 1903 | __func__, (priv->cur_tx % txsize), | 1903 | __func__, (priv->cur_tx % txsize), |
| 1904 | (priv->dirty_tx % txsize), entry, first, nfrags); | 1904 | (priv->dirty_tx % txsize), entry, first, nfrags); |
| 1905 | if (priv->extend_desc) | 1905 | if (priv->extend_desc) |
diff --git a/drivers/net/ethernet/ti/davinci_mdio.c b/drivers/net/ethernet/ti/davinci_mdio.c index b2275d1b19b3..c47f0dbcebb5 100644 --- a/drivers/net/ethernet/ti/davinci_mdio.c +++ b/drivers/net/ethernet/ti/davinci_mdio.c | |||
| @@ -459,15 +459,12 @@ static int davinci_mdio_suspend(struct device *dev) | |||
| 459 | static int davinci_mdio_resume(struct device *dev) | 459 | static int davinci_mdio_resume(struct device *dev) |
| 460 | { | 460 | { |
| 461 | struct davinci_mdio_data *data = dev_get_drvdata(dev); | 461 | struct davinci_mdio_data *data = dev_get_drvdata(dev); |
| 462 | u32 ctrl; | ||
| 463 | 462 | ||
| 464 | pm_runtime_get_sync(data->dev); | 463 | pm_runtime_get_sync(data->dev); |
| 465 | 464 | ||
| 466 | spin_lock(&data->lock); | 465 | spin_lock(&data->lock); |
| 467 | /* restart the scan state machine */ | 466 | /* restart the scan state machine */ |
| 468 | ctrl = __raw_readl(&data->regs->control); | 467 | __davinci_mdio_reset(data); |
| 469 | ctrl |= CONTROL_ENABLE; | ||
| 470 | __raw_writel(ctrl, &data->regs->control); | ||
| 471 | 468 | ||
| 472 | data->suspended = false; | 469 | data->suspended = false; |
| 473 | spin_unlock(&data->lock); | 470 | spin_unlock(&data->lock); |
| @@ -476,8 +473,8 @@ static int davinci_mdio_resume(struct device *dev) | |||
| 476 | } | 473 | } |
| 477 | 474 | ||
| 478 | static const struct dev_pm_ops davinci_mdio_pm_ops = { | 475 | static const struct dev_pm_ops davinci_mdio_pm_ops = { |
| 479 | .suspend = davinci_mdio_suspend, | 476 | .suspend_late = davinci_mdio_suspend, |
| 480 | .resume = davinci_mdio_resume, | 477 | .resume_early = davinci_mdio_resume, |
| 481 | }; | 478 | }; |
| 482 | 479 | ||
| 483 | static const struct of_device_id davinci_mdio_of_mtable[] = { | 480 | static const struct of_device_id davinci_mdio_of_mtable[] = { |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 1c502bb0c916..6e91931a1c2c 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
| @@ -853,18 +853,24 @@ static int macvlan_changelink(struct net_device *dev, | |||
| 853 | struct nlattr *tb[], struct nlattr *data[]) | 853 | struct nlattr *tb[], struct nlattr *data[]) |
| 854 | { | 854 | { |
| 855 | struct macvlan_dev *vlan = netdev_priv(dev); | 855 | struct macvlan_dev *vlan = netdev_priv(dev); |
| 856 | if (data && data[IFLA_MACVLAN_MODE]) | 856 | |
| 857 | vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); | ||
| 858 | if (data && data[IFLA_MACVLAN_FLAGS]) { | 857 | if (data && data[IFLA_MACVLAN_FLAGS]) { |
| 859 | __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); | 858 | __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]); |
| 860 | bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; | 859 | bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC; |
| 861 | 860 | if (vlan->port->passthru && promisc) { | |
| 862 | if (promisc && (flags & MACVLAN_FLAG_NOPROMISC)) | 861 | int err; |
| 863 | dev_set_promiscuity(vlan->lowerdev, -1); | 862 | |
| 864 | else if (promisc && !(flags & MACVLAN_FLAG_NOPROMISC)) | 863 | if (flags & MACVLAN_FLAG_NOPROMISC) |
| 865 | dev_set_promiscuity(vlan->lowerdev, 1); | 864 | err = dev_set_promiscuity(vlan->lowerdev, -1); |
| 865 | else | ||
| 866 | err = dev_set_promiscuity(vlan->lowerdev, 1); | ||
| 867 | if (err < 0) | ||
| 868 | return err; | ||
| 869 | } | ||
| 866 | vlan->flags = flags; | 870 | vlan->flags = flags; |
| 867 | } | 871 | } |
| 872 | if (data && data[IFLA_MACVLAN_MODE]) | ||
| 873 | vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]); | ||
| 868 | return 0; | 874 | return 0; |
| 869 | } | 875 | } |
| 870 | 876 | ||
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index 37984e6d4e99..8c20935d72c9 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c | |||
| @@ -662,7 +662,7 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk) | |||
| 662 | { | 662 | { |
| 663 | struct xenvif *vif = NULL, *tmp; | 663 | struct xenvif *vif = NULL, *tmp; |
| 664 | s8 status; | 664 | s8 status; |
| 665 | u16 irq, flags; | 665 | u16 flags; |
| 666 | struct xen_netif_rx_response *resp; | 666 | struct xen_netif_rx_response *resp; |
| 667 | struct sk_buff_head rxq; | 667 | struct sk_buff_head rxq; |
| 668 | struct sk_buff *skb; | 668 | struct sk_buff *skb; |
| @@ -771,13 +771,13 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk) | |||
| 771 | sco->meta_slots_used); | 771 | sco->meta_slots_used); |
| 772 | 772 | ||
| 773 | RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret); | 773 | RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret); |
| 774 | irq = vif->irq; | ||
| 775 | if (ret && list_empty(&vif->notify_list)) | ||
| 776 | list_add_tail(&vif->notify_list, ¬ify); | ||
| 777 | 774 | ||
| 778 | xenvif_notify_tx_completion(vif); | 775 | xenvif_notify_tx_completion(vif); |
| 779 | 776 | ||
| 780 | xenvif_put(vif); | 777 | if (ret && list_empty(&vif->notify_list)) |
| 778 | list_add_tail(&vif->notify_list, ¬ify); | ||
| 779 | else | ||
| 780 | xenvif_put(vif); | ||
| 781 | npo.meta_cons += sco->meta_slots_used; | 781 | npo.meta_cons += sco->meta_slots_used; |
| 782 | dev_kfree_skb(skb); | 782 | dev_kfree_skb(skb); |
| 783 | } | 783 | } |
| @@ -785,6 +785,7 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk) | |||
| 785 | list_for_each_entry_safe(vif, tmp, ¬ify, notify_list) { | 785 | list_for_each_entry_safe(vif, tmp, ¬ify, notify_list) { |
| 786 | notify_remote_via_irq(vif->irq); | 786 | notify_remote_via_irq(vif->irq); |
| 787 | list_del_init(&vif->notify_list); | 787 | list_del_init(&vif->notify_list); |
| 788 | xenvif_put(vif); | ||
| 788 | } | 789 | } |
| 789 | 790 | ||
| 790 | /* More work to do? */ | 791 | /* More work to do? */ |
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c index 4ffa66c87ea5..9ca3996f65b2 100644 --- a/drivers/s390/net/netiucv.c +++ b/drivers/s390/net/netiucv.c | |||
| @@ -2040,6 +2040,7 @@ static struct net_device *netiucv_init_netdevice(char *username, char *userdata) | |||
| 2040 | netiucv_setup_netdevice); | 2040 | netiucv_setup_netdevice); |
| 2041 | if (!dev) | 2041 | if (!dev) |
| 2042 | return NULL; | 2042 | return NULL; |
| 2043 | rtnl_lock(); | ||
| 2043 | if (dev_alloc_name(dev, dev->name) < 0) | 2044 | if (dev_alloc_name(dev, dev->name) < 0) |
| 2044 | goto out_netdev; | 2045 | goto out_netdev; |
| 2045 | 2046 | ||
| @@ -2061,6 +2062,7 @@ static struct net_device *netiucv_init_netdevice(char *username, char *userdata) | |||
| 2061 | out_fsm: | 2062 | out_fsm: |
| 2062 | kfree_fsm(privptr->fsm); | 2063 | kfree_fsm(privptr->fsm); |
| 2063 | out_netdev: | 2064 | out_netdev: |
| 2065 | rtnl_unlock(); | ||
| 2064 | free_netdev(dev); | 2066 | free_netdev(dev); |
| 2065 | return NULL; | 2067 | return NULL; |
| 2066 | } | 2068 | } |
| @@ -2100,6 +2102,7 @@ static ssize_t conn_write(struct device_driver *drv, | |||
| 2100 | 2102 | ||
| 2101 | rc = netiucv_register_device(dev); | 2103 | rc = netiucv_register_device(dev); |
| 2102 | if (rc) { | 2104 | if (rc) { |
| 2105 | rtnl_unlock(); | ||
| 2103 | IUCV_DBF_TEXT_(setup, 2, | 2106 | IUCV_DBF_TEXT_(setup, 2, |
| 2104 | "ret %d from netiucv_register_device\n", rc); | 2107 | "ret %d from netiucv_register_device\n", rc); |
| 2105 | goto out_free_ndev; | 2108 | goto out_free_ndev; |
| @@ -2109,7 +2112,8 @@ static ssize_t conn_write(struct device_driver *drv, | |||
| 2109 | priv = netdev_priv(dev); | 2112 | priv = netdev_priv(dev); |
| 2110 | SET_NETDEV_DEV(dev, priv->dev); | 2113 | SET_NETDEV_DEV(dev, priv->dev); |
| 2111 | 2114 | ||
| 2112 | rc = register_netdev(dev); | 2115 | rc = register_netdevice(dev); |
| 2116 | rtnl_unlock(); | ||
| 2113 | if (rc) | 2117 | if (rc) |
| 2114 | goto out_unreg; | 2118 | goto out_unreg; |
| 2115 | 2119 | ||
