01.04.2026 23:05, Kirill A. Korinsky пишет:
> On Wed, 01 Apr 2026 21:52:50 +0200,
> Alexander Bluhm <[email protected]> wrote:
>>
>> On Wed, Apr 01, 2026 at 06:15:13PM +0200, Kirill A. Korinsky wrote:
>>> folks,
>>>
>>> I think I found the missed piece which brokes my device.
>>>
>>> Right now octeon increases ncpus after octciu_intr_establish() is called,
>>> and kn@ patch moves increases of ncpus into cpuattach() which happens before
>>> octciu_intr_establish(), so inside that it routes irq into different cpu and
>>> it somehow affects my setup.
>>>
>>> Attached version of the patch removes that routing irq to different cpus
>>> which actually doesn't work now because ncpus is 1 and % 1 is always 0.
>>>
>>> I tested it on my device and it works like a charm.
>>>
>>> Feedback? Objection? OK?
>>
>> Diff looks good. My machine distributes traffic on loopback over
>> the 8 softnet threads. Physical interfaces do not distribute traffic
>> as I have no multiqueue interfaces.
>>
>> I am not an octeon expert, but diff looks good to me. Does the
>> ncpus++ in mips64/cpu.c affect other mips architectures beside
>> octeon?
>>
>
> Good point. Fast search shows that at least in loongson's hw_cpu_hatch the
> same ncpus++ need to be remvoed as well.
>
> But I don't understand which impact it brings nor have ability to test it.
>
Here's what kirill and I tested on our octeon ER-4 and ER-6P boxes together
with his octciu(4) fix that just went in.
As expected, iperf3 performance over cnmac/veb/vport does not change,
but softnet1-3 spin up now, paving the way for kirill's multiqueue work.
I did not test loongson.
OK?
Index: sys/arch/mips64//mips64/cpu.c
===================================================================
RCS file: /cvs/src/sys/arch/mips64/mips64/cpu.c,v
diff -u -p -r1.86 cpu.c
--- sys/arch/mips64//mips64/cpu.c 3 Apr 2026 22:01:46 -0000 1.86
+++ sys/arch/mips64//mips64/cpu.c 4 Apr 2026 16:16:34 -0000
@@ -103,6 +103,7 @@ cpuattach(struct device *parent, struct
ci_last = ci_last->ci_next;
ci_last->ci_next = ci;
ci->ci_flags |= CPUF_PRESENT;
+ ncpus++;
}
#else
ci = &cpu_info_primary;
Index: sys/arch/octeon//octeon/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/octeon/octeon/machdep.c,v
diff -u -p -r1.137 machdep.c
--- sys/arch/octeon//octeon/machdep.c 24 Oct 2023 13:20:10 -0000 1.137
+++ sys/arch/octeon//octeon/machdep.c 4 Apr 2026 16:20:08 -0000
@@ -1334,8 +1334,6 @@ hw_cpu_hatch(struct cpu_info *ci)
ci->ci_flags |= CPUF_RUNNING;
membar_sync();
- ncpus++;
-
spl0();
(void)updateimask(0);
Index: sys/arch/loongson//loongson/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/loongson/loongson/machdep.c,v
diff -u -p -r1.101 machdep.c
--- sys/arch/loongson//loongson/machdep.c 24 Oct 2023 13:20:10 -0000
1.101
+++ sys/arch/loongson//loongson/machdep.c 4 Apr 2026 16:19:47 -0000
@@ -1308,8 +1308,6 @@ hw_cpu_hatch(struct cpu_info *ci)
ci->ci_flags |= CPUF_RUNNING;
membar_sync();
- ncpus++;
-
spl0();
(void)updateimask(0);