This release introduces improved CPU idle management support functions for amd64, enabling the following pattern on single-core CPUs:
if cpu.NumCPU() == 1 {
runtime.Idle = func(pollUntil int64) {
if pollUntil == 0 {
return
}
cpu.SetAlarm(pollUntil)
cpu.WaitInterrupt()
cpu.SetAlarm(0)
}
}Major changes for tamago package API:
- amd64:
(*CPU).WaitInterruptnew function to suspend execution until an interrupt is received - amd64:
(*CPU).SetAlarm: new function to set LAPIC LVT Timer in TSC-Deadline mode - amd64:
(*CPU).Features.TSCDeadline: new boolean for TSC-Deadline mode detection - amd64:
(*CPU).Halt: function removed in favor of race-free(*CPU).WaitInterrupt - amd64:
(*CPU).Halt: function removed in favor of existing(*CPU).WaitInterrupt - user/linux: added experimental support for
GOARCH=arm64and README file
Major changes for tamago package internals:
- amd64: IRQ_WAKEUP (255) is now allocated to
(*CPU).SetAlarmand not passed to application ISR - amd64: LAPIC and interrupts now enabled on supplemental cores (APs)
- amd64: IRQ handling is improved in terms of performance and race condition protection
Full Changelog: v1.25.0...v1.25.1
This release requires GOOS=tamago support in the Go distribution, it requires at least tamago-go1.25.0. The experimental user/linux package support for GOARCH=arm64 requires usbarmory/tamago-go@255baf0.