Port-mips archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Anyone working on Octeon SMP?



On 16/04/2026 13:24, Andrew Parker wrote:
> On Monday, 13 April 2026 12:58:34 EDT Kevin Bowling wrote:
>> On Fri, Apr 10, 2026 at 11:45 PM Nick Hudson <nick.hudson%gmx.co.uk@localhost> wrote:
>>> On 10/04/2026 11:18, Kevin Bowling wrote:
>>>> On Mon, Apr 6, 2026 at 6:42 AM Nick Hudson <nick.hudson%gmx.co.uk@localhost>
> wrote:
>>>>> On 06/04/2026 10:49, Kevin Bowling wrote:
>>>>>> On Sat, Mar 28, 2026 at 8:28 AM Andrew Parker <andrew%pmk1.net@localhost> wrote:
>>>>>>> On Thursday, 19 March 2026 23:31:36 EDT Kevin Bowling wrote:
>>>>>>>> On Sun, Feb 2, 2025 at 6:52 AM Andrew Parker <andrew%pmk1.net@localhost>
> wrote:
>>>>>>>>> On 1/29/25 06:23, Nick Hudson wrote:
>>>>>>>>>> On 20/12/2024 22:01, Andrew Parker wrote:
>>>>>>>>>>> Hi, I've been working towards getting a MULTIPROCESSOR build more
>>>>>>>>>>> stable
>>>>>>>>>>> on my ER4 and would like to know if anyone else may be working on
>>>>>>>>>>> the
>>>>>>>>>>> same?
>>>>>>>>>>> 
>>>>>>>>>>> I've found a few areas that were causing instability on my
>>>>>>>>>>> machine and
>>>>>>>>>>> have some patches that help (but mostly just for debugging at
>>>>>>>>>>> this
>>>>>>>>>>> point). If there's any interest in teaming up and exchanging
>>>>>>>>>>> ideas or
>>>>>>>>>>> patches for SMP on Octeon please let me know.
>>>>>>>>>> 
>>>>>>>>>> Sure.
>>>>>>>>>> 
>>>>>>>>>> I've dropped the ball on this and said I had a couple of fixes in
>>>>>>>>>> mind,
>>>>>>>>>> but done nothing to share them. Hopefully we can make it stable.
>>>>>>>>>> 
>>>>>>>>>> Nick
>>>>>>>>> 
>>>>>>>>> Great!  I'm curious about what you have in mind for improvement.
>>>>>>>>> I've
>>>>>>>>> mostly been looking around TLB invalidation and perhaps a missing
>>>>>>>>> memory
>>>>>>>>> barrier.
>>>>>>>>> 
>>>>>>>>> Anyway, I'll work on getting some stuff cleaned up and contact
>>>>>>>>> directly
>>>>>>>>> if that works for you.
>>>>>>>> 
>>>>>>>> I'm interested in this as well, is there anything to share around
>>>>>>>> current status or issues as well as if anything is pending out of
>>>>>>>> tree?
>>>>>>> 
>>>>>>> I hoped to spend more time on this over the winter but ended up
>>>>>>> moving and
>>>>>>> some of my networking gear is still packed up.
>>>>>>> 
>>>>>>> It's been a slow process getting my test environment setup again but
>>>>>>> it would be great to pick this back up...especially if there's
>>>>>>> continued interest in it.
>>>>>>> 
>>>>>>> Give me a week or two to see what I can dig up and I'll be in touch.
>>>>>> 
>>>>>> I've made some progress but it turned into a much deeper hole than I
>>>>>> was anticipating.  I can increase SMP stability with some changes in
>>>>>> pmap_tlb.c to add some icache syncs
>>>>> 
>>>>> I have a change I'll commit soon to handle EXECness (more) correctly.
>>> 
>>> This is committed
>>> 
>>> https://mail-index.netbsd.org/source-changes/2026/04/10/msg161522.html
>>> 
>>> m
>>> 
>>>>> Am I right in thinking at least some octeon processors icaches are
>>>>> VIVT?
>>>>> I've forgotten most of the mips stuff I knew... If so there will be
>>>>> more flushing required for VIVT.
>>>> 
>>>> VIPT.  But it has an assortment of fun issues.
>>> 
>>> fun issues?
>> 
>> It seems to require pretty deliberate management that is different
>> than other MIPS and archs.
>> 
>> I was able to get SMP stabilized to my own satisfaction last night, in
>> so far as it can hold up cnmac driver modifications which is what I
>> was originally started with.
>> 
>> There are a few categories of mandatory fixes:  membar_release is
>> missing a SYNC_PLUNGER (second syncw), INT_MASKs critically missing in
>> octeon_intr.c, and a variety of locore fixups.  Beyond that I ended up
>> redoing octeon_intr.c to distribute interrupts and fix my previous
>> octeon III patch.  I have changes to the PMAP_TLB_NEED_SHOOTDOWN path
>> primarily that I am least confident about.  I'll try and organize
>> everything into a more deliberate patch series, right now it is pretty
>> messy with attempts and debugging.
> I was finally able to boot up my ER-4 last night.  I don't have anything to add
> (yet) to the pmap discussion here except I'm guessing I'm in similar place you
> are with it. Things are 'stable' mostly through a bunch of extra TLB flushes.
> The other change that resulted in a more stable userland for me is what
> appears to be a missing memory barrier around cpu_lwp_setprivate().  The one I
> added in lwp.c doesn't seem 100% correct but this does resolve instability
> that's easily reproduced in unbound (using multiple threads) and occasionally
> sshd:
>  diff --git a/sys/arch/mips/mips/cpu_subr.c b/sys/arch/mips/mips/cpu_subr.c
> index a80304908774..df854cae4254 100644
> --- a/sys/arch/mips/mips/cpu_subr.c
> +++ b/sys/arch/mips/mips/cpu_subr.c
> @@ -1051,11 +1051,11 @@ cpu_vmspace_exec(lwp_t *l, vaddr_t start, vaddr_t end)
>  int
>  cpu_lwp_setprivate(lwp_t *l, void *v)
>  {
> -
>  #if (MIPS32R2 + MIPS64R2) > 0
>         if (l == curlwp && MIPS_HAS_USERLOCAL) {
>                 mipsNN_cp0_userlocal_write(v);
>         }
> +       membar_sync();
>  #endif
>         return 0;
>  }
> diff --git a/sys/kern/sys_lwp.c b/sys/kern/sys_lwp.c
> index 7c4e4f27ad23..24cc3315f3e4 100644
> --- a/sys/kern/sys_lwp.c
> +++ b/sys/kern/sys_lwp.c
> @@ -187,7 +187,7 @@ sys__lwp_self(struct lwp *l, const void *v, register_t
> *retval)
>  int
>  sys__lwp_getprivate(struct lwp *l, const void *v, register_t *retval)
>  {
> -
> +        membar_sync();
>         *retval = (uintptr_t)l->l_private;
>         return 0;
>  }

Thanks for testing.

I can’t say I understand why these memory are needed. Can you explain, please?




Home | Main Index | Thread Index | Old Index