This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: Linker sections & network buffers question.
- From: Gary Thomas <gary at mlbassoc dot com>
- To: Will Wagner <will_wagner at carallon dot com>
- Cc: eCos Discussion <ecos-discuss at ecos dot sourceware dot org>
- Date: Fri, 12 Oct 2007 07:46:38 -0600
- Subject: Re: [ECOS] Linker sections & network buffers question.
- References: <470F7157.7010707@carallon.com>
Will Wagner wrote:
> Hi All,
>
> Have hit a problem where in debug builds the initialisation of the bss
> section to zero takes so long that the chip watchdogs.
>
> I'm using an MPC866 chip and one of the problems with it is that the
> slowest I can set the watchdog to is just over 0.5secs. The bss section
> is just under 3MB and most of that (2MB) are the networking buffers.
>
> So I have a whole load of questions for you:
>
> Do the network buffers really have to reside in the bss section. The
> buffers are just used to create Mempools and looking at the code I don't
> think it relies on the memory being zero'd.
>
> If the buffers don't need to reside in the bss section, anyone know
> which section is the one for variables that don't get set to zero?
> Anyone remind me of the gcc syntax for specifying which section
> something goes in?
>
> On powerpc in vectors.S the sbss & bss sections are zero'd before the
> cache & mmu are enabled which means that the access to the SDRAM will
> not burst (I think) and so be much slower. Any reason for not
> rearranging the code so that cache & mmu are enabled before we try to
> zero sbss & bss?
Sorry, this won't work as much of the code (including the part that
sets up the MMU) is written in C and will expect the BSS to have already
been cleared.
Try the attached patch which uses a different sequence to clear the BSS.
It should run quite a bit faster (2 instructions / word instead of 4).
BTW, if this works for you, let me know and I'll check it in.
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
Index: hal/powerpc/arch/current/src/vectors.S
===================================================================
--- hal/powerpc/arch/current/src/vectors.S (revision 3391)
+++ hal/powerpc/arch/current/src/vectors.S (working copy)
@@ -368,11 +368,13 @@
li r0,0 # r0 = 0
cmplw r3,r4 # skip if no bss
beq 2f
+ sub r4,r4,r3 # compute number of words to clear
+ srwi r4,r4,2
+ mtctr r4
+ subi r3,r3,4
-1: stw r0,0(r3) # store zero
- addi r3,r3,4 # increment by 1 word
- cmplw r3,r4 # compare
- blt 1b # loop if not yet done
+1: stwu r0,4(r3) # store zero & increment pointer
+ bdnz 1b
2:
# clear SBSS
@@ -380,11 +382,13 @@
lwi r4,__sbss_end # r4 = end
cmplw r3,r4 # skip if no sbss
beq 2f
+ sub r4,r4,r3 # compute number of words to clear
+ srwi r4,r4,2
+ mtctr r4
+ subi r3,r3,4
-1: stw r0,0(r3) # store zero
- addi r3,r3,4 # increment by 1 word
- cmplw r3,r4 # compare
- blt 1b # loop if not yet done
+1: stwu r0,4(r3) # store zero & increment pointer
+ bdnz 1b
2:
# It is now safe to call C functions which may rely on initialized
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss