forked from Imagelibrary/rtems
leon, grspw_pkt: Added checks for special list cases
- 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.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user