From f312d827602fafa21625106dafe2f209e10a22b3 Mon Sep 17 00:00:00 2001 From: Ciro Nishiguchi Date: Wed, 11 Sep 2019 16:50:11 -0500 Subject: rfnoc: Fix transport buffer reservations Change transports to reserve the number of frame buffers they actually need from the I/O service. Previously some I/O service clients reserved 0 buffers since they shared frame buffers with other clients, as we know the two clients do not use the links simultaneously. This is possible with the inline_io_service but not with a multithreaded I/O service which queues buffer for clients before they are requested. --- host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp | 7 +++++++ host/lib/include/uhdlib/transport/inline_io_service.hpp | 13 ++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'host/lib/include/uhdlib') diff --git a/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp b/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp index 726ea7f6c..2a37a5afc 100644 --- a/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp +++ b/host/lib/include/uhdlib/rfnoc/chdr_ctrl_xport.hpp @@ -119,6 +119,13 @@ public: */ void release_recv_buff(frame_buff::uptr buff); + /*! + * Release a frame buffer, allowing the recv link driver to reuse it. + * + * \param buffer frame buffer to release for reuse by the link + */ + void release_mgmt_buff(frame_buff::uptr buff); + /*! * Get this xport's EPID * diff --git a/host/lib/include/uhdlib/transport/inline_io_service.hpp b/host/lib/include/uhdlib/transport/inline_io_service.hpp index f10e7018d..f207d15a0 100644 --- a/host/lib/include/uhdlib/transport/inline_io_service.hpp +++ b/host/lib/include/uhdlib/transport/inline_io_service.hpp @@ -71,9 +71,8 @@ private: * Disconnect the sender and free resources * * \param link the link that was used for sending data - * \param num_frames number of frames to release (same as reservation) */ - void disconnect_sender(send_link_if* link, size_t num_frames); + void disconnect_sender(send_link_if* link); /*! * Connect a receiver to the link and reserve resources @@ -87,9 +86,8 @@ private: * Disconnect the receiver from the provided link and free resources * \param link the recv link that was used for reception * \param cb the callback to disassociate - * \param num_frames the number of frames that was reserved for the cb */ - void disconnect_receiver(recv_link_if* link, inline_recv_cb* cb, size_t num_frames); + void disconnect_receiver(recv_link_if* link, inline_recv_cb* cb); /* * Function to perform recv operations on a link, which is potentially @@ -103,14 +101,11 @@ private: frame_buff::uptr recv( inline_recv_cb* recv_io_cb, recv_link_if* recv_link, int32_t timeout_ms); - /* Track whether link is muxed, the callback, and buffer reservations */ + /* Track whether link is muxed and the callback */ std::unordered_map> + std::tuple> _recv_tbl; - /* Track how many send_frames have been reserved for each link */ - std::unordered_map _send_tbl; - /* Shared ptr kept to avoid untimely release */ std::list _send_links; std::list _recv_links; -- cgit v1.2.3