linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Kumar Gala <galak@kernel.crashing.org>
To: Trent Piepho <tpiepho@freescale.com>
Cc: linux-ppc <linuxppc-dev@ozlabs.org>, Milton Miller <miltonm@bga.com>
Subject: Re: [PATCH] powerpc: Better setup of boot page TLB entry
Date: Sun, 23 Nov 2008 23:01:10 -0600	[thread overview]
Message-ID: <6E1FF753-110E-4DCF-966C-C73FC454368C@kernel.crashing.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0811221242150.18022@t2.domain.actdsltmp>


On Nov 22, 2008, at 10:01 PM, Trent Piepho wrote:

> On Sat, 22 Nov 2008, Milton Miller wrote:
>> On Thu Nov 20 at 06:14:30 EST in 2008, Trent Piepho wrote:
>>> -       li      r7,0
>>> -       lis     r6,PAGE_OFFSET at h
>>> -       ori     r6,r6,PAGE_OFFSET at l
>>> -       rlwimi  r6,r7,0,20,31
>>> +       lis     r6,MAS2_VAL(PAGE_OFFSET, BOOKE_PAGESZ_64M,  
>>> M_IF_SMP)@h
>>> +       ori     r6,r6,MAS2_VAL(PAGE_OFFSET, BOOKE_PAGESZ_64M,  
>>> M_IF_SMP)@l
>>
>> I'm fine with this part, even if the expression is a bit long.  You  
>> might
>> consider using LOAD_REG_IMMEDIATE from asm/ppc_asm.h to avoid  
>> duplicating the
>> expression.
>
> LOAD_REG_IMMEDIATE isn't used at all in that file, while lis/ori is  
> used
> many times.  In fact, there only one call of LOAD_REG_IMMEDIATE in  
> all of
> arch/powerpc/kernel/*.S.  So I think lis/ori is more easily  
> recognized.
> And to be honest, I find switching syntax from assembly language
> instructions to C style macros that generate instructions to be
> aesthetically ugly.
>
> It would be nice if the assembler provided a "liw" macro instruction  
> that
> would load an immediate.  When the assembler knows the immediate  
> value, it
> could even generate shorter sequences in some cases, like when the  
> upper
> 16 bits are all zero.

I agree lis/ori is what should be used in this file and am not  
interested in changing it at this point.

>>> /* 7. Jump to KERNELBASE mapping */
>>> -       lis     r6,KERNELBASE at h
>>> -       ori     r6,r6,KERNELBASE at l
>>> -       rlwimi  r6,r7,0,20,31
>>> +       lis     r6,(KERNELBASE & ~0xfff)@h
>>> +       ori     r6,r6,(KERNELBASE & ~0xfff)@l
>>
>> Why do you need to mask off the bottom bits of KERNEL_BASE?  Just  
>> trying to
>> keep the instruction effect identical?
>
> Yes, so it was clear I wasn't changing what the code did here.  And to
> make it clear we only wanted the page number from KERNEL_BASE.  It's  
> an
> obvious expression and a compile time constant, merely saving a few
> characters in the source doesn't seem worth much.  I realize it's
> unnecessary since those bits get masked off in the wlwimi a few
> instructions later.
>
> Really all I wanted to fix the was memory coherency on SMP bug.  But  
> the
> code for MAS2 was stupid, so I had to change that to fix the bug in a
> non-ugly way.  But then r7 didn't need to be zeroed and the  
> (unnecessary)
> "rlwimi r6,r7,0,20,31" would no longer be doing what's it's supposed  
> to,
> so I fixed that too.
>
>> First of all, if its not aligned, then its likely other parts of  
>> the kernel
>> will break.  We could put a BUILD_BUG_ON somewhere (in c) if that  
>> check is
>> required.
>
> I seems like "Require KERNEL_BASE to be page aligned and modify code  
> to
> depend on said requirement" belongs in another patch.
>
>>> -       addi    r6,r6,24
>>> +       addi    r6,r6,(2f - 1b)
>>
>> and while doing assembler math is better than the hand computed 24,  
>> how about
>> doing li r9,2f@l and just inserting that into r6?  Unless you  
>> expect step 8
>> to cross a page from the 1b label above.  But if you are that close  
>> to a page
>> boundary than assuming 1b is in the page at KERNEL_BASE would seem  
>> to be
>> suspect.
>>
>> For that matter, just do LOAD_ADDR(2f) or LOAD_REG_IMMEDIATE(2f),  
>> which would
>> give the same result, as KERNEL_BASE should be reflected the linked  
>> address
>> of the kernel (I assume that you are not doing dynamic runtime  
>> relocation
>> like ppc64 on the code up to here, otherwise the previous  
>> suggestion still
>> works).
>
> I'm not sure if this code can be relocated or not.  If it isn't now,  
> using
> non-position independent code won't make it any easier to make it
> relocatable.  It looks like the "bl 1f ; 1: mflr" sequence is used 13
> times in arch/powerpc/kernel/*.S, I wonder if all of them are  
> unnecessary?

We support relocation of this kernel so any changes need to be tried  
out w/CONFIG_RELOCATABLE enabled.

I'm fine with the patch as is and any other changes should be follow  
on patches.

- k

  reply	other threads:[~2008-11-24  5:03 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-19 19:14 [PATCH] powerpc: Better setup of boot page TLB entry Trent Piepho
2008-11-19 20:51 ` Kumar Gala
2008-11-22 10:04 ` Milton Miller
2008-11-23  4:01   ` Trent Piepho
2008-11-24  5:01     ` Kumar Gala [this message]
2008-11-25 17:03       ` Milton Miller

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=6E1FF753-110E-4DCF-966C-C73FC454368C@kernel.crashing.org \
    --to=galak@kernel.crashing.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=miltonm@bga.com \
    --cc=tpiepho@freescale.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).