diff options
author | Ciro Nishiguchi <ciro.nishiguchi@ni.com> | 2019-10-02 21:49:53 -0500 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-11-26 12:21:32 -0800 |
commit | 912ed28b3df13b9f9c33f2fa92867ec0ac7445fd (patch) | |
tree | 4c3f06c9332547ec47d08397b9bbde88e9be6ae8 /host/lib/include | |
parent | 2f97f8bd0167d4179427efa8a955046fbf417e91 (diff) | |
download | uhd-912ed28b3df13b9f9c33f2fa92867ec0ac7445fd.tar.gz uhd-912ed28b3df13b9f9c33f2fa92867ec0ac7445fd.tar.bz2 uhd-912ed28b3df13b9f9c33f2fa92867ec0ac7445fd.zip |
rfnoc: Make trasnport safe to use with offload threads
Make transports safe to use with an offload thread by ensuring that the
callbacks and the API methods can execute concurrently. Also, ensure
that the transports release their I/O service clients prior to allowing
their other member variables be destroyed.
Diffstat (limited to 'host/lib/include')
-rw-r--r-- | host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp | 2 | ||||
-rw-r--r-- | host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp | 21 | ||||
-rw-r--r-- | host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp | 4 |
3 files changed, 19 insertions, 8 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp b/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp index 2a37a5afc..f247761e7 100644 --- a/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp +++ b/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp @@ -74,7 +74,7 @@ public: size_t num_send_frames, size_t num_recv_frames); - ~chdr_ctrl_xport() = default; + ~chdr_ctrl_xport(); /*! * Get an empty frame buffer in which to write packet contents. diff --git a/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp b/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp index 3333f4f9d..4ff41899c 100644 --- a/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp +++ b/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp @@ -169,6 +169,10 @@ public: const size_t num_recv_frames, const fc_params_t& fc_params); + /*! Destructor + */ + ~chdr_rx_data_xport(); + /*! Returns maximum number payload bytes * * \return maximum payload bytes per packet @@ -227,8 +231,8 @@ private: transport::recv_link_if* recv_link, transport::send_link_if* send_link) { - _recv_packet->refresh(buff->data()); - const auto header = _recv_packet->get_chdr_header(); + _recv_packet_cb->refresh(buff->data()); + const auto header = _recv_packet_cb->get_chdr_header(); const auto dst_epid = header.get_dst_epid(); if (dst_epid != _epid) { @@ -240,9 +244,9 @@ private: if (type == chdr::PKT_TYPE_STRC) { chdr::strc_payload strc; - strc.deserialize(_recv_packet->get_payload_const_ptr_as<uint64_t>(), - _recv_packet->get_payload_size() / sizeof(uint64_t), - _recv_packet->conv_to_host<uint64_t>()); + strc.deserialize(_recv_packet_cb->get_payload_const_ptr_as<uint64_t>(), + _recv_packet_cb->get_payload_size() / sizeof(uint64_t), + _recv_packet_cb->conv_to_host<uint64_t>()); const stream_buff_params_t strc_counts = { strc.num_bytes, static_cast<uint32_t>(strc.num_pkts)}; @@ -296,8 +300,8 @@ private: transport::recv_link_if* recv_link, transport::send_link_if* send_link) { - _recv_packet->refresh(buff->data()); - const auto header = _recv_packet->get_chdr_header(); + _recv_packet_cb->refresh(buff->data()); + const auto header = _recv_packet_cb->get_chdr_header(); const size_t packet_size = header.get_length(); recv_link->release_recv_buff(std::move(buff)); _fc_state.xfer_done(packet_size); @@ -382,6 +386,9 @@ private: // Packet for received data chdr::chdr_packet::uptr _recv_packet; + // Packet for received data used in callbacks + chdr::chdr_packet::uptr _recv_packet_cb; + // Handles sending of strs flow control response packets detail::rx_flow_ctrl_sender _fc_sender; diff --git a/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp b/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp index 8658767b6..0d709fae1 100644 --- a/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp +++ b/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp @@ -167,6 +167,10 @@ public: const size_t num_send_frames, const fc_params_t fc_params); + /*! Destructor + */ + ~chdr_tx_data_xport(); + /*! Returns maximum number of payload bytes * * \return maximum number of payload bytes |