Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jun 2009 09:31:27 -0700
From:      Sam Leffler <sam@freebsd.org>
To:        Jeff Roberson <jroberson@jroberson.net>
Cc:        arch@freebsd.org, Peter Grehan <grehan@freebsd.org>, Marius Strobl <marius@alchemy.franken.de>
Subject:   Re: Dynamic pcpu, arm, mips, powerpc, sun, etc. help needed
Message-ID:  <4A3FB1DF.80006@freebsd.org>
In-Reply-To: <alpine.BSF.2.00.0906211406300.998@desktop>
References:  <alpine.BSF.2.00.0906032050220.981@desktop>	<20090609201127.GA50903@alchemy.franken.de>	<4A2F1148.9090706@freebsd.org>	<alpine.BSF.2.00.0906171231540.1025@desktop>	<20090621140312.GC71667@alchemy.franken.de> <alpine.BSF.2.00.0906211406300.998@desktop>

next in thread | previous in thread | raw e-mail | index | archive | help
Jeff Roberson wrote:
> On Sun, 21 Jun 2009, Marius Strobl wrote:
>
>> On Wed, Jun 17, 2009 at 12:55:52PM -1000, Jeff Roberson wrote:
>>>
>>> On Tue, 9 Jun 2009, Peter Grehan wrote:
>>>
>>>>> As for sparc64 allocating the storage for the dynamic area
>>>>> from end probably isn't a good idea as the pmap code assumes
>>>>> that the range from KERNBASE to end is covered by the pages
>>>>> allocated by and locked into the TLB for the kernel by the
>>>>> loader
>>>>
>>>> Ditto for ppc. It's possible to get the additional space from 
>>>> within or
>>>> after return from pmap_bootstrap() (like thread0's kstack, or the 
>>>> msgbuf).
>>>
>>> http://people.freebsd.org/~jeff/dpcpu.diff
>>>
>>> I have updated this patch based on feedback relating to various
>>> architectures md code. I tried to model most architectures after the 
>>> way
>>> msgbuf memory was taken. I have no capacity to test anything other than
>>> i386 and amd64. ARM is reported to work with one minor diff. Apparently
>>> sparc64 worked with the earlier diff but this should be cleaner. If
>>> anyone can report back on sparc64, mips, or powerpc, I'd appreciate it.
>>>
>>
>> The earlier patch worked on sparc64 as long as the kernel
>> happened to leave enough room in the last 4MB page allocated
>> for it.
>> The new version unfortunately doesn't compile on sparc64 as
>> pmap_bootstrap_alloc() is static to its pmap.c (I think it
>> should also stay that way). Also the memory allocated with
>> it isn't safe to be used before we've taken over the trap
>> table. A kernel built with the sparc64 bits replaced with
>> the following patch boots fine:
>> http://people.freebsd.org/~marius/sparc64_dpcpu.diff
>> Do you have some simple test case for DPCPU which can be
>> used to verify that it actually works?
>
> Thanks very much Marius. I have updated the patch at:
>
> http://people.freebsd.org/~jeff/dpcpu.diff
>
> I intend to commit this, minus the kern_synch.c diff tomorrow. There 
> was an id in the previous patch that caused each area to be accessed 
> as it was added but you'd have to have done a 'show pcpu' in ddb after 
> boot to access the area. I added a counter in kern_synch.c as a better 
> test.
>
> new in this diff:
>
> 1) I made each access cheaper by one instruction by making the 
> pc_dynamic pointer relative to the start of the percpu area.
>
> 2) I added two helper functions for sysctl ints and quads that can be 
> used for stats. See the temporary kern_synch.c diff for an example.
>
> 3) sparc64/sun4v by marius
>
> 4) ia64 fixes suggested by marcel.

Does not compile on !SMP systems (s/dpcpu_ptr/dcpu_off/ in 
sysctl_dpcpu_quad).

Sam




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A3FB1DF.80006>