static inline void cpuid(uint32_t info1, uint32_t info2, uint32_t *eaxp,
uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
__attribute__((always_inline));
+static inline uint32_t cpuid_ecx(int op) __attribute__((always_inline));
static inline uint64_t read_msr(uint32_t reg) __attribute__((always_inline));
static inline void write_msr(uint32_t reg, uint64_t val)
__attribute__((always_inline));
*edxp = edx;
}
+static inline uint32_t cpuid_ecx(int opcode)
+{
+ uint32_t ecx;
+ cpuid(1, 0, NULL, NULL, &ecx, NULL);
+ return ecx;
+}
+
// Might need to mfence rdmsr. supposedly wrmsr serializes, but not for x2APIC
static inline uint64_t read_msr(uint32_t reg)
{