2 * Copyright (c) 2016 Chelsio Communications, Inc.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
9 #define DRV_NAME "cxgbit"
10 #define DRV_VERSION "1.0.0-ko"
11 #define pr_fmt(fmt) DRV_NAME ": " fmt
15 #ifdef CONFIG_CHELSIO_T4_DCB
16 #include <net/dcbevent.h>
17 #include "cxgb4_dcb.h"
20 LIST_HEAD(cdev_list_head
);
22 DEFINE_MUTEX(cdev_list_lock
);
24 void _cxgbit_free_cdev(struct kref
*kref
)
26 struct cxgbit_device
*cdev
;
28 cdev
= container_of(kref
, struct cxgbit_device
, kref
);
30 cxgbi_ppm_release(cdev2ppm(cdev
));
34 static void cxgbit_set_mdsl(struct cxgbit_device
*cdev
)
36 struct cxgb4_lld_info
*lldi
= &cdev
->lldi
;
39 #define ULP2_MAX_PKT_LEN 16224
40 #define ISCSI_PDU_NONPAYLOAD_LEN 312
41 mdsl
= min_t(u32
, lldi
->iscsi_iolen
- ISCSI_PDU_NONPAYLOAD_LEN
,
42 ULP2_MAX_PKT_LEN
- ISCSI_PDU_NONPAYLOAD_LEN
);
43 mdsl
= min_t(u32
, mdsl
, 8192);
44 mdsl
= min_t(u32
, mdsl
, (MAX_SKB_FRAGS
- 1) * PAGE_SIZE
);
49 static void *cxgbit_uld_add(const struct cxgb4_lld_info
*lldi
)
51 struct cxgbit_device
*cdev
;
53 if (is_t4(lldi
->adapter_type
))
54 return ERR_PTR(-ENODEV
);
56 cdev
= kzalloc(sizeof(*cdev
), GFP_KERNEL
);
58 return ERR_PTR(-ENOMEM
);
60 kref_init(&cdev
->kref
);
64 cxgbit_set_mdsl(cdev
);
66 if (cxgbit_ddp_init(cdev
) < 0) {
68 return ERR_PTR(-EINVAL
);
71 if (!test_bit(CDEV_DDP_ENABLE
, &cdev
->flags
))
72 pr_info("cdev %s ddp init failed\n",
73 pci_name(lldi
->pdev
));
75 if (lldi
->fw_vers
>= 0x10d2b00)
76 set_bit(CDEV_ISO_ENABLE
, &cdev
->flags
);
78 spin_lock_init(&cdev
->cskq
.lock
);
79 INIT_LIST_HEAD(&cdev
->cskq
.list
);
81 mutex_lock(&cdev_list_lock
);
82 list_add_tail(&cdev
->list
, &cdev_list_head
);
83 mutex_unlock(&cdev_list_lock
);
85 pr_info("cdev %s added for iSCSI target transport\n",
86 pci_name(lldi
->pdev
));
91 static void cxgbit_close_conn(struct cxgbit_device
*cdev
)
93 struct cxgbit_sock
*csk
;
95 bool wakeup_thread
= false;
97 spin_lock_bh(&cdev
->cskq
.lock
);
98 list_for_each_entry(csk
, &cdev
->cskq
.list
, list
) {
99 skb
= alloc_skb(0, GFP_ATOMIC
);
103 spin_lock_bh(&csk
->rxq
.lock
);
104 __skb_queue_tail(&csk
->rxq
, skb
);
105 if (skb_queue_len(&csk
->rxq
) == 1)
106 wakeup_thread
= true;
107 spin_unlock_bh(&csk
->rxq
.lock
);
110 wake_up(&csk
->waitq
);
111 wakeup_thread
= false;
114 spin_unlock_bh(&cdev
->cskq
.lock
);
117 static void cxgbit_detach_cdev(struct cxgbit_device
*cdev
)
119 bool free_cdev
= false;
121 spin_lock_bh(&cdev
->cskq
.lock
);
122 if (list_empty(&cdev
->cskq
.list
))
124 spin_unlock_bh(&cdev
->cskq
.lock
);
127 mutex_lock(&cdev_list_lock
);
128 list_del(&cdev
->list
);
129 mutex_unlock(&cdev_list_lock
);
131 cxgbit_put_cdev(cdev
);
133 cxgbit_close_conn(cdev
);
137 static int cxgbit_uld_state_change(void *handle
, enum cxgb4_state state
)
139 struct cxgbit_device
*cdev
= handle
;
143 set_bit(CDEV_STATE_UP
, &cdev
->flags
);
144 pr_info("cdev %s state UP.\n", pci_name(cdev
->lldi
.pdev
));
146 case CXGB4_STATE_START_RECOVERY
:
147 clear_bit(CDEV_STATE_UP
, &cdev
->flags
);
148 cxgbit_close_conn(cdev
);
149 pr_info("cdev %s state RECOVERY.\n", pci_name(cdev
->lldi
.pdev
));
151 case CXGB4_STATE_DOWN
:
152 pr_info("cdev %s state DOWN.\n", pci_name(cdev
->lldi
.pdev
));
154 case CXGB4_STATE_DETACH
:
155 clear_bit(CDEV_STATE_UP
, &cdev
->flags
);
156 pr_info("cdev %s state DETACH.\n", pci_name(cdev
->lldi
.pdev
));
157 cxgbit_detach_cdev(cdev
);
160 pr_info("cdev %s unknown state %d.\n",
161 pci_name(cdev
->lldi
.pdev
), state
);
168 cxgbit_proc_ddp_status(unsigned int tid
, struct cpl_rx_data_ddp
*cpl
,
169 struct cxgbit_lro_pdu_cb
*pdu_cb
)
171 unsigned int status
= ntohl(cpl
->ddpvld
);
173 pdu_cb
->flags
|= PDUCBF_RX_STATUS
;
174 pdu_cb
->ddigest
= ntohl(cpl
->ulp_crc
);
175 pdu_cb
->pdulen
= ntohs(cpl
->len
);
177 if (status
& (1 << CPL_RX_ISCSI_DDP_STATUS_HCRC_SHIFT
)) {
178 pr_info("tid 0x%x, status 0x%x, hcrc bad.\n", tid
, status
);
179 pdu_cb
->flags
|= PDUCBF_RX_HCRC_ERR
;
182 if (status
& (1 << CPL_RX_ISCSI_DDP_STATUS_DCRC_SHIFT
)) {
183 pr_info("tid 0x%x, status 0x%x, dcrc bad.\n", tid
, status
);
184 pdu_cb
->flags
|= PDUCBF_RX_DCRC_ERR
;
187 if (status
& (1 << CPL_RX_ISCSI_DDP_STATUS_PAD_SHIFT
))
188 pr_info("tid 0x%x, status 0x%x, pad bad.\n", tid
, status
);
190 if ((status
& (1 << CPL_RX_ISCSI_DDP_STATUS_DDP_SHIFT
)) &&
191 (!(pdu_cb
->flags
& PDUCBF_RX_DATA
))) {
192 pdu_cb
->flags
|= PDUCBF_RX_DATA_DDPD
;
197 cxgbit_lro_add_packet_rsp(struct sk_buff
*skb
, u8 op
, const __be64
*rsp
)
199 struct cxgbit_lro_cb
*lro_cb
= cxgbit_skb_lro_cb(skb
);
200 struct cxgbit_lro_pdu_cb
*pdu_cb
= cxgbit_skb_lro_pdu_cb(skb
,
202 struct cpl_rx_iscsi_ddp
*cpl
= (struct cpl_rx_iscsi_ddp
*)(rsp
+ 1);
204 cxgbit_proc_ddp_status(lro_cb
->csk
->tid
, cpl
, pdu_cb
);
206 if (pdu_cb
->flags
& PDUCBF_RX_HDR
)
207 pdu_cb
->complete
= true;
209 lro_cb
->complete
= true;
210 lro_cb
->pdu_totallen
+= pdu_cb
->pdulen
;
215 cxgbit_copy_frags(struct sk_buff
*skb
, const struct pkt_gl
*gl
,
218 u8 skb_frag_idx
= skb_shinfo(skb
)->nr_frags
;
221 /* usually there's just one frag */
222 __skb_fill_page_desc(skb
, skb_frag_idx
, gl
->frags
[0].page
,
223 gl
->frags
[0].offset
+ offset
,
224 gl
->frags
[0].size
- offset
);
225 for (i
= 1; i
< gl
->nfrags
; i
++)
226 __skb_fill_page_desc(skb
, skb_frag_idx
+ i
,
231 skb_shinfo(skb
)->nr_frags
+= gl
->nfrags
;
233 /* get a reference to the last page, we don't own it */
234 get_page(gl
->frags
[gl
->nfrags
- 1].page
);
238 cxgbit_lro_add_packet_gl(struct sk_buff
*skb
, u8 op
, const struct pkt_gl
*gl
)
240 struct cxgbit_lro_cb
*lro_cb
= cxgbit_skb_lro_cb(skb
);
241 struct cxgbit_lro_pdu_cb
*pdu_cb
= cxgbit_skb_lro_pdu_cb(skb
,
245 if (op
== CPL_ISCSI_HDR
) {
246 struct cpl_iscsi_hdr
*cpl
= (struct cpl_iscsi_hdr
*)gl
->va
;
248 offset
= sizeof(struct cpl_iscsi_hdr
);
249 pdu_cb
->flags
|= PDUCBF_RX_HDR
;
250 pdu_cb
->seq
= ntohl(cpl
->seq
);
251 len
= ntohs(cpl
->len
);
252 pdu_cb
->hdr
= gl
->va
+ offset
;
254 pdu_cb
->hfrag_idx
= skb_shinfo(skb
)->nr_frags
;
256 if (unlikely(gl
->nfrags
> 1))
257 cxgbit_skcb_flags(skb
) = 0;
259 lro_cb
->complete
= false;
261 struct cpl_iscsi_data
*cpl
= (struct cpl_iscsi_data
*)gl
->va
;
263 offset
= sizeof(struct cpl_iscsi_data
);
264 pdu_cb
->flags
|= PDUCBF_RX_DATA
;
265 len
= ntohs(cpl
->len
);
267 pdu_cb
->doffset
= lro_cb
->offset
;
268 pdu_cb
->nr_dfrags
= gl
->nfrags
;
269 pdu_cb
->dfrag_idx
= skb_shinfo(skb
)->nr_frags
;
272 cxgbit_copy_frags(skb
, gl
, offset
);
274 pdu_cb
->frags
+= gl
->nfrags
;
275 lro_cb
->offset
+= len
;
277 skb
->data_len
+= len
;
278 skb
->truesize
+= len
;
281 static struct sk_buff
*
282 cxgbit_lro_init_skb(struct cxgbit_sock
*csk
, u8 op
, const struct pkt_gl
*gl
,
283 const __be64
*rsp
, struct napi_struct
*napi
)
286 struct cxgbit_lro_cb
*lro_cb
;
288 skb
= napi_alloc_skb(napi
, LRO_SKB_MAX_HEADROOM
);
293 memset(skb
->data
, 0, LRO_SKB_MAX_HEADROOM
);
295 cxgbit_skcb_flags(skb
) |= SKCBF_RX_LRO
;
297 lro_cb
= cxgbit_skb_lro_cb(skb
);
306 static void cxgbit_queue_lro_skb(struct cxgbit_sock
*csk
, struct sk_buff
*skb
)
308 bool wakeup_thread
= false;
310 spin_lock(&csk
->rxq
.lock
);
311 __skb_queue_tail(&csk
->rxq
, skb
);
312 if (skb_queue_len(&csk
->rxq
) == 1)
313 wakeup_thread
= true;
314 spin_unlock(&csk
->rxq
.lock
);
317 wake_up(&csk
->waitq
);
320 static void cxgbit_lro_flush(struct t4_lro_mgr
*lro_mgr
, struct sk_buff
*skb
)
322 struct cxgbit_lro_cb
*lro_cb
= cxgbit_skb_lro_cb(skb
);
323 struct cxgbit_sock
*csk
= lro_cb
->csk
;
327 __skb_unlink(skb
, &lro_mgr
->lroq
);
328 cxgbit_queue_lro_skb(csk
, skb
);
333 lro_mgr
->lro_session_cnt
--;
336 static void cxgbit_uld_lro_flush(struct t4_lro_mgr
*lro_mgr
)
340 while ((skb
= skb_peek(&lro_mgr
->lroq
)))
341 cxgbit_lro_flush(lro_mgr
, skb
);
345 cxgbit_lro_receive(struct cxgbit_sock
*csk
, u8 op
, const __be64
*rsp
,
346 const struct pkt_gl
*gl
, struct t4_lro_mgr
*lro_mgr
,
347 struct napi_struct
*napi
)
350 struct cxgbit_lro_cb
*lro_cb
;
353 pr_err("%s: csk NULL, op 0x%x.\n", __func__
, op
);
361 if (lro_mgr
->lro_session_cnt
>= MAX_LRO_SESSIONS
) {
362 cxgbit_uld_lro_flush(lro_mgr
);
366 skb
= cxgbit_lro_init_skb(csk
, op
, gl
, rsp
, napi
);
372 __skb_queue_tail(&lro_mgr
->lroq
, skb
);
373 lro_mgr
->lro_session_cnt
++;
377 lro_cb
= cxgbit_skb_lro_cb(skb
);
379 if ((gl
&& (((skb_shinfo(skb
)->nr_frags
+ gl
->nfrags
) >
380 MAX_SKB_FRAGS
) || (lro_cb
->pdu_totallen
>= LRO_FLUSH_LEN_MAX
))) ||
381 (lro_cb
->pdu_idx
>= MAX_SKB_FRAGS
)) {
382 cxgbit_lro_flush(lro_mgr
, skb
);
387 cxgbit_lro_add_packet_gl(skb
, op
, gl
);
389 cxgbit_lro_add_packet_rsp(skb
, op
, rsp
);
391 lro_mgr
->lro_merged
++;
400 cxgbit_uld_lro_rx_handler(void *hndl
, const __be64
*rsp
,
401 const struct pkt_gl
*gl
, struct t4_lro_mgr
*lro_mgr
,
402 struct napi_struct
*napi
)
404 struct cxgbit_device
*cdev
= hndl
;
405 struct cxgb4_lld_info
*lldi
= &cdev
->lldi
;
406 struct cpl_tx_data
*rpl
= NULL
;
407 struct cxgbit_sock
*csk
= NULL
;
408 unsigned int tid
= 0;
410 unsigned int op
= *(u8
*)rsp
;
411 bool lro_flush
= true;
416 case CPL_RX_ISCSI_DDP
:
419 case CPL_ABORT_RPL_RSS
:
420 case CPL_PASS_ESTABLISH
:
422 case CPL_CLOSE_CON_RPL
:
423 case CPL_ABORT_REQ_RSS
:
424 case CPL_SET_TCB_RPL
:
426 rpl
= gl
? (struct cpl_tx_data
*)gl
->va
:
427 (struct cpl_tx_data
*)(rsp
+ 1);
429 csk
= lookup_tid(lldi
->tids
, tid
);
435 if (csk
&& csk
->lro_skb
&& lro_flush
)
436 cxgbit_lro_flush(lro_mgr
, csk
->lro_skb
);
441 if (op
== CPL_RX_ISCSI_DDP
) {
442 if (!cxgbit_lro_receive(csk
, op
, rsp
, NULL
, lro_mgr
,
447 len
= 64 - sizeof(struct rsp_ctrl
) - 8;
448 skb
= napi_alloc_skb(napi
, len
);
452 skb_copy_to_linear_data(skb
, &rsp
[1], len
);
454 if (unlikely(op
!= *(u8
*)gl
->va
)) {
455 pr_info("? FL 0x%p,RSS%#llx,FL %#llx,len %u.\n",
456 gl
->va
, be64_to_cpu(*rsp
),
457 be64_to_cpu(*(u64
*)gl
->va
),
462 if (op
== CPL_ISCSI_HDR
|| op
== CPL_ISCSI_DATA
) {
463 if (!cxgbit_lro_receive(csk
, op
, rsp
, gl
, lro_mgr
,
468 #define RX_PULL_LEN 128
469 skb
= cxgb4_pktgl_to_skb(gl
, RX_PULL_LEN
, RX_PULL_LEN
);
474 rpl
= (struct cpl_tx_data
*)skb
->data
;
476 cxgbit_skcb_rx_opcode(skb
) = op
;
478 pr_debug("cdev %p, opcode 0x%x(0x%x,0x%x), skb %p.\n",
479 cdev
, op
, rpl
->ot
.opcode_tid
,
480 ntohl(rpl
->ot
.opcode_tid
), skb
);
482 if (op
< NUM_CPL_CMDS
&& cxgbit_cplhandlers
[op
]) {
483 cxgbit_cplhandlers
[op
](cdev
, skb
);
485 pr_err("No handler for opcode 0x%x.\n", op
);
490 pr_err("%s OOM bailing out.\n", __func__
);
494 #ifdef CONFIG_CHELSIO_T4_DCB
495 struct cxgbit_dcb_work
{
496 struct dcb_app_type dcb_app
;
497 struct work_struct work
;
501 cxgbit_update_dcb_priority(struct cxgbit_device
*cdev
, u8 port_id
,
502 u8 dcb_priority
, u16 port_num
)
504 struct cxgbit_sock
*csk
;
507 bool wakeup_thread
= false;
509 spin_lock_bh(&cdev
->cskq
.lock
);
510 list_for_each_entry(csk
, &cdev
->cskq
.list
, list
) {
511 if (csk
->port_id
!= port_id
)
514 if (csk
->com
.local_addr
.ss_family
== AF_INET6
) {
515 struct sockaddr_in6
*sock_in6
;
517 sock_in6
= (struct sockaddr_in6
*)&csk
->com
.local_addr
;
518 local_port
= ntohs(sock_in6
->sin6_port
);
520 struct sockaddr_in
*sock_in
;
522 sock_in
= (struct sockaddr_in
*)&csk
->com
.local_addr
;
523 local_port
= ntohs(sock_in
->sin_port
);
526 if (local_port
!= port_num
)
529 if (csk
->dcb_priority
== dcb_priority
)
532 skb
= alloc_skb(0, GFP_ATOMIC
);
536 spin_lock(&csk
->rxq
.lock
);
537 __skb_queue_tail(&csk
->rxq
, skb
);
538 if (skb_queue_len(&csk
->rxq
) == 1)
539 wakeup_thread
= true;
540 spin_unlock(&csk
->rxq
.lock
);
543 wake_up(&csk
->waitq
);
544 wakeup_thread
= false;
547 spin_unlock_bh(&cdev
->cskq
.lock
);
550 static void cxgbit_dcb_workfn(struct work_struct
*work
)
552 struct cxgbit_dcb_work
*dcb_work
;
553 struct net_device
*ndev
;
554 struct cxgbit_device
*cdev
= NULL
;
555 struct dcb_app_type
*iscsi_app
;
556 u8 priority
, port_id
= 0xff;
558 dcb_work
= container_of(work
, struct cxgbit_dcb_work
, work
);
559 iscsi_app
= &dcb_work
->dcb_app
;
561 if (iscsi_app
->dcbx
& DCB_CAP_DCBX_VER_IEEE
) {
562 if (iscsi_app
->app
.selector
!= IEEE_8021QAZ_APP_SEL_ANY
)
565 priority
= iscsi_app
->app
.priority
;
567 } else if (iscsi_app
->dcbx
& DCB_CAP_DCBX_VER_CEE
) {
568 if (iscsi_app
->app
.selector
!= DCB_APP_IDTYPE_PORTNUM
)
571 if (!iscsi_app
->app
.priority
)
574 priority
= ffs(iscsi_app
->app
.priority
) - 1;
579 pr_debug("priority for ifid %d is %u\n",
580 iscsi_app
->ifindex
, priority
);
582 ndev
= dev_get_by_index(&init_net
, iscsi_app
->ifindex
);
587 mutex_lock(&cdev_list_lock
);
588 cdev
= cxgbit_find_device(ndev
, &port_id
);
593 mutex_unlock(&cdev_list_lock
);
597 cxgbit_update_dcb_priority(cdev
, port_id
, priority
,
598 iscsi_app
->app
.protocol
);
599 mutex_unlock(&cdev_list_lock
);
605 cxgbit_dcbevent_notify(struct notifier_block
*nb
, unsigned long action
,
608 struct cxgbit_dcb_work
*dcb_work
;
609 struct dcb_app_type
*dcb_app
= data
;
611 dcb_work
= kzalloc(sizeof(*dcb_work
), GFP_ATOMIC
);
615 dcb_work
->dcb_app
= *dcb_app
;
616 INIT_WORK(&dcb_work
->work
, cxgbit_dcb_workfn
);
617 schedule_work(&dcb_work
->work
);
622 static enum target_prot_op
cxgbit_get_sup_prot_ops(struct iscsi_conn
*conn
)
624 return TARGET_PROT_NORMAL
;
627 static struct iscsit_transport cxgbit_transport
= {
629 .transport_type
= ISCSI_CXGBIT
,
630 .rdma_shutdown
= false,
631 .priv_size
= sizeof(struct cxgbit_cmd
),
632 .owner
= THIS_MODULE
,
633 .iscsit_setup_np
= cxgbit_setup_np
,
634 .iscsit_accept_np
= cxgbit_accept_np
,
635 .iscsit_free_np
= cxgbit_free_np
,
636 .iscsit_free_conn
= cxgbit_free_conn
,
637 .iscsit_get_login_rx
= cxgbit_get_login_rx
,
638 .iscsit_put_login_tx
= cxgbit_put_login_tx
,
639 .iscsit_immediate_queue
= iscsit_immediate_queue
,
640 .iscsit_response_queue
= iscsit_response_queue
,
641 .iscsit_get_dataout
= iscsit_build_r2ts_for_cmd
,
642 .iscsit_queue_data_in
= iscsit_queue_rsp
,
643 .iscsit_queue_status
= iscsit_queue_rsp
,
644 .iscsit_xmit_pdu
= cxgbit_xmit_pdu
,
645 .iscsit_get_r2t_ttt
= cxgbit_get_r2t_ttt
,
646 .iscsit_get_rx_pdu
= cxgbit_get_rx_pdu
,
647 .iscsit_validate_params
= cxgbit_validate_params
,
648 .iscsit_release_cmd
= cxgbit_release_cmd
,
649 .iscsit_aborted_task
= iscsit_aborted_task
,
650 .iscsit_get_sup_prot_ops
= cxgbit_get_sup_prot_ops
,
653 static struct cxgb4_uld_info cxgbit_uld_info
= {
655 .nrxq
= MAX_ULD_QSETS
,
656 .ntxq
= MAX_ULD_QSETS
,
659 .add
= cxgbit_uld_add
,
660 .state_change
= cxgbit_uld_state_change
,
661 .lro_rx_handler
= cxgbit_uld_lro_rx_handler
,
662 .lro_flush
= cxgbit_uld_lro_flush
,
665 #ifdef CONFIG_CHELSIO_T4_DCB
666 static struct notifier_block cxgbit_dcbevent_nb
= {
667 .notifier_call
= cxgbit_dcbevent_notify
,
671 static int __init
cxgbit_init(void)
673 cxgb4_register_uld(CXGB4_ULD_ISCSIT
, &cxgbit_uld_info
);
674 iscsit_register_transport(&cxgbit_transport
);
676 #ifdef CONFIG_CHELSIO_T4_DCB
677 pr_info("%s dcb enabled.\n", DRV_NAME
);
678 register_dcbevent_notifier(&cxgbit_dcbevent_nb
);
680 BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff
, cb
) <
681 sizeof(union cxgbit_skb_cb
));
685 static void __exit
cxgbit_exit(void)
687 struct cxgbit_device
*cdev
, *tmp
;
689 #ifdef CONFIG_CHELSIO_T4_DCB
690 unregister_dcbevent_notifier(&cxgbit_dcbevent_nb
);
692 mutex_lock(&cdev_list_lock
);
693 list_for_each_entry_safe(cdev
, tmp
, &cdev_list_head
, list
) {
694 list_del(&cdev
->list
);
695 cxgbit_put_cdev(cdev
);
697 mutex_unlock(&cdev_list_lock
);
698 iscsit_unregister_transport(&cxgbit_transport
);
699 cxgb4_unregister_uld(CXGB4_ULD_ISCSIT
);
702 module_init(cxgbit_init
);
703 module_exit(cxgbit_exit
);
705 MODULE_DESCRIPTION("Chelsio iSCSI target offload driver");
706 MODULE_AUTHOR("Chelsio Communications");
707 MODULE_VERSION(DRV_VERSION
);
708 MODULE_LICENSE("GPL");