> > > + /* The real CPU backing up the vCPU moved to another socket > > > */ > > > + if (topology_physical_package_id(vcpu->cpu) != > > > + topology_physical_package_id(vcpu->arch.prev_cpu)) > > > + return true; > > > > Why is it OK to look just at the physical package ID here? What if the > > vcpu for example moves to a different book, which has a core with the > > same physical package ID? > > > > You are right, we should look at the drawer and book id too. > Something like that I think: > > if ((topology_physical_package_id(vcpu->cpu) != > topology_physical_package_id(vcpu->arch.prev_cpu)) || > (topology_book_id(vcpu->cpu) != > topology_book_id(vcpu->arch.prev_cpu)) || > (topology_drawer_id(vcpu->cpu) != > topology_drawer_id(vcpu->arch.prev_cpu))) > return true; You only need to check if prev_cpu is present in topology_core_cpumask(cpu).