summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schodet2011-03-01 11:23:09 +0100
committerNicolas Schodet2011-03-04 11:30:12 +0100
commit911b0a18cf7a8d3b059e9ddf3bd6ee2a8077ba28 (patch)
tree29d385ca9e025b819455b232d8829178b72b0a7a
parente0711e839ae9fcfddfec1c82e0fa8023300c8cb7 (diff)
cesar/mac/pbproc: loop over the last PB in MPDU, refs #2316
-rw-r--r--cesar/mac/pbproc/src/prep_mpdu.c4
-rw-r--r--cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c2
2 files changed, 6 insertions, 0 deletions
diff --git a/cesar/mac/pbproc/src/prep_mpdu.c b/cesar/mac/pbproc/src/prep_mpdu.c
index 33252b98c3..1d889b6805 100644
--- a/cesar/mac/pbproc/src/prep_mpdu.c
+++ b/cesar/mac/pbproc/src/prep_mpdu.c
@@ -592,6 +592,8 @@ pbproc_prep_mpdu (pbproc_t *ctx)
prep->head = prep->main_head;
prep->tail = prep->main_tail;
prep->pb_nb_total = max_seg_nb + prep->seg_nb_pending;
+ /* Loop over the last PB, PBDMA null PB is not working. */
+ prep->tail->next = prep->tail;
/* Ok, ready to go! */
prep->main_mfs = mfs;
blk_addref (mfs);
@@ -643,6 +645,8 @@ pbproc_prep_mpdu_chain (pbproc_t *ctx)
prep->main_seg_nb_reserved = 0;
prep->tail->next = head;
prep->tail = tail;
+ /* Loop over the last PB, PBDMA null PB is not working. */
+ prep->tail->next = prep->tail;
}
}
/* If MFS is empty, forbid more segmentation on the last segment. */
diff --git a/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c b/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c
index 43d4c530b3..0de42b9761 100644
--- a/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c
+++ b/cesar/mac/pbproc/test/pbproc/src/prep_mpdu.c
@@ -313,6 +313,7 @@ prep_mpdu_test_f (test_t t, test_pbproc_t *tp, u32 date,
test_fail_unless (prep->main_seg_nb == main_seg_nb);
for (seg = seg_first, i = 1; i < main_seg_nb; seg = seg->next, i++)
test_fail_unless (seg->header.opsf == (i == 1));
+ test_fail_unless (seg->next == seg);
test_fail_unless (seg->header.opsf == (i == 1));
test_fail_unless (prep->main_tail == seg);
test_fail_unless (prep->tail == seg);
@@ -394,6 +395,7 @@ prep_mpdu_test_f (test_t t, test_pbproc_t *tp, u32 date,
+ seg_nb_pending);
for (seg = seg_first, i = 1; i < main_seg_nb; seg = seg->next, i++)
test_fail_unless (seg->header.opsf == (i == 1));
+ test_fail_unless (seg->next == seg);
test_fail_unless (seg->header.opsf == (i == 1));
test_fail_unless (prep->main_tail == seg);
test_fail_unless (prep->tail == seg);