Date: Tue, 20 Oct 2015 12:28:23 -0700 From: Conrad Meyer <cem@FreeBSD.org> To: svn-src-head@freebsd.org Cc: src-committers@freebsd.org, svn-src-all@freebsd.org Subject: Re: svn commit: r289653 - head/sys/dev/ntb/if_ntb Message-ID: <CAG6CVpXi6jB0hP5qwupZd1_%2BqisR%2BnPH7YTPxKPuzXi3jCxN8g@mail.gmail.com> In-Reply-To: <201510201921.t9KJL1Hx037997@repo.freebsd.org> References: <201510201921.t9KJL1Hx037997@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This catches us up to Linus' master branch as of today (the most recent NTB patch there is from Sep 7, 2015) =E2=80=94 modulo no DMA offload= in if_ntb, no debugfs-equivalent statistics, and neither of Linux' NTB test drivers. Also we don't make any attempt to allocate memory in the device-local NUMA zone, because that API doesn't exist yet. Nor do we push back on the upper network stack layers to stop sending when our queues are full, for the same reason. That's not quite finished, though; Intel and EMC (ex-Isilon) have some patches queued up waiting to go into Linux that should be applied too. Thanks, Conrad On Tue, Oct 20, 2015 at 12:21 PM, Conrad E. Meyer <cem@freebsd.org> wrote: > Author: cem > Date: Tue Oct 20 19:21:01 2015 > New Revision: 289653 > URL: https://svnweb.freebsd.org/changeset/base/289653 > > Log: > if_ntb: Diff-reduce with Linux; add queue index type > > Add ntb_q_idx_t so it is more clear which struct members are of the sam= e > type (some bogus uint64_ts snuck in that should have been unsigned int)= . > > Add tx_err_no_buf and s/ENOMEM/EBUSY/ in tx_enqueue to match Linux. > > Sponsored by: EMC / Isilon Storage Division > > Modified: > head/sys/dev/ntb/if_ntb/if_ntb.c > > Modified: head/sys/dev/ntb/if_ntb/if_ntb.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/ntb/if_ntb/if_ntb.c Tue Oct 20 19:20:52 2015 (= r289652) > +++ head/sys/dev/ntb/if_ntb/if_ntb.c Tue Oct 20 19:21:01 2015 (= r289653) > @@ -105,6 +105,8 @@ SYSCTL_UINT(_hw_ntb, OID_AUTO, max_num_c > > STAILQ_HEAD(ntb_queue_list, ntb_queue_entry); > > +typedef unsigned ntb_q_idx_t; > + > struct ntb_queue_entry { > /* ntb_queue list reference */ > STAILQ_ENTRY(ntb_queue_entry) entry; > @@ -117,11 +119,11 @@ struct ntb_queue_entry { > > struct ntb_transport_qp *qp; > struct ntb_payload_header *x_hdr; > - unsigned index; > + ntb_q_idx_t index; > }; > > struct ntb_rx_info { > - unsigned int entry; > + ntb_q_idx_t entry; > }; > > struct ntb_transport_qp { > @@ -143,8 +145,8 @@ struct ntb_transport_qp { > struct mtx ntb_tx_free_q_lock; > void *tx_mw; > bus_addr_t tx_mw_phys; > - uint64_t tx_index; > - uint64_t tx_max_entry; > + ntb_q_idx_t tx_index; > + ntb_q_idx_t tx_max_entry; > uint64_t tx_max_frame; > > void (*rx_handler)(struct ntb_transport_qp *qp, void *qp_data, > @@ -157,8 +159,8 @@ struct ntb_transport_qp { > struct task rx_completion_task; > struct task rxc_db_work; > void *rx_buff; > - uint64_t rx_index; > - uint64_t rx_max_entry; > + ntb_q_idx_t rx_index; > + ntb_q_idx_t rx_max_entry; > uint64_t rx_max_frame; > > void (*event_handler)(void *data, enum ntb_link_event status); > @@ -178,6 +180,7 @@ struct ntb_transport_qp { > uint64_t tx_bytes; > uint64_t tx_pkts; > uint64_t tx_ring_full; > + uint64_t tx_err_no_buf; > }; > > struct ntb_queue_handlers { > @@ -842,7 +845,8 @@ ntb_transport_tx_enqueue(struct ntb_tran > entry =3D ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q); > if (entry =3D=3D NULL) { > CTR0(KTR_NTB, "TX: could not get entry from tx_free_q"); > - return (ENOMEM); > + qp->tx_err_no_buf++; > + return (EBUSY); > } > CTR1(KTR_NTB, "TX: got entry %p from tx_free_q", entry); > > @@ -961,7 +965,7 @@ static void > ntb_transport_rxc_db(void *arg, int pending __unused) > { > struct ntb_transport_qp *qp =3D arg; > - uint64_t i; > + ntb_q_idx_t i; > int rc; > > /* > @@ -1346,7 +1350,7 @@ ntb_transport_setup_qp_mw(struct ntb_tra > struct ntb_transport_qp *qp =3D &nt->qp_vec[qp_num]; > struct ntb_transport_mw *mw; > void *offset; > - uint64_t i; > + ntb_q_idx_t i; > size_t rx_size; > unsigned num_qps_mw, mw_num, mw_count; > > @@ -1473,7 +1477,8 @@ ntb_qp_link_down_reset(struct ntb_transp > qp->rx_ring_empty =3D 0; > qp->tx_ring_full =3D 0; > > - qp->rx_err_no_buf =3D qp->rx_err_oflow =3D qp->rx_err_ver =3D 0; > + qp->rx_err_no_buf =3D qp->tx_err_no_buf =3D 0; > + qp->rx_err_oflow =3D qp->rx_err_ver =3D 0; > } > > static void >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAG6CVpXi6jB0hP5qwupZd1_%2BqisR%2BnPH7YTPxKPuzXi3jCxN8g>