Changeset 57e1f4c3 in rtems


Ignore:
Timestamp:
Mar 22, 2016, 3:07:51 PM (4 years ago)
Author:
Daniel Hellstrom <daniel@…>
Branches:
master
Children:
9cb7e5d
Parents:
ac7da5bc
git-author:
Daniel Hellstrom <daniel@…> (03/22/16 15:07:51)
git-committer:
Daniel Hellstrom <daniel@…> (03/06/17 06:54:55)
Message:

leon, grspw_pkt: fixed error return path in dma_open

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c

    rac7da5bc r57e1f4c3  
    16521652        dma->cfg.flags = DMAFLAG_NO_SPILL;
    16531653
     1654        /* set to NULL so that error exit works correctly */
     1655        dma->sem_dma = RTEMS_ID_NONE;
     1656        dma->rx_wait.sem_wait = RTEMS_ID_NONE;
     1657        dma->tx_wait.sem_wait = RTEMS_ID_NONE;
     1658        dma->rx_ring_base = NULL;
     1659
    16541660        /* DMA Channel Semaphore created with count = 1 */
    16551661        if (rtems_semaphore_create(
     
    16581664            RTEMS_NO_INHERIT_PRIORITY | RTEMS_LOCAL | \
    16591665            RTEMS_NO_PRIORITY_CEILING, 0, &dma->sem_dma) != RTEMS_SUCCESSFUL) {
    1660                 dma = NULL;
    1661                 goto out;
     1666                dma->sem_dma = RTEMS_ID_NONE;
     1667                goto err;
    16621668        }
    16631669
     
    16661672        dma->rx_ring_base = (struct grspw_rxring *)malloc(size);
    16671673        dma->tx_ring_base = (struct grspw_txring *)&dma->rx_ring_base[GRSPW_RXBD_NR];
    1668         if (dma->rx_ring_base == NULL) {
    1669                 dma = NULL;
    1670                 goto out;
    1671         }
     1674        if (dma->rx_ring_base == NULL)
     1675                goto err;
    16721676
    16731677        /* Create DMA RX and TX Channel sempahore with count = 0 */
     
    16771681            RTEMS_NO_INHERIT_PRIORITY | RTEMS_LOCAL | \
    16781682            RTEMS_NO_PRIORITY_CEILING, 0, &dma->rx_wait.sem_wait) != RTEMS_SUCCESSFUL) {
    1679                 dma = NULL;
    1680                 goto out;
     1683                dma->rx_wait.sem_wait = RTEMS_ID_NONE;
     1684                goto err;
    16811685        }
    16821686        if (rtems_semaphore_create(
     
    16851689            RTEMS_NO_INHERIT_PRIORITY | RTEMS_LOCAL | \
    16861690            RTEMS_NO_PRIORITY_CEILING, 0, &dma->tx_wait.sem_wait) != RTEMS_SUCCESSFUL) {
    1687                 dma = NULL;
    1688                 goto out;
     1691                dma->tx_wait.sem_wait = RTEMS_ID_NONE;
     1692                goto err;
    16891693        }
    16901694
     
    16991703
    17001704        return dma;
     1705
     1706        /* initialization error happended */
     1707err:
     1708        if (dma->sem_dma != RTEMS_ID_NONE)
     1709                rtems_semaphore_delete(dma->sem_dma);
     1710        if (dma->rx_wait.sem_wait != RTEMS_ID_NONE)
     1711                rtems_semaphore_delete(dma->rx_wait.sem_wait);
     1712        if (dma->tx_wait.sem_wait != RTEMS_ID_NONE)
     1713                rtems_semaphore_delete(dma->tx_wait.sem_wait);
     1714        if (dma->rx_ring_base)
     1715                free(dma->rx_ring_base);
     1716        dma = NULL;
     1717        goto out;
    17011718}
    17021719
     
    17521769        rtems_semaphore_delete(dma->rx_wait.sem_wait);
    17531770        rtems_semaphore_delete(dma->tx_wait.sem_wait);
    1754         rtems_semaphore_delete(dma->sem_dma); /* Release and delete lock */
     1771        /* Release and delete lock. Operations requiring lock will fail */
     1772        rtems_semaphore_delete(dma->sem_dma);
     1773        dma->sem_dma = RTEMS_ID_NONE;
    17551774
    17561775        /* Free memory */
     
    29422961                    RTEMS_SUCCESSFUL)
    29432962                        return -1;
    2944         }
     2963}
    29452964
    29462965        grspw_initialized = 1;
Note: See TracChangeset for help on using the changeset viewer.