cxgb4 changes for cxgbit.ko
Subsystems (7)
Varun Prakash
maintainercover cxgb4 changes for cxgbit.ko
Hi Nicholas,
I am posting cxgb4 patch series as
suggested by you in following email thread
http://www.spinics.net/lists/target-devel/msg12437.html
This series consists of patches from
initial cxgb4 series without any change.
Thanks
Varun
Varun Prakash (12):
cxgb4: add new ULD type CXGB4_ULD_ISCSIT
cxgb4: allocate resources for CXGB4_ULD_ISCSIT
cxgb4: large receive offload support
cxgb4, iw_cxgb4: move definitions to common header file cxgb4, iw_cxgb4, cxgb4i: remove duplicate definitions cxgb4, cxgb4i: move struct cpl_rx_data_ddp definition
cxgb4: add definitions for iSCSI target ULD
cxgb4: update struct cxgb4_lld_info definition
cxgb4: move VLAN_NONE macro definition
cxgb4, iw_cxgb4: move delayed ack macro definitions
cxgb4: add iSCSI DDP page pod manager
cxgb4: update Kconfig and Makefile
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h | 99 ----- drivers/net/ethernet/chelsio/Kconfig | 11 + drivers/net/ethernet/chelsio/cxgb4/Makefile | 1 + drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 27 +- drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | 34 +- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 97 ++++- drivers/net/ethernet/chelsio/cxgb4/cxgb4_ppm.c | 464 +++++++++++++++++++++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_ppm.h | 310 ++++++++++++++ drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 11 + drivers/net/ethernet/chelsio/cxgb4/l2t.c | 2 - drivers/net/ethernet/chelsio/cxgb4/l2t.h | 2 + drivers/net/ethernet/chelsio/cxgb4/sge.c | 13 +- drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 217 ++++++++++ drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 7 + drivers/scsi/cxgbi/cxgb4i/cxgb4i.h | 17 - 15 files changed, 1174 insertions(+), 138 deletions(-) create mode 100644 drivers/net/ethernet/chelsio/cxgb4/cxgb4_ppm.c create mode 100644 drivers/net/ethernet/chelsio/cxgb4/cxgb4_ppm.h
Signature · 1 line
2.0.2
Varun Prakash
maintainerPATCH 1/12 cxgb4: add new ULD type CXGB4_ULD_ISCSIT
Chelsio iSCSI target offload driver
will register with cxgb4 driver as ULD of typeCXGB4_ULD_ISCSIT.
--- drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h +1 -0
@@ -191,6 +191,7 @@ static inline void set_wr_txq(struct sk_buff *skb, int prio, int queue)enum cxgb4_uld {CXGB4_ULD_RDMA ,CXGB4_ULD_ISCSI , +CXGB4_ULD_ISCSIT ,CXGB4_ULD_MAX };
Signature · 1 line
2.0.2
Varun Prakash
maintainerPATCH 2/12 cxgb4: allocate resources for CXGB4_ULD_ISCSIT
In reply to Varun Prakashallocate rxqs for non T4 adapters,
dump rxqs sge qinfo through debugfs.
--- drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 11 ++++- drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | 34 +++++++++++++- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 53 ++++++++++++++++++++-- drivers/net/ethernet/chelsio/cxgb4/sge.c | 1 + 4 files changed, 92 insertions(+), 7 deletions(-)
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +9 -2
@@ -404,6 +404,9 @@ enum {MAX_CTRL_QUEUES =NCHAN ,/* # of control Tx queues */ MAX_RDMA_QUEUES =NCHAN ,/* # of streaming RDMA Rx queues */ MAX_RDMA_CIQS =32 ,/* # of RDMA concentrator IQs */ + +/* # of streaming iSCSIT Rx queues */ + MAX_ISCSIT_QUEUES = MAX_OFLD_QSETS, }; enum {
@@ -420,8 +423,8 @@ enum {enum {INGQ_EXTRAS =2 ,/* firmware event queue and */ /* forwarded interrupts */ -MAX_INGQ =MAX_ETH_QSETS +MAX_OFLD_QSETS +MAX_RDMA_QUEUES - +MAX_RDMA_CIQS +INGQ_EXTRAS , +MAX_INGQ =MAX_ETH_QSETS +MAX_OFLD_QSETS +MAX_RDMA_QUEUES + +MAX_RDMA_CIQS +MAX_ISCSIT_QUEUES +INGQ_EXTRAS , };struct adapter ;
@@ -641,6 +644,7 @@ struct sge {struct sge_eth_rxq ethrxq[MAX_ETH_QSETS ];struct sge_ofld_rxq iscsirxq[MAX_OFLD_QSETS ]; +struct sge_ofld_rxq iscsitrxq[MAX_ISCSIT_QUEUES ];struct sge_ofld_rxq rdmarxq[MAX_RDMA_QUEUES ];struct sge_ofld_rxq rdmaciq[MAX_RDMA_CIQS ];struct sge_rspq fw_evtq____cacheline_aligned_in_smp ;
@@ -652,9 +656,11 @@ struct sge {u16 ethqsets;/* # of active Ethernet queue sets */ u16 ethtxq_rover;/* Tx queue to clean up next */ u16 iscsiqsets;/* # of active iSCSI queue sets */ +u16 niscsitq;/* # of available iSCST Rx queues */ u16 rdmaqs;/* # of available RDMA Rx queues */ u16 rdmaciqs;/* # of available RDMA concentrator IQs */ u16 iscsi_rxq[MAX_OFLD_QSETS ]; +u16 iscsit_rxq[MAX_ISCSIT_QUEUES ];u16 rdma_rxq[MAX_RDMA_QUEUES ];u16 rdma_ciq[MAX_RDMA_CIQS ];u16 timer_val[SGE_NTIMERS ];
@@ -681,6 +687,7 @@ struct sge {#define for_each_ethrxq (sge, i) for (i = 0; i < (sge)->ethqsets; i++)#define for_each_iscsirxq (sge, i) for (i = 0; i < (sge)->iscsiqsets; i++) +#define for_each_iscsitrxq (sge, i) for (i = 0; i < (sge)->niscsitq; i++)#define for_each_rdmarxq (sge, i) for (i = 0; i < (sge)->rdmaqs; i++)#define for_each_rdmaciq (sge, i) for (i = 0; i < (sge)->rdmaciqs; i++)
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c +33 -1
@@ -2334,12 +2334,14 @@ static int sge_qinfo_show(struct seq_file *seq, void *v)struct adapter *adap = seq->private;int eth_entries =DIV_ROUND_UP (adap->sge.ethqsets,4 );int iscsi_entries =DIV_ROUND_UP (adap->sge.iscsiqsets,4 ); +int iscsit_entries =DIV_ROUND_UP (adap->sge.niscsitq,4 );int rdma_entries =DIV_ROUND_UP (adap->sge.rdmaqs,4 );int ciq_entries =DIV_ROUND_UP (adap->sge.rdmaciqs,4 );int ctrl_entries =DIV_ROUND_UP (MAX_CTRL_QUEUES ,4 );int i, r = (uintptr_t )v -1 ;int iscsi_idx = r - eth_entries; -int rdma_idx = iscsi_idx - iscsi_entries; +int iscsit_idx = iscsi_idx - iscsi_entries; +int rdma_idx = iscsit_idx - iscsit_entries;int ciq_idx = rdma_idx - rdma_entries;int ctrl_idx = ciq_idx - ciq_entries;int fq_idx = ctrl_idx - ctrl_entries;
@@ -2453,6 +2455,35 @@ do { \RL ("FLLow:" , fl.low);RL ("FLStarving:" , fl.starving); + }else if (iscsit_idx < iscsit_entries) { +const struct sge_ofld_rxq *rx = + &adap->sge.iscsitrxq[iscsit_idx *4 ]; +int n =min (4 , adap->sge.niscsitq -4 * iscsit_idx); + +S ("QType:" ,"iSCSIT" ); +R ("RspQ ID:" , rspq.abs_id); +R ("RspQ size:" , rspq.size); +R ("RspQE size:" , rspq.iqe_len); +R ("RspQ CIDX:" , rspq.cidx); +R ("RspQ Gen:" , rspq.gen); +S3 ("u" ,"Intr delay:" ,qtimer_val (adap, &rx[i].rspq)); +S3 ("u" ,"Intr pktcnt:" , + adap->sge.counter_val[rx[i].rspq.pktcnt_idx]); +R ("FL ID:" , fl.cntxt_id); +R ("FL size:" , fl.size -8 ); +R ("FL pend:" , fl.pend_cred); +R ("FL avail:" , fl.avail); +R ("FL PIDX:" , fl.pidx); +R ("FL CIDX:" , fl.cidx); +RL ("RxPackets:" , stats.pkts); +RL ("RxImmPkts:" , stats.imm); +RL ("RxNoMem:" , stats.nomem); +RL ("FLAllocErr:" , fl.alloc_failed); +RL ("FLLrgAlcErr:" , fl.large_alloc_failed); +RL ("FLMapErr:" , fl.mapping_err); +RL ("FLLow:" , fl.low); +RL ("FLStarving:" , fl.starving); + }else if (rdma_idx < rdma_entries) {const struct sge_ofld_rxq *rx = &adap->sge.rdmarxq[rdma_idx *4 ];
@@ -2543,6 +2574,7 @@ static int sge_queue_entries(const struct adapter *adap) {return DIV_ROUND_UP (adap->sge.ethqsets,4 ) +DIV_ROUND_UP (adap->sge.iscsiqsets,4 ) + +DIV_ROUND_UP (adap->sge.niscsitq,4 ) +DIV_ROUND_UP (adap->sge.rdmaqs,4 ) +DIV_ROUND_UP (adap->sge.rdmaciqs,4 ) +DIV_ROUND_UP (MAX_CTRL_QUEUES ,4 ) +1 ;
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +49 -4
131 lines not on this page · raw message
drivers/net/ethernet/chelsio/cxgb4/sge.c +1 -0
@@ -2982,6 +2982,7 @@ void t4_free_sge_resources(struct adapter *adap)/* clean up RDMA and iSCSI Rx queues */ t4_free_ofld_rxqs (adap, adap->sge.iscsiqsets, adap->sge.iscsirxq); +t4_free_ofld_rxqs (adap, adap->sge.niscsitq, adap->sge.iscsitrxq);t4_free_ofld_rxqs (adap, adap->sge.rdmaqs, adap->sge.rdmarxq);t4_free_ofld_rxqs (adap, adap->sge.rdmaciqs, adap->sge.rdmaciq);
Signature · 1 line
2.0.2
Varun Prakash
maintainerPATCH 3/12 cxgb4: large receive offload support
In reply to Varun Prakashadd large receive offload(LRO) support
for upper layer drivers.
--- drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 14 ++++++++- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 42 ++++++++++++++++++------- drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 6 ++++ drivers/net/ethernet/chelsio/cxgb4/sge.c | 12 +++++-- 4 files changed, 60 insertions(+), 14 deletions(-)
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +13 -1
@@ -511,6 +511,15 @@ struct pkt_gl {typedef int (*rspq_handler_t )(struct sge_rspq *q,const __be64 *rsp,const struct pkt_gl *gl); +typedef void (*rspq_flush_handler_t )(struct sge_rspq *q); +/* LRO related declarations for ULD */ +struct t4_lro_mgr { +#define MAX_LRO_SESSIONS 64 +u8 lro_session_cnt;/* # of sessions to aggregate */ +unsigned long lro_pkts;/* # of LRO super packets */ +unsigned long lro_merged;/* # of wire packets merged by LRO */ +struct sk_buff_head lroq;/* list of aggregated sessions */ +};struct sge_rspq {/* state for an SGE response queue */ struct napi_struct napi;
@@ -535,6 +544,8 @@ struct sge_rspq { /* state for an SGE response queue */struct adapter *adap;struct net_device *netdev;/* associated net device */ rspq_handler_t handler; +rspq_flush_handler_t flush_handler; +struct t4_lro_mgr lro_mgr;#ifdef CONFIG_NET_RX_BUSY_POLL #define CXGB_POLL_STATE_IDLE 0#define CXGB_POLL_STATE_NAPI BIT(0)/* NAPI owns this poll */
@@ -1114,7 +1125,8 @@ int t4_mgmt_tx(struct adapter *adap, struct sk_buff *skb);int t4_ofld_send (struct adapter *adap,struct sk_buff *skb);int t4_sge_alloc_rxq (struct adapter *adap,struct sge_rspq *iq,bool fwevtq,struct net_device *dev,int intr_idx, -struct sge_fl *fl,rspq_handler_t hnd,int cong); +struct sge_fl *fl,rspq_handler_t hnd, +rspq_flush_handler_t flush_handler,int cong);int t4_sge_alloc_eth_txq (struct adapter *adap,struct sge_eth_txq *txq,struct net_device *dev,struct netdev_queue *netdevq,unsigned int iqid);
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +31 -11
106 lines not on this page · raw message
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h +6 -0
@@ -213,6 +213,7 @@ struct l2t_data;struct net_device ;struct pkt_gl ;struct tp_tcp_stats ; +struct t4_lro_mgr ;struct cxgb4_range {unsigned int start;
@@ -284,6 +285,11 @@ struct cxgb4_uld_info { const struct pkt_gl *gl);int (*state_change)(void *handle,enum cxgb4_state new_state);int (*control)(void *handle,enum cxgb4_control control, ...); +int (*lro_rx_handler)(void *handle,const __be64 *rsp, +const struct pkt_gl *gl, +struct t4_lro_mgr *lro_mgr, +struct napi_struct *napi); +void (*lro_flush)(struct t4_lro_mgr *); };int cxgb4_register_uld (enum cxgb4_uld type,const struct cxgb4_uld_info *p);
drivers/net/ethernet/chelsio/cxgb4/sge.c +10 -2
@@ -2157,8 +2157,11 @@ static int process_responses(struct sge_rspq *q, int budget)while (likely (budget_left)) { rc = (void *)q->cur_desc + (q->iqe_len -sizeof (*rc)); -if (!is_new_response (rc, q)) +if (!is_new_response (rc, q)) { +if (q->flush_handler) + q->flush_handler (q);break ; + }dma_rmb (); rsp_type =RSPD_TYPE_G (rc->type_gen);
@@ -2544,7 +2547,8 @@ static void __iomem *bar2_address(struct adapter *adapter,*/ int t4_sge_alloc_rxq (struct adapter *adap,struct sge_rspq *iq,bool fwevtq,struct net_device *dev,int intr_idx, -struct sge_fl *fl,rspq_handler_t hnd,int cong) +struct sge_fl *fl,rspq_handler_t hnd, +rspq_flush_handler_t flush_hnd,int cong) {int ret, flsz =0 ;struct fw_iq_cmd c;
@@ -2638,6 +2642,10 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq, iq->size--;/* subtract status entry */ iq->netdev = dev; iq->handler = hnd; + iq->flush_handler = flush_hnd; + +memset (&iq->lro_mgr,0 ,sizeof (struct t4_lro_mgr )); +skb_queue_head_init (&iq->lro_mgr.lroq);/* set offset to -1 to distinguish ingress queues without FL */ iq->offset = fl ?0 :-1 ;
Signature · 1 line
2.0.2
Varun Prakash
maintainerPATCH 4/12 cxgb4, iw_cxgb4: move definitions to common header file
In reply to Varun Prakashmove struct tcp_options, struct cpl_pass_accept_req, enum defining congestion control algorithms and associated macros to common header file t4_msg.h
--- drivers/infiniband/hw/cxgb4/t4fw_ri_api.h | 81 ----------------------------- drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 81 +++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 81 deletions(-)
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h +0 -81
@@ -753,71 +753,6 @@ struct fw_ri_wr {#define FW_RI_WR_P2PTYPE_G (x) \ (((x) >> FW_RI_WR_P2PTYPE_S) & FW_RI_WR_P2PTYPE_M) -struct tcp_options { -__be16 mss; -__u8 wsf; -#if defined(__LITTLE_ENDIAN_BITFIELD) - __u8:4; -__u8 unknown:1 ; - __u8:1; -__u8 sack:1 ; -__u8 tstamp:1 ; -#else -__u8 tstamp:1 ; -__u8 sack:1 ; - __u8:1; -__u8 unknown:1 ; - __u8:4; -#endif -}; - -struct cpl_pass_accept_req { -union opcode_tid ot; -__be16 rsvd; -__be16 len; -__be32 hdr_len; -__be16 vlan; -__be16 l2info; -__be32 tos_stid; -struct tcp_options tcpopt; -}; - -/* cpl_pass_accept_req.hdr_len fields */ -#define SYN_RX_CHAN_S 0 -#define SYN_RX_CHAN_M 0xF -#define SYN_RX_CHAN_V (x) ((x) << SYN_RX_CHAN_S) -#define SYN_RX_CHAN_G (x) (((x) >> SYN_RX_CHAN_S) & SYN_RX_CHAN_M) - -#define TCP_HDR_LEN_S 10 -#define TCP_HDR_LEN_M 0x3F -#define TCP_HDR_LEN_V (x) ((x) << TCP_HDR_LEN_S) -#define TCP_HDR_LEN_G (x) (((x) >> TCP_HDR_LEN_S) & TCP_HDR_LEN_M) - -#define IP_HDR_LEN_S 16 -#define IP_HDR_LEN_M 0x3FF -#define IP_HDR_LEN_V (x) ((x) << IP_HDR_LEN_S) -#define IP_HDR_LEN_G (x) (((x) >> IP_HDR_LEN_S) & IP_HDR_LEN_M) - -#define ETH_HDR_LEN_S 26 -#define ETH_HDR_LEN_M 0x1F -#define ETH_HDR_LEN_V (x) ((x) << ETH_HDR_LEN_S) -#define ETH_HDR_LEN_G (x) (((x) >> ETH_HDR_LEN_S) & ETH_HDR_LEN_M) - -/* cpl_pass_accept_req.l2info fields */ -#define SYN_MAC_IDX_S 0 -#define SYN_MAC_IDX_M 0x1FF -#define SYN_MAC_IDX_V (x) ((x) << SYN_MAC_IDX_S) -#define SYN_MAC_IDX_G (x) (((x) >> SYN_MAC_IDX_S) & SYN_MAC_IDX_M) - -#define SYN_XACT_MATCH_S 9 -#define SYN_XACT_MATCH_V (x) ((x) << SYN_XACT_MATCH_S) -#define SYN_XACT_MATCH_F SYN_XACT_MATCH_V(1U) - -#define SYN_INTF_S 12 -#define SYN_INTF_M 0xF -#define SYN_INTF_V (x) ((x) << SYN_INTF_S) -#define SYN_INTF_G (x) (((x) >> SYN_INTF_S) & SYN_INTF_M) -struct ulptx_idata {__be32 cmd_more;__be32 len;
@@ -836,20 +771,4 @@ struct ulptx_idata {#define RX_DACK_CHANGE_V (x) ((x) << RX_DACK_CHANGE_S)#define RX_DACK_CHANGE_F RX_DACK_CHANGE_V(1U) -enum {/* TCP congestion control algorithms */ -CONG_ALG_RENO , -CONG_ALG_TAHOE , -CONG_ALG_NEWRENO , -CONG_ALG_HIGHSPEED -}; - -#define CONG_CNTRL_S 14 -#define CONG_CNTRL_M 0x3 -#define CONG_CNTRL_V (x) ((x) << CONG_CNTRL_S) -#define CONG_CNTRL_G (x) (((x) >> CONG_CNTRL_S) & CONG_CNTRL_M) - -#define T5_ISS_S 18 -#define T5_ISS_V (x) ((x) << T5_ISS_S) -#define T5_ISS_F T5_ISS_V(1U) -#endif /* _T4FW_RI_API_H_ */
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h +81 -0
87 lines not on this page · raw message
Signature · 1 line
2.0.2
Varun Prakash
maintainerPATCH 5/12 cxgb4, iw_cxgb4, cxgb4i: remove duplicate definitions
In reply to Varun Prakashmove struct ulptx_idata definition to
common header file t4_msg.h.
--- drivers/infiniband/hw/cxgb4/t4fw_ri_api.h | 9 --------- drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 5 +++++ drivers/scsi/cxgbi/cxgb4i/cxgb4i.h | 5 ----- 3 files changed, 5 insertions(+), 14 deletions(-)
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h +0 -9
@@ -753,15 +753,6 @@ struct fw_ri_wr {#define FW_RI_WR_P2PTYPE_G (x) \ (((x) >> FW_RI_WR_P2PTYPE_S) & FW_RI_WR_P2PTYPE_M) -struct ulptx_idata { -__be32 cmd_more; -__be32 len; -}; - -#define ULPTX_NSGE_S 0 -#define ULPTX_NSGE_M 0xFFFF -#define ULPTX_NSGE_V (x) ((x) << ULPTX_NSGE_S) -#define RX_DACK_MODE_S 29#define RX_DACK_MODE_M 0x3#define RX_DACK_MODE_V (x) ((x) << RX_DACK_MODE_S)
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h +5 -0
@@ -1222,6 +1222,11 @@ struct ulptx_sgl {struct ulptx_sge_pair sge[0 ]; }; +struct ulptx_idata { +__be32 cmd_more; +__be32 len; +}; +#define ULPTX_NSGE_S 0#define ULPTX_NSGE_V (x) ((x) << ULPTX_NSGE_S)
drivers/scsi/cxgbi/cxgb4i/cxgb4i.h +0 -5
@@ -25,11 +25,6 @@#define T5_ISS_VALID (1 << 18) -struct ulptx_idata { -__be32 cmd_more; -__be32 len; -}; -struct cpl_rx_data_ddp {union opcode_tid ot;__be16 urg;
Signature · 1 line
2.0.2
Varun Prakash
maintainerQuoted 5 lines · Varun Prakash
Hi Nicholas,
I am posting cxgb4 patch series as
suggested by you in following email thread
Quoted 8 lines
http://www.spinics.net/lists/target-devel/msg12437.html
This series consists of patches from
initial cxgb4 series without any change.Thanks
Varun
Please don't consider this series, due to some error it is not complete, I will send it again.
Thanks
Varun