On Sat, 28 Oct 2017, Andy Lutomirski wrote: > We currently do this on boot: > > write_rdtscp_aux((node << 12) | cpu); > > This *sucks*. It means that, to very quickly obtain the CPU number > using RDPID, an ALU op is needed. It also doesn't bloody work on > systems with more than 4096 CPUs. > > IMO it should be ((u64)node << 32) | cpu. Then getting the CPU number is > just:
That breaks 32bit > RDPID %rax > MOVL %eax, %eax > > I'm thinking about this because rseq users could avoid ever *loading* > the rseq cacheline if they used RDPID to get the CPU number, and it > would be nice to give them a sane way to do it. > > This won't break any existing RDPID users if we do it quickly because > there aren't any (the CPUs aren't available). I would be a bit > surprised if anyone uses RDTSCP for this because it's absurdly slow. What we can do on 64bit is: ((u64) cpu << 32) | (node << 12) | (cpu & 0xfff) That does not solve the ALU op problem but works on both 32 and 64 bit and on systems with more than 4096 CPUs. Thanks, tglx