Changeset f74abcf7 in rtems


Ignore:
Timestamp:
May 28, 1999, 6:21:25 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
9cffc645
Parents:
18cb17f
Message:

Changes from Eric Norum to add a loop and limit on the length of time
the stack will wait for mbufs.

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/libnetworking/rtems/rtems_glue.c

    r18cb17f rf74abcf7  
    9191{
    9292        void *p;
     93        int try = 0;
    9394
    9495        for (;;) {
    9596                p = malloc (size);
    96                 if (p)
     97                if (p || (flags & M_NOWAIT))
    9798                        return p;
    98                 if (flags & M_NOWAIT)
    99                         return p;
    100                 /*
    101                  * FIXME: This should be redone as:
    102                  * static volatile int rtems_bsdnet_need_memory;
    103                  *     
    104                  *      rtems_bsdnet_need_memory = 1;
    105                  *      message_queue_receive
    106                  *
    107                  * Then in rtems_bsdnet_freee:
    108                  *      free (....);
    109                  *      if (rtems_bsdnet_need_memory)
    110                  *              rtems_bsdnet_need_memory = 0;
    111                  *              message_queue_broadcast
    112                  */
     99                rtems_bsdnet_semaphore_release ();
     100                if (++try >= 30) {
     101                        printf ("rtems_bsdnet_malloc still waiting.\n");
     102                        try = 0;
     103                }
    113104                rtems_task_wake_after (rtems_bsdnet_ticks_per_second);
     105                rtems_bsdnet_semaphore_obtain ();
    114106        }
    115107}
     
    159151
    160152        p = malloc(nmbuf * MSIZE + MSIZE - 1);
    161         p = (char *)(((unsigned long)p + MSIZE - 1) & ~(MSIZE - 1));
     153        p = (char *)(((unsigned int)p + MSIZE - 1) & ~(MSIZE - 1));
    162154        if (p == NULL)
    163155                rtems_panic ("Can't get network memory.");
     
    657649/*
    658650 * Ticks till specified time
    659  * FIXME: This version worries only about seconds, but that's good
     651 * XXX: This version worries only about seconds, but that's good
    660652 * enough for the way the network code uses this routine.
    661653 */
     
    939931        m_reclaim ();
    940932        if (mmbfree == NULL) {
     933                int try = 0;
     934                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     935
    941936                mbstat.m_wait++;
    942                 do {
     937                for (;;) {
    943938                        rtems_bsdnet_semaphore_release ();
    944939                        rtems_task_wake_after (1);
    945940                        rtems_bsdnet_semaphore_obtain ();
    946                 } while (mmbfree == NULL);
     941                        if (mmbfree)
     942                                break;
     943                        if (++try >= print_limit) {
     944                                printf ("Still waiting for mbuf.\n");
     945                                try = 0;
     946                        }
     947                }
    947948        }
    948949        else {
     
    959960        m_reclaim ();
    960961        if (mclfree == NULL) {
     962                int try = 0;
     963                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     964
    961965                mbstat.m_wait++;
    962                 do {
     966                for (;;) {
    963967                        rtems_bsdnet_semaphore_release ();
    964968                        rtems_task_wake_after (1);
    965969                        rtems_bsdnet_semaphore_obtain ();
    966                 } while (mclfree == NULL);
     970                        if (mclfree)
     971                                break;
     972                        if (++try >= print_limit) {
     973                                printf ("Still waiting for mbuf cluster.\n");
     974                                try = 0;
     975                        }
     976                }
    967977        }
    968978        else {
  • c/src/lib/libnetworking/rtems/rtems_glue.c

    r18cb17f rf74abcf7  
    9191{
    9292        void *p;
     93        int try = 0;
    9394
    9495        for (;;) {
    9596                p = malloc (size);
    96                 if (p)
     97                if (p || (flags & M_NOWAIT))
    9798                        return p;
    98                 if (flags & M_NOWAIT)
    99                         return p;
    100                 /*
    101                  * FIXME: This should be redone as:
    102                  * static volatile int rtems_bsdnet_need_memory;
    103                  *     
    104                  *      rtems_bsdnet_need_memory = 1;
    105                  *      message_queue_receive
    106                  *
    107                  * Then in rtems_bsdnet_freee:
    108                  *      free (....);
    109                  *      if (rtems_bsdnet_need_memory)
    110                  *              rtems_bsdnet_need_memory = 0;
    111                  *              message_queue_broadcast
    112                  */
     99                rtems_bsdnet_semaphore_release ();
     100                if (++try >= 30) {
     101                        printf ("rtems_bsdnet_malloc still waiting.\n");
     102                        try = 0;
     103                }
    113104                rtems_task_wake_after (rtems_bsdnet_ticks_per_second);
     105                rtems_bsdnet_semaphore_obtain ();
    114106        }
    115107}
     
    159151
    160152        p = malloc(nmbuf * MSIZE + MSIZE - 1);
    161         p = (char *)(((unsigned long)p + MSIZE - 1) & ~(MSIZE - 1));
     153        p = (char *)(((unsigned int)p + MSIZE - 1) & ~(MSIZE - 1));
    162154        if (p == NULL)
    163155                rtems_panic ("Can't get network memory.");
     
    657649/*
    658650 * Ticks till specified time
    659  * FIXME: This version worries only about seconds, but that's good
     651 * XXX: This version worries only about seconds, but that's good
    660652 * enough for the way the network code uses this routine.
    661653 */
     
    939931        m_reclaim ();
    940932        if (mmbfree == NULL) {
     933                int try = 0;
     934                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     935
    941936                mbstat.m_wait++;
    942                 do {
     937                for (;;) {
    943938                        rtems_bsdnet_semaphore_release ();
    944939                        rtems_task_wake_after (1);
    945940                        rtems_bsdnet_semaphore_obtain ();
    946                 } while (mmbfree == NULL);
     941                        if (mmbfree)
     942                                break;
     943                        if (++try >= print_limit) {
     944                                printf ("Still waiting for mbuf.\n");
     945                                try = 0;
     946                        }
     947                }
    947948        }
    948949        else {
     
    959960        m_reclaim ();
    960961        if (mclfree == NULL) {
     962                int try = 0;
     963                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     964
    961965                mbstat.m_wait++;
    962                 do {
     966                for (;;) {
    963967                        rtems_bsdnet_semaphore_release ();
    964968                        rtems_task_wake_after (1);
    965969                        rtems_bsdnet_semaphore_obtain ();
    966                 } while (mclfree == NULL);
     970                        if (mclfree)
     971                                break;
     972                        if (++try >= print_limit) {
     973                                printf ("Still waiting for mbuf cluster.\n");
     974                                try = 0;
     975                        }
     976                }
    967977        }
    968978        else {
  • c/src/libnetworking/rtems/rtems_glue.c

    r18cb17f rf74abcf7  
    9191{
    9292        void *p;
     93        int try = 0;
    9394
    9495        for (;;) {
    9596                p = malloc (size);
    96                 if (p)
     97                if (p || (flags & M_NOWAIT))
    9798                        return p;
    98                 if (flags & M_NOWAIT)
    99                         return p;
    100                 /*
    101                  * FIXME: This should be redone as:
    102                  * static volatile int rtems_bsdnet_need_memory;
    103                  *     
    104                  *      rtems_bsdnet_need_memory = 1;
    105                  *      message_queue_receive
    106                  *
    107                  * Then in rtems_bsdnet_freee:
    108                  *      free (....);
    109                  *      if (rtems_bsdnet_need_memory)
    110                  *              rtems_bsdnet_need_memory = 0;
    111                  *              message_queue_broadcast
    112                  */
     99                rtems_bsdnet_semaphore_release ();
     100                if (++try >= 30) {
     101                        printf ("rtems_bsdnet_malloc still waiting.\n");
     102                        try = 0;
     103                }
    113104                rtems_task_wake_after (rtems_bsdnet_ticks_per_second);
     105                rtems_bsdnet_semaphore_obtain ();
    114106        }
    115107}
     
    159151
    160152        p = malloc(nmbuf * MSIZE + MSIZE - 1);
    161         p = (char *)(((unsigned long)p + MSIZE - 1) & ~(MSIZE - 1));
     153        p = (char *)(((unsigned int)p + MSIZE - 1) & ~(MSIZE - 1));
    162154        if (p == NULL)
    163155                rtems_panic ("Can't get network memory.");
     
    657649/*
    658650 * Ticks till specified time
    659  * FIXME: This version worries only about seconds, but that's good
     651 * XXX: This version worries only about seconds, but that's good
    660652 * enough for the way the network code uses this routine.
    661653 */
     
    939931        m_reclaim ();
    940932        if (mmbfree == NULL) {
     933                int try = 0;
     934                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     935
    941936                mbstat.m_wait++;
    942                 do {
     937                for (;;) {
    943938                        rtems_bsdnet_semaphore_release ();
    944939                        rtems_task_wake_after (1);
    945940                        rtems_bsdnet_semaphore_obtain ();
    946                 } while (mmbfree == NULL);
     941                        if (mmbfree)
     942                                break;
     943                        if (++try >= print_limit) {
     944                                printf ("Still waiting for mbuf.\n");
     945                                try = 0;
     946                        }
     947                }
    947948        }
    948949        else {
     
    959960        m_reclaim ();
    960961        if (mclfree == NULL) {
     962                int try = 0;
     963                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     964
    961965                mbstat.m_wait++;
    962                 do {
     966                for (;;) {
    963967                        rtems_bsdnet_semaphore_release ();
    964968                        rtems_task_wake_after (1);
    965969                        rtems_bsdnet_semaphore_obtain ();
    966                 } while (mclfree == NULL);
     970                        if (mclfree)
     971                                break;
     972                        if (++try >= print_limit) {
     973                                printf ("Still waiting for mbuf cluster.\n");
     974                                try = 0;
     975                        }
     976                }
    967977        }
    968978        else {
  • cpukit/libnetworking/rtems/rtems_glue.c

    r18cb17f rf74abcf7  
    9191{
    9292        void *p;
     93        int try = 0;
    9394
    9495        for (;;) {
    9596                p = malloc (size);
    96                 if (p)
     97                if (p || (flags & M_NOWAIT))
    9798                        return p;
    98                 if (flags & M_NOWAIT)
    99                         return p;
    100                 /*
    101                  * FIXME: This should be redone as:
    102                  * static volatile int rtems_bsdnet_need_memory;
    103                  *     
    104                  *      rtems_bsdnet_need_memory = 1;
    105                  *      message_queue_receive
    106                  *
    107                  * Then in rtems_bsdnet_freee:
    108                  *      free (....);
    109                  *      if (rtems_bsdnet_need_memory)
    110                  *              rtems_bsdnet_need_memory = 0;
    111                  *              message_queue_broadcast
    112                  */
     99                rtems_bsdnet_semaphore_release ();
     100                if (++try >= 30) {
     101                        printf ("rtems_bsdnet_malloc still waiting.\n");
     102                        try = 0;
     103                }
    113104                rtems_task_wake_after (rtems_bsdnet_ticks_per_second);
     105                rtems_bsdnet_semaphore_obtain ();
    114106        }
    115107}
     
    159151
    160152        p = malloc(nmbuf * MSIZE + MSIZE - 1);
    161         p = (char *)(((unsigned long)p + MSIZE - 1) & ~(MSIZE - 1));
     153        p = (char *)(((unsigned int)p + MSIZE - 1) & ~(MSIZE - 1));
    162154        if (p == NULL)
    163155                rtems_panic ("Can't get network memory.");
     
    657649/*
    658650 * Ticks till specified time
    659  * FIXME: This version worries only about seconds, but that's good
     651 * XXX: This version worries only about seconds, but that's good
    660652 * enough for the way the network code uses this routine.
    661653 */
     
    939931        m_reclaim ();
    940932        if (mmbfree == NULL) {
     933                int try = 0;
     934                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     935
    941936                mbstat.m_wait++;
    942                 do {
     937                for (;;) {
    943938                        rtems_bsdnet_semaphore_release ();
    944939                        rtems_task_wake_after (1);
    945940                        rtems_bsdnet_semaphore_obtain ();
    946                 } while (mmbfree == NULL);
     941                        if (mmbfree)
     942                                break;
     943                        if (++try >= print_limit) {
     944                                printf ("Still waiting for mbuf.\n");
     945                                try = 0;
     946                        }
     947                }
    947948        }
    948949        else {
     
    959960        m_reclaim ();
    960961        if (mclfree == NULL) {
     962                int try = 0;
     963                int print_limit = 30 * rtems_bsdnet_ticks_per_second;
     964
    961965                mbstat.m_wait++;
    962                 do {
     966                for (;;) {
    963967                        rtems_bsdnet_semaphore_release ();
    964968                        rtems_task_wake_after (1);
    965969                        rtems_bsdnet_semaphore_obtain ();
    966                 } while (mclfree == NULL);
     970                        if (mclfree)
     971                                break;
     972                        if (++try >= print_limit) {
     973                                printf ("Still waiting for mbuf cluster.\n");
     974                                try = 0;
     975                        }
     976                }
    967977        }
    968978        else {
Note: See TracChangeset for help on using the changeset viewer.