Changeset a9d04b1c in rtems


Ignore:
Timestamp:
Feb 8, 2000, 6:26:40 PM (22 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
70d27f9
Parents:
b33ab2b
Message:

Patch from Eric Norum <eric@…> to remove race conditions
when setting up receive buffer descriptors and when unmasking interrupts.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/gen68360/network/network.c

    rb33ab2b ra9d04b1c  
    414414        struct mbuf *m;
    415415        rtems_unsigned16 status;
    416         m360BufferDescriptor_t *rxBd;
     416        volatile m360BufferDescriptor_t *rxBd;
    417417        int rxBdIndex;
    418418
     
    427427                sc->rxMbuf[rxBdIndex] = m;
    428428                rxBd->buffer = mtod (m, void *);
     429                if (++rxBdIndex == sc->rxBdCount) {
     430                        rxBd->status = M360_BD_EMPTY | M360_BD_INTERRUPT | M360_BD_WRAP;
     431                        break;
     432                }
    429433                rxBd->status = M360_BD_EMPTY | M360_BD_INTERRUPT;
    430                 if (++rxBdIndex == sc->rxBdCount) {
    431                         rxBd->status |= M360_BD_WRAP;
    432                         break;
    433                 }
    434434        }
    435435
     
    458458                         */
    459459                        while ((status = rxBd->status) & M360_BD_EMPTY) {
     460                                rtems_interrupt_level level;
    460461                                rtems_event_set events;
    461462
     
    463464                                 * Unmask RXF (Full frame received) event
    464465                                 */
     466                                rtems_interrupt_disable (level);
    465467                                m360.scc1.sccm |= 0x8;
     468                                rtems_interrupt_enable (level);
    466469
    467470                                rtems_bsdnet_event_receive (INTERRUPT_EVENT,
     
    591594                        m360Enet_retire_tx_bd (sc);
    592595                        while ((sc->txBdActiveCount + nAdded) == sc->txBdCount) {
     596                                rtems_interrupt_level level;
    593597                                rtems_event_set events;
    594598
     
    597601                                 * TXE (transmitter error) events.
    598602                                 */
     603                                rtems_interrupt_disable (level);
    599604                                m360.scc1.sccm |= 0x12;
     605                                rtems_interrupt_enable (level);
    600606                                rtems_bsdnet_event_receive (INTERRUPT_EVENT,
    601607                                                RTEMS_WAIT|RTEMS_EVENT_ANY,
Note: See TracChangeset for help on using the changeset viewer.