aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/utils
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2022-02-18 11:34:30 +0100
committerAaron Rossetto <aaron.rossetto@ni.com>2022-02-24 13:39:41 -0600
commit0f15704cb9daf963a1d146c4f5413bfafb12e4de (patch)
tree6799d3074f7ef5b057a6e8a3b60c62b35c3bcd3d /host/lib/utils
parent45f4bb65864181b3a5c11c07d6a7f7393e2a3334 (diff)
downloaduhd-0f15704cb9daf963a1d146c4f5413bfafb12e4de.tar.gz
uhd-0f15704cb9daf963a1d146c4f5413bfafb12e4de.tar.bz2
uhd-0f15704cb9daf963a1d146c4f5413bfafb12e4de.zip
rfnoc: graph_utils: Add ability to declare back-edges
rfnoc::connect_through_blocks(), unlike rfnoc_graph::connect(), did not have an argument to declare a back-edge. This patch remedies this situation by adding a skip_property_propagation argument that works exactly as with rfnoc_graph::connect().
Diffstat (limited to 'host/lib/utils')
-rw-r--r--host/lib/utils/graph_utils.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/host/lib/utils/graph_utils.cpp b/host/lib/utils/graph_utils.cpp
index 89df30e15..aeb71b091 100644
--- a/host/lib/utils/graph_utils.cpp
+++ b/host/lib/utils/graph_utils.cpp
@@ -87,7 +87,8 @@ std::vector<graph_edge_t> connect_through_blocks(rfnoc_graph::sptr graph,
const block_id_t src_blk,
const size_t src_port,
const block_id_t dst_blk,
- const size_t dst_port)
+ const size_t dst_port,
+ const bool skip_property_propagation)
{
// First, create a chain from the source block to a stream endpoint
auto block_chain = get_block_chain(graph, src_blk, src_port, true);
@@ -136,6 +137,7 @@ std::vector<graph_edge_t> connect_through_blocks(rfnoc_graph::sptr graph,
std::string sep_to_dst_id;
size_t sep_to_dst_port = 0;
bool has_sep_to_dst_connection = false;
+ bool skip_pp = skip_property_propagation;
for (auto edge : block_chain) {
if (uhd::rfnoc::block_id_t(edge.dst_blockid).match(uhd::rfnoc::NODE_ID_SEP)) {
@@ -149,11 +151,13 @@ std::vector<graph_edge_t> connect_through_blocks(rfnoc_graph::sptr graph,
sep_to_dst_port = edge.dst_port;
} else {
graph->connect(
- edge.src_blockid, edge.src_port, edge.dst_blockid, edge.dst_port);
+ edge.src_blockid, edge.src_port, edge.dst_blockid, edge.dst_port, skip_pp);
+ skip_pp = false;
}
}
if (has_src_to_sep_connection && has_sep_to_dst_connection) {
- graph->connect(src_to_sep_id, src_to_sep_port, sep_to_dst_id, sep_to_dst_port);
+ graph->connect(
+ src_to_sep_id, src_to_sep_port, sep_to_dst_id, sep_to_dst_port, skip_pp);
} else if (has_src_to_sep_connection != has_sep_to_dst_connection) {
const std::string err_msg = "Incomplete path. Only one SEP edge found.";
UHD_LOG_TRACE("GRAPH_UTILS", err_msg);