aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/firewire/net.c3
-rw-r--r--drivers/hsi/clients/ssi_protocol.c2
-rw-r--r--drivers/infiniband/hw/amso1100/c2_provider.c2
-rw-r--r--drivers/infiniband/hw/cxgb4/cm.c80
-rw-r--r--drivers/infiniband/hw/cxgb4/cq.c8
-rw-r--r--drivers/infiniband/hw/cxgb4/device.c188
-rw-r--r--drivers/infiniband/hw/cxgb4/ev.c55
-rw-r--r--drivers/infiniband/hw/cxgb4/iw_cxgb4.h38
-rw-r--r--drivers/infiniband/hw/cxgb4/provider.c10
-rw-r--r--drivers/infiniband/hw/cxgb4/qp.c76
-rw-r--r--drivers/infiniband/hw/cxgb4/t4.h16
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c4
-rw-r--r--drivers/isdn/i4l/isdn_net.c3
-rw-r--r--drivers/media/dvb-core/dvb_net.c3
-rw-r--r--drivers/misc/sgi-xp/xpnet.c3
-rw-r--r--drivers/net/arcnet/arcnet.c3
-rw-r--r--drivers/net/bonding/bond_main.c2
-rw-r--r--drivers/net/caif/caif_serial.c3
-rw-r--r--drivers/net/caif/caif_spi.c4
-rw-r--r--drivers/net/caif/caif_virtio.c2
-rw-r--r--drivers/net/can/dev.c2
-rw-r--r--drivers/net/can/slcan.c2
-rw-r--r--drivers/net/dummy.c2
-rw-r--r--drivers/net/eql.c3
-rw-r--r--drivers/net/ethernet/8390/lib8390.c2
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c10
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-mdio.c4
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4.h3
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c100
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h7
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_regs.h6
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h2
-rw-r--r--drivers/net/ethernet/marvell/mvpp2.c2
-rw-r--r--drivers/net/ethernet/tile/tilegx.c4
-rw-r--r--drivers/net/ethernet/tile/tilepro.c3
-rw-r--r--drivers/net/hamradio/6pack.c3
-rw-r--r--drivers/net/hamradio/baycom_epp.c2
-rw-r--r--drivers/net/hamradio/bpqether.c4
-rw-r--r--drivers/net/hamradio/dmascc.c4
-rw-r--r--drivers/net/hamradio/hdlcdrv.c2
-rw-r--r--drivers/net/hamradio/mkiss.c3
-rw-r--r--drivers/net/hamradio/scc.c2
-rw-r--r--drivers/net/hamradio/yam.c2
-rw-r--r--drivers/net/ieee802154/fakehard.c3
-rw-r--r--drivers/net/ifb.c4
-rw-r--r--drivers/net/loopback.c2
-rw-r--r--drivers/net/phy/phy.c22
-rw-r--r--drivers/net/ppp/ppp_generic.c3
-rw-r--r--drivers/net/slip/slip.c2
-rw-r--r--drivers/net/tun.c3
-rw-r--r--drivers/net/usb/cdc-phonet.c2
-rw-r--r--drivers/net/usb/hso.c3
-rw-r--r--drivers/net/veth.c11
-rw-r--r--drivers/net/wan/dlci.c4
-rw-r--r--drivers/net/wan/hdlc.c3
-rw-r--r--drivers/net/wan/hdlc_fr.c5
-rw-r--r--drivers/net/wan/lapbether.c4
-rw-r--r--drivers/net/wan/sbni.c7
-rw-r--r--drivers/net/wan/sdla.c3
-rw-r--r--drivers/net/wan/x25_asy.c4
-rw-r--r--drivers/net/wimax/i2400m/usb.c2
-rw-r--r--drivers/net/wireless/airo.c5
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c2
-rw-r--r--drivers/net/wireless/ath/wil6210/netdev.c2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c3
-rw-r--r--drivers/net/wireless/libertas/main.c2
-rw-r--r--drivers/net/wireless/libertas/mesh.c2
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c3
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c3
-rw-r--r--drivers/net/xen-netback/interface.c4
-rw-r--r--drivers/s390/net/claw.c2
-rw-r--r--drivers/s390/net/ctcm_main.c6
-rw-r--r--drivers/s390/net/netiucv.c2
-rw-r--r--drivers/s390/net/qeth_l2_main.c6
-rw-r--r--drivers/s390/net/qeth_l3_main.c3
-rw-r--r--drivers/staging/cxt1e1/linux.c3
-rw-r--r--drivers/staging/gdm724x/gdm_lte.c2
-rw-r--r--drivers/staging/gdm72xx/gdm_wimax.c3
-rw-r--r--drivers/staging/vt6655/wpactl.c3
-rw-r--r--drivers/staging/wlan-ng/p80211netdev.c2
-rw-r--r--drivers/tty/n_gsm.c5
-rw-r--r--drivers/usb/gadget/f_phonet.c3
82 files changed, 670 insertions, 162 deletions
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index c3986452194d..2c68da1ceeee 100644
--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -1460,7 +1460,8 @@ static int fwnet_probe(struct fw_unit *unit,
1460 goto have_dev; 1460 goto have_dev;
1461 } 1461 }
1462 1462
1463 net = alloc_netdev(sizeof(*dev), "firewire%d", fwnet_init_dev); 1463 net = alloc_netdev(sizeof(*dev), "firewire%d", NET_NAME_UNKNOWN,
1464 fwnet_init_dev);
1464 if (net == NULL) { 1465 if (net == NULL) {
1465 mutex_unlock(&fwnet_device_mutex); 1466 mutex_unlock(&fwnet_device_mutex);
1466 return -ENOMEM; 1467 return -ENOMEM;
diff --git a/drivers/hsi/clients/ssi_protocol.c b/drivers/hsi/clients/ssi_protocol.c
index ce4be3738d46..737fa2e0e782 100644
--- a/drivers/hsi/clients/ssi_protocol.c
+++ b/drivers/hsi/clients/ssi_protocol.c
@@ -1115,7 +1115,7 @@ static int ssi_protocol_probe(struct device *dev)
1115 goto out; 1115 goto out;
1116 } 1116 }
1117 1117
1118 ssi->netdev = alloc_netdev(0, ifname, ssip_pn_setup); 1118 ssi->netdev = alloc_netdev(0, ifname, NET_NAME_UNKNOWN, ssip_pn_setup);
1119 if (!ssi->netdev) { 1119 if (!ssi->netdev) {
1120 dev_err(dev, "No memory for netdev\n"); 1120 dev_err(dev, "No memory for netdev\n");
1121 err = -ENOMEM; 1121 err = -ENOMEM;
diff --git a/drivers/infiniband/hw/amso1100/c2_provider.c b/drivers/infiniband/hw/amso1100/c2_provider.c
index 8af33cf1fc4e..2d5cbf4363e4 100644
--- a/drivers/infiniband/hw/amso1100/c2_provider.c
+++ b/drivers/infiniband/hw/amso1100/c2_provider.c
@@ -734,7 +734,7 @@ static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
734 /* change ethxxx to iwxxx */ 734 /* change ethxxx to iwxxx */
735 strcpy(name, "iw"); 735 strcpy(name, "iw");
736 strcat(name, &c2dev->netdev->name[3]); 736 strcat(name, &c2dev->netdev->name[3]);
737 netdev = alloc_netdev(0, name, setup); 737 netdev = alloc_netdev(0, name, NET_NAME_UNKNOWN, setup);
738 if (!netdev) { 738 if (!netdev) {
739 printk(KERN_ERR PFX "%s - etherdev alloc failed", 739 printk(KERN_ERR PFX "%s - etherdev alloc failed",
740 __func__); 740 __func__);
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index d62a0f9dd11a..df5bd3df08a2 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -79,9 +79,10 @@ static int dack_mode = 1;
79module_param(dack_mode, int, 0644); 79module_param(dack_mode, int, 0644);
80MODULE_PARM_DESC(dack_mode, "Delayed ack mode (default=1)"); 80MODULE_PARM_DESC(dack_mode, "Delayed ack mode (default=1)");
81 81
82int c4iw_max_read_depth = 8; 82uint c4iw_max_read_depth = 32;
83module_param(c4iw_max_read_depth, int, 0644); 83module_param(c4iw_max_read_depth, int, 0644);
84MODULE_PARM_DESC(c4iw_max_read_depth, "Per-connection max ORD/IRD (default=8)"); 84MODULE_PARM_DESC(c4iw_max_read_depth,
85 "Per-connection max ORD/IRD (default=32)");
85 86
86static int enable_tcp_timestamps; 87static int enable_tcp_timestamps;
87module_param(enable_tcp_timestamps, int, 0644); 88module_param(enable_tcp_timestamps, int, 0644);
@@ -813,6 +814,8 @@ static void send_mpa_req(struct c4iw_ep *ep, struct sk_buff *skb,
813 if (mpa_rev_to_use == 2) { 814 if (mpa_rev_to_use == 2) {
814 mpa->private_data_size = htons(ntohs(mpa->private_data_size) + 815 mpa->private_data_size = htons(ntohs(mpa->private_data_size) +
815 sizeof (struct mpa_v2_conn_params)); 816 sizeof (struct mpa_v2_conn_params));
817 PDBG("%s initiator ird %u ord %u\n", __func__, ep->ird,
818 ep->ord);
816 mpa_v2_params.ird = htons((u16)ep->ird); 819 mpa_v2_params.ird = htons((u16)ep->ird);
817 mpa_v2_params.ord = htons((u16)ep->ord); 820 mpa_v2_params.ord = htons((u16)ep->ord);
818 821
@@ -1182,8 +1185,8 @@ static int connect_request_upcall(struct c4iw_ep *ep)
1182 sizeof(struct mpa_v2_conn_params); 1185 sizeof(struct mpa_v2_conn_params);
1183 } else { 1186 } else {
1184 /* this means MPA_v1 is used. Send max supported */ 1187 /* this means MPA_v1 is used. Send max supported */
1185 event.ord = c4iw_max_read_depth; 1188 event.ord = cur_max_read_depth(ep->com.dev);
1186 event.ird = c4iw_max_read_depth; 1189 event.ird = cur_max_read_depth(ep->com.dev);
1187 event.private_data_len = ep->plen; 1190 event.private_data_len = ep->plen;
1188 event.private_data = ep->mpa_pkt + sizeof(struct mpa_message); 1191 event.private_data = ep->mpa_pkt + sizeof(struct mpa_message);
1189 } 1192 }
@@ -1247,6 +1250,8 @@ static int update_rx_credits(struct c4iw_ep *ep, u32 credits)
1247 return credits; 1250 return credits;
1248} 1251}
1249 1252
1253#define RELAXED_IRD_NEGOTIATION 1
1254
1250static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb) 1255static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)
1251{ 1256{
1252 struct mpa_message *mpa; 1257 struct mpa_message *mpa;
@@ -1358,17 +1363,33 @@ static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)
1358 MPA_V2_IRD_ORD_MASK; 1363 MPA_V2_IRD_ORD_MASK;
1359 resp_ord = ntohs(mpa_v2_params->ord) & 1364 resp_ord = ntohs(mpa_v2_params->ord) &
1360 MPA_V2_IRD_ORD_MASK; 1365 MPA_V2_IRD_ORD_MASK;
1366 PDBG("%s responder ird %u ord %u ep ird %u ord %u\n",
1367 __func__, resp_ird, resp_ord, ep->ird, ep->ord);
1361 1368
1362 /* 1369 /*
1363 * This is a double-check. Ideally, below checks are 1370 * This is a double-check. Ideally, below checks are
1364 * not required since ird/ord stuff has been taken 1371 * not required since ird/ord stuff has been taken
1365 * care of in c4iw_accept_cr 1372 * care of in c4iw_accept_cr
1366 */ 1373 */
1367 if ((ep->ird < resp_ord) || (ep->ord > resp_ird)) { 1374 if (ep->ird < resp_ord) {
1375 if (RELAXED_IRD_NEGOTIATION && resp_ord <=
1376 ep->com.dev->rdev.lldi.max_ordird_qp)
1377 ep->ird = resp_ord;
1378 else
1379 insuff_ird = 1;
1380 } else if (ep->ird > resp_ord) {
1381 ep->ird = resp_ord;
1382 }
1383 if (ep->ord > resp_ird) {
1384 if (RELAXED_IRD_NEGOTIATION)
1385 ep->ord = resp_ird;
1386 else
1387 insuff_ird = 1;
1388 }
1389 if (insuff_ird) {
1368 err = -ENOMEM; 1390 err = -ENOMEM;
1369 ep->ird = resp_ord; 1391 ep->ird = resp_ord;
1370 ep->ord = resp_ird; 1392 ep->ord = resp_ird;
1371 insuff_ird = 1;
1372 } 1393 }
1373 1394
1374 if (ntohs(mpa_v2_params->ird) & 1395 if (ntohs(mpa_v2_params->ird) &
@@ -1571,6 +1592,8 @@ static void process_mpa_request(struct c4iw_ep *ep, struct sk_buff *skb)
1571 MPA_V2_IRD_ORD_MASK; 1592 MPA_V2_IRD_ORD_MASK;
1572 ep->ord = ntohs(mpa_v2_params->ord) & 1593 ep->ord = ntohs(mpa_v2_params->ord) &
1573 MPA_V2_IRD_ORD_MASK; 1594 MPA_V2_IRD_ORD_MASK;
1595 PDBG("%s initiator ird %u ord %u\n", __func__, ep->ird,
1596 ep->ord);
1574 if (ntohs(mpa_v2_params->ird) & MPA_V2_PEER2PEER_MODEL) 1597 if (ntohs(mpa_v2_params->ird) & MPA_V2_PEER2PEER_MODEL)
1575 if (peer2peer) { 1598 if (peer2peer) {
1576 if (ntohs(mpa_v2_params->ord) & 1599 if (ntohs(mpa_v2_params->ord) &
@@ -2724,8 +2747,8 @@ int c4iw_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2724 BUG_ON(!qp); 2747 BUG_ON(!qp);
2725 2748
2726 set_bit(ULP_ACCEPT, &ep->com.history); 2749 set_bit(ULP_ACCEPT, &ep->com.history);
2727 if ((conn_param->ord > c4iw_max_read_depth) || 2750 if ((conn_param->ord > cur_max_read_depth(ep->com.dev)) ||
2728 (conn_param->ird > c4iw_max_read_depth)) { 2751 (conn_param->ird > cur_max_read_depth(ep->com.dev))) {
2729 abort_connection(ep, NULL, GFP_KERNEL); 2752 abort_connection(ep, NULL, GFP_KERNEL);
2730 err = -EINVAL; 2753 err = -EINVAL;
2731 goto err; 2754 goto err;
@@ -2733,31 +2756,41 @@ int c4iw_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2733 2756
2734 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) { 2757 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) {
2735 if (conn_param->ord > ep->ird) { 2758 if (conn_param->ord > ep->ird) {
2736 ep->ird = conn_param->ird; 2759 if (RELAXED_IRD_NEGOTIATION) {
2737 ep->ord = conn_param->ord; 2760 ep->ord = ep->ird;
2738 send_mpa_reject(ep, conn_param->private_data, 2761 } else {
2739 conn_param->private_data_len); 2762 ep->ird = conn_param->ird;
2740 abort_connection(ep, NULL, GFP_KERNEL); 2763 ep->ord = conn_param->ord;
2741 err = -ENOMEM; 2764 send_mpa_reject(ep, conn_param->private_data,
2742 goto err; 2765 conn_param->private_data_len);
2766 abort_connection(ep, NULL, GFP_KERNEL);
2767 err = -ENOMEM;
2768 goto err;
2769 }
2743 } 2770 }
2744 if (conn_param->ird > ep->ord) { 2771 if (conn_param->ird < ep->ord) {
2745 if (!ep->ord) 2772 if (RELAXED_IRD_NEGOTIATION &&
2746 conn_param->ird = 1; 2773 ep->ord <= h->rdev.lldi.max_ordird_qp) {
2747 else { 2774 conn_param->ird = ep->ord;
2775 } else {
2748 abort_connection(ep, NULL, GFP_KERNEL); 2776 abort_connection(ep, NULL, GFP_KERNEL);
2749 err = -ENOMEM; 2777 err = -ENOMEM;
2750 goto err; 2778 goto err;
2751 } 2779 }
2752 } 2780 }
2753
2754 } 2781 }
2755 ep->ird = conn_param->ird; 2782 ep->ird = conn_param->ird;
2756 ep->ord = conn_param->ord; 2783 ep->ord = conn_param->ord;
2757 2784
2758 if (ep->mpa_attr.version != 2) 2785 if (ep->mpa_attr.version == 1) {
2759 if (peer2peer && ep->ird == 0) 2786 if (peer2peer && ep->ird == 0)
2760 ep->ird = 1; 2787 ep->ird = 1;
2788 } else {
2789 if (peer2peer &&
2790 (ep->mpa_attr.p2p_type != FW_RI_INIT_P2PTYPE_DISABLED) &&
2791 (p2p_type == FW_RI_INIT_P2PTYPE_READ_REQ) && ep->ord == 0)
2792 ep->ird = 1;
2793 }
2761 2794
2762 PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord); 2795 PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord);
2763 2796
@@ -2796,6 +2829,7 @@ int c4iw_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2796 return 0; 2829 return 0;
2797err1: 2830err1:
2798 ep->com.cm_id = NULL; 2831 ep->com.cm_id = NULL;
2832 abort_connection(ep, NULL, GFP_KERNEL);
2799 cm_id->rem_ref(cm_id); 2833 cm_id->rem_ref(cm_id);
2800err: 2834err:
2801 mutex_unlock(&ep->com.mutex); 2835 mutex_unlock(&ep->com.mutex);
@@ -2879,8 +2913,8 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2879 int iptype; 2913 int iptype;
2880 int iwpm_err = 0; 2914 int iwpm_err = 0;
2881 2915
2882 if ((conn_param->ord > c4iw_max_read_depth) || 2916 if ((conn_param->ord > cur_max_read_depth(dev)) ||
2883 (conn_param->ird > c4iw_max_read_depth)) { 2917 (conn_param->ird > cur_max_read_depth(dev))) {
2884 err = -EINVAL; 2918 err = -EINVAL;
2885 goto out; 2919 goto out;
2886 } 2920 }
diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
index c04292c950f1..de9bcf2e6d30 100644
--- a/drivers/infiniband/hw/cxgb4/cq.c
+++ b/drivers/infiniband/hw/cxgb4/cq.c
@@ -633,11 +633,15 @@ proc_cqe:
633 wq->sq.cidx = (uint16_t)idx; 633 wq->sq.cidx = (uint16_t)idx;
634 PDBG("%s completing sq idx %u\n", __func__, wq->sq.cidx); 634 PDBG("%s completing sq idx %u\n", __func__, wq->sq.cidx);
635 *cookie = wq->sq.sw_sq[wq->sq.cidx].wr_id; 635 *cookie = wq->sq.sw_sq[wq->sq.cidx].wr_id;
636 if (c4iw_wr_log)
637 c4iw_log_wr_stats(wq, hw_cqe);
636 t4_sq_consume(wq); 638 t4_sq_consume(wq);
637 } else { 639 } else {
638 PDBG("%s completing rq idx %u\n", __func__, wq->rq.cidx); 640 PDBG("%s completing rq idx %u\n", __func__, wq->rq.cidx);
639 *cookie = wq->rq.sw_rq[wq->rq.cidx].wr_id; 641 *cookie = wq->rq.sw_rq[wq->rq.cidx].wr_id;
640 BUG_ON(t4_rq_empty(wq)); 642 BUG_ON(t4_rq_empty(wq));
643 if (c4iw_wr_log)
644 c4iw_log_wr_stats(wq, hw_cqe);
641 t4_rq_consume(wq); 645 t4_rq_consume(wq);
642 goto skip_cqe; 646 goto skip_cqe;
643 } 647 }
@@ -895,7 +899,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, int entries,
895 /* 899 /*
896 * Make actual HW queue 2x to avoid cdix_inc overflows. 900 * Make actual HW queue 2x to avoid cdix_inc overflows.
897 */ 901 */
898 hwentries = min(entries * 2, T4_MAX_IQ_SIZE); 902 hwentries = min(entries * 2, rhp->rdev.hw_queue.t4_max_iq_size);
899 903
900 /* 904 /*
901 * Make HW queue at least 64 entries so GTS updates aren't too 905 * Make HW queue at least 64 entries so GTS updates aren't too
@@ -912,7 +916,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, int entries,
912 if (ucontext) { 916 if (ucontext) {
913 memsize = roundup(memsize, PAGE_SIZE); 917 memsize = roundup(memsize, PAGE_SIZE);
914 hwentries = memsize / sizeof *chp->cq.queue; 918 hwentries = memsize / sizeof *chp->cq.queue;
915 while (hwentries > T4_MAX_IQ_SIZE) { 919 while (hwentries > rhp->rdev.hw_queue.t4_max_iq_size) {
916 memsize -= PAGE_SIZE; 920 memsize -= PAGE_SIZE;
917 hwentries = memsize / sizeof *chp->cq.queue; 921 hwentries = memsize / sizeof *chp->cq.queue;
918 } 922 }
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index dd93aadc996e..df1f1b52c7ec 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -55,6 +55,15 @@ module_param(allow_db_coalescing_on_t5, int, 0644);
55MODULE_PARM_DESC(allow_db_coalescing_on_t5, 55MODULE_PARM_DESC(allow_db_coalescing_on_t5,
56 "Allow DB Coalescing on T5 (default = 0)"); 56 "Allow DB Coalescing on T5 (default = 0)");
57 57
58int c4iw_wr_log = 0;
59module_param(c4iw_wr_log, int, 0444);
60MODULE_PARM_DESC(c4iw_wr_log, "Enables logging of work request timing data.");
61
62int c4iw_wr_log_size_order = 12;
63module_param(c4iw_wr_log_size_order, int, 0444);
64MODULE_PARM_DESC(c4iw_wr_log_size_order,
65 "Number of entries (log2) in the work request timing log.");
66
58struct uld_ctx { 67struct uld_ctx {
59 struct list_head entry; 68 struct list_head entry;
60 struct cxgb4_lld_info lldi; 69 struct cxgb4_lld_info lldi;
@@ -103,6 +112,117 @@ static ssize_t debugfs_read(struct file *file, char __user *buf, size_t count,
103 return simple_read_from_buffer(buf, count, ppos, d->buf, d->pos); 112 return simple_read_from_buffer(buf, count, ppos, d->buf, d->pos);
104} 113}
105 114
115void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe)
116{
117 struct wr_log_entry le;
118 int idx;
119
120 if (!wq->rdev->wr_log)
121 return;
122
123 idx = (atomic_inc_return(&wq->rdev->wr_log_idx) - 1) &
124 (wq->rdev->wr_log_size - 1);
125 le.poll_sge_ts = cxgb4_read_sge_timestamp(wq->rdev->lldi.ports[0]);
126 getnstimeofday(&le.poll_host_ts);
127 le.valid = 1;
128 le.cqe_sge_ts = CQE_TS(cqe);
129 if (SQ_TYPE(cqe)) {
130 le.qid = wq->sq.qid;
131 le.opcode = CQE_OPCODE(cqe);
132 le.post_host_ts = wq->sq.sw_sq[wq->sq.cidx].host_ts;
133 le.post_sge_ts = wq->sq.sw_sq[wq->sq.cidx].sge_ts;
134 le.wr_id = CQE_WRID_SQ_IDX(cqe);
135 } else {
136 le.qid = wq->rq.qid;
137 le.opcode = FW_RI_RECEIVE;
138 le.post_host_ts = wq->rq.sw_rq[wq->rq.cidx].host_ts;
139 le.post_sge_ts = wq->rq.sw_rq[wq->rq.cidx].sge_ts;
140 le.wr_id = CQE_WRID_MSN(cqe);
141 }
142 wq->rdev->wr_log[idx] = le;
143}
144
145static int wr_log_show(struct seq_file *seq, void *v)
146{
147 struct c4iw_dev *dev = seq->private;
148 struct timespec prev_ts = {0, 0};
149 struct wr_log_entry *lep;
150 int prev_ts_set = 0;
151 int idx, end;
152
153#define ts2ns(ts) ((ts) * dev->rdev.lldi.cclk_ps / 1000)
154
155 idx = atomic_read(&dev->rdev.wr_log_idx) &
156 (dev->rdev.wr_log_size - 1);
157 end = idx - 1;
158 if (end < 0)
159 end = dev->rdev.wr_log_size - 1;
160 lep = &dev->rdev.wr_log[idx];
161 while (idx != end) {
162 if (lep->valid) {
163 if (!prev_ts_set) {
164 prev_ts_set = 1;
165 prev_ts = lep->poll_host_ts;
166 }
167 seq_printf(seq, "%04u: sec %lu nsec %lu qid %u opcode "
168 "%u %s 0x%x host_wr_delta sec %lu nsec %lu "
169 "post_sge_ts 0x%llx cqe_sge_ts 0x%llx "
170 "poll_sge_ts 0x%llx post_poll_delta_ns %llu "
171 "cqe_poll_delta_ns %llu\n",
172 idx,
173 timespec_sub(lep->poll_host_ts,
174 prev_ts).tv_sec,
175 timespec_sub(lep->poll_host_ts,
176 prev_ts).tv_nsec,
177 lep->qid, lep->opcode,
178 lep->opcode == FW_RI_RECEIVE ?
179 "msn" : "wrid",
180 lep->wr_id,
181 timespec_sub(lep->poll_host_ts,
182 lep->post_host_ts).tv_sec,
183 timespec_sub(lep->poll_host_ts,
184 lep->post_host_ts).tv_nsec,
185 lep->post_sge_ts, lep->cqe_sge_ts,
186 lep->poll_sge_ts,
187 ts2ns(lep->poll_sge_ts - lep->post_sge_ts),
188 ts2ns(lep->poll_sge_ts - lep->cqe_sge_ts));
189 prev_ts = lep->poll_host_ts;
190 }
191 idx++;
192 if (idx > (dev->rdev.wr_log_size - 1))
193 idx = 0;
194 lep = &dev->rdev.wr_log[idx];
195 }
196#undef ts2ns
197 return 0;
198}
199
200static int wr_log_open(struct inode *inode, struct file *file)
201{
202 return single_open(file, wr_log_show, inode->i_private);
203}
204
205static ssize_t wr_log_clear(struct file *file, const char __user *buf,
206 size_t count, loff_t *pos)
207{
208 struct c4iw_dev *dev = ((struct seq_file *)file->private_data)->private;
209 int i;
210
211 if (dev->rdev.wr_log)
212 for (i = 0; i < dev->rdev.wr_log_size; i++)
213 dev->rdev.wr_log[i].valid = 0;
214 return count;
215}
216
217static const struct file_operations wr_log_debugfs_fops = {
218 .owner = THIS_MODULE,
219 .open = wr_log_open,
220 .release = single_release,
221 .read = seq_read,
222 .llseek = seq_lseek,
223 .write = wr_log_clear,
224};
225
106static int dump_qp(int id, void *p, void *data) 226static int dump_qp(int id, void *p, void *data)
107{ 227{
108 struct c4iw_qp *qp = p; 228 struct c4iw_qp *qp = p;
@@ -241,12 +361,32 @@ static int dump_stag(int id, void *p, void *data)
241 struct c4iw_debugfs_data *stagd = data; 361 struct c4iw_debugfs_data *stagd = data;
242 int space; 362 int space;
243 int cc; 363 int cc;
364 struct fw_ri_tpte tpte;
365 int ret;
244 366
245 space = stagd->bufsize - stagd->pos - 1; 367 space = stagd->bufsize - stagd->pos - 1;
246 if (space == 0) 368 if (space == 0)
247 return 1; 369 return 1;
248 370
249 cc = snprintf(stagd->buf + stagd->pos, space, "0x%x\n", id<<8); 371 ret = cxgb4_read_tpte(stagd->devp->rdev.lldi.ports[0], (u32)id<<8,
372 (__be32 *)&tpte);
373 if (ret) {
374 dev_err(&stagd->devp->rdev.lldi.pdev->dev,
375 "%s cxgb4_read_tpte err %d\n", __func__, ret);
376 return ret;
377 }
378 cc = snprintf(stagd->buf + stagd->pos, space,
379 "stag: idx 0x%x valid %d key 0x%x state %d pdid %d "
380 "perm 0x%x ps %d len 0x%llx va 0x%llx\n",
381 (u32)id<<8,
382 G_FW_RI_TPTE_VALID(ntohl(tpte.valid_to_pdid)),
383 G_FW_RI_TPTE_STAGKEY(ntohl(tpte.valid_to_pdid)),
384 G_FW_RI_TPTE_STAGSTATE(ntohl(tpte.valid_to_pdid)),
385 G_FW_RI_TPTE_PDID(ntohl(tpte.valid_to_pdid)),
386 G_FW_RI_TPTE_PERM(ntohl(tpte.locread_to_qpid)),
387 G_FW_RI_TPTE_PS(ntohl(tpte.locread_to_qpid)),
388 ((u64)ntohl(tpte.len_hi) << 32) | ntohl(tpte.len_lo),
389 ((u64)ntohl(tpte.va_hi) << 32) | ntohl(tpte.va_lo_fbo));
250 if (cc < space) 390 if (cc < space)
251 stagd->pos += cc; 391 stagd->pos += cc;
252 return 0; 392 return 0;
@@ -259,7 +399,7 @@ static int stag_release(struct inode *inode, struct file *file)
259 printk(KERN_INFO "%s null stagd?\n", __func__); 399 printk(KERN_INFO "%s null stagd?\n", __func__);
260 return 0; 400 return 0;
261 } 401 }
262 kfree(stagd->buf); 402 vfree(stagd->buf);
263 kfree(stagd); 403 kfree(stagd);
264 return 0; 404 return 0;
265} 405}
@@ -282,8 +422,8 @@ static int stag_open(struct inode *inode, struct file *file)
282 idr_for_each(&stagd->devp->mmidr, count_idrs, &count); 422 idr_for_each(&stagd->devp->mmidr, count_idrs, &count);
283 spin_unlock_irq(&stagd->devp->lock); 423 spin_unlock_irq(&stagd->devp->lock);
284 424
285 stagd->bufsize = count * sizeof("0x12345678\n"); 425 stagd->bufsize = count * 256;
286 stagd->buf = kmalloc(stagd->bufsize, GFP_KERNEL); 426 stagd->buf = vmalloc(stagd->bufsize);
287 if (!stagd->buf) { 427 if (!stagd->buf) {
288 ret = -ENOMEM; 428 ret = -ENOMEM;
289 goto err1; 429 goto err1;
@@ -348,6 +488,7 @@ static int stats_show(struct seq_file *seq, void *v)
348 dev->rdev.stats.act_ofld_conn_fails); 488 dev->rdev.stats.act_ofld_conn_fails);
349 seq_printf(seq, "PAS_OFLD_CONN_FAILS: %10llu\n", 489 seq_printf(seq, "PAS_OFLD_CONN_FAILS: %10llu\n",
350 dev->rdev.stats.pas_ofld_conn_fails); 490 dev->rdev.stats.pas_ofld_conn_fails);
491 seq_printf(seq, "AVAILABLE IRD: %10u\n", dev->avail_ird);
351 return 0; 492 return 0;
352} 493}
353 494
@@ -583,6 +724,12 @@ static int setup_debugfs(struct c4iw_dev *devp)
583 if (de && de->d_inode) 724 if (de && de->d_inode)
584 de->d_inode->i_size = 4096; 725 de->d_inode->i_size = 4096;
585 726
727 if (c4iw_wr_log) {
728 de = debugfs_create_file("wr_log", S_IWUSR, devp->debugfs_root,
729 (void *)devp, &wr_log_debugfs_fops);
730 if (de && de->d_inode)
731 de->d_inode->i_size = 4096;
732 }
586 return 0; 733 return 0;
587} 734}
588 735
@@ -696,6 +843,16 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
696 pr_err(MOD "error allocating status page\n"); 843 pr_err(MOD "error allocating status page\n");
697 goto err4; 844 goto err4;
698 } 845 }
846 if (c4iw_wr_log) {
847 rdev->wr_log = kzalloc((1 << c4iw_wr_log_size_order) *
848 sizeof(*rdev->wr_log), GFP_KERNEL);
849 if (rdev->wr_log) {
850 rdev->wr_log_size = 1 << c4iw_wr_log_size_order;
851 atomic_set(&rdev->wr_log_idx, 0);
852 } else {
853 pr_err(MOD "error allocating wr_log. Logging disabled\n");
854 }
855 }
699 return 0; 856 return 0;
700err4: 857err4:
701 c4iw_rqtpool_destroy(rdev); 858 c4iw_rqtpool_destroy(rdev);
@@ -709,6 +866,7 @@ err1:
709 866
710static void c4iw_rdev_close(struct c4iw_rdev *rdev) 867static void c4iw_rdev_close(struct c4iw_rdev *rdev)
711{ 868{
869 kfree(rdev->wr_log);
712 free_page((unsigned long)rdev->status_page); 870 free_page((unsigned long)rdev->status_page);
713 c4iw_pblpool_destroy(rdev); 871 c4iw_pblpool_destroy(rdev);
714 c4iw_rqtpool_destroy(rdev); 872 c4iw_rqtpool_destroy(rdev);
@@ -768,6 +926,27 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
768 } 926 }
769 devp->rdev.lldi = *infop; 927 devp->rdev.lldi = *infop;
770 928
929 /* init various hw-queue params based on lld info */
930 PDBG("%s: Ing. padding boundary is %d, egrsstatuspagesize = %d\n",
931 __func__, devp->rdev.lldi.sge_ingpadboundary,
932 devp->rdev.lldi.sge_egrstatuspagesize);
933
934 devp->rdev.hw_queue.t4_eq_status_entries =
935 devp->rdev.lldi.sge_ingpadboundary > 64 ? 2 : 1;
936 devp->rdev.hw_queue.t4_max_eq_size =
937 65520 - devp->rdev.hw_queue.t4_eq_status_entries;
938 devp->rdev.hw_queue.t4_max_iq_size = 65520 - 1;
939 devp->rdev.hw_queue.t4_max_rq_size =
940 8192 - devp->rdev.hw_queue.t4_eq_status_entries;
941 devp->rdev.hw_queue.t4_max_sq_size =
942 devp->rdev.hw_queue.t4_max_eq_size - 1;
943 devp->rdev.hw_queue.t4_max_qp_depth =
944 devp->rdev.hw_queue.t4_max_rq_size - 1;
945 devp->rdev.hw_queue.t4_max_cq_depth =
946 devp->rdev.hw_queue.t4_max_iq_size - 1;
947 devp->rdev.hw_queue.t4_stat_len =
948 devp->rdev.lldi.sge_egrstatuspagesize;
949
771 /* 950 /*
772 * For T5 devices, we map all of BAR2 with WC. 951 * For T5 devices, we map all of BAR2 with WC.
773 * For T4 devices with onchip qp mem, we map only that part 952 * For T4 devices with onchip qp mem, we map only that part
@@ -818,6 +997,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
818 mutex_init(&devp->rdev.stats.lock); 997 mutex_init(&devp->rdev.stats.lock);
819 mutex_init(&devp->db_mutex); 998 mutex_init(&devp->db_mutex);
820 INIT_LIST_HEAD(&devp->db_fc_list); 999 INIT_LIST_HEAD(&devp->db_fc_list);
1000 devp->avail_ird = devp->rdev.lldi.max_ird_adapter;
821 1001
822 if (c4iw_debugfs_root) { 1002 if (c4iw_debugfs_root) {
823 devp->debugfs_root = debugfs_create_dir( 1003 devp->debugfs_root = debugfs_create_dir(
diff --git a/drivers/infiniband/hw/cxgb4/ev.c b/drivers/infiniband/hw/cxgb4/ev.c
index d61d0a18f784..fbe6051af254 100644
--- a/drivers/infiniband/hw/cxgb4/ev.c
+++ b/drivers/infiniband/hw/cxgb4/ev.c
@@ -35,6 +35,55 @@
35 35
36#include "iw_cxgb4.h" 36#include "iw_cxgb4.h"
37 37
38static void print_tpte(struct c4iw_dev *dev, u32 stag)
39{
40 int ret;
41 struct fw_ri_tpte tpte;
42
43 ret = cxgb4_read_tpte(dev->rdev.lldi.ports[0], stag,
44 (__be32 *)&tpte);
45 if (ret) {
46 dev_err(&dev->rdev.lldi.pdev->dev,
47 "%s cxgb4_read_tpte err %d\n", __func__, ret);
48 return;
49 }
50 PDBG("stag idx 0x%x valid %d key 0x%x state %d pdid %d "
51 "perm 0x%x ps %d len 0x%llx va 0x%llx\n",
52 stag & 0xffffff00,
53 G_FW_RI_TPTE_VALID(ntohl(tpte.valid_to_pdid)),
54 G_FW_RI_TPTE_STAGKEY(ntohl(tpte.valid_to_pdid)),
55 G_FW_RI_TPTE_STAGSTATE(ntohl(tpte.valid_to_pdid)),
56 G_FW_RI_TPTE_PDID(ntohl(tpte.valid_to_pdid)),
57 G_FW_RI_TPTE_PERM(ntohl(tpte.locread_to_qpid)),
58 G_FW_RI_TPTE_PS(ntohl(tpte.locread_to_qpid)),
59 ((u64)ntohl(tpte.len_hi) << 32) | ntohl(tpte.len_lo),
60 ((u64)ntohl(tpte.va_hi) << 32) | ntohl(tpte.va_lo_fbo));
61}
62
63static void dump_err_cqe(struct c4iw_dev *dev, struct t4_cqe *err_cqe)
64{
65 __be64 *p = (void *)err_cqe;
66
67 dev_err(&dev->rdev.lldi.pdev->dev,
68 "AE qpid %d opcode %d status 0x%x "
69 "type %d len 0x%x wrid.hi 0x%x wrid.lo 0x%x\n",
70 CQE_QPID(err_cqe), CQE_OPCODE(err_cqe),
71 CQE_STATUS(err_cqe), CQE_TYPE(err_cqe), ntohl(err_cqe->len),
72 CQE_WRID_HI(err_cqe), CQE_WRID_LOW(err_cqe));
73
74 PDBG("%016llx %016llx %016llx %016llx\n",
75 be64_to_cpu(p[0]), be64_to_cpu(p[1]), be64_to_cpu(p[2]),
76 be64_to_cpu(p[3]));
77
78 /*
79 * Ingress WRITE and READ_RESP errors provide
80 * the offending stag, so parse and log it.
81 */
82 if (RQ_TYPE(err_cqe) && (CQE_OPCODE(err_cqe) == FW_RI_RDMA_WRITE ||
83 CQE_OPCODE(err_cqe) == FW_RI_READ_RESP))
84 print_tpte(dev, CQE_WRID_STAG(err_cqe));
85}
86
38static void post_qp_event(struct c4iw_dev *dev, struct c4iw_cq *chp, 87static void post_qp_event(struct c4iw_dev *dev, struct c4iw_cq *chp,
39 struct c4iw_qp *qhp, 88 struct c4iw_qp *qhp,
40 struct t4_cqe *err_cqe, 89 struct t4_cqe *err_cqe,
@@ -44,11 +93,7 @@ static void post_qp_event(struct c4iw_dev *dev, struct c4iw_cq *chp,
44 struct c4iw_qp_attributes attrs; 93 struct c4iw_qp_attributes attrs;
45 unsigned long flag; 94 unsigned long flag;
46 95
47 printk(KERN_ERR MOD "AE qpid 0x%x opcode %d status 0x%x " 96 dump_err_cqe(dev, err_cqe);
48 "type %d wrid.hi 0x%x wrid.lo 0x%x\n",
49 CQE_QPID(err_cqe), CQE_OPCODE(err_cqe),
50 CQE_STATUS(err_cqe), CQE_TYPE(err_cqe),
51 CQE_WRID_HI(err_cqe), CQE_WRID_LOW(err_cqe));
52 97
53 if (qhp->attr.state == C4IW_QP_STATE_RTS) { 98 if (qhp->attr.state == C4IW_QP_STATE_RTS) {
54 attrs.next_state = C4IW_QP_STATE_TERMINATE; 99 attrs.next_state = C4IW_QP_STATE_TERMINATE;
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
index 125bc5d1e175..69f047cdba6a 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -139,6 +139,29 @@ struct c4iw_stats {
139 u64 pas_ofld_conn_fails; 139 u64 pas_ofld_conn_fails;
140}; 140};
141 141
142struct c4iw_hw_queue {
143 int t4_eq_status_entries;
144 int t4_max_eq_size;
145 int t4_max_iq_size;
146 int t4_max_rq_size;
147 int t4_max_sq_size;
148 int t4_max_qp_depth;
149 int t4_max_cq_depth;
150 int t4_stat_len;
151};
152
153struct wr_log_entry {
154 struct timespec post_host_ts;
155 struct timespec poll_host_ts;
156 u64 post_sge_ts;
157 u64 cqe_sge_ts;
158 u64 poll_sge_ts;
159 u16 qid;
160 u16 wr_id;
161 u8 opcode;
162 u8 valid;
163};
164
142struct c4iw_rdev { 165struct c4iw_rdev {
143 struct c4iw_resource resource; 166 struct c4iw_resource resource;
144 unsigned long qpshift; 167 unsigned long qpshift;
@@ -156,7 +179,11 @@ struct c4iw_rdev {
156 unsigned long oc_mw_pa; 179 unsigned long oc_mw_pa;
157 void __iomem *oc_mw_kva; 180 void __iomem *oc_mw_kva;
158 struct c4iw_stats stats; 181 struct c4iw_stats stats;
182 struct c4iw_hw_queue hw_queue;
159 struct t4_dev_status_page *status_page; 183 struct t4_dev_status_page *status_page;
184 atomic_t wr_log_idx;
185 struct wr_log_entry *wr_log;
186 int wr_log_size;
160}; 187};
161 188
162static inline int c4iw_fatal_error(struct c4iw_rdev *rdev) 189static inline int c4iw_fatal_error(struct c4iw_rdev *rdev)
@@ -237,6 +264,7 @@ struct c4iw_dev {
237 struct idr atid_idr; 264 struct idr atid_idr;
238 struct idr stid_idr; 265 struct idr stid_idr;
239 struct list_head db_fc_list; 266 struct list_head db_fc_list;
267 u32 avail_ird;
240}; 268};
241 269
242static inline struct c4iw_dev *to_c4iw_dev(struct ib_device *ibdev) 270static inline struct c4iw_dev *to_c4iw_dev(struct ib_device *ibdev)
@@ -318,6 +346,13 @@ static inline void remove_handle_nolock(struct c4iw_dev *rhp,
318 _remove_handle(rhp, idr, id, 0); 346 _remove_handle(rhp, idr, id, 0);
319} 347}
320 348
349extern uint c4iw_max_read_depth;
350
351static inline int cur_max_read_depth(struct c4iw_dev *dev)
352{
353 return min(dev->rdev.lldi.max_ordird_qp, c4iw_max_read_depth);
354}
355
321struct c4iw_pd { 356struct c4iw_pd {
322 struct ib_pd ibpd; 357 struct ib_pd ibpd;
323 u32 pdid; 358 u32 pdid;
@@ -991,7 +1026,8 @@ void c4iw_ev_dispatch(struct c4iw_dev *dev, struct t4_cqe *err_cqe);
991 1026
992extern struct cxgb4_client t4c_client; 1027extern struct cxgb4_client t4c_client;
993extern c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS]; 1028extern c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS];
994extern int c4iw_max_read_depth; 1029extern void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe);
1030extern int c4iw_wr_log;
995extern int db_fc_threshold; 1031extern int db_fc_threshold;
996extern int db_coalescing_threshold; 1032extern int db_coalescing_threshold;
997extern int use_dsgl; 1033extern int use_dsgl;
diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
index b1d305338de6..67c4a6908021 100644
--- a/drivers/infiniband/hw/cxgb4/provider.c
+++ b/drivers/infiniband/hw/cxgb4/provider.c
@@ -319,13 +319,15 @@ static int c4iw_query_device(struct ib_device *ibdev,
319 props->vendor_part_id = (u32)dev->rdev.lldi.pdev->device; 319 props->vendor_part_id = (u32)dev->rdev.lldi.pdev->device;
320 props->max_mr_size = T4_MAX_MR_SIZE; 320 props->max_mr_size = T4_MAX_MR_SIZE;
321 props->max_qp = T4_MAX_NUM_QP; 321 props->max_qp = T4_MAX_NUM_QP;
322 props->max_qp_wr = T4_MAX_QP_DEPTH; 322 props->max_qp_wr = dev->rdev.hw_queue.t4_max_qp_depth;
323 props->max_sge = T4_MAX_RECV_SGE; 323 props->max_sge = T4_MAX_RECV_SGE;
324 props->max_sge_rd = 1; 324 props->max_sge_rd = 1;
325 props->max_qp_rd_atom = c4iw_max_read_depth; 325 props->max_res_rd_atom = dev->rdev.lldi.max_ird_adapter;
326 props->max_qp_init_rd_atom = c4iw_max_read_depth; 326 props->max_qp_rd_atom = min(dev->rdev.lldi.max_ordird_qp,
327 c4iw_max_read_depth);
328 props->max_qp_init_rd_atom = props->max_qp_rd_atom;
327 props->max_cq = T4_MAX_NUM_CQ; 329 props->max_cq = T4_MAX_NUM_CQ;
328 props->max_cqe = T4_MAX_CQ_DEPTH; 330 props->max_cqe = dev->rdev.hw_queue.t4_max_cq_depth;
329 props->max_mr = c4iw_num_stags(&dev->rdev); 331 props->max_mr = c4iw_num_stags(&dev->rdev);
330 props->max_pd = T4_MAX_NUM_PD; 332 props->max_pd = T4_MAX_NUM_PD;
331 props->local_ca_ack_delay = 0; 333 props->local_ca_ack_delay = 0;
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
index 086f62f5dc9e..fd66bd9a9db0 100644
--- a/drivers/infiniband/hw/cxgb4/qp.c
+++ b/drivers/infiniband/hw/cxgb4/qp.c
@@ -58,6 +58,31 @@ static int max_fr_immd = T4_MAX_FR_IMMD;
58module_param(max_fr_immd, int, 0644); 58module_param(max_fr_immd, int, 0644);
59MODULE_PARM_DESC(max_fr_immd, "fastreg threshold for using DSGL instead of immedate"); 59MODULE_PARM_DESC(max_fr_immd, "fastreg threshold for using DSGL instead of immedate");
60 60
61static int alloc_ird(struct c4iw_dev *dev, u32 ird)
62{
63 int ret = 0;
64
65 spin_lock_irq(&dev->lock);
66 if (ird <= dev->avail_ird)
67 dev->avail_ird -= ird;
68 else
69 ret = -ENOMEM;
70 spin_unlock_irq(&dev->lock);
71
72 if (ret)
73 dev_warn(&dev->rdev.lldi.pdev->dev,
74 "device IRD resources exhausted\n");
75
76 return ret;
77}
78
79static void free_ird(struct c4iw_dev *dev, int ird)
80{
81 spin_lock_irq(&dev->lock);
82 dev->avail_ird += ird;
83 spin_unlock_irq(&dev->lock);
84}
85
61static void set_state(struct c4iw_qp *qhp, enum c4iw_qp_state state) 86static void set_state(struct c4iw_qp *qhp, enum c4iw_qp_state state)
62{ 87{
63 unsigned long flag; 88 unsigned long flag;
@@ -258,7 +283,8 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
258 /* 283 /*
259 * eqsize is the number of 64B entries plus the status page size. 284 * eqsize is the number of 64B entries plus the status page size.
260 */ 285 */
261 eqsize = wq->sq.size * T4_SQ_NUM_SLOTS + T4_EQ_STATUS_ENTRIES; 286 eqsize = wq->sq.size * T4_SQ_NUM_SLOTS +
287 rdev->hw_queue.t4_eq_status_entries;
262 288
263 res->u.sqrq.fetchszm_to_iqid = cpu_to_be32( 289 res->u.sqrq.fetchszm_to_iqid = cpu_to_be32(
264 V_FW_RI_RES_WR_HOSTFCMODE(0) | /* no host cidx updates */ 290 V_FW_RI_RES_WR_HOSTFCMODE(0) | /* no host cidx updates */
@@ -283,7 +309,8 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
283 /* 309 /*
284 * eqsize is the number of 64B entries plus the status page size. 310 * eqsize is the number of 64B entries plus the status page size.
285 */ 311 */
286 eqsize = wq->rq.size * T4_RQ_NUM_SLOTS + T4_EQ_STATUS_ENTRIES; 312 eqsize = wq->rq.size * T4_RQ_NUM_SLOTS +
313 rdev->hw_queue.t4_eq_status_entries;
287 res->u.sqrq.fetchszm_to_iqid = cpu_to_be32( 314 res->u.sqrq.fetchszm_to_iqid = cpu_to_be32(
288 V_FW_RI_RES_WR_HOSTFCMODE(0) | /* no host cidx updates */ 315 V_FW_RI_RES_WR_HOSTFCMODE(0) | /* no host cidx updates */
289 V_FW_RI_RES_WR_CPRIO(0) | /* don't keep in chip cache */ 316 V_FW_RI_RES_WR_CPRIO(0) | /* don't keep in chip cache */
@@ -796,6 +823,11 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
796 qhp->sq_sig_all; 823 qhp->sq_sig_all;
797 swsqe->flushed = 0; 824 swsqe->flushed = 0;
798 swsqe->wr_id = wr->wr_id; 825 swsqe->wr_id = wr->wr_id;
826 if (c4iw_wr_log) {
827 swsqe->sge_ts = cxgb4_read_sge_timestamp(
828 qhp->rhp->rdev.lldi.ports[0]);
829 getnstimeofday(&swsqe->host_ts);
830 }
799 831
800 init_wr_hdr(wqe, qhp->wq.sq.pidx, fw_opcode, fw_flags, len16); 832 init_wr_hdr(wqe, qhp->wq.sq.pidx, fw_opcode, fw_flags, len16);
801 833
@@ -859,6 +891,13 @@ int c4iw_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
859 } 891 }
860 892
861 qhp->wq.rq.sw_rq[qhp->wq.rq.pidx].wr_id = wr->wr_id; 893 qhp->wq.rq.sw_rq[qhp->wq.rq.pidx].wr_id = wr->wr_id;
894 if (c4iw_wr_log) {
895 qhp->wq.rq.sw_rq[qhp->wq.rq.pidx].sge_ts =
896 cxgb4_read_sge_timestamp(
897 qhp->rhp->rdev.lldi.ports[0]);
898 getnstimeofday(
899 &qhp->wq.rq.sw_rq[qhp->wq.rq.pidx].host_ts);
900 }
862 901
863 wqe->recv.opcode = FW_RI_RECV_WR; 902 wqe->recv.opcode = FW_RI_RECV_WR;
864 wqe->recv.r1 = 0; 903 wqe->recv.r1 = 0;
@@ -1202,12 +1241,20 @@ static int rdma_init(struct c4iw_dev *rhp, struct c4iw_qp *qhp)
1202 int ret; 1241 int ret;
1203 struct sk_buff *skb; 1242 struct sk_buff *skb;
1204 1243
1205 PDBG("%s qhp %p qid 0x%x tid %u\n", __func__, qhp, qhp->wq.sq.qid, 1244 PDBG("%s qhp %p qid 0x%x tid %u ird %u ord %u\n", __func__, qhp,
1206 qhp->ep->hwtid); 1245 qhp->wq.sq.qid, qhp->ep->hwtid, qhp->ep->ird, qhp->ep->ord);
1207 1246
1208 skb = alloc_skb(sizeof *wqe, GFP_KERNEL); 1247 skb = alloc_skb(sizeof *wqe, GFP_KERNEL);
1209 if (!skb) 1248 if (!skb) {
1210 return -ENOMEM; 1249 ret = -ENOMEM;
1250 goto out;
1251 }
1252 ret = alloc_ird(rhp, qhp->attr.max_ird);
1253 if (ret) {
1254 qhp->attr.max_ird = 0;
1255 kfree_skb(skb);
1256 goto out;
1257 }
1211 set_wr_txq(skb, CPL_PRIORITY_DATA, qhp->ep->txq_idx); 1258 set_wr_txq(skb, CPL_PRIORITY_DATA, qhp->ep->txq_idx);
1212 1259
1213 wqe = (struct fw_ri_wr *)__skb_put(skb, sizeof(*wqe)); 1260 wqe = (struct fw_ri_wr *)__skb_put(skb, sizeof(*wqe));
@@ -1258,10 +1305,14 @@ static int rdma_init(struct c4iw_dev *rhp, struct c4iw_qp *qhp)
1258 1305
1259 ret = c4iw_ofld_send(&rhp->rdev, skb); 1306 ret = c4iw_ofld_send(&rhp->rdev, skb);
1260 if (ret) 1307 if (ret)
1261 goto out; 1308 goto err1;
1262 1309
1263 ret = c4iw_wait_for_reply(&rhp->rdev, &qhp->ep->com.wr_wait, 1310 ret = c4iw_wait_for_reply(&rhp->rdev, &qhp->ep->com.wr_wait,
1264 qhp->ep->hwtid, qhp->wq.sq.qid, __func__); 1311 qhp->ep->hwtid, qhp->wq.sq.qid, __func__);
1312 if (!ret)
1313 goto out;
1314err1:
1315 free_ird(rhp, qhp->attr.max_ird);
1265out: 1316out:
1266 PDBG("%s ret %d\n", __func__, ret); 1317 PDBG("%s ret %d\n", __func__, ret);
1267 return ret; 1318 return ret;
@@ -1306,7 +1357,7 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
1306 newattr.max_ord = attrs->max_ord; 1357 newattr.max_ord = attrs->max_ord;
1307 } 1358 }
1308 if (mask & C4IW_QP_ATTR_MAX_IRD) { 1359 if (mask & C4IW_QP_ATTR_MAX_IRD) {
1309 if (attrs->max_ird > c4iw_max_read_depth) { 1360 if (attrs->max_ird > cur_max_read_depth(rhp)) {
1310 ret = -EINVAL; 1361 ret = -EINVAL;
1311 goto out; 1362 goto out;
1312 } 1363 }
@@ -1529,6 +1580,7 @@ int c4iw_destroy_qp(struct ib_qp *ib_qp)
1529 if (!list_empty(&qhp->db_fc_entry)) 1580 if (!list_empty(&qhp->db_fc_entry))
1530 list_del_init(&qhp->db_fc_entry); 1581 list_del_init(&qhp->db_fc_entry);
1531 spin_unlock_irq(&rhp->lock); 1582 spin_unlock_irq(&rhp->lock);
1583 free_ird(rhp, qhp->attr.max_ird);
1532 1584
1533 ucontext = ib_qp->uobject ? 1585 ucontext = ib_qp->uobject ?
1534 to_c4iw_ucontext(ib_qp->uobject->context) : NULL; 1586 to_c4iw_ucontext(ib_qp->uobject->context) : NULL;
@@ -1570,11 +1622,11 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
1570 return ERR_PTR(-EINVAL); 1622 return ERR_PTR(-EINVAL);
1571 1623
1572 rqsize = roundup(attrs->cap.max_recv_wr + 1, 16); 1624 rqsize = roundup(attrs->cap.max_recv_wr + 1, 16);
1573 if (rqsize > T4_MAX_RQ_SIZE) 1625 if (rqsize > rhp->rdev.hw_queue.t4_max_rq_size)
1574 return ERR_PTR(-E2BIG); 1626 return ERR_PTR(-E2BIG);
1575 1627
1576 sqsize = roundup(attrs->cap.max_send_wr + 1, 16); 1628 sqsize = roundup(attrs->cap.max_send_wr + 1, 16);
1577 if (sqsize > T4_MAX_SQ_SIZE) 1629 if (sqsize > rhp->rdev.hw_queue.t4_max_sq_size)
1578 return ERR_PTR(-E2BIG); 1630 return ERR_PTR(-E2BIG);
1579 1631
1580 ucontext = pd->uobject ? to_c4iw_ucontext(pd->uobject->context) : NULL; 1632 ucontext = pd->uobject ? to_c4iw_ucontext(pd->uobject->context) : NULL;
@@ -1619,8 +1671,8 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
1619 qhp->attr.enable_rdma_read = 1; 1671 qhp->attr.enable_rdma_read = 1;
1620 qhp->attr.enable_rdma_write = 1; 1672 qhp->attr.enable_rdma_write = 1;
1621 qhp->attr.enable_bind = 1; 1673 qhp->attr.enable_bind = 1;
1622 qhp->attr.max_ord = 1; 1674 qhp->attr.max_ord = 0;
1623 qhp->attr.max_ird = 1; 1675 qhp->attr.max_ird = 0;
1624 qhp->sq_sig_all = attrs->sq_sig_type == IB_SIGNAL_ALL_WR; 1676 qhp->sq_sig_all = attrs->sq_sig_type == IB_SIGNAL_ALL_WR;
1625 spin_lock_init(&qhp->lock); 1677 spin_lock_init(&qhp->lock);
1626 mutex_init(&qhp->mutex); 1678 mutex_init(&qhp->mutex);
diff --git a/drivers/infiniband/hw/cxgb4/t4.h b/drivers/infiniband/hw/cxgb4/t4.h
index 68b0a6bf4eb0..c9f7034e6647 100644
--- a/drivers/infiniband/hw/cxgb4/t4.h
+++ b/drivers/infiniband/hw/cxgb4/t4.h
@@ -39,19 +39,11 @@
39#define T4_MAX_NUM_QP 65536 39#define T4_MAX_NUM_QP 65536
40#define T4_MAX_NUM_CQ 65536 40#define T4_MAX_NUM_CQ 65536
41#define T4_MAX_NUM_PD 65536 41#define T4_MAX_NUM_PD 65536
42#define T4_EQ_STATUS_ENTRIES (L1_CACHE_BYTES > 64 ? 2 : 1)
43#define T4_MAX_EQ_SIZE (65520 - T4_EQ_STATUS_ENTRIES)
44#define T4_MAX_IQ_SIZE (65520 - 1)
45#define T4_MAX_RQ_SIZE (8192 - T4_EQ_STATUS_ENTRIES)
46#define T4_MAX_SQ_SIZE (T4_MAX_EQ_SIZE - 1)
47#define T4_MAX_QP_DEPTH (T4_MAX_RQ_SIZE - 1)
48#define T4_MAX_CQ_DEPTH (T4_MAX_IQ_SIZE - 1)
49#define T4_MAX_NUM_STAG (1<<15) 42#define T4_MAX_NUM_STAG (1<<15)
50#define T4_MAX_MR_SIZE (~0ULL) 43#define T4_MAX_MR_SIZE (~0ULL)
51#define T4_PAGESIZE_MASK 0xffff000 /* 4KB-128MB */ 44#define T4_PAGESIZE_MASK 0xffff000 /* 4KB-128MB */
52#define T4_STAG_UNSET 0xffffffff 45#define T4_STAG_UNSET 0xffffffff
53#define T4_FW_MAJ 0 46#define T4_FW_MAJ 0
54#define T4_EQ_STATUS_ENTRIES (L1_CACHE_BYTES > 64 ? 2 : 1)
55#define A_PCIE_MA_SYNC 0x30b4 47#define A_PCIE_MA_SYNC 0x30b4
56 48
57struct t4_status_page { 49struct t4_status_page {
@@ -244,8 +236,8 @@ struct t4_cqe {
244#define CQE_WRID_SQ_IDX(x) ((x)->u.scqe.cidx) 236#define CQE_WRID_SQ_IDX(x) ((x)->u.scqe.cidx)
245 237
246/* generic accessor macros */ 238/* generic accessor macros */
247#define CQE_WRID_HI(x) ((x)->u.gen.wrid_hi) 239#define CQE_WRID_HI(x) (be32_to_cpu((x)->u.gen.wrid_hi))
248#define CQE_WRID_LOW(x) ((x)->u.gen.wrid_low) 240#define CQE_WRID_LOW(x) (be32_to_cpu((x)->u.gen.wrid_low))
249 241
250/* macros for flit 3 of the cqe */ 242/* macros for flit 3 of the cqe */
251#define S_CQE_GENBIT 63 243#define S_CQE_GENBIT 63
@@ -277,6 +269,8 @@ struct t4_swsqe {
277 int signaled; 269 int signaled;
278 u16 idx; 270 u16 idx;
279 int flushed; 271 int flushed;
272 struct timespec host_ts;
273 u64 sge_ts;
280}; 274};
281 275
282static inline pgprot_t t4_pgprot_wc(pgprot_t prot) 276static inline pgprot_t t4_pgprot_wc(pgprot_t prot)
@@ -314,6 +308,8 @@ struct t4_sq {
314 308
315struct t4_swrqe { 309struct t4_swrqe {
316 u64 wr_id; 310 u64 wr_id;
311 struct timespec host_ts;
312 u64 sge_ts;
317}; 313};
318 314
319struct t4_rq { 315struct t4_rq {
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 5786a78ff8bc..4e675f4fecc9 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1394,8 +1394,8 @@ struct ipoib_dev_priv *ipoib_intf_alloc(const char *name)
1394{ 1394{
1395 struct net_device *dev; 1395 struct net_device *dev;
1396 1396
1397 dev = alloc_netdev((int) sizeof (struct ipoib_dev_priv), name, 1397 dev = alloc_netdev((int)sizeof(struct ipoib_dev_priv), name,
1398 ipoib_setup); 1398 NET_NAME_UNKNOWN, ipoib_setup);
1399 if (!dev) 1399 if (!dev)
1400 return NULL; 1400 return NULL;
1401 1401
diff --git a/drivers/isdn/i4l/isdn_net.c b/drivers/isdn/i4l/isdn_net.c
index d9aebbc510cc..c2ed6246a389 100644
--- a/drivers/isdn/i4l/isdn_net.c
+++ b/drivers/isdn/i4l/isdn_net.c
@@ -2588,7 +2588,8 @@ isdn_net_new(char *name, struct net_device *master)
2588 printk(KERN_WARNING "isdn_net: Could not allocate net-device\n"); 2588 printk(KERN_WARNING "isdn_net: Could not allocate net-device\n");
2589 return NULL; 2589 return NULL;
2590 } 2590 }
2591 netdev->dev = alloc_netdev(sizeof(isdn_net_local), name, _isdn_setup); 2591 netdev->dev = alloc_netdev(sizeof(isdn_net_local), name,
2592 NET_NAME_UNKNOWN, _isdn_setup);
2592 if (!netdev->dev) { 2593 if (!netdev->dev) {
2593 printk(KERN_WARNING "isdn_net: Could not allocate network device\n"); 2594 printk(KERN_WARNING "isdn_net: Could not allocate network device\n");
2594 kfree(netdev); 2595 kfree(netdev);
diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c
index 8a86b3025637..059e6117f22b 100644
--- a/drivers/media/dvb-core/dvb_net.c
+++ b/drivers/media/dvb-core/dvb_net.c
@@ -1276,7 +1276,8 @@ static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype)
1276 if ((if_num = get_if(dvbnet)) < 0) 1276 if ((if_num = get_if(dvbnet)) < 0)
1277 return -EINVAL; 1277 return -EINVAL;
1278 1278
1279 net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb", dvb_net_setup); 1279 net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb",
1280 NET_NAME_UNKNOWN, dvb_net_setup);
1280 if (!net) 1281 if (!net)
1281 return -ENOMEM; 1282 return -ENOMEM;
1282 1283
diff --git a/drivers/misc/sgi-xp/xpnet.c b/drivers/misc/sgi-xp/xpnet.c
index 3fac67a5204c..557f9782c53c 100644
--- a/drivers/misc/sgi-xp/xpnet.c
+++ b/drivers/misc/sgi-xp/xpnet.c
@@ -544,7 +544,8 @@ xpnet_init(void)
544 * use ether_setup() to init the majority of our device 544 * use ether_setup() to init the majority of our device
545 * structure and then override the necessary pieces. 545 * structure and then override the necessary pieces.
546 */ 546 */
547 xpnet_device = alloc_netdev(0, XPNET_DEVICE_NAME, ether_setup); 547 xpnet_device = alloc_netdev(0, XPNET_DEVICE_NAME, NET_NAME_UNKNOWN,
548 ether_setup);
548 if (xpnet_device == NULL) { 549 if (xpnet_device == NULL) {
549 kfree(xpnet_broadcast_partitions); 550 kfree(xpnet_broadcast_partitions);
550 return -ENOMEM; 551 return -ENOMEM;
diff --git a/drivers/net/arcnet/arcnet.c b/drivers/net/arcnet/arcnet.c
index a956053608f9..3b790de6c976 100644
--- a/drivers/net/arcnet/arcnet.c
+++ b/drivers/net/arcnet/arcnet.c
@@ -346,7 +346,8 @@ struct net_device *alloc_arcdev(const char *name)
346 struct net_device *dev; 346 struct net_device *dev;
347 347
348 dev = alloc_netdev(sizeof(struct arcnet_local), 348 dev = alloc_netdev(sizeof(struct arcnet_local),
349 name && *name ? name : "arc%d", arcdev_setup); 349 name && *name ? name : "arc%d", NET_NAME_UNKNOWN,
350 arcdev_setup);
350 if(dev) { 351 if(dev) {
351 struct arcnet_local *lp = netdev_priv(dev); 352 struct arcnet_local *lp = netdev_priv(dev);
352 spin_lock_init(&lp->lock); 353 spin_lock_init(&lp->lock);
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 09dc3ef771a7..46dcb7b6216f 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4420,7 +4420,7 @@ int bond_create(struct net *net, const char *name)
4420 rtnl_lock(); 4420 rtnl_lock();
4421 4421
4422 bond_dev = alloc_netdev_mq(sizeof(struct bonding), 4422 bond_dev = alloc_netdev_mq(sizeof(struct bonding),
4423 name ? name : "bond%d", 4423 name ? name : "bond%d", NET_NAME_UNKNOWN,
4424 bond_setup, tx_queues); 4424 bond_setup, tx_queues);
4425 if (!bond_dev) { 4425 if (!bond_dev) {
4426 pr_err("%s: eek! can't alloc netdev!\n", name); 4426 pr_err("%s: eek! can't alloc netdev!\n", name);
diff --git a/drivers/net/caif/caif_serial.c b/drivers/net/caif/caif_serial.c
index fc73865bb83a..27bbc56de15f 100644
--- a/drivers/net/caif/caif_serial.c
+++ b/drivers/net/caif/caif_serial.c
@@ -349,7 +349,8 @@ static int ldisc_open(struct tty_struct *tty)
349 result = snprintf(name, sizeof(name), "cf%s", tty->name); 349 result = snprintf(name, sizeof(name), "cf%s", tty->name);
350 if (result >= IFNAMSIZ) 350 if (result >= IFNAMSIZ)
351 return -EINVAL; 351 return -EINVAL;
352 dev = alloc_netdev(sizeof(*ser), name, caifdev_setup); 352 dev = alloc_netdev(sizeof(*ser), name, NET_NAME_UNKNOWN,
353 caifdev_setup);
353 if (!dev) 354 if (!dev)
354 return -ENOMEM; 355 return -ENOMEM;
355 356
diff --git a/drivers/net/caif/caif_spi.c b/drivers/net/caif/caif_spi.c
index ff54c0eb2052..72ea9ff9bb9c 100644
--- a/drivers/net/caif/caif_spi.c
+++ b/drivers/net/caif/caif_spi.c
@@ -730,8 +730,8 @@ int cfspi_spi_probe(struct platform_device *pdev)
730 int res; 730 int res;
731 dev = (struct cfspi_dev *)pdev->dev.platform_data; 731 dev = (struct cfspi_dev *)pdev->dev.platform_data;
732 732
733 ndev = alloc_netdev(sizeof(struct cfspi), 733 ndev = alloc_netdev(sizeof(struct cfspi), "cfspi%d",
734 "cfspi%d", cfspi_setup); 734 NET_NAME_UNKNOWN, cfspi_setup);
735 if (!dev) 735 if (!dev)
736 return -ENODEV; 736 return -ENODEV;
737 737
diff --git a/drivers/net/caif/caif_virtio.c b/drivers/net/caif/caif_virtio.c
index 985608634f8c..a5fefb9059c5 100644
--- a/drivers/net/caif/caif_virtio.c
+++ b/drivers/net/caif/caif_virtio.c
@@ -661,7 +661,7 @@ static int cfv_probe(struct virtio_device *vdev)
661 int err = -EINVAL; 661 int err = -EINVAL;
662 662
663 netdev = alloc_netdev(sizeof(struct cfv_info), cfv_netdev_name, 663 netdev = alloc_netdev(sizeof(struct cfv_info), cfv_netdev_name,
664 cfv_netdev_setup); 664 NET_NAME_UNKNOWN, cfv_netdev_setup);
665 if (!netdev) 665 if (!netdev)
666 return -ENOMEM; 666 return -ENOMEM;
667 667
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index e318e87e2bfc..9f91fcba43f8 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -565,7 +565,7 @@ struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max)
565 else 565 else
566 size = sizeof_priv; 566 size = sizeof_priv;
567 567
568 dev = alloc_netdev(size, "can%d", can_setup); 568 dev = alloc_netdev(size, "can%d", NET_NAME_UNKNOWN, can_setup);
569 if (!dev) 569 if (!dev)
570 return NULL; 570 return NULL;
571 571
diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c
index ea4d4f1a6411..acb5b92ace92 100644
--- a/drivers/net/can/slcan.c
+++ b/drivers/net/can/slcan.c
@@ -529,7 +529,7 @@ static struct slcan *slc_alloc(dev_t line)
529 return NULL; 529 return NULL;
530 530
531 sprintf(name, "slcan%d", i); 531 sprintf(name, "slcan%d", i);
532 dev = alloc_netdev(sizeof(*sl), name, slc_setup); 532 dev = alloc_netdev(sizeof(*sl), name, NET_NAME_UNKNOWN, slc_setup);
533 if (!dev) 533 if (!dev)
534 return NULL; 534 return NULL;
535 535
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
index 0932ffbf381b..ff435fbd1ad0 100644
--- a/drivers/net/dummy.c
+++ b/drivers/net/dummy.c
@@ -164,7 +164,7 @@ static int __init dummy_init_one(void)
164 struct net_device *dev_dummy; 164 struct net_device *dev_dummy;
165 int err; 165 int err;
166 166
167 dev_dummy = alloc_netdev(0, "dummy%d", dummy_setup); 167 dev_dummy = alloc_netdev(0, "dummy%d", NET_NAME_UNKNOWN, dummy_setup);
168 if (!dev_dummy) 168 if (!dev_dummy)
169 return -ENOMEM; 169 return -ENOMEM;
170 170
diff --git a/drivers/net/eql.c b/drivers/net/eql.c
index 7a79b6046879..957e5c0cede3 100644
--- a/drivers/net/eql.c
+++ b/drivers/net/eql.c
@@ -585,7 +585,8 @@ static int __init eql_init_module(void)
585 585
586 pr_info("%s\n", version); 586 pr_info("%s\n", version);
587 587
588 dev_eql = alloc_netdev(sizeof(equalizer_t), "eql", eql_setup); 588 dev_eql = alloc_netdev(sizeof(equalizer_t), "eql", NET_NAME_UNKNOWN,
589 eql_setup);
589 if (!dev_eql) 590 if (!dev_eql)
590 return -ENOMEM; 591 return -ENOMEM;
591 592
diff --git a/drivers/net/ethernet/8390/lib8390.c b/drivers/net/ethernet/8390/lib8390.c
index 599311f0e05c..b96e8852b2d1 100644
--- a/drivers/net/ethernet/8390/lib8390.c
+++ b/drivers/net/ethernet/8390/lib8390.c
@@ -986,7 +986,7 @@ static void ethdev_setup(struct net_device *dev)
986static struct net_device *____alloc_ei_netdev(int size) 986static struct net_device *____alloc_ei_netdev(int size)
987{ 987{
988 return alloc_netdev(sizeof(struct ei_device) + size, "eth%d", 988 return alloc_netdev(sizeof(struct ei_device) + size, "eth%d",
989 ethdev_setup); 989 NET_NAME_UNKNOWN, ethdev_setup);
990} 990}
991 991
992 992
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
index 8909f2b51af1..f7405261f23e 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
@@ -331,16 +331,6 @@ static int xgbe_set_settings(struct net_device *netdev,
331 (cmd->duplex != DUPLEX_FULL))) 331 (cmd->duplex != DUPLEX_FULL)))
332 goto unlock; 332 goto unlock;
333 333
334 if (cmd->autoneg == AUTONEG_ENABLE) {
335 /* Clear settings needed to force speeds */
336 phydev->supported &= ~SUPPORTED_1000baseT_Full;
337 phydev->supported &= ~SUPPORTED_10000baseT_Full;
338 } else {
339 /* Add settings needed to force speed */
340 phydev->supported |= SUPPORTED_1000baseT_Full;
341 phydev->supported |= SUPPORTED_10000baseT_Full;
342 }
343
344 cmd->advertising &= phydev->supported; 334 cmd->advertising &= phydev->supported;
345 if ((cmd->autoneg == AUTONEG_ENABLE) && !cmd->advertising) 335 if ((cmd->autoneg == AUTONEG_ENABLE) && !cmd->advertising)
346 goto unlock; 336 goto unlock;
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
index ea7a5d6750ea..225f22d5fe0a 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
@@ -375,10 +375,6 @@ int xgbe_mdio_register(struct xgbe_prv_data *pdata)
375 375
376 phydev->autoneg = pdata->default_autoneg; 376 phydev->autoneg = pdata->default_autoneg;
377 if (phydev->autoneg == AUTONEG_DISABLE) { 377 if (phydev->autoneg == AUTONEG_DISABLE) {
378 /* Add settings needed to force speed */
379 phydev->supported |= SUPPORTED_1000baseT_Full;
380 phydev->supported |= SUPPORTED_10000baseT_Full;
381
382 phydev->speed = pdata->default_speed; 378 phydev->speed = pdata->default_speed;
383 phydev->duplex = DUPLEX_FULL; 379 phydev->duplex = DUPLEX_FULL;
384 380
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index f338a7fcebf7..46156210df34 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -310,6 +310,9 @@ struct adapter_params {
310 310
311 unsigned int ofldq_wr_cred; 311 unsigned int ofldq_wr_cred;
312 bool ulptx_memwrite_dsgl; /* use of T5 DSGL allowed */ 312 bool ulptx_memwrite_dsgl; /* use of T5 DSGL allowed */
313
314 unsigned int max_ordird_qp; /* Max read depth per RDMA QP */
315 unsigned int max_ird_adapter; /* Max read depth per adapter */
313}; 316};
314 317
315#include "t4fw_api.h" 318#include "t4fw_api.h"
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 2b438bd68c73..9c7e4f0a7683 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -3832,6 +3832,85 @@ void cxgb4_enable_db_coalescing(struct net_device *dev)
3832} 3832}
3833EXPORT_SYMBOL(cxgb4_enable_db_coalescing); 3833EXPORT_SYMBOL(cxgb4_enable_db_coalescing);
3834 3834
3835int cxgb4_read_tpte(struct net_device *dev, u32 stag, __be32 *tpte)
3836{
3837 struct adapter *adap;
3838 u32 offset, memtype, memaddr;
3839 u32 edc0_size, edc1_size, mc0_size, mc1_size;
3840 u32 edc0_end, edc1_end, mc0_end, mc1_end;
3841 int ret;
3842
3843 adap = netdev2adap(dev);
3844
3845 offset = ((stag >> 8) * 32) + adap->vres.stag.start;
3846
3847 /* Figure out where the offset lands in the Memory Type/Address scheme.
3848 * This code assumes that the memory is laid out starting at offset 0
3849 * with no breaks as: EDC0, EDC1, MC0, MC1. All cards have both EDC0
3850 * and EDC1. Some cards will have neither MC0 nor MC1, most cards have
3851 * MC0, and some have both MC0 and MC1.
3852 */
3853 edc0_size = EDRAM_SIZE_GET(t4_read_reg(adap, MA_EDRAM0_BAR)) << 20;
3854 edc1_size = EDRAM_SIZE_GET(t4_read_reg(adap, MA_EDRAM1_BAR)) << 20;
3855 mc0_size = EXT_MEM_SIZE_GET(t4_read_reg(adap, MA_EXT_MEMORY_BAR)) << 20;
3856
3857 edc0_end = edc0_size;
3858 edc1_end = edc0_end + edc1_size;
3859 mc0_end = edc1_end + mc0_size;
3860
3861 if (offset < edc0_end) {
3862 memtype = MEM_EDC0;
3863 memaddr = offset;
3864 } else if (offset < edc1_end) {
3865 memtype = MEM_EDC1;
3866 memaddr = offset - edc0_end;
3867 } else {
3868 if (offset < mc0_end) {
3869 memtype = MEM_MC0;
3870 memaddr = offset - edc1_end;
3871 } else if (is_t4(adap->params.chip)) {
3872 /* T4 only has a single memory channel */
3873 goto err;
3874 } else {
3875 mc1_size = EXT_MEM_SIZE_GET(
3876 t4_read_reg(adap,
3877 MA_EXT_MEMORY1_BAR)) << 20;
3878 mc1_end = mc0_end + mc1_size;
3879 if (offset < mc1_end) {
3880 memtype = MEM_MC1;
3881 memaddr = offset - mc0_end;
3882 } else {
3883 /* offset beyond the end of any memory */
3884 goto err;
3885 }
3886 }
3887 }
3888
3889 spin_lock(&adap->win0_lock);
3890 ret = t4_memory_rw(adap, 0, memtype, memaddr, 32, tpte, T4_MEMORY_READ);
3891 spin_unlock(&adap->win0_lock);
3892 return ret;
3893
3894err:
3895 dev_err(adap->pdev_dev, "stag %#x, offset %#x out of range\n",
3896 stag, offset);
3897 return -EINVAL;
3898}
3899EXPORT_SYMBOL(cxgb4_read_tpte);
3900
3901u64 cxgb4_read_sge_timestamp(struct net_device *dev)
3902{
3903 u32 hi, lo;
3904 struct adapter *adap;
3905
3906 adap = netdev2adap(dev);
3907 lo = t4_read_reg(adap, SGE_TIMESTAMP_LO);
3908 hi = GET_TSVAL(t4_read_reg(adap, SGE_TIMESTAMP_HI));
3909
3910 return ((u64)hi << 32) | (u64)lo;
3911}
3912EXPORT_SYMBOL(cxgb4_read_sge_timestamp);
3913
3835static struct pci_driver cxgb4_driver; 3914static struct pci_driver cxgb4_driver;
3836 3915
3837static void check_neigh_update(struct neighbour *neigh) 3916static void check_neigh_update(struct neighbour *neigh)
@@ -4095,6 +4174,7 @@ static void uld_attach(struct adapter *adap, unsigned int uld)
4095 lli.wr_cred = adap->params.ofldq_wr_cred; 4174 lli.wr_cred = adap->params.ofldq_wr_cred;
4096 lli.adapter_type = adap->params.chip; 4175 lli.adapter_type = adap->params.chip;
4097 lli.iscsi_iolen = MAXRXDATA_GET(t4_read_reg(adap, TP_PARA_REG2)); 4176 lli.iscsi_iolen = MAXRXDATA_GET(t4_read_reg(adap, TP_PARA_REG2));
4177 lli.cclk_ps = 1000000000 / adap->params.vpd.cclk;
4098 lli.udb_density = 1 << QUEUESPERPAGEPF0_GET( 4178 lli.udb_density = 1 << QUEUESPERPAGEPF0_GET(
4099 t4_read_reg(adap, SGE_EGRESS_QUEUES_PER_PAGE_PF) >> 4179 t4_read_reg(adap, SGE_EGRESS_QUEUES_PER_PAGE_PF) >>
4100 (adap->fn * 4)); 4180 (adap->fn * 4));
@@ -4109,8 +4189,12 @@ static void uld_attach(struct adapter *adap, unsigned int uld)
4109 lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL); 4189 lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL);
4110 lli.fw_vers = adap->params.fw_vers; 4190 lli.fw_vers = adap->params.fw_vers;
4111 lli.dbfifo_int_thresh = dbfifo_int_thresh; 4191 lli.dbfifo_int_thresh = dbfifo_int_thresh;
4192 lli.sge_ingpadboundary = adap->sge.fl_align;
4193 lli.sge_egrstatuspagesize = adap->sge.stat_len;
4112 lli.sge_pktshift = adap->sge.pktshift; 4194 lli.sge_pktshift = adap->sge.pktshift;
4113 lli.enable_fw_ofld_conn = adap->flags & FW_OFLD_CONN; 4195 lli.enable_fw_ofld_conn = adap->flags & FW_OFLD_CONN;
4196 lli.max_ordird_qp = adap->params.max_ordird_qp;
4197 lli.max_ird_adapter = adap->params.max_ird_adapter;
4114 lli.ulptx_memwrite_dsgl = adap->params.ulptx_memwrite_dsgl; 4198 lli.ulptx_memwrite_dsgl = adap->params.ulptx_memwrite_dsgl;
4115 4199
4116 handle = ulds[uld].add(&lli); 4200 handle = ulds[uld].add(&lli);
@@ -5875,6 +5959,22 @@ static int adap_init0(struct adapter *adap)
5875 adap->vres.cq.size = val[3] - val[2] + 1; 5959 adap->vres.cq.size = val[3] - val[2] + 1;
5876 adap->vres.ocq.start = val[4]; 5960 adap->vres.ocq.start = val[4];
5877 adap->vres.ocq.size = val[5] - val[4] + 1; 5961 adap->vres.ocq.size = val[5] - val[4] + 1;
5962
5963 params[0] = FW_PARAM_DEV(MAXORDIRD_QP);
5964 params[1] = FW_PARAM_DEV(MAXIRD_ADAPTER);
5965 ret = t4_query_params(adap, 0, 0, 0, 2, params, val);
5966 if (ret < 0) {
5967 adap->params.max_ordird_qp = 8;
5968 adap->params.max_ird_adapter = 32 * adap->tids.ntids;
5969 ret = 0;
5970 } else {
5971 adap->params.max_ordird_qp = val[0];
5972 adap->params.max_ird_adapter = val[1];
5973 }
5974 dev_info(adap->pdev_dev,
5975 "max_ordird_qp %d max_ird_adapter %d\n",
5976 adap->params.max_ordird_qp,
5977 adap->params.max_ird_adapter);
5878 } 5978 }
5879 if (caps_cmd.iscsicaps) { 5979 if (caps_cmd.iscsicaps) {
5880 params[0] = FW_PARAM_PFVF(ISCSI_START); 5980 params[0] = FW_PARAM_PFVF(ISCSI_START);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
index 8f60851b75ad..79a84de1d204 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
@@ -243,6 +243,7 @@ struct cxgb4_lld_info {
243 unsigned char fw_api_ver; /* FW API version */ 243 unsigned char fw_api_ver; /* FW API version */
244 unsigned int fw_vers; /* FW version */ 244 unsigned int fw_vers; /* FW version */
245 unsigned int iscsi_iolen; /* iSCSI max I/O length */ 245 unsigned int iscsi_iolen; /* iSCSI max I/O length */
246 unsigned int cclk_ps; /* Core clock period in psec */
246 unsigned short udb_density; /* # of user DB/page */ 247 unsigned short udb_density; /* # of user DB/page */
247 unsigned short ucq_density; /* # of user CQs/page */ 248 unsigned short ucq_density; /* # of user CQs/page */
248 unsigned short filt_mode; /* filter optional components */ 249 unsigned short filt_mode; /* filter optional components */
@@ -251,11 +252,15 @@ struct cxgb4_lld_info {
251 void __iomem *gts_reg; /* address of GTS register */ 252 void __iomem *gts_reg; /* address of GTS register */
252 void __iomem *db_reg; /* address of kernel doorbell */ 253 void __iomem *db_reg; /* address of kernel doorbell */
253 int dbfifo_int_thresh; /* doorbell fifo int threshold */ 254 int dbfifo_int_thresh; /* doorbell fifo int threshold */
255 unsigned int sge_ingpadboundary; /* SGE ingress padding boundary */
256 unsigned int sge_egrstatuspagesize; /* SGE egress status page size */
254 unsigned int sge_pktshift; /* Padding between CPL and */ 257 unsigned int sge_pktshift; /* Padding between CPL and */
255 /* packet data */ 258 /* packet data */
256 unsigned int pf; /* Physical Function we're using */ 259 unsigned int pf; /* Physical Function we're using */
257 bool enable_fw_ofld_conn; /* Enable connection through fw */ 260 bool enable_fw_ofld_conn; /* Enable connection through fw */
258 /* WR */ 261 /* WR */
262 unsigned int max_ordird_qp; /* Max ORD/IRD depth per RDMA QP */
263 unsigned int max_ird_adapter; /* Max IRD memory per adapter */
259 bool ulptx_memwrite_dsgl; /* use of T5 DSGL allowed */ 264 bool ulptx_memwrite_dsgl; /* use of T5 DSGL allowed */
260}; 265};
261 266
@@ -292,5 +297,7 @@ int cxgb4_sync_txq_pidx(struct net_device *dev, u16 qid, u16 pidx, u16 size);
292int cxgb4_flush_eq_cache(struct net_device *dev); 297int cxgb4_flush_eq_cache(struct net_device *dev);
293void cxgb4_disable_db_coalescing(struct net_device *dev); 298void cxgb4_disable_db_coalescing(struct net_device *dev);
294void cxgb4_enable_db_coalescing(struct net_device *dev); 299void cxgb4_enable_db_coalescing(struct net_device *dev);
300int cxgb4_read_tpte(struct net_device *dev, u32 stag, __be32 *tpte);
301u64 cxgb4_read_sge_timestamp(struct net_device *dev);
295 302
296#endif /* !__CXGB4_OFLD_H */ 303#endif /* !__CXGB4_OFLD_H */
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
index ae7776471ceb..3b244abbf907 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
@@ -251,6 +251,12 @@
251#define V_NOCOALESCE(x) ((x) << S_NOCOALESCE) 251#define V_NOCOALESCE(x) ((x) << S_NOCOALESCE)
252#define F_NOCOALESCE V_NOCOALESCE(1U) 252#define F_NOCOALESCE V_NOCOALESCE(1U)
253 253
254#define SGE_TIMESTAMP_LO 0x1098
255#define SGE_TIMESTAMP_HI 0x109c
256#define S_TSVAL 0
257#define M_TSVAL 0xfffffffU
258#define GET_TSVAL(x) (((x) >> S_TSVAL) & M_TSVAL)
259
254#define SGE_TIMER_VALUE_0_AND_1 0x10b8 260#define SGE_TIMER_VALUE_0_AND_1 0x10b8
255#define TIMERVALUE0_MASK 0xffff0000U 261#define TIMERVALUE0_MASK 0xffff0000U
256#define TIMERVALUE0_SHIFT 16 262#define TIMERVALUE0_SHIFT 16
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
index 4a6ae4db7397..ff709e3b3e7e 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
@@ -934,6 +934,8 @@ enum fw_params_param_dev {
934 FW_PARAMS_PARAM_DEV_FWREV = 0x0B, 934 FW_PARAMS_PARAM_DEV_FWREV = 0x0B,
935 FW_PARAMS_PARAM_DEV_TPREV = 0x0C, 935 FW_PARAMS_PARAM_DEV_TPREV = 0x0C,
936 FW_PARAMS_PARAM_DEV_CF = 0x0D, 936 FW_PARAMS_PARAM_DEV_CF = 0x0D,
937 FW_PARAMS_PARAM_DEV_MAXORDIRD_QP = 0x13, /* max supported QP IRD/ORD */
938 FW_PARAMS_PARAM_DEV_MAXIRD_ADAPTER = 0x14, /* max supported adap IRD */
937 FW_PARAMS_PARAM_DEV_ULPTX_MEMWRITE_DSGL = 0x17, 939 FW_PARAMS_PARAM_DEV_ULPTX_MEMWRITE_DSGL = 0x17,
938}; 940};
939 941
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 9463ede32e6a..f4de2a9316ff 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -6390,4 +6390,4 @@ module_platform_driver(mvpp2_driver);
6390 6390
6391MODULE_DESCRIPTION("Marvell PPv2 Ethernet Driver - www.marvell.com"); 6391MODULE_DESCRIPTION("Marvell PPv2 Ethernet Driver - www.marvell.com");
6392MODULE_AUTHOR("Marcin Wojtas <mw@semihalf.com>"); 6392MODULE_AUTHOR("Marcin Wojtas <mw@semihalf.com>");
6393MODULE_LICENSE("GPLv2"); 6393MODULE_LICENSE("GPL v2");
diff --git a/drivers/net/ethernet/tile/tilegx.c b/drivers/net/ethernet/tile/tilegx.c
index 4c70360967c2..69557a26f749 100644
--- a/drivers/net/ethernet/tile/tilegx.c
+++ b/drivers/net/ethernet/tile/tilegx.c
@@ -2201,8 +2201,8 @@ static void tile_net_dev_init(const char *name, const uint8_t *mac)
2201 /* Allocate the device structure. Normally, "name" is a 2201 /* Allocate the device structure. Normally, "name" is a
2202 * template, instantiated by register_netdev(), but not for us. 2202 * template, instantiated by register_netdev(), but not for us.
2203 */ 2203 */
2204 dev = alloc_netdev_mqs(sizeof(*priv), name, tile_net_setup, 2204 dev = alloc_netdev_mqs(sizeof(*priv), name, NET_NAME_UNKNOWN,
2205 NR_CPUS, 1); 2205 tile_net_setup, NR_CPUS, 1);
2206 if (!dev) { 2206 if (!dev) {
2207 pr_err("alloc_netdev_mqs(%s) failed\n", name); 2207 pr_err("alloc_netdev_mqs(%s) failed\n", name);
2208 return; 2208 return;
diff --git a/drivers/net/ethernet/tile/tilepro.c b/drivers/net/ethernet/tile/tilepro.c
index e5a5c5d4ce0c..88c712126692 100644
--- a/drivers/net/ethernet/tile/tilepro.c
+++ b/drivers/net/ethernet/tile/tilepro.c
@@ -2292,7 +2292,8 @@ static struct net_device *tile_net_dev_init(const char *name)
2292 * tile_net_setup(), and saves "name". Normally, "name" is a 2292 * tile_net_setup(), and saves "name". Normally, "name" is a
2293 * template, instantiated by register_netdev(), but not for us. 2293 * template, instantiated by register_netdev(), but not for us.
2294 */ 2294 */
2295 dev = alloc_netdev(sizeof(*priv), name, tile_net_setup); 2295 dev = alloc_netdev(sizeof(*priv), name, NET_NAME_UNKNOWN,
2296 tile_net_setup);
2296 if (!dev) { 2297 if (!dev) {
2297 pr_err("alloc_netdev(%s) failed\n", name); 2298 pr_err("alloc_netdev(%s) failed\n", name);
2298 return NULL; 2299 return NULL;
diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c
index 66e2b19ef709..c3c4051a089d 100644
--- a/drivers/net/hamradio/6pack.c
+++ b/drivers/net/hamradio/6pack.c
@@ -596,7 +596,8 @@ static int sixpack_open(struct tty_struct *tty)
596 if (tty->ops->write == NULL) 596 if (tty->ops->write == NULL)
597 return -EOPNOTSUPP; 597 return -EOPNOTSUPP;
598 598
599 dev = alloc_netdev(sizeof(struct sixpack), "sp%d", sp_setup); 599 dev = alloc_netdev(sizeof(struct sixpack), "sp%d", NET_NAME_UNKNOWN,
600 sp_setup);
600 if (!dev) { 601 if (!dev) {
601 err = -ENOMEM; 602 err = -ENOMEM;
602 goto out; 603 goto out;
diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c
index 484f77ec2ce1..a98c153f371e 100644
--- a/drivers/net/hamradio/baycom_epp.c
+++ b/drivers/net/hamradio/baycom_epp.c
@@ -1206,7 +1206,7 @@ static int __init init_baycomepp(void)
1206 struct net_device *dev; 1206 struct net_device *dev;
1207 1207
1208 dev = alloc_netdev(sizeof(struct baycom_state), "bce%d", 1208 dev = alloc_netdev(sizeof(struct baycom_state), "bce%d",
1209 baycom_epp_dev_setup); 1209 NET_NAME_UNKNOWN, baycom_epp_dev_setup);
1210 1210
1211 if (!dev) { 1211 if (!dev) {
1212 printk(KERN_WARNING "bce%d : out of memory\n", i); 1212 printk(KERN_WARNING "bce%d : out of memory\n", i);
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c
index d50b23cf9ea9..c2894e43840e 100644
--- a/drivers/net/hamradio/bpqether.c
+++ b/drivers/net/hamradio/bpqether.c
@@ -501,8 +501,8 @@ static int bpq_new_device(struct net_device *edev)
501 struct net_device *ndev; 501 struct net_device *ndev;
502 struct bpqdev *bpq; 502 struct bpqdev *bpq;
503 503
504 ndev = alloc_netdev(sizeof(struct bpqdev), "bpq%d", 504 ndev = alloc_netdev(sizeof(struct bpqdev), "bpq%d", NET_NAME_UNKNOWN,
505 bpq_setup); 505 bpq_setup);
506 if (!ndev) 506 if (!ndev)
507 return -ENOMEM; 507 return -ENOMEM;
508 508
diff --git a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c
index 6636022a1027..0fad408f24aa 100644
--- a/drivers/net/hamradio/dmascc.c
+++ b/drivers/net/hamradio/dmascc.c
@@ -466,7 +466,7 @@ static int __init setup_adapter(int card_base, int type, int n)
466 if (!info) 466 if (!info)
467 goto out; 467 goto out;
468 468
469 info->dev[0] = alloc_netdev(0, "", dev_setup); 469 info->dev[0] = alloc_netdev(0, "", NET_NAME_UNKNOWN, dev_setup);
470 if (!info->dev[0]) { 470 if (!info->dev[0]) {
471 printk(KERN_ERR "dmascc: " 471 printk(KERN_ERR "dmascc: "
472 "could not allocate memory for %s at %#3x\n", 472 "could not allocate memory for %s at %#3x\n",
@@ -474,7 +474,7 @@ static int __init setup_adapter(int card_base, int type, int n)
474 goto out1; 474 goto out1;
475 } 475 }
476 476
477 info->dev[1] = alloc_netdev(0, "", dev_setup); 477 info->dev[1] = alloc_netdev(0, "", NET_NAME_UNKNOWN, dev_setup);
478 if (!info->dev[1]) { 478 if (!info->dev[1]) {
479 printk(KERN_ERR "dmascc: " 479 printk(KERN_ERR "dmascc: "
480 "could not allocate memory for %s at %#3x\n", 480 "could not allocate memory for %s at %#3x\n",
diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
index 5d78c1d08abd..c67a27245072 100644
--- a/drivers/net/hamradio/hdlcdrv.c
+++ b/drivers/net/hamradio/hdlcdrv.c
@@ -699,7 +699,7 @@ struct net_device *hdlcdrv_register(const struct hdlcdrv_ops *ops,
699 if (privsize < sizeof(struct hdlcdrv_state)) 699 if (privsize < sizeof(struct hdlcdrv_state))
700 privsize = sizeof(struct hdlcdrv_state); 700 privsize = sizeof(struct hdlcdrv_state);
701 701
702 dev = alloc_netdev(privsize, ifname, hdlcdrv_setup); 702 dev = alloc_netdev(privsize, ifname, NET_NAME_UNKNOWN, hdlcdrv_setup);
703 if (!dev) 703 if (!dev)
704 return ERR_PTR(-ENOMEM); 704 return ERR_PTR(-ENOMEM);
705 705
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
index 8a6c720a4cc9..f990bb1c3e02 100644
--- a/drivers/net/hamradio/mkiss.c
+++ b/drivers/net/hamradio/mkiss.c
@@ -734,7 +734,8 @@ static int mkiss_open(struct tty_struct *tty)
734 if (tty->ops->write == NULL) 734 if (tty->ops->write == NULL)
735 return -EOPNOTSUPP; 735 return -EOPNOTSUPP;
736 736
737 dev = alloc_netdev(sizeof(struct mkiss), "ax%d", ax_setup); 737 dev = alloc_netdev(sizeof(struct mkiss), "ax%d", NET_NAME_UNKNOWN,
738 ax_setup);
738 if (!dev) { 739 if (!dev) {
739 err = -ENOMEM; 740 err = -ENOMEM;
740 goto out; 741 goto out;
diff --git a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c
index 4bc6ee8e7987..57be9e0e98a6 100644
--- a/drivers/net/hamradio/scc.c
+++ b/drivers/net/hamradio/scc.c
@@ -1515,7 +1515,7 @@ static int scc_net_alloc(const char *name, struct scc_channel *scc)
1515 int err; 1515 int err;
1516 struct net_device *dev; 1516 struct net_device *dev;
1517 1517
1518 dev = alloc_netdev(0, name, scc_net_setup); 1518 dev = alloc_netdev(0, name, NET_NAME_UNKNOWN, scc_net_setup);
1519 if (!dev) 1519 if (!dev)
1520 return -ENOMEM; 1520 return -ENOMEM;
1521 1521
diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
index 81901659cc9e..717433cfb81d 100644
--- a/drivers/net/hamradio/yam.c
+++ b/drivers/net/hamradio/yam.c
@@ -1147,7 +1147,7 @@ static int __init yam_init_driver(void)
1147 sprintf(name, "yam%d", i); 1147 sprintf(name, "yam%d", i);
1148 1148
1149 dev = alloc_netdev(sizeof(struct yam_port), name, 1149 dev = alloc_netdev(sizeof(struct yam_port), name,
1150 yam_setup); 1150 NET_NAME_UNKNOWN, yam_setup);
1151 if (!dev) { 1151 if (!dev) {
1152 pr_err("yam: cannot allocate net device\n"); 1152 pr_err("yam: cannot allocate net device\n");
1153 err = -ENOMEM; 1153 err = -ENOMEM;
diff --git a/drivers/net/ieee802154/fakehard.c b/drivers/net/ieee802154/fakehard.c
index 78f18be3bbf2..9ce854f43917 100644
--- a/drivers/net/ieee802154/fakehard.c
+++ b/drivers/net/ieee802154/fakehard.c
@@ -343,7 +343,8 @@ static int ieee802154fake_probe(struct platform_device *pdev)
343 if (!phy) 343 if (!phy)
344 return -ENOMEM; 344 return -ENOMEM;
345 345
346 dev = alloc_netdev(sizeof(struct fakehard_priv), "hardwpan%d", ieee802154_fake_setup); 346 dev = alloc_netdev(sizeof(struct fakehard_priv), "hardwpan%d",
347 NET_NAME_UNKNOWN, ieee802154_fake_setup);
347 if (!dev) { 348 if (!dev) {
348 wpan_phy_free(phy); 349 wpan_phy_free(phy);
349 return -ENOMEM; 350 return -ENOMEM;
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
index 46a7790be004..d2d4a3d2237f 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -269,8 +269,8 @@ static int __init ifb_init_one(int index)
269 struct ifb_private *dp; 269 struct ifb_private *dp;
270 int err; 270 int err;
271 271
272 dev_ifb = alloc_netdev(sizeof(struct ifb_private), 272 dev_ifb = alloc_netdev(sizeof(struct ifb_private), "ifb%d",
273 "ifb%d", ifb_setup); 273 NET_NAME_UNKNOWN, ifb_setup);
274 274
275 if (!dev_ifb) 275 if (!dev_ifb)
276 return -ENOMEM; 276 return -ENOMEM;
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index bb96409f8c05..8f2262540561 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -195,7 +195,7 @@ static __net_init int loopback_net_init(struct net *net)
195 int err; 195 int err;
196 196
197 err = -ENOMEM; 197 err = -ENOMEM;
198 dev = alloc_netdev(0, "lo", loopback_setup); 198 dev = alloc_netdev(0, "lo", NET_NAME_UNKNOWN, loopback_setup);
199 if (!dev) 199 if (!dev)
200 goto out; 200 goto out;
201 201
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index f7c61812ea4a..e56e269a6eb3 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -138,11 +138,31 @@ struct phy_setting {
138/* A mapping of all SUPPORTED settings to speed/duplex */ 138/* A mapping of all SUPPORTED settings to speed/duplex */
139static const struct phy_setting settings[] = { 139static const struct phy_setting settings[] = {
140 { 140 {
141 .speed = 10000, 141 .speed = SPEED_10000,
142 .duplex = DUPLEX_FULL,
143 .setting = SUPPORTED_10000baseKR_Full,
144 },
145 {
146 .speed = SPEED_10000,
147 .duplex = DUPLEX_FULL,
148 .setting = SUPPORTED_10000baseKX4_Full,
149 },
150 {
151 .speed = SPEED_10000,
142 .duplex = DUPLEX_FULL, 152 .duplex = DUPLEX_FULL,
143 .setting = SUPPORTED_10000baseT_Full, 153 .setting = SUPPORTED_10000baseT_Full,
144 }, 154 },
145 { 155 {
156 .speed = SPEED_2500,
157 .duplex = DUPLEX_FULL,
158 .setting = SUPPORTED_2500baseX_Full,
159 },
160 {
161 .speed = SPEED_1000,
162 .duplex = DUPLEX_FULL,
163 .setting = SUPPORTED_1000baseKX_Full,
164 },
165 {
146 .speed = SPEED_1000, 166 .speed = SPEED_1000,
147 .duplex = DUPLEX_FULL, 167 .duplex = DUPLEX_FULL,
148 .setting = SUPPORTED_1000baseT_Full, 168 .setting = SUPPORTED_1000baseT_Full,
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index 91d6c1272fcf..5c002b1ef169 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -2665,7 +2665,8 @@ ppp_create_interface(struct net *net, int unit, int *retp)
2665 int ret = -ENOMEM; 2665 int ret = -ENOMEM;
2666 int i; 2666 int i;
2667 2667
2668 dev = alloc_netdev(sizeof(struct ppp), "", ppp_setup); 2668 dev = alloc_netdev(sizeof(struct ppp), "", NET_NAME_UNKNOWN,
2669 ppp_setup);
2669 if (!dev) 2670 if (!dev)
2670 goto out1; 2671 goto out1;
2671 2672
diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c
index 87526443841f..05387b1e2e95 100644
--- a/drivers/net/slip/slip.c
+++ b/drivers/net/slip/slip.c
@@ -749,7 +749,7 @@ static struct slip *sl_alloc(dev_t line)
749 return NULL; 749 return NULL;
750 750
751 sprintf(name, "sl%d", i); 751 sprintf(name, "sl%d", i);
752 dev = alloc_netdev(sizeof(*sl), name, sl_setup); 752 dev = alloc_netdev(sizeof(*sl), name, NET_NAME_UNKNOWN, sl_setup);
753 if (!dev) 753 if (!dev)
754 return NULL; 754 return NULL;
755 755
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 98bad1fb1bfb..acaaf6784179 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1633,7 +1633,8 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
1633 name = ifr->ifr_name; 1633 name = ifr->ifr_name;
1634 1634
1635 dev = alloc_netdev_mqs(sizeof(struct tun_struct), name, 1635 dev = alloc_netdev_mqs(sizeof(struct tun_struct), name,
1636 tun_setup, queues, queues); 1636 NET_NAME_UNKNOWN, tun_setup, queues,
1637 queues);
1637 1638
1638 if (!dev) 1639 if (!dev)
1639 return -ENOMEM; 1640 return -ENOMEM;
diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c
index 6358d420e185..2ec1500d0077 100644
--- a/drivers/net/usb/cdc-phonet.c
+++ b/drivers/net/usb/cdc-phonet.c
@@ -387,7 +387,7 @@ static int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *i
387 return -EINVAL; 387 return -EINVAL;
388 388
389 dev = alloc_netdev(sizeof(*pnd) + sizeof(pnd->urbs[0]) * rxq_size, 389 dev = alloc_netdev(sizeof(*pnd) + sizeof(pnd->urbs[0]) * rxq_size,
390 ifname, usbpn_setup); 390 ifname, NET_NAME_UNKNOWN, usbpn_setup);
391 if (!dev) 391 if (!dev)
392 return -ENOMEM; 392 return -ENOMEM;
393 393
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index a3a05869309d..50b36b299946 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -2520,7 +2520,8 @@ static struct hso_device *hso_create_net_device(struct usb_interface *interface,
2520 2520
2521 /* allocate our network device, then we can put in our private data */ 2521 /* allocate our network device, then we can put in our private data */
2522 /* call hso_net_init to do the basic initialization */ 2522 /* call hso_net_init to do the basic initialization */
2523 net = alloc_netdev(sizeof(struct hso_net), "hso%d", hso_net_init); 2523 net = alloc_netdev(sizeof(struct hso_net), "hso%d", NET_NAME_UNKNOWN,
2524 hso_net_init);
2524 if (!net) { 2525 if (!net) {
2525 dev_err(&interface->dev, "Unable to create ethernet device\n"); 2526 dev_err(&interface->dev, "Unable to create ethernet device\n");
2526 goto exit; 2527 goto exit;
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 9b945e60530e..8ad596573d17 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -335,6 +335,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
335 struct veth_priv *priv; 335 struct veth_priv *priv;
336 char ifname[IFNAMSIZ]; 336 char ifname[IFNAMSIZ];
337 struct nlattr *peer_tb[IFLA_MAX + 1], **tbp; 337 struct nlattr *peer_tb[IFLA_MAX + 1], **tbp;
338 unsigned char name_assign_type;
338 struct ifinfomsg *ifmp; 339 struct ifinfomsg *ifmp;
339 struct net *net; 340 struct net *net;
340 341
@@ -362,16 +363,20 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
362 tbp = tb; 363 tbp = tb;
363 } 364 }
364 365
365 if (tbp[IFLA_IFNAME]) 366 if (tbp[IFLA_IFNAME]) {
366 nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ); 367 nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
367 else 368 name_assign_type = NET_NAME_USER;
369 } else {
368 snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d"); 370 snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
371 name_assign_type = NET_NAME_ENUM;
372 }
369 373
370 net = rtnl_link_get_net(src_net, tbp); 374 net = rtnl_link_get_net(src_net, tbp);
371 if (IS_ERR(net)) 375 if (IS_ERR(net))
372 return PTR_ERR(net); 376 return PTR_ERR(net);
373 377
374 peer = rtnl_create_link(net, ifname, &veth_link_ops, tbp); 378 peer = rtnl_create_link(net, ifname, name_assign_type,
379 &veth_link_ops, tbp);
375 if (IS_ERR(peer)) { 380 if (IS_ERR(peer)) {
376 put_net(net); 381 put_net(net);
377 return PTR_ERR(peer); 382 return PTR_ERR(peer);
diff --git a/drivers/net/wan/dlci.c b/drivers/net/wan/dlci.c
index 19f7cb2cdef3..a463613a0719 100644
--- a/drivers/net/wan/dlci.c
+++ b/drivers/net/wan/dlci.c
@@ -327,8 +327,8 @@ static int dlci_add(struct dlci_add *dlci)
327 goto err1; 327 goto err1;
328 328
329 /* create device name */ 329 /* create device name */
330 master = alloc_netdev( sizeof(struct dlci_local), "dlci%d", 330 master = alloc_netdev(sizeof(struct dlci_local), "dlci%d",
331 dlci_setup); 331 NET_NAME_UNKNOWN, dlci_setup);
332 if (!master) { 332 if (!master) {
333 err = -ENOMEM; 333 err = -ENOMEM;
334 goto err1; 334 goto err1;
diff --git a/drivers/net/wan/hdlc.c b/drivers/net/wan/hdlc.c
index 9c33ca918e19..51f6cee8aab2 100644
--- a/drivers/net/wan/hdlc.c
+++ b/drivers/net/wan/hdlc.c
@@ -256,7 +256,8 @@ static void hdlc_setup(struct net_device *dev)
256struct net_device *alloc_hdlcdev(void *priv) 256struct net_device *alloc_hdlcdev(void *priv)
257{ 257{
258 struct net_device *dev; 258 struct net_device *dev;
259 dev = alloc_netdev(sizeof(struct hdlc_device), "hdlc%d", hdlc_setup); 259 dev = alloc_netdev(sizeof(struct hdlc_device), "hdlc%d",
260 NET_NAME_UNKNOWN, hdlc_setup);
260 if (dev) 261 if (dev)
261 dev_to_hdlc(dev)->priv = priv; 262 dev_to_hdlc(dev)->priv = priv;
262 return dev; 263 return dev;
diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c
index 7c6cb4f31798..7cc64eac0fa3 100644
--- a/drivers/net/wan/hdlc_fr.c
+++ b/drivers/net/wan/hdlc_fr.c
@@ -1075,10 +1075,11 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
1075 used = pvc_is_used(pvc); 1075 used = pvc_is_used(pvc);
1076 1076
1077 if (type == ARPHRD_ETHER) { 1077 if (type == ARPHRD_ETHER) {
1078 dev = alloc_netdev(0, "pvceth%d", ether_setup); 1078 dev = alloc_netdev(0, "pvceth%d", NET_NAME_UNKNOWN,
1079 ether_setup);
1079 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 1080 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1080 } else 1081 } else
1081 dev = alloc_netdev(0, "pvc%d", pvc_setup); 1082 dev = alloc_netdev(0, "pvc%d", NET_NAME_UNKNOWN, pvc_setup);
1082 1083
1083 if (!dev) { 1084 if (!dev) {
1084 netdev_warn(frad, "Memory squeeze on fr_pvc()\n"); 1085 netdev_warn(frad, "Memory squeeze on fr_pvc()\n");
diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
index a33a46fa88dd..2f5eda8a7227 100644
--- a/drivers/net/wan/lapbether.c
+++ b/drivers/net/wan/lapbether.c
@@ -325,8 +325,8 @@ static int lapbeth_new_device(struct net_device *dev)
325 325
326 ASSERT_RTNL(); 326 ASSERT_RTNL();
327 327
328 ndev = alloc_netdev(sizeof(*lapbeth), "lapb%d", 328 ndev = alloc_netdev(sizeof(*lapbeth), "lapb%d", NET_NAME_UNKNOWN,
329 lapbeth_setup); 329 lapbeth_setup);
330 if (!ndev) 330 if (!ndev)
331 goto out; 331 goto out;
332 332
diff --git a/drivers/net/wan/sbni.c b/drivers/net/wan/sbni.c
index 1b89ecf0959e..758c4ba1e97c 100644
--- a/drivers/net/wan/sbni.c
+++ b/drivers/net/wan/sbni.c
@@ -227,7 +227,8 @@ int __init sbni_probe(int unit)
227 struct net_device *dev; 227 struct net_device *dev;
228 int err; 228 int err;
229 229
230 dev = alloc_netdev(sizeof(struct net_local), "sbni", sbni_devsetup); 230 dev = alloc_netdev(sizeof(struct net_local), "sbni",
231 NET_NAME_UNKNOWN, sbni_devsetup);
231 if (!dev) 232 if (!dev)
232 return -ENOMEM; 233 return -ENOMEM;
233 234
@@ -1477,8 +1478,8 @@ int __init init_module( void )
1477 int err; 1478 int err;
1478 1479
1479 while( num < SBNI_MAX_NUM_CARDS ) { 1480 while( num < SBNI_MAX_NUM_CARDS ) {
1480 dev = alloc_netdev(sizeof(struct net_local), 1481 dev = alloc_netdev(sizeof(struct net_local), "sbni%d",
1481 "sbni%d", sbni_devsetup); 1482 NET_NAME_UNKNOWN, sbni_devsetup);
1482 if( !dev) 1483 if( !dev)
1483 break; 1484 break;
1484 1485
diff --git a/drivers/net/wan/sdla.c b/drivers/net/wan/sdla.c
index cdd45fb8a1f6..421ac5f85699 100644
--- a/drivers/net/wan/sdla.c
+++ b/drivers/net/wan/sdla.c
@@ -1631,7 +1631,8 @@ static int __init init_sdla(void)
1631 1631
1632 printk("%s.\n", version); 1632 printk("%s.\n", version);
1633 1633
1634 sdla = alloc_netdev(sizeof(struct frad_local), "sdla0", setup_sdla); 1634 sdla = alloc_netdev(sizeof(struct frad_local), "sdla0",
1635 NET_NAME_UNKNOWN, setup_sdla);
1635 if (!sdla) 1636 if (!sdla)
1636 return -ENOMEM; 1637 return -ENOMEM;
1637 1638
diff --git a/drivers/net/wan/x25_asy.c b/drivers/net/wan/x25_asy.c
index 5895f1978691..df6c07357556 100644
--- a/drivers/net/wan/x25_asy.c
+++ b/drivers/net/wan/x25_asy.c
@@ -81,8 +81,8 @@ static struct x25_asy *x25_asy_alloc(void)
81 char name[IFNAMSIZ]; 81 char name[IFNAMSIZ];
82 sprintf(name, "x25asy%d", i); 82 sprintf(name, "x25asy%d", i);
83 83
84 dev = alloc_netdev(sizeof(struct x25_asy), 84 dev = alloc_netdev(sizeof(struct x25_asy), name,
85 name, x25_asy_setup); 85 NET_NAME_UNKNOWN, x25_asy_setup);
86 if (!dev) 86 if (!dev)
87 return NULL; 87 return NULL;
88 88
diff --git a/drivers/net/wimax/i2400m/usb.c b/drivers/net/wimax/i2400m/usb.c
index cd15a93d9084..e7f5910a6519 100644
--- a/drivers/net/wimax/i2400m/usb.c
+++ b/drivers/net/wimax/i2400m/usb.c
@@ -472,7 +472,7 @@ int i2400mu_probe(struct usb_interface *iface,
472 472
473 /* Allocate instance [calls i2400m_netdev_setup() on it]. */ 473 /* Allocate instance [calls i2400m_netdev_setup() on it]. */
474 result = -ENOMEM; 474 result = -ENOMEM;
475 net_dev = alloc_netdev(sizeof(*i2400mu), "wmx%d", 475 net_dev = alloc_netdev(sizeof(*i2400mu), "wmx%d", NET_NAME_UNKNOWN,
476 i2400mu_netdev_setup); 476 i2400mu_netdev_setup);
477 if (net_dev == NULL) { 477 if (net_dev == NULL) {
478 dev_err(dev, "no memory for network device instance\n"); 478 dev_err(dev, "no memory for network device instance\n");
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index 64747d457bb3..29d88739454b 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -2685,7 +2685,8 @@ static struct net_device *init_wifidev(struct airo_info *ai,
2685 struct net_device *ethdev) 2685 struct net_device *ethdev)
2686{ 2686{
2687 int err; 2687 int err;
2688 struct net_device *dev = alloc_netdev(0, "wifi%d", wifi_setup); 2688 struct net_device *dev = alloc_netdev(0, "wifi%d", NET_NAME_UNKNOWN,
2689 wifi_setup);
2689 if (!dev) 2690 if (!dev)
2690 return NULL; 2691 return NULL;
2691 dev->ml_priv = ethdev->ml_priv; 2692 dev->ml_priv = ethdev->ml_priv;
@@ -2785,7 +2786,7 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
2785 CapabilityRid cap_rid; 2786 CapabilityRid cap_rid;
2786 2787
2787 /* Create the network device object. */ 2788 /* Create the network device object. */
2788 dev = alloc_netdev(sizeof(*ai), "", ether_setup); 2789 dev = alloc_netdev(sizeof(*ai), "", NET_NAME_UNKNOWN, ether_setup);
2789 if (!dev) { 2790 if (!dev) {
2790 airo_print_err("", "Couldn't alloc_etherdev"); 2791 airo_print_err("", "Couldn't alloc_etherdev");
2791 return NULL; 2792 return NULL;
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 0e26f4a34fda..1c4ce8e3eebe 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -3636,7 +3636,7 @@ struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name,
3636 struct net_device *ndev; 3636 struct net_device *ndev;
3637 struct ath6kl_vif *vif; 3637 struct ath6kl_vif *vif;
3638 3638
3639 ndev = alloc_netdev(sizeof(*vif), name, ether_setup); 3639 ndev = alloc_netdev(sizeof(*vif), name, NET_NAME_UNKNOWN, ether_setup);
3640 if (!ndev) 3640 if (!ndev)
3641 return NULL; 3641 return NULL;
3642 3642
diff --git a/drivers/net/wireless/ath/wil6210/netdev.c b/drivers/net/wireless/ath/wil6210/netdev.c
index 106b6dcb773a..7afce6e8c507 100644
--- a/drivers/net/wireless/ath/wil6210/netdev.c
+++ b/drivers/net/wireless/ath/wil6210/netdev.c
@@ -132,7 +132,7 @@ void *wil_if_alloc(struct device *dev, void __iomem *csr)
132 ch = wdev->wiphy->bands[IEEE80211_BAND_60GHZ]->channels; 132 ch = wdev->wiphy->bands[IEEE80211_BAND_60GHZ]->channels;
133 cfg80211_chandef_create(&wdev->preset_chandef, ch, NL80211_CHAN_NO_HT); 133 cfg80211_chandef_create(&wdev->preset_chandef, ch, NL80211_CHAN_NO_HT);
134 134
135 ndev = alloc_netdev(0, "wlan%d", ether_setup); 135 ndev = alloc_netdev(0, "wlan%d", NET_NAME_UNKNOWN, ether_setup);
136 if (!ndev) { 136 if (!ndev) {
137 dev_err(dev, "alloc_netdev_mqs failed\n"); 137 dev_err(dev, "alloc_netdev_mqs failed\n");
138 rc = -ENOMEM; 138 rc = -ENOMEM;
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
index 09dd8c13d844..2699441d4f41 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
@@ -808,7 +808,8 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bssidx, s32 ifidx,
808 } else { 808 } else {
809 brcmf_dbg(INFO, "allocate netdev interface\n"); 809 brcmf_dbg(INFO, "allocate netdev interface\n");
810 /* Allocate netdev, including space for private structure */ 810 /* Allocate netdev, including space for private structure */
811 ndev = alloc_netdev(sizeof(*ifp), name, ether_setup); 811 ndev = alloc_netdev(sizeof(*ifp), name, NET_NAME_UNKNOWN,
812 ether_setup);
812 if (!ndev) 813 if (!ndev)
813 return ERR_PTR(-ENOMEM); 814 return ERR_PTR(-ENOMEM);
814 815
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index 0c02f0483d1f..569b64ecc607 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -981,7 +981,7 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)
981 goto err_wdev; 981 goto err_wdev;
982 } 982 }
983 983
984 dev = alloc_netdev(0, "wlan%d", ether_setup); 984 dev = alloc_netdev(0, "wlan%d", NET_NAME_UNKNOWN, ether_setup);
985 if (!dev) { 985 if (!dev) {
986 dev_err(dmdev, "no memory for network device instance\n"); 986 dev_err(dmdev, "no memory for network device instance\n");
987 goto err_adapter; 987 goto err_adapter;
diff --git a/drivers/net/wireless/libertas/mesh.c b/drivers/net/wireless/libertas/mesh.c
index 6fef746345bc..01a67f62696f 100644
--- a/drivers/net/wireless/libertas/mesh.c
+++ b/drivers/net/wireless/libertas/mesh.c
@@ -1000,7 +1000,7 @@ static int lbs_add_mesh(struct lbs_private *priv)
1000 goto done; 1000 goto done;
1001 } 1001 }
1002 1002
1003 mesh_dev = alloc_netdev(0, "msh%d", ether_setup); 1003 mesh_dev = alloc_netdev(0, "msh%d", NET_NAME_UNKNOWN, ether_setup);
1004 if (!mesh_dev) { 1004 if (!mesh_dev) {
1005 lbs_deb_mesh("init mshX device failed\n"); 1005 lbs_deb_mesh("init mshX device failed\n");
1006 ret = -ENOMEM; 1006 ret = -ENOMEM;
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index eba51460a5de..5ea65fce0b83 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -2676,7 +2676,8 @@ static int __init init_mac80211_hwsim(void)
2676 goto out_free_radios; 2676 goto out_free_radios;
2677 } 2677 }
2678 2678
2679 hwsim_mon = alloc_netdev(0, "hwsim%d", hwsim_mon_setup); 2679 hwsim_mon = alloc_netdev(0, "hwsim%d", NET_NAME_UNKNOWN,
2680 hwsim_mon_setup);
2680 if (hwsim_mon == NULL) { 2681 if (hwsim_mon == NULL) {
2681 err = -ENOMEM; 2682 err = -ENOMEM;
2682 goto out_free_radios; 2683 goto out_free_radios;
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 6af135fa99f7..ca87f923c61e 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -2232,7 +2232,8 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
2232 } 2232 }
2233 2233
2234 dev = alloc_netdev_mqs(sizeof(struct mwifiex_private *), name, 2234 dev = alloc_netdev_mqs(sizeof(struct mwifiex_private *), name,
2235 ether_setup, IEEE80211_NUM_ACS, 1); 2235 NET_NAME_UNKNOWN, ether_setup,
2236 IEEE80211_NUM_ACS, 1);
2236 if (!dev) { 2237 if (!dev) {
2237 wiphy_err(wiphy, "no memory available for netdevice\n"); 2238 wiphy_err(wiphy, "no memory available for netdevice\n");
2238 priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED; 2239 priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index ef75b45e5085..bd59d9dbf27b 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -418,8 +418,8 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
418 * When the guest selects the desired number, it will be updated 418 * When the guest selects the desired number, it will be updated
419 * via netif_set_real_num_*_queues(). 419 * via netif_set_real_num_*_queues().
420 */ 420 */
421 dev = alloc_netdev_mq(sizeof(struct xenvif), name, ether_setup, 421 dev = alloc_netdev_mq(sizeof(struct xenvif), name, NET_NAME_UNKNOWN,
422 xenvif_max_queues); 422 ether_setup, xenvif_max_queues);
423 if (dev == NULL) { 423 if (dev == NULL) {
424 pr_warn("Could not allocate netdev for %s\n", name); 424 pr_warn("Could not allocate netdev for %s\n", name);
425 return ERR_PTR(-ENOMEM); 425 return ERR_PTR(-ENOMEM);
diff --git a/drivers/s390/net/claw.c b/drivers/s390/net/claw.c
index d837c3c5330f..fbc6701bef30 100644
--- a/drivers/s390/net/claw.c
+++ b/drivers/s390/net/claw.c
@@ -2915,7 +2915,7 @@ claw_new_device(struct ccwgroup_device *cgdev)
2915 "failed with error code %d\n", ret); 2915 "failed with error code %d\n", ret);
2916 goto out; 2916 goto out;
2917 } 2917 }
2918 dev = alloc_netdev(0,"claw%d",claw_init_netdevice); 2918 dev = alloc_netdev(0, "claw%d", NET_NAME_UNKNOWN, claw_init_netdevice);
2919 if (!dev) { 2919 if (!dev) {
2920 dev_warn(&cgdev->dev, 2920 dev_warn(&cgdev->dev,
2921 "Activating the CLAW device failed\n"); 2921 "Activating the CLAW device failed\n");
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c
index 03b6ad035577..e056dd4fe44d 100644
--- a/drivers/s390/net/ctcm_main.c
+++ b/drivers/s390/net/ctcm_main.c
@@ -1137,9 +1137,11 @@ static struct net_device *ctcm_init_netdevice(struct ctcm_priv *priv)
1137 return NULL; 1137 return NULL;
1138 1138
1139 if (IS_MPC(priv)) 1139 if (IS_MPC(priv))
1140 dev = alloc_netdev(0, MPC_DEVICE_GENE, ctcm_dev_setup); 1140 dev = alloc_netdev(0, MPC_DEVICE_GENE, NET_NAME_UNKNOWN,
1141 ctcm_dev_setup);
1141 else 1142 else
1142 dev = alloc_netdev(0, CTC_DEVICE_GENE, ctcm_dev_setup); 1143 dev = alloc_netdev(0, CTC_DEVICE_GENE, NET_NAME_UNKNOWN,
1144 ctcm_dev_setup);
1143 1145
1144 if (!dev) { 1146 if (!dev) {
1145 CTCM_DBF_TEXT_(ERROR, CTC_DBF_CRIT, 1147 CTCM_DBF_TEXT_(ERROR, CTC_DBF_CRIT,
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index ce16d1bdb20a..0a87809c8af7 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -2015,7 +2015,7 @@ static struct net_device *netiucv_init_netdevice(char *username, char *userdata)
2015 struct net_device *dev; 2015 struct net_device *dev;
2016 2016
2017 dev = alloc_netdev(sizeof(struct netiucv_priv), "iucv%d", 2017 dev = alloc_netdev(sizeof(struct netiucv_priv), "iucv%d",
2018 netiucv_setup_netdevice); 2018 NET_NAME_UNKNOWN, netiucv_setup_netdevice);
2019 if (!dev) 2019 if (!dev)
2020 return NULL; 2020 return NULL;
2021 rtnl_lock(); 2021 rtnl_lock();
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 5ef5b4f45758..c2679bfe7f66 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -952,10 +952,12 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
952{ 952{
953 switch (card->info.type) { 953 switch (card->info.type) {
954 case QETH_CARD_TYPE_IQD: 954 case QETH_CARD_TYPE_IQD:
955 card->dev = alloc_netdev(0, "hsi%d", ether_setup); 955 card->dev = alloc_netdev(0, "hsi%d", NET_NAME_UNKNOWN,
956 ether_setup);
956 break; 957 break;
957 case QETH_CARD_TYPE_OSN: 958 case QETH_CARD_TYPE_OSN:
958 card->dev = alloc_netdev(0, "osn%d", ether_setup); 959 card->dev = alloc_netdev(0, "osn%d", NET_NAME_UNKNOWN,
960 ether_setup);
959 card->dev->flags |= IFF_NOARP; 961 card->dev->flags |= IFF_NOARP;
960 break; 962 break;
961 default: 963 default:
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index 14e0b5810e8c..f8427a2c4840 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -3287,7 +3287,8 @@ static int qeth_l3_setup_netdev(struct qeth_card *card)
3287 } 3287 }
3288 } 3288 }
3289 } else if (card->info.type == QETH_CARD_TYPE_IQD) { 3289 } else if (card->info.type == QETH_CARD_TYPE_IQD) {
3290 card->dev = alloc_netdev(0, "hsi%d", ether_setup); 3290 card->dev = alloc_netdev(0, "hsi%d", NET_NAME_UNKNOWN,
3291 ether_setup);
3291 if (!card->dev) 3292 if (!card->dev)
3292 return -ENODEV; 3293 return -ENODEV;
3293 card->dev->flags |= IFF_NOARP; 3294 card->dev->flags |= IFF_NOARP;
diff --git a/drivers/staging/cxt1e1/linux.c b/drivers/staging/cxt1e1/linux.c
index 09f3d5ca75ac..85d776bbfb15 100644
--- a/drivers/staging/cxt1e1/linux.c
+++ b/drivers/staging/cxt1e1/linux.c
@@ -917,7 +917,8 @@ c4_add_dev(hdw_info_t *hi, int brdno, unsigned long f0, unsigned long f1,
917 struct net_device *ndev; 917 struct net_device *ndev;
918 ci_t *ci; 918 ci_t *ci;
919 919
920 ndev = alloc_netdev(sizeof(ci_t), SBE_IFACETMPL, c4_setup); 920 ndev = alloc_netdev(sizeof(ci_t), SBE_IFACETMPL, NET_NAME_UNKNOWN,
921 c4_setup);
921 if (!ndev) { 922 if (!ndev) {
922 pr_warning("%s: no memory for struct net_device !\n", 923 pr_warning("%s: no memory for struct net_device !\n",
923 hi->devname); 924 hi->devname);
diff --git a/drivers/staging/gdm724x/gdm_lte.c b/drivers/staging/gdm724x/gdm_lte.c
index 64c55b99fda4..c2268527422f 100644
--- a/drivers/staging/gdm724x/gdm_lte.c
+++ b/drivers/staging/gdm724x/gdm_lte.c
@@ -885,7 +885,7 @@ int register_lte_device(struct phy_dev *phy_dev,
885 885
886 /* Allocate netdev */ 886 /* Allocate netdev */
887 net = alloc_netdev(sizeof(struct nic), pdn_dev_name, 887 net = alloc_netdev(sizeof(struct nic), pdn_dev_name,
888 ether_setup); 888 NET_NAME_UNKNOWN, ether_setup);
889 if (net == NULL) { 889 if (net == NULL) {
890 pr_err("alloc_netdev failed\n"); 890 pr_err("alloc_netdev failed\n");
891 ret = -ENOMEM; 891 ret = -ENOMEM;
diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c
index e5e511585122..a9a6fc51024b 100644
--- a/drivers/staging/gdm72xx/gdm_wimax.c
+++ b/drivers/staging/gdm72xx/gdm_wimax.c
@@ -886,7 +886,8 @@ int register_wimax_device(struct phy_dev *phy_dev, struct device *pdev)
886 struct net_device *dev; 886 struct net_device *dev;
887 int ret; 887 int ret;
888 888
889 dev = alloc_netdev(sizeof(*nic), "wm%d", ether_setup); 889 dev = alloc_netdev(sizeof(*nic), "wm%d", NET_NAME_UNKNOWN,
890 ether_setup);
890 891
891 if (dev == NULL) { 892 if (dev == NULL) {
892 pr_err("alloc_etherdev failed\n"); 893 pr_err("alloc_etherdev failed\n");
diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
index 8392d4d1d5ed..0814bfd68b2e 100644
--- a/drivers/staging/vt6655/wpactl.c
+++ b/drivers/staging/vt6655/wpactl.c
@@ -89,7 +89,8 @@ static int wpa_init_wpadev(PSDevice pDevice)
89 struct net_device *dev = pDevice->dev; 89 struct net_device *dev = pDevice->dev;
90 int ret = 0; 90 int ret = 0;
91 91
92 pDevice->wpadev = alloc_netdev(sizeof(PSDevice), "vntwpa", wpadev_setup); 92 pDevice->wpadev = alloc_netdev(sizeof(PSDevice), "vntwpa",
93 NET_NAME_UNKNOWN, wpadev_setup);
93 if (pDevice->wpadev == NULL) 94 if (pDevice->wpadev == NULL)
94 return -ENOMEM; 95 return -ENOMEM;
95 96
diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c
index 00b186c59725..6c78f917e24a 100644
--- a/drivers/staging/wlan-ng/p80211netdev.c
+++ b/drivers/staging/wlan-ng/p80211netdev.c
@@ -769,7 +769,7 @@ int wlan_setup(wlandevice_t *wlandev, struct device *physdev)
769 769
770 /* Allocate and initialize the struct device */ 770 /* Allocate and initialize the struct device */
771 netdev = alloc_netdev(sizeof(struct wireless_dev), "wlan%d", 771 netdev = alloc_netdev(sizeof(struct wireless_dev), "wlan%d",
772 ether_setup); 772 NET_NAME_UNKNOWN, ether_setup);
773 if (netdev == NULL) { 773 if (netdev == NULL) {
774 dev_err(physdev, "Failed to alloc netdev.\n"); 774 dev_err(physdev, "Failed to alloc netdev.\n");
775 wlan_free_wiphy(wiphy); 775 wlan_free_wiphy(wiphy);
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index 2ebe47b78a3e..cde3ab97900f 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -2789,9 +2789,8 @@ static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
2789 netname = "gsm%d"; 2789 netname = "gsm%d";
2790 if (nc->if_name[0] != '\0') 2790 if (nc->if_name[0] != '\0')
2791 netname = nc->if_name; 2791 netname = nc->if_name;
2792 net = alloc_netdev(sizeof(struct gsm_mux_net), 2792 net = alloc_netdev(sizeof(struct gsm_mux_net), netname,
2793 netname, 2793 NET_NAME_UNKNOWN, gsm_mux_net_init);
2794 gsm_mux_net_init);
2795 if (!net) { 2794 if (!net) {
2796 pr_err("alloc_netdev failed"); 2795 pr_err("alloc_netdev failed");
2797 return -ENOMEM; 2796 return -ENOMEM;
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c
index f2b781773eed..b9cfc1571d71 100644
--- a/drivers/usb/gadget/f_phonet.c
+++ b/drivers/usb/gadget/f_phonet.c
@@ -721,7 +721,8 @@ struct net_device *gphonet_setup_default(void)
721 struct phonet_port *port; 721 struct phonet_port *port;
722 722
723 /* Create net device */ 723 /* Create net device */
724 dev = alloc_netdev(sizeof(*port), "upnlink%d", pn_net_setup); 724 dev = alloc_netdev(sizeof(*port), "upnlink%d", NET_NAME_UNKNOWN,
725 pn_net_setup);
725 if (!dev) 726 if (!dev)
726 return ERR_PTR(-ENOMEM); 727 return ERR_PTR(-ENOMEM);
727 728