From: Gabriel Paubert <paubert@iram.es>
To: joakim.tjernlund@lumentis.se
Cc: Tim Seufert <tas@mindspring.com>,
linuxppc-dev <linuxppc-dev@lists.linuxppc.org>
Subject: Re: csum_partial() and csum_partial_copy_generic() in badly optimized?
Date: Mon, 18 Nov 2002 19:05:53 +0100 [thread overview]
Message-ID: <3DD92C01.7080906@iram.es> (raw)
In-Reply-To: IGEFJKJNHJDCBKALBJLLEEBFFIAA.joakim.tjernlund@lumentis.se
Joakim Tjernlund wrote:
> Ok, thanks for the lesson. I decided to have a closer look at arch/ppc/kernel/misc.S to
> see how it uses the bdnz instruction. I think i may have found a bug:
>
> /*
> * Like above, but invalidate the D-cache. This is used by the 8xx
> * to invalidate the cache so the PPC core doesn't get stale data
> * from the CPM (no cache snooping here :-).
> *
> * invalidate_dcache_range(unsigned long start, unsigned long stop)
> */
> _GLOBAL(invalidate_dcache_range)
> li r5,L1_CACHE_LINE_SIZE-1
> andc r3,r3,r5
> subf r4,r3,r4
> add r4,r4,r5
> srwi. r4,r4,LG_L1_CACHE_LINE_SIZE
> beqlr
> mtctr r4
>
> 1: dcbi 0,r3
> addi r3,r3,L1_CACHE_LINE_SIZE
> bdnz 1b
> sync /* wait for dcbi's to get to ram */
> blr
>
> Supposed you you do a invalidate_dcache_range(0,16) then 2 cachelines should be
> invalidated on a mpc8xx, since range 0 to 16 is 17 bytes and a cache line is 16 bytes.
I don't know this code, whether it is correct or not depends on what you
pass in r4. If it is invalidate_dcache_range(start, start+len), the code
is correct since start+len is one byte beyond the buffer. If it is
invalidate_dcache_range(first, last), then it is buggy. The former
definition of parameters is more frequent in practice.
This said, the first instruction can be removed:
_GLOBAL(invalidate_dcache_range)
rlwinm r3,r3,0,~(L1_CACHE_LINE_SIZE-1)
subf r4,r3,r4
add r4,r4,L1_CACHE_LINE_SIZE-1
should work.
> If I understand this assembly, mtctr r4 will load the CTR with 1 and that
> will only execute the the dcbi 0,r3 once. Am I making sense here?
Yes, but I believe that the parameters are defined that way. There is
a reason for which C wants pointers to element following the end
of an array to be valid.
[SNIP]
Regards,
Gabriel.
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
next prev parent reply other threads:[~2002-11-18 18:05 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-15 23:01 csum_partial() and csum_partial_copy_generic() in badly optimized? Joakim Tjernlund
2002-11-16 2:39 ` Tim Seufert
2002-11-16 10:16 ` Joakim Tjernlund
2002-11-17 5:58 ` Tim Seufert
2002-11-17 15:17 ` Joakim Tjernlund
2002-11-17 22:00 ` Tim Seufert
2002-11-17 23:32 ` Joakim Tjernlund
2002-11-18 1:27 ` Tim Seufert
2002-11-18 4:12 ` Gabriel Paubert
2002-11-18 13:49 ` Joakim Tjernlund
2002-11-18 18:05 ` Gabriel Paubert [this message]
2002-11-18 18:43 ` Joakim Tjernlund
2002-11-19 1:24 ` Gabriel Paubert
2002-11-19 3:31 ` Paul Mackerras
2002-11-19 5:35 ` Gabriel Paubert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3DD92C01.7080906@iram.es \
--to=paubert@iram.es \
--cc=joakim.tjernlund@lumentis.se \
--cc=linuxppc-dev@lists.linuxppc.org \
--cc=tas@mindspring.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.