Linux PARISC architecture development
 help / color / mirror / Atom feed
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
> 
> 

  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