From: Joel Soete <soete.joel@scarlet.be>
To: Grant Grundler <grundler@parisc-linux.org>
Cc: linux-parisc <linux-parisc@vger.kernel.org>,
Helge Deller <deller@gmx.de>, kyle <kyle@mcmartin.ca>
Subject: Re: Yet another inline asm worry: mtsp() macro (and may be other)?
Date: Thu, 19 Jun 2008 20:01:02 +0000 [thread overview]
Message-ID: <485ABAFE.2010504@scarlet.be> (raw)
In-Reply-To: <20080619161151.GB6049@colo.lackof.org>
Grant Grundler wrote:
> On Thu, Jun 19, 2008 at 12:40:30PM +0100, Joel Soete wrote:
>> Hello all,
>>
>> Grant, in a first approach I would like to address this post to you because
>> all start from ccio-dma (again yes) when I figure out that in fact gcc-4.2 rob
>> a part this driver code???
> ..
>> My first worry was about the form takes the resulting code of <ccio_io_pdir_entry>
>> for remind:
>> 0: cb 39 a0 60 movb,<> r25,r25,38 <ccio_io_pdir_entry+0x38>
>> 4: 34 1c 00 00 ldi 0,ret0
> ...
>> The question was why sr1 is always set to 0 when it's actualy a function
>> parameter (iirc 2d arg i.e. r25?)
>>
>> Fwiw removing BUG_ON() seems to fix this issue?
>
> Yes. I just replied to your previous mail.
>
yes.
>> btw as far as it must be KERNEL_SPACE, couldn't we simplify stuff: removing
>> sid parameter and replace mtsp macro call with a simple asm volatile("mtsp
>> %%r0,%%sr1":::"memory")?
>
> We could. But I thought there are cases were we might want to DMA to/from
> user space directly and that's why Space ID is a parameter.
Ok but it was a BUG if temporary space reg is not 0, so???
> My guess is
> we are creating a kernel alias for user space and using the alias instead.
> If that's correct and is the long term plan, we could remove the "sid"
> parameter.
>
Nice to me.
btw system seems to boot too with asm volatile("mtsp %%r0,%%sr1":::"memory")
may be the cpp can catch in the mtsp(gr, cr) macro if gr==0 then I can use this insn if not the original macro???
Tx again,
j.
> hth,
> grant
>
>> Then I look for all the call to function (ccio_io_pdir_entry) even thought
>> it's inligned with those mtsp and lci it would be easy to find it.
>> The C code learn me that it would call in ccio_map_single() and thanks with
>> iommu_helper.h in ccio_map_sg(). But objdump -D ccio-dma.o shows me only one
>> place where this code is used
>> 00000000 <ccio_map_single>:
>> [snip]
>> 84: 34 14 00 00 ldi 0,r20
>> 88: 00 14 58 20 mtsp r20,sr1
>> 8c: 0a a3 0a 13 add,l r3,r21,r19
>> 90: d6 65 0c 14 depw r5,31,12,r19
>> 94: 0f 53 12 88 stw r19,4(r26)
>> 98: 04 60 53 1c lci r0(sr1,r3),ret0
>> 9c: d3 9c 1a 74 extrw,u ret0,19,12,ret0
>> a0: d6 9c 0e 14 depw ret0,15,12,r20
>> a4: 0f 54 12 80 stw r20,0(r26)
>> a8: 07 40 12 80 fdc r0(r26)
>> ac: 00 00 04 00 sync
>> [snip]
>>
>> and not in ccio_map_sg() (even not a call to ccio_io_pdir_entry() in case he
>> didn't reach to inline it).
>>
>> And the wonder is that my system d380 is even booting and running despite this
>> lake???
>>
>> That said with gcc-4.3, I find well this code iin the 2 functions.
>> And here commes my worry about mtsp() macro: here is the resulting code with
>> gcc-4.3:
>> 00000000 <ccio_map_sg>:
>> [snip]
>> __ 1a0: 34 1a 00 00 ldi 0,r26__
>> 1a4: 20 a0 02 00 ldil L%10000000,r5
>> 1a8: 8e 80 61 28 cmpib,> 0,r20,244 <ccio_map_sg+0x244>
>> 1ac: 20 40 0e 01 ldil L%-10000000,rp
>> 1b0: 86 c0 21 88 cmpib,= 0,r22,27c <ccio_map_sg+0x27c>
>> 1b4: 34 19 00 00 ldi 0,r25
>> 1b8: 0f e0 10 9c ldw 0(r31),ret0
>> 1bc: 0d 80 10 94 ldw 0(r12),r20
>> 1c0: d7 80 1c 1e depwi 0,31,2,ret0
>> 1c4: 4b b3 00 20 ldw 10(ret1),r19
>> 1c8: 0a 9c 04 1c sub ret0,r20,ret0
>> 1cc: 0f f0 10 95 ldw 8(r31),r21
>> 1d0: d3 9c 1f 45 extrw,s ret0,26,27,ret0
>> 1d4: 0a b3 0a 13 add,l r19,r21,r19
>> 1d8: d7 9c 09 8c depw,z ret0,19,20,ret0
>> 1dc: 0f e8 10 94 ldw 4(r31),r20
>> 1e0: 08 bc 0a 1c add,l ret0,r5,ret0
>> 1e4: 6b b3 00 20 stw r19,10(ret1)
>> 1e8: 0a b9 0a 15 add,l r25,r21,r21
>> 1ec: 0a 9c 0a 14 add,l ret0,r20,r20
>> __ 1f0: 00 1a 58 20 mtsp r26,sr1 __
>> 1f4: 08 54 0a 1c add,l r20,rp,ret0
>> 1f8: d7 8e 0c 14 depw r14,31,12,ret0
>> 1fc: 0e dc 12 88 stw ret0,4(r22)
>> 200: 06 80 53 13 lci r0(sr1,r20),r19
>> 204: d2 73 1a 74 extrw,u r19,19,12,r19
>> 208: 08 1a 02 5c copy r26,ret0
>> 20c: d7 93 0e 14 depw r19,15,12,ret0
>> 210: 0e dc 12 80 stw ret0,0(r22)
>> 214: 06 c0 12 80 fdc r0(r22)
>> 218: 00 00 04 00 sync
>> [snip]
>>
>> My worry is the number of insn between the ldi 0,r26 and the mtsp r26,sr1.
>>
>> Here, I supposed it's harmless but may be different in other critical path?
>>
>> Wouldn't it be interesting (if possible) to insure that the load of the reg
>> and mtsp stay close together? (or may be simply detect the case of a const == 0?)
>>
>> What your opinion?
>>
>> Tx again,
>> J.
>>
>> PS: I didn't find back gcc-4.0 to check if my previous perf test could failed
>> for this reason?
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
next prev parent reply other threads:[~2008-06-19 20:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-19 11:40 Yet another inline asm worry: mtsp() macro (and may be other)? Joel Soete
2008-06-19 16:11 ` Grant Grundler
2008-06-19 20:01 ` Joel Soete [this message]
2008-06-22 17:15 ` Grant Grundler
-- strict thread matches above, loose matches on Subject: below --
2008-06-20 14:01 Joel Soete
2008-06-20 17:11 ` Matthew Wilcox
2008-06-21 19:17 ` rubisher
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=485ABAFE.2010504@scarlet.be \
--to=soete.joel@scarlet.be \
--cc=deller@gmx.de \
--cc=grundler@parisc-linux.org \
--cc=kyle@mcmartin.ca \
--cc=linux-parisc@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox