On 24.09.2019 19:58, Andrew Cooper wrote: > On 20/09/2019 14:54, Jan Beulich wrote: >> @@ -395,11 +395,20 @@ static void amd_xc_cpuid_policy(const st >> >> case 0x80000008: >> /* >> - * ECX[15:12] is ApicIdCoreSize: ECX[7:0] is NumberOfCores (minus >> one). >> - * Update to reflect vLAPIC_ID = vCPU_ID * 2. >> + * ECX[15:12] is ApicIdCoreSize. >> + * ECX[7:0] is NumberOfCores (minus one). >> + * Update to reflect vLAPIC_ID = vCPU_ID * 2. But make sure to >> avoid >> + * - overflow, >> + * - going out of sync with leaf 1 EBX[23:16], >> + * - incrementing ApicIdCoreSize when it's zero (which changes the >> + * meaning of bits 7:0). >> */ >> - regs[2] = ((regs[2] + (1u << 12)) & 0xf000u) | >> - ((regs[2] & 0xffu) << 1) | 1u; >> + if ( (regs[2] & 0x7fu) < 0x7fu ) > > In attempting to rebase my series, there is a bug here. It should be & > 0xff otherwise the top bit isn't included in the comparison, and a value > of 128 will still be doubled.
Oh, indeed, thanks for spotting. Will send a fixup patch once in the office, unless you did so already. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel