diff --git a/pkg/sentry/platform/kvm/machine.go b/pkg/sentry/platform/kvm/machine.go index 2a7500be1..3820fe3f6 100644 --- a/pkg/sentry/platform/kvm/machine.go +++ b/pkg/sentry/platform/kvm/machine.go @@ -476,18 +476,6 @@ func (m *machine) Get() *vCPU { } for { - // Scan for an available vCPU. - for origTID, c := range m.vCPUsByTID { - if c.state.CompareAndSwap(vCPUReady, vCPUUser) { - delete(m.vCPUsByTID, origTID) - m.vCPUsByTID[tid] = c - m.mu.Unlock() - c.loadSegments(tid) - timer.Finish("unused") - return c - } - } - // Get vCPU from the m.vCPUsByID pool. if m.usedVCPUs < m.maxVCPUs { c := m.vCPUsByID[m.usedVCPUs] @@ -500,6 +488,18 @@ func (m *machine) Get() *vCPU { return c } + // Scan for an available vCPU. + for origTID, c := range m.vCPUsByTID { + if c.state.CompareAndSwap(vCPUReady, vCPUUser) { + delete(m.vCPUsByTID, origTID) + m.vCPUsByTID[tid] = c + m.mu.Unlock() + c.loadSegments(tid) + timer.Finish("unused") + return c + } + } + // Scan for something not in user mode. for origTID, c := range m.vCPUsByTID { if !c.state.CompareAndSwap(vCPUGuest, vCPUGuest|vCPUWaiter) {