vmbus_synic_setup(), is invoked via vmbus_intrhook -> vmbus_doattach -> smp_rendezvous. On !EARLY_AP_STARTUP (e.g., aarch64), SMP isn't functional in intrhooks and smp_rendezvous() will just call vmbus_synic_setup() on the boot AP. There's nothing that will initialize the pcpu data on every other AP.
To fix it we need to use SI_SUB_SMP for vmbus_doattach().
Details
Details
- Reviewers
whu kevans - Commits
- rG4f8c634de09f: arm64 Hyper-V: enable Hyper-V SMP for ARM64
Diff Detail
Diff Detail
- Repository
- rG FreeBSD src repository
- Lint
Lint Not Applicable - Unit
Tests Not Applicable
Event Timeline
sys/dev/hyperv/vmbus/vmbus.c | ||
---|---|---|
1534 | This code should just go away entirely, there is no !EARLY_AP_STARTUP platform where it will ever call vmbus_doattach here. | |
1586 | There's a reference to cold down here in the sysinit that should also go away, we should just always call vmbus_doattach() if we're doing the sysinit -- it *has* to be positioned at a point where "thread scheduling is possible". |