Date: Sat, 2 May 2020 23:58:20 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r360576 - in head/sys/dev: cxgbe/crypto cxgbe/tom mlx5/mlx5_en Message-ID: <202005022358.042NwKia084962@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Sat May 2 23:58:20 2020 New Revision: 360576 URL: https://svnweb.freebsd.org/changeset/base/360576 Log: Step 2.4: Stop using 'struct mbuf_ext_pgs' in drivers. Reviewed by: gallatin, hselasky Differential Revision: https://reviews.freebsd.org/D24598 Modified: head/sys/dev/cxgbe/crypto/t4_kern_tls.c head/sys/dev/cxgbe/tom/t4_cpl_io.c head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c Modified: head/sys/dev/cxgbe/crypto/t4_kern_tls.c ============================================================================== --- head/sys/dev/cxgbe/crypto/t4_kern_tls.c Sat May 2 23:52:35 2020 (r360575) +++ head/sys/dev/cxgbe/crypto/t4_kern_tls.c Sat May 2 23:58:20 2020 (r360576) @@ -900,12 +900,10 @@ ktls_base_wr_size(struct tlspcb *tlsp) static u_int ktls_tcp_payload_length(struct tlspcb *tlsp, struct mbuf *m_tls) { - struct mbuf_ext_pgs *ext_pgs; struct tls_record_layer *hdr; u_int plen, mlen; MBUF_EXT_PGS_ASSERT(m_tls); - ext_pgs = &m_tls->m_ext_pgs; hdr = (void *)m_tls->m_epg_hdr; plen = ntohs(hdr->tls_length); @@ -924,8 +922,8 @@ ktls_tcp_payload_length(struct tlspcb *tlsp, struct mb * trim the length to avoid sending any of the trailer. There * is no way to send a partial trailer currently. */ - if (mlen > TLS_HEADER_LENGTH + plen - ext_pgs->trail_len) - mlen = TLS_HEADER_LENGTH + plen - ext_pgs->trail_len; + if (mlen > TLS_HEADER_LENGTH + plen - m_tls->m_ext_pgs.trail_len) + mlen = TLS_HEADER_LENGTH + plen - m_tls->m_ext_pgs.trail_len; /* @@ -953,7 +951,6 @@ ktls_tcp_payload_length(struct tlspcb *tlsp, struct mb static u_int ktls_payload_offset(struct tlspcb *tlsp, struct mbuf *m_tls) { - struct mbuf_ext_pgs *ext_pgs; struct tls_record_layer *hdr; u_int offset, plen; #ifdef INVARIANTS @@ -961,14 +958,13 @@ ktls_payload_offset(struct tlspcb *tlsp, struct mbuf * #endif MBUF_EXT_PGS_ASSERT(m_tls); - ext_pgs = &m_tls->m_ext_pgs; hdr = (void *)m_tls->m_epg_hdr; plen = ntohs(hdr->tls_length); #ifdef INVARIANTS mlen = mtod(m_tls, vm_offset_t) + m_tls->m_len; MPASS(mlen < TLS_HEADER_LENGTH + plen); #endif - if (mtod(m_tls, vm_offset_t) <= ext_pgs->hdr_len) + if (mtod(m_tls, vm_offset_t) <= m_tls->m_ext_pgs.hdr_len) return (0); if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM) { /* @@ -979,8 +975,8 @@ ktls_payload_offset(struct tlspcb *tlsp, struct mbuf * * the offset at the last byte of the record payload * to send the last cipher block. */ - offset = min(mtod(m_tls, vm_offset_t) - ext_pgs->hdr_len, - (plen - TLS_HEADER_LENGTH - ext_pgs->trail_len) - 1); + offset = min(mtod(m_tls, vm_offset_t) - m_tls->m_ext_pgs.hdr_len, + (plen - TLS_HEADER_LENGTH - m_tls->m_ext_pgs.trail_len) - 1); return (rounddown(offset, AES_BLOCK_LEN)); } return (0); @@ -1003,19 +999,17 @@ static int ktls_wr_len(struct tlspcb *tlsp, struct mbuf *m, struct mbuf *m_tls, int *nsegsp) { - struct mbuf_ext_pgs *ext_pgs; struct tls_record_layer *hdr; u_int imm_len, offset, plen, wr_len, tlen; MBUF_EXT_PGS_ASSERT(m_tls); - ext_pgs = &m_tls->m_ext_pgs; /* * Determine the size of the TLS record payload to send * excluding header and trailer. */ tlen = ktls_tcp_payload_length(tlsp, m_tls); - if (tlen <= ext_pgs->hdr_len) { + if (tlen <= m_tls->m_ext_pgs.hdr_len) { /* * For requests that only want to send the TLS header, * send a tunnelled packet as immediate data. @@ -1041,7 +1035,7 @@ ktls_wr_len(struct tlspcb *tlsp, struct mbuf *m, struc } hdr = (void *)m_tls->m_epg_hdr; - plen = TLS_HEADER_LENGTH + ntohs(hdr->tls_length) - ext_pgs->trail_len; + plen = TLS_HEADER_LENGTH + ntohs(hdr->tls_length) - m_tls->m_ext_pgs.trail_len; if (tlen < plen) { plen = tlen; offset = ktls_payload_offset(tlsp, m_tls); @@ -1058,14 +1052,14 @@ ktls_wr_len(struct tlspcb *tlsp, struct mbuf *m, struc */ imm_len = 0; if (offset == 0) - imm_len += ext_pgs->hdr_len; + imm_len += m_tls->m_ext_pgs.hdr_len; if (plen == tlen) imm_len += AES_BLOCK_LEN; wr_len += roundup2(imm_len, 16); /* TLS record payload via DSGL. */ - *nsegsp = sglist_count_mbuf_epg(m_tls, ext_pgs->hdr_len + offset, - plen - (ext_pgs->hdr_len + offset)); + *nsegsp = sglist_count_mbuf_epg(m_tls, m_tls->m_ext_pgs.hdr_len + offset, + plen - (m_tls->m_ext_pgs.hdr_len + offset)); wr_len += ktls_sgl_size(*nsegsp); wr_len = roundup2(wr_len, 16); @@ -1466,7 +1460,6 @@ ktls_write_tunnel_packet(struct sge_txq *txq, void *ds struct ip *ip, newip; struct ip6_hdr *ip6, newip6; struct tcphdr *tcp, newtcp; - struct mbuf_ext_pgs *ext_pgs; caddr_t out; TXQ_LOCK_ASSERT_OWNED(txq); @@ -1474,7 +1467,6 @@ ktls_write_tunnel_packet(struct sge_txq *txq, void *ds /* Locate the template TLS header. */ MBUF_EXT_PGS_ASSERT(m_tls); - ext_pgs = &m_tls->m_ext_pgs; /* This should always be the last TLS record in a chain. */ MPASS(m_tls->m_next == NULL); @@ -1577,7 +1569,6 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq struct ulptx_idata *idata; struct cpl_tx_sec_pdu *sec_pdu; struct cpl_tx_data *tx_data; - struct mbuf_ext_pgs *ext_pgs; struct tls_record_layer *hdr; char *iv, *out; u_int aad_start, aad_stop; @@ -1603,20 +1594,19 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq /* Locate the TLS header. */ MBUF_EXT_PGS_ASSERT(m_tls); - ext_pgs = &m_tls->m_ext_pgs; hdr = (void *)m_tls->m_epg_hdr; - plen = TLS_HEADER_LENGTH + ntohs(hdr->tls_length) - ext_pgs->trail_len; + plen = TLS_HEADER_LENGTH + ntohs(hdr->tls_length) - m_tls->m_ext_pgs.trail_len; /* Determine how much of the TLS record to send. */ tlen = ktls_tcp_payload_length(tlsp, m_tls); - if (tlen <= ext_pgs->hdr_len) { + if (tlen <= m_tls->m_ext_pgs.hdr_len) { /* * For requests that only want to send the TLS header, * send a tunnelled packet as immediate data. */ #ifdef VERBOSE_TRACES CTR3(KTR_CXGBE, "%s: tid %d header-only TLS record %u", - __func__, tlsp->tid, (u_int)ext_pgs->seqno); + __func__, tlsp->tid, (u_int)m_tls->m_ext_pgs.seqno); #endif return (ktls_write_tunnel_packet(txq, dst, m, m_tls, available, tcp_seqno, pidx)); @@ -1626,7 +1616,7 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq offset = ktls_payload_offset(tlsp, m_tls); #ifdef VERBOSE_TRACES CTR4(KTR_CXGBE, "%s: tid %d short TLS record %u with offset %u", - __func__, tlsp->tid, (u_int)ext_pgs->seqno, offset); + __func__, tlsp->tid, (u_int)m_tls->m_ext_pgs.seqno, offset); #endif if (m_tls->m_next == NULL && (tcp->th_flags & TH_FIN) != 0) { txq->kern_tls_fin_short++; @@ -1681,10 +1671,10 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq */ tx_max_offset = mtod(m_tls, vm_offset_t); if (tx_max_offset > TLS_HEADER_LENGTH + ntohs(hdr->tls_length) - - ext_pgs->trail_len) { + m_tls->m_ext_pgs.trail_len) { /* Always send the full trailer. */ tx_max_offset = TLS_HEADER_LENGTH + ntohs(hdr->tls_length) - - ext_pgs->trail_len; + m_tls->m_ext_pgs.trail_len; } if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_CBC && tx_max_offset > TLS_HEADER_LENGTH) { @@ -1799,15 +1789,15 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq /* Recalculate 'nsegs' if cached value is not available. */ if (nsegs == 0) - nsegs = sglist_count_mbuf_epg(m_tls, ext_pgs->hdr_len + - offset, plen - (ext_pgs->hdr_len + offset)); + nsegs = sglist_count_mbuf_epg(m_tls, m_tls->m_ext_pgs.hdr_len + + offset, plen - (m_tls->m_ext_pgs.hdr_len + offset)); /* Calculate the size of the TLS work request. */ twr_len = ktls_base_wr_size(tlsp); imm_len = 0; if (offset == 0) - imm_len += ext_pgs->hdr_len; + imm_len += m_tls->m_ext_pgs.hdr_len; if (plen == tlen) imm_len += AES_BLOCK_LEN; twr_len += roundup2(imm_len, 16); @@ -1923,13 +1913,13 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq cipher_stop = 0; sec_pdu->pldlen = htobe32(16 + plen - - (ext_pgs->hdr_len + offset)); + (m_tls->m_ext_pgs.hdr_len + offset)); /* These two flits are actually a CPL_TLS_TX_SCMD_FMT. */ sec_pdu->seqno_numivs = tlsp->scmd0_short.seqno_numivs; sec_pdu->ivgen_hdrlen = htobe32( tlsp->scmd0_short.ivgen_hdrlen | - V_SCMD_HDR_LEN(offset == 0 ? ext_pgs->hdr_len : 0)); + V_SCMD_HDR_LEN(offset == 0 ? m_tls->m_ext_pgs.hdr_len : 0)); txq->kern_tls_short++; } else { @@ -1942,7 +1932,7 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq aad_start = 1; aad_stop = TLS_HEADER_LENGTH; iv_offset = TLS_HEADER_LENGTH + 1; - cipher_start = ext_pgs->hdr_len + 1; + cipher_start = m_tls->m_ext_pgs.hdr_len + 1; if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM) { cipher_stop = 0; auth_start = cipher_start; @@ -1981,7 +1971,7 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq V_CPL_TX_SEC_PDU_AUTHSTOP(auth_stop) | V_CPL_TX_SEC_PDU_AUTHINSERT(auth_insert)); - sec_pdu->scmd1 = htobe64(ext_pgs->seqno); + sec_pdu->scmd1 = htobe64(m_tls->m_ext_pgs.seqno); /* Key context */ out = (void *)(sec_pdu + 1); @@ -2021,8 +2011,8 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq tx_data->rsvd = htobe32(tcp_seqno); } else { tx_data->len = htobe32(V_TX_DATA_MSS(mss) | - V_TX_LENGTH(tlen - (ext_pgs->hdr_len + offset))); - tx_data->rsvd = htobe32(tcp_seqno + ext_pgs->hdr_len + offset); + V_TX_LENGTH(tlen - (m_tls->m_ext_pgs.hdr_len + offset))); + tx_data->rsvd = htobe32(tcp_seqno + m_tls->m_ext_pgs.hdr_len + offset); } tx_data->flags = htobe32(F_TX_BYPASS); if (last_wr && tcp->th_flags & TH_PUSH) @@ -2031,8 +2021,8 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq /* Populate the TLS header */ out = (void *)(tx_data + 1); if (offset == 0) { - memcpy(out, m_tls->m_epg_hdr, ext_pgs->hdr_len); - out += ext_pgs->hdr_len; + memcpy(out, m_tls->m_epg_hdr, m_tls->m_ext_pgs.hdr_len); + out += m_tls->m_ext_pgs.hdr_len; } /* AES IV for a short record. */ @@ -2067,8 +2057,8 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq /* SGL for record payload */ sglist_reset(txq->gl); - if (sglist_append_mbuf_epg(txq->gl, m_tls, ext_pgs->hdr_len + offset, - plen - (ext_pgs->hdr_len + offset)) != 0) { + if (sglist_append_mbuf_epg(txq->gl, m_tls, m_tls->m_ext_pgs.hdr_len + offset, + plen - (m_tls->m_ext_pgs.hdr_len + offset)) != 0) { #ifdef INVARIANTS panic("%s: failed to append sglist", __func__); #endif @@ -2090,7 +2080,7 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq txq->kern_tls_waste += mtod(m_tls, vm_offset_t); else txq->kern_tls_waste += mtod(m_tls, vm_offset_t) - - (ext_pgs->hdr_len + offset); + (m_tls->m_ext_pgs.hdr_len + offset); } txsd = &txq->sdesc[pidx]; Modified: head/sys/dev/cxgbe/tom/t4_cpl_io.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_cpl_io.c Sat May 2 23:52:35 2020 (r360575) +++ head/sys/dev/cxgbe/tom/t4_cpl_io.c Sat May 2 23:58:20 2020 (r360576) @@ -1924,19 +1924,17 @@ aiotx_free_job(struct kaiocb *job) static void aiotx_free_pgs(struct mbuf *m) { - struct mbuf_ext_pgs *ext_pgs; struct kaiocb *job; vm_page_t pg; MBUF_EXT_PGS_ASSERT(m); - ext_pgs = &m->m_ext_pgs; job = m->m_ext.ext_arg1; #ifdef VERBOSE_TRACES CTR3(KTR_CXGBE, "%s: completed %d bytes for tid %d", __func__, m->m_len, jobtotid(job)); #endif - for (int i = 0; i < ext_pgs->npgs; i++) { + for (int i = 0; i < m->m_ext_pgs.npgs; i++) { pg = PHYS_TO_VM_PAGE(m->m_epg_pa[i]); vm_page_unwire(pg, PQ_ACTIVE); } @@ -1954,7 +1952,6 @@ alloc_aiotx_mbuf(struct kaiocb *job, int len) struct vmspace *vm; vm_page_t pgs[MBUF_PEXT_MAX_PGS]; struct mbuf *m, *top, *last; - struct mbuf_ext_pgs *ext_pgs; vm_map_t map; vm_offset_t start; int i, mlen, npages, pgoff; @@ -1992,16 +1989,15 @@ alloc_aiotx_mbuf(struct kaiocb *job, int len) break; } - ext_pgs = &m->m_ext_pgs; - ext_pgs->first_pg_off = pgoff; - ext_pgs->npgs = npages; + m->m_ext_pgs.first_pg_off = pgoff; + m->m_ext_pgs.npgs = npages; if (npages == 1) { KASSERT(mlen + pgoff <= PAGE_SIZE, ("%s: single page is too large (off %d len %d)", __func__, pgoff, mlen)); - ext_pgs->last_pg_len = mlen; + m->m_ext_pgs.last_pg_len = mlen; } else { - ext_pgs->last_pg_len = mlen - (PAGE_SIZE - pgoff) - + m->m_ext_pgs.last_pg_len = mlen - (PAGE_SIZE - pgoff) - (npages - 2) * PAGE_SIZE; } for (i = 0; i < npages; i++) Modified: head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c ============================================================================== --- head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c Sat May 2 23:52:35 2020 (r360575) +++ head/sys/dev/mlx5/mlx5_en/mlx5_en_hw_tls.c Sat May 2 23:58:20 2020 (r360576) @@ -680,13 +680,11 @@ done: static int mlx5e_sq_tls_populate(struct mbuf *mb, uint64_t *pseq) { - struct mbuf_ext_pgs *ext_pgs; for (; mb != NULL; mb = mb->m_next) { if (!(mb->m_flags & M_NOMAP)) continue; - ext_pgs = &mb->m_ext_pgs; - *pseq = ext_pgs->seqno; + *pseq = mb->m_ext_pgs.seqno; return (1); } return (0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005022358.042NwKia084962>