summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorlaranjeiro2009-11-30 16:33:09 +0000
committerlaranjeiro2009-11-30 16:33:09 +0000
commit9e647f8f9999cc25755c0169275093ff01efb8fd (patch)
tree8e4b62c7f27c460880f2226d6e82122a1b05851d /cesar
parentaec88d1deb962c49e60d31ab22865f34375f73f1 (diff)
cesar/mac/sar: release PB's reference added for the bridgedma, closes #815
This change is useful for the TX way, the bridge DMA adds a reference on the PBs to not loose them if the expiration release the PBs. For TX if this is done after providing it to the PBProc, this one can reorder the chain by changing it or unchain PBs. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@6498 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar')
-rw-r--r--cesar/mac/sar/src/sar.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/cesar/mac/sar/src/sar.c b/cesar/mac/sar/src/sar.c
index edc8c77d40..4cd8010b99 100644
--- a/cesar/mac/sar/src/sar.c
+++ b/cesar/mac/sar/src/sar.c
@@ -714,6 +714,10 @@ sar_bridge_dma_free_head_rx (sar_t *ctx, sar_job_mfs_t *job)
sar_buffer_add (ctx, job->job.data_addr,
!((mfs_rx_t *) job->mfs)->common.mme);
}
+
+ /* Release the PBs in the job. */
+ blk_release_desc_range_nb ((blk_t *) job->job.first_pb_desc,
+ job->pb_quantity);
}
/**
@@ -731,6 +735,10 @@ sar_bridge_dma_free_head_tx (sar_t *ctx, sar_job_mfs_t *job)
local_mfs = &job->mfs->tx;
job->mfs->tx.pending_jobs --;
+ /* Release the PBs in the job. */
+ blk_release_desc_range_nb ((blk_t *) job->job.first_pb_desc,
+ job->pb_quantity);
+
if (job->mfs->tx.pending_jobs
&& (job->last_pb_offset != BLK_SIZE))
{
@@ -775,7 +783,6 @@ sar_bridge_dma_free_header_not_activate (sar_t *ctx, sar_job_mfs_t *job)
blk_release_desc_range_nb ((blk_t *) job->job.first_pb_desc,
job->pb_quantity);
- /* Release the PBs in the MFS. */
if (job->mfs->common.tx)
{
job->mfs->tx.head = NULL;
@@ -832,9 +839,6 @@ sar_bridge_dma_free_head (sar_t *ctx)
job->mfs->common.tei, job->mfs->common.lid,
job->job.crc_error);
-
- blk_release_desc_range_nb ((blk_t *) job->job.first_pb_desc,
- job->pb_quantity);
blk_release (job->mfs);
blk_release (job);
}