long delays after rtems_bsdnet_initialize_network

Joel Sherrill joel.sherrill at oarcorp.com
Thu Jun 7 15:39:50 UTC 2007


Amalaye Oyake wrote:
> Hello,
>
> this is a follow-on question to the one I asked yesterday. Thanks for your
> help BTW!
>
> I am playing around with dnstest. The NIC seems to be happy now. I had to
> increase the number of message queues from the default of 0. The elnk code
> uses message queues.
>
> rtems_bsdnet_initialize_network is called and the NIC comes up happily
> saying media available, driver attached, tasks created and it returns
> nicely and the app then calls testDNS().
>
> At this point it does a printf("\n****TEST DNS****\n"); 
>
> Then nothing waits for a long time (over 5 minutes) and then it prints 
>
> host? 
>
>   
My guess is that something is taking an inordinately long time in the 
network
driver initialization.  It feels like it is probably a timeout of some sort.
The init task is clearly preemptible and at a priority which
I THINK is lower than the default for the network stack tasks.

Printing the host? message is the first thing that happens in the testDNS()
routine.  You are supposed to enter a host name or nothing to print out
statistics.

I would try two things:

+ Press return and look at the statistics for something that sticks out.
+ Look at the network traffic and see what's happening.  My first
  guess is that you are configured for DHCP and aren't getting an
  address and it is timing out.  But it could easily be something else
  timing out. 

Five seconds feels like a timeout. :)

--joel
> What could cause this delay long delay? Should I turn time slicing on? My
> config stuff looks like this:
>
> #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 8
> #define CONFIGURE_MAXIMUM_TIMERS 20 
> #define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
> #define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 20
> #define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
>
> #define CONFIGURE_EXECUTIVE_RAM_SIZE	(128*1024)
> #define CONFIGURE_MAXIMUM_SEMAPHORES	40
> #define CONFIGURE_MAXIMUM_TASKS		40
>
> #define CONFIGURE_MICROSECONDS_PER_TICK	1000
>
> #define CONFIGURE_INIT_TASK_STACK_SIZE	(20*1024)
> #define CONFIGURE_INIT_TASK_PRIORITY	100
> #define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \
>                                            RTEMS_NO_TIMESLICE | \
>                                            RTEMS_NO_ASR | \
>                                            RTEMS_INTERRUPT_LEVEL(0))
>
>
>
> Regards,
> Amalaye
>
>
> -----Original Message-----
> From: Daron Chabot [mailto:djc915 at mail.usask.ca] 
> Sent: Tuesday, June 05, 2007 6:16 PM
> To: Amalaye Oyake
> Cc: RTEMS
> Subject: Re: Unable to create TX buffer recovery queue
>
>
> On 5-Jun-07, at 6:31 PM, Amalaye Oyake wrote:
>
>   
>> Setting MANAGERS=all may be one step but don't some of the
>>
>> #define CONFIGURE_MAXIMUM_XYZs have default values of 0?
>>
>> I may need to assign some values to these perhaps?
>>     
>
> Yup. Right you are...
>
> Try: #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 	10
>
> or whatever number you think will satisfy your requirements.
>
> Alternatively, you can use the "rtems_resource_unlimited( )" directives:
>
> e.g. #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES	rtems_resource_unlimited 
> (10)
>
> Have a look through the file in the RTEMS source-tree, "cpukit/score/ 
> src/Unlimited.txt". It explains a lot of the gory details behind  
> "rtems_resource_unlimited( )".
>
> -- dc
>
>   
>> -----Original Message-----
>> From: Daron Chabot [mailto:djc915 at mail.usask.ca]
>> Sent: Tuesday, June 05, 2007 5:11 PM
>> To: Amalaye Oyake
>> Cc: RTEMS
>> Subject: Re: Unable to create TX buffer recovery queue
>>
>>
>> On 5-Jun-07, at 5:21 PM, Amalaye Oyake wrote:
>>
>>     
>>> Hello,
>>>
>>> I am using RTEMS on a i386 system (a 400Mhz Pentium II with 128MB
>>> of RAM).
>>> The NIC is a 3C905B (3COM Card) ... RTEMS finds the NIC, does a
>>> timer setup,
>>> identifies the media and says unit elnk1 driver attached.
>>>
>>> Then it says
>>>
>>> RTEMS: etherlink : Unable to create TX Buffer recovery queue
>>> RTEMS: fatal error, exiting
>>>
>>> What do the above errors mean? How can I fix this?
>>>       
>> Have a look at the driver source, elnk.c, line 3525:
>>
>> if (txDaemonTid == 0)
>>     {
>>        if( rtems_message_queue_create( rtems_build_name
>> ('X','L','c','r'),
>>                                        sc->numTxbuffers+1,
>>                                        sizeof(struct TXMD *),
>>                                        RTEMS_FIFO | RTEMS_LOCAL,
>>                                        &chainRecoveryQueue ) !=
>> RTEMS_SUCCESSFUL )
>>        {
>>           rtems_panic( "etherlink : Unable to create TX buffer
>> recovery queue\n" );
>>        }
>>
>> ...
>>
>> i.e. the directive, rtems_message_queue_create( ), is failing...
>>
>> I'm going to guess that you haven't included the Message Manager in
>> your application's Makefile. If memory is not an issue (and 128 MB is
>> *lots* to play with...), just set the "Managers" variable to "all":
>>
>> i.e. in your Makefile set
>> MANAGERS=all
>>
>> That will circumvent several obscure "gotchyaz"...
>>
>>
>> -- dc
>>
>> _______________________________________________
>> rtems-users mailing list
>> rtems-users at rtems.com
>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>     
>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
>   




More information about the users mailing list