- Fixed grspw_dma_tx_send() so that it does not fail when an empty user packet is provided. - Added empty checks on some of the list handling inline functions for GRSPW_PKT. Their use by the driver may be correct already, but the user might not have been aware of the assumptions that certain lists had to be non-empty. --- c/src/lib/libbsp/sparc/shared/include/grspw_pkt.h | 9 +++++++++ c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/c/src/lib/libbsp/sparc/shared/include/grspw_pkt.h b/c/src/lib/libbsp/sparc/shared/include/grspw_pkt.h index 995d8bd..3a079c5 100644 --- a/c/src/lib/libbsp/sparc/shared/include/grspw_pkt.h +++ b/c/src/lib/libbsp/sparc/shared/include/grspw_pkt.h @@ -648,6 +648,9 @@ grspw_list_prepend(struct grspw_list *list, struct grspw_pkt *pkt) static inline void grspw_list_append_list(struct grspw_list *list, struct grspw_list *alist) { + if (grspw_list_is_empty(alist)) { + return; + } alist->tail->next = NULL; if ( list->tail == NULL ) { list->head = alist->head; @@ -660,6 +663,9 @@ grspw_list_append_list(struct grspw_list *list, struct grspw_list *alist) static inline void grspw_list_prepend_list(struct grspw_list *list, struct grspw_list *alist) { + if (grspw_list_is_empty(alist)) { + return; + } if ( list->head == NULL ) { list->tail = alist->tail; alist->tail->next = NULL; @@ -673,6 +679,9 @@ grspw_list_prepend_list(struct grspw_list *list, struct grspw_list *alist) static inline void grspw_list_remove_head_list(struct grspw_list *list, struct grspw_list *dlist) { + if (grspw_list_is_empty(dlist)) { + return; + } list->head = dlist->tail->next; if ( list->head == NULL ) { list->tail = NULL; diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c b/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c index 5f40853..cfeebe4 100644 --- a/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c +++ b/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c @@ -1841,7 +1841,7 @@ int grspw_dma_tx_send(void *c, int opts, struct grspw_list *pkts, int count) grspw_tx_process_scheduled(dma); /* 2. Add the requested packets to the SEND List (USER->SEND) */ - if (pkts) { + if (pkts && (count > 0)) { grspw_list_append_list(&dma->send, pkts); dma->send_cnt += count; if (dma->stats.send_cnt_max < dma->send_cnt) @@ -3104,7 +3104,7 @@ static int grspw_common_init(void) if (rtems_task_start(grspw_work_task, grspw_work_func, 0) != RTEMS_SUCCESSFUL) return -1; - } +} grspw_initialized = 1; return 0; -- 2.7.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel