Print this page
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.com>

*** 21,30 **** --- 21,31 ---- /* * Copyright (c) 2012 Gary Mills * * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 by Delphix. All rights reserved. + * Copyright 2016 Joyent, Inc. */ /* * Copyright (c) 2010, Intel Corporation. * All rights reserved. */
*** 59,68 **** --- 60,70 ---- #include <sys/kdi_machimpl.h> #include <sys/archsystm.h> #include <sys/promif.h> #include <sys/pci_cfgspace.h> #include <sys/bootvfs.h> + #include <sys/tsc.h> #ifdef __xpv #include <sys/hypervisor.h> #else #include <sys/xpv_support.h> #endif
*** 225,243 **** * The Xen hypervisor does not correctly report whether rdtscp is * supported or not, so we must assume that it is not. */ if ((get_hwenv() & HW_XEN_HVM) == 0 && is_x86_feature(x86_featureset, X86FSET_TSCP)) ! patch_tsc_read(X86_HAVE_TSCP); else if (cpuid_getvendor(CPU) == X86_VENDOR_AMD && cpuid_getfamily(CPU) <= 0xf && is_x86_feature(x86_featureset, X86FSET_SSE2)) ! patch_tsc_read(X86_TSC_MFENCE); else if (cpuid_getvendor(CPU) == X86_VENDOR_Intel && cpuid_getfamily(CPU) <= 6 && is_x86_feature(x86_featureset, X86FSET_SSE2)) ! patch_tsc_read(X86_TSC_LFENCE); #endif /* !__xpv */ #if defined(__i386) && !defined(__xpv) /* --- 227,245 ---- * The Xen hypervisor does not correctly report whether rdtscp is * supported or not, so we must assume that it is not. */ if ((get_hwenv() & HW_XEN_HVM) == 0 && is_x86_feature(x86_featureset, X86FSET_TSCP)) ! patch_tsc_read(TSC_TSCP); else if (cpuid_getvendor(CPU) == X86_VENDOR_AMD && cpuid_getfamily(CPU) <= 0xf && is_x86_feature(x86_featureset, X86FSET_SSE2)) ! patch_tsc_read(TSC_RDTSC_MFENCE); else if (cpuid_getvendor(CPU) == X86_VENDOR_Intel && cpuid_getfamily(CPU) <= 6 && is_x86_feature(x86_featureset, X86FSET_SSE2)) ! patch_tsc_read(TSC_RDTSC_LFENCE); #endif /* !__xpv */ #if defined(__i386) && !defined(__xpv) /*
*** 244,254 **** * Some i386 processors do not implement the rdtsc instruction, * or at least they do not implement it correctly. Patch them to * return 0. */ if (!is_x86_feature(x86_featureset, X86FSET_TSC)) ! patch_tsc_read(X86_NO_TSC); #endif /* __i386 && !__xpv */ #if defined(__amd64) && !defined(__xpv) patch_memops(cpuid_getvendor(CPU)); #endif /* __amd64 && !__xpv */ --- 246,256 ---- * Some i386 processors do not implement the rdtsc instruction, * or at least they do not implement it correctly. Patch them to * return 0. */ if (!is_x86_feature(x86_featureset, X86FSET_TSC)) ! patch_tsc_read(TSC_NONE); #endif /* __i386 && !__xpv */ #if defined(__amd64) && !defined(__xpv) patch_memops(cpuid_getvendor(CPU)); #endif /* __amd64 && !__xpv */