diff options
Diffstat (limited to 'drivers')
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; | |||
79 | module_param(dack_mode, int, 0644); | 79 | module_param(dack_mode, int, 0644); |
80 | MODULE_PARM_DESC(dack_mode, "Delayed ack mode (default=1)"); | 80 | MODULE_PARM_DESC(dack_mode, "Delayed ack mode (default=1)"); |
81 | 81 | ||
82 | int c4iw_max_read_depth = 8; | 82 | uint c4iw_max_read_depth = 32; |
83 | module_param(c4iw_max_read_depth, int, 0644); | 83 | module_param(c4iw_max_read_depth, int, 0644); |
84 | MODULE_PARM_DESC(c4iw_max_read_depth, "Per-connection max ORD/IRD (default=8)"); | 84 | MODULE_PARM_DESC(c4iw_max_read_depth, |
85 | "Per-connection max ORD/IRD (default=32)"); | ||
85 | 86 | ||
86 | static int enable_tcp_timestamps; | 87 | static int enable_tcp_timestamps; |
87 | module_param(enable_tcp_timestamps, int, 0644); | 88 | module_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 | |||
1250 | static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb) | 1255 | static 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; |
2797 | err1: | 2830 | err1: |
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); |
2800 | err: | 2834 | err: |
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); | |||
55 | MODULE_PARM_DESC(allow_db_coalescing_on_t5, | 55 | MODULE_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 | ||
58 | int c4iw_wr_log = 0; | ||
59 | module_param(c4iw_wr_log, int, 0444); | ||
60 | MODULE_PARM_DESC(c4iw_wr_log, "Enables logging of work request timing data."); | ||
61 | |||
62 | int c4iw_wr_log_size_order = 12; | ||
63 | module_param(c4iw_wr_log_size_order, int, 0444); | ||
64 | MODULE_PARM_DESC(c4iw_wr_log_size_order, | ||
65 | "Number of entries (log2) in the work request timing log."); | ||
66 | |||
58 | struct uld_ctx { | 67 | struct 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 | ||
115 | void 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 | |||
145 | static 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 | |||
200 | static int wr_log_open(struct inode *inode, struct file *file) | ||
201 | { | ||
202 | return single_open(file, wr_log_show, inode->i_private); | ||
203 | } | ||
204 | |||
205 | static 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 | |||
217 | static 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 | |||
106 | static int dump_qp(int id, void *p, void *data) | 226 | static 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; |
700 | err4: | 857 | err4: |
701 | c4iw_rqtpool_destroy(rdev); | 858 | c4iw_rqtpool_destroy(rdev); |
@@ -709,6 +866,7 @@ err1: | |||
709 | 866 | ||
710 | static void c4iw_rdev_close(struct c4iw_rdev *rdev) | 867 | static 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 | ||
38 | static 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 | |||
63 | static 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 | |||
38 | static void post_qp_event(struct c4iw_dev *dev, struct c4iw_cq *chp, | 87 | static 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 | ||
142 | struct 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 | |||
153 | struct 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 | |||
142 | struct c4iw_rdev { | 165 | struct 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 | ||
162 | static inline int c4iw_fatal_error(struct c4iw_rdev *rdev) | 189 | static 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 | ||
242 | static inline struct c4iw_dev *to_c4iw_dev(struct ib_device *ibdev) | 270 | static 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 | ||
349 | extern uint c4iw_max_read_depth; | ||
350 | |||
351 | static 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 | |||
321 | struct c4iw_pd { | 356 | struct 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 | ||
992 | extern struct cxgb4_client t4c_client; | 1027 | extern struct cxgb4_client t4c_client; |
993 | extern c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS]; | 1028 | extern c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS]; |
994 | extern int c4iw_max_read_depth; | 1029 | extern void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe); |
1030 | extern int c4iw_wr_log; | ||
995 | extern int db_fc_threshold; | 1031 | extern int db_fc_threshold; |
996 | extern int db_coalescing_threshold; | 1032 | extern int db_coalescing_threshold; |
997 | extern int use_dsgl; | 1033 | extern 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; | |||
58 | module_param(max_fr_immd, int, 0644); | 58 | module_param(max_fr_immd, int, 0644); |
59 | MODULE_PARM_DESC(max_fr_immd, "fastreg threshold for using DSGL instead of immedate"); | 59 | MODULE_PARM_DESC(max_fr_immd, "fastreg threshold for using DSGL instead of immedate"); |
60 | 60 | ||
61 | static 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 | |||
79 | static 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 | |||
61 | static void set_state(struct c4iw_qp *qhp, enum c4iw_qp_state state) | 86 | static 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; | ||
1314 | err1: | ||
1315 | free_ird(rhp, qhp->attr.max_ird); | ||
1265 | out: | 1316 | out: |
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 | ||
57 | struct t4_status_page { | 49 | struct 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 | ||
282 | static inline pgprot_t t4_pgprot_wc(pgprot_t prot) | 276 | static inline pgprot_t t4_pgprot_wc(pgprot_t prot) |
@@ -314,6 +308,8 @@ struct t4_sq { | |||
314 | 308 | ||
315 | struct t4_swrqe { | 309 | struct t4_swrqe { |
316 | u64 wr_id; | 310 | u64 wr_id; |
311 | struct timespec host_ts; | ||
312 | u64 sge_ts; | ||
317 | }; | 313 | }; |
318 | 314 | ||
319 | struct t4_rq { | 315 | struct 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) | |||
986 | static struct net_device *____alloc_ei_netdev(int size) | 986 | static 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 | } |
3833 | EXPORT_SYMBOL(cxgb4_enable_db_coalescing); | 3833 | EXPORT_SYMBOL(cxgb4_enable_db_coalescing); |
3834 | 3834 | ||
3835 | int 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 | |||
3894 | err: | ||
3895 | dev_err(adap->pdev_dev, "stag %#x, offset %#x out of range\n", | ||
3896 | stag, offset); | ||
3897 | return -EINVAL; | ||
3898 | } | ||
3899 | EXPORT_SYMBOL(cxgb4_read_tpte); | ||
3900 | |||
3901 | u64 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 | } | ||
3912 | EXPORT_SYMBOL(cxgb4_read_sge_timestamp); | ||
3913 | |||
3835 | static struct pci_driver cxgb4_driver; | 3914 | static struct pci_driver cxgb4_driver; |
3836 | 3915 | ||
3837 | static void check_neigh_update(struct neighbour *neigh) | 3916 | static 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); | |||
292 | int cxgb4_flush_eq_cache(struct net_device *dev); | 297 | int cxgb4_flush_eq_cache(struct net_device *dev); |
293 | void cxgb4_disable_db_coalescing(struct net_device *dev); | 298 | void cxgb4_disable_db_coalescing(struct net_device *dev); |
294 | void cxgb4_enable_db_coalescing(struct net_device *dev); | 299 | void cxgb4_enable_db_coalescing(struct net_device *dev); |
300 | int cxgb4_read_tpte(struct net_device *dev, u32 stag, __be32 *tpte); | ||
301 | u64 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 | ||
6391 | MODULE_DESCRIPTION("Marvell PPv2 Ethernet Driver - www.marvell.com"); | 6391 | MODULE_DESCRIPTION("Marvell PPv2 Ethernet Driver - www.marvell.com"); |
6392 | MODULE_AUTHOR("Marcin Wojtas <mw@semihalf.com>"); | 6392 | MODULE_AUTHOR("Marcin Wojtas <mw@semihalf.com>"); |
6393 | MODULE_LICENSE("GPLv2"); | 6393 | MODULE_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 */ |
139 | static const struct phy_setting settings[] = { | 139 | static 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) | |||
256 | struct net_device *alloc_hdlcdev(void *priv) | 256 | struct 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 | ||