Change-Id: I7b8b24373e3a1cb028d7889bd3a11a1dbdc171bc
Reviewed-on: http://photon-jenkins.eng.vmware.com/662
Tested-by: jenkins-photon <wangnan2015@hotmail.com>
Reviewed-by: Sharath George
| ... | ... |
@@ -1,7 +1,7 @@ |
| 1 | 1 |
From d5e7229bec41406a4040a1ac9131e24cb1f8768d Mon Sep 17 00:00:00 2001 |
| 2 | 2 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 3 | 3 |
Date: Wed, 30 Sep 2015 23:00:00 +0000 |
| 4 |
-Subject: [PATCH 1/7] Measure correct boot time. |
|
| 4 |
+Subject: [PATCH 01/11] Measure correct boot time. |
|
| 5 | 5 |
|
| 6 | 6 |
--- |
| 7 | 7 |
arch/x86/Kconfig | 8 ++++++++ |
| ... | ... |
@@ -98,7 +98,7 @@ index 5650655..c386186 100644 |
| 98 | 98 |
From 500436e32d4dffae5d78f12be72c2e6784ab8cfb Mon Sep 17 00:00:00 2001 |
| 99 | 99 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 100 | 100 |
Date: Fri, 2 Oct 2015 20:00:06 +0000 |
| 101 |
-Subject: [PATCH 2/7] PV io_delay for VMware guest. |
|
| 101 |
+Subject: [PATCH 02/11] PV io_delay for VMware guest. |
|
| 102 | 102 |
|
| 103 | 103 |
--- |
| 104 | 104 |
arch/x86/kernel/cpu/vmware.c | 13 +++++++++++++ |
| ... | ... |
@@ -149,7 +149,7 @@ index 628a059..8fdd031 100644 |
| 149 | 149 |
From adff5db39b45d8adef2b4579ec46ab1bb721a81f Mon Sep 17 00:00:00 2001 |
| 150 | 150 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 151 | 151 |
Date: Wed, 7 Oct 2015 22:53:18 +0000 |
| 152 |
-Subject: [PATCH 3/7] Improved tsc based sched_clock & clocksource. |
|
| 152 |
+Subject: [PATCH 03/11] Improved tsc based sched_clock & clocksource. |
|
| 153 | 153 |
|
| 154 | 154 |
--- |
| 155 | 155 |
arch/x86/Kconfig | 1 + |
| ... | ... |
@@ -327,7 +327,7 @@ index c0a2051..284a7ba 100644 |
| 327 | 327 |
From 3bd5760c3b1f6cb39568361561d7d1e5440f1109 Mon Sep 17 00:00:00 2001 |
| 328 | 328 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 329 | 329 |
Date: Mon, 12 Oct 2015 22:43:38 +0000 |
| 330 |
-Subject: [PATCH 4/7] Move read_boot_clock64 into pv_time_ops. |
|
| 330 |
+Subject: [PATCH 04/11] Move read_boot_clock64 into pv_time_ops. |
|
| 331 | 331 |
|
| 332 | 332 |
--- |
| 333 | 333 |
arch/x86/Kconfig | 14 ++++++-- |
| ... | ... |
@@ -635,7 +635,7 @@ index 284a7ba..615aeb4 100644 |
| 635 | 635 |
From aa93eaec3f709633007ab6ce3ddbb8aaa455b557 Mon Sep 17 00:00:00 2001 |
| 636 | 636 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 637 | 637 |
Date: Thu, 5 Nov 2015 21:02:52 +0000 |
| 638 |
-Subject: [PATCH 5/7] Fix clocksource_vmware issue in VM version <= 10 |
|
| 638 |
+Subject: [PATCH 05/11] Fix clocksource_vmware issue in VM version <= 10 |
|
| 639 | 639 |
|
| 640 | 640 |
--- |
| 641 | 641 |
arch/x86/kernel/cpu/vmware.c | 48 +++++++++++++++++++++++++++++++++++++++++--- |
| ... | ... |
@@ -733,7 +733,7 @@ index 1bf1fe3..0b89bb9 100644 |
| 733 | 733 |
From 245c6ff168fabde177b5b6023356b6005b0efbef Mon Sep 17 00:00:00 2001 |
| 734 | 734 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 735 | 735 |
Date: Tue, 10 Nov 2015 11:46:57 +0000 |
| 736 |
-Subject: [PATCH 6/7] Get lapic timer frequency from HV, skip calibration |
|
| 736 |
+Subject: [PATCH 06/11] Get lapic timer frequency from HV, skip calibration |
|
| 737 | 737 |
|
| 738 | 738 |
--- |
| 739 | 739 |
arch/x86/kernel/cpu/vmware.c | 48 +++++--------------------------------------- |
| ... | ... |
@@ -823,7 +823,7 @@ index 0b89bb9..b16618b 100644 |
| 823 | 823 |
From 23055114ca27a04044ebbe38853834e0aa869da0 Mon Sep 17 00:00:00 2001 |
| 824 | 824 |
From: Alexey Makhalov <amakhalov@vmware.com> |
| 825 | 825 |
Date: Tue, 15 Dec 2015 21:31:18 +0000 |
| 826 |
-Subject: [PATCH 7/7] Skip rdrand reseed |
|
| 826 |
+Subject: [PATCH 07/11] Skip rdrand reseed |
|
| 827 | 827 |
|
| 828 | 828 |
--- |
| 829 | 829 |
arch/x86/kernel/cpu/common.c | 2 ++ |
| ... | ... |
@@ -864,3 +864,452 @@ index 136ac74..0685891 100644 |
| 864 | 864 |
-- |
| 865 | 865 |
1.9.1 |
| 866 | 866 |
|
| 867 |
+ |
|
| 868 |
+From bd806a16d202bf9dc41fbe3f8e39545e704adf9e Mon Sep 17 00:00:00 2001 |
|
| 869 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
| 870 |
+Date: Thu, 3 Dec 2015 00:46:46 +0000 |
|
| 871 |
+Subject: [PATCH 08/11] STA implementation. first version. |
|
| 872 |
+ |
|
| 873 |
+--- |
|
| 874 |
+ arch/x86/kernel/cpu/vmware.c | 163 +++++++++++++++++++++++++++++++++++++++++++ |
|
| 875 |
+ 1 file changed, 163 insertions(+) |
|
| 876 |
+ |
|
| 877 |
+diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
|
| 878 |
+index b16618b..cf1fb64 100644 |
|
| 879 |
+--- a/arch/x86/kernel/cpu/vmware.c |
|
| 880 |
+@@ -28,6 +28,8 @@ |
|
| 881 |
+ #include <asm/hypervisor.h> |
|
| 882 |
+ #include <asm/timer.h> |
|
| 883 |
+ #include <linux/sched.h> |
|
| 884 |
++#include <linux/cpu.h> |
|
| 885 |
++#include <asm/pci_x86.h> |
|
| 886 |
+ |
|
| 887 |
+ #define CPUID_VMWARE_INFO_LEAF 0x40000000 |
|
| 888 |
+ #define VMWARE_HYPERVISOR_MAGIC 0x564D5868 |
|
| 889 |
+@@ -38,6 +40,10 @@ |
|
| 890 |
+ #define VMWARE_PORT_CMD_GETVCPU_INFO 68 |
|
| 891 |
+ #define VMWARE_PORT_CMD_LEGACY_X2APIC 3 |
|
| 892 |
+ #define VMWARE_PORT_CMD_VCPU_RESERVED 31 |
|
| 893 |
++#define VMWARE_PORT_CMD_STEALCLOCK 91 |
|
| 894 |
++# define CMD_STEALCLOCK_ENABLE 0 |
|
| 895 |
++# define CMD_STEALCLOCK_DISABLE 1 |
|
| 896 |
++ |
|
| 897 |
+ |
|
| 898 |
+ #define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \ |
|
| 899 |
+ __asm__("inl (%%dx)" : \
|
|
| 900 |
+@@ -47,6 +53,34 @@ |
|
| 901 |
+ "2"(VMWARE_HYPERVISOR_PORT), "3"(UINT_MAX) : \ |
|
| 902 |
+ "memory"); |
|
| 903 |
+ |
|
| 904 |
++struct vmware_steal_time {
|
|
| 905 |
++ uint64_t clock; /* stolen time counter in units of vtsc */ |
|
| 906 |
++ uint64_t reserved; |
|
| 907 |
++}; |
|
| 908 |
++static DEFINE_PER_CPU(struct vmware_steal_time, steal_time) __aligned(64); |
|
| 909 |
++static int has_steal_clock = 0; |
|
| 910 |
++ |
|
| 911 |
++static int vmware_cmd_stealclock(int subcmd, uint32_t arg1, uint32_t arg2) |
|
| 912 |
++{
|
|
| 913 |
++ uint32_t result, info; |
|
| 914 |
++ __asm__ __volatile__ ("inl (%%dx)"
|
|
| 915 |
++ : "=a" (result), |
|
| 916 |
++ "=c" (info) |
|
| 917 |
++ : "a" (VMWARE_HYPERVISOR_MAGIC), |
|
| 918 |
++ "c" (VMWARE_PORT_CMD_STEALCLOCK), |
|
| 919 |
++ "d" (VMWARE_HYPERVISOR_PORT), |
|
| 920 |
++ "b" (subcmd), |
|
| 921 |
++ "S" (arg1), |
|
| 922 |
++ "D" (arg2)); |
|
| 923 |
++ return result; |
|
| 924 |
++} |
|
| 925 |
++#define STEALCLOCK_ENABLE(pa) \ |
|
| 926 |
++ vmware_cmd_stealclock(CMD_STEALCLOCK_ENABLE, \ |
|
| 927 |
++ (pa) >> 32, (pa) & 0xffffffff) |
|
| 928 |
++ |
|
| 929 |
++#define STEALCLOCK_DISABLE() \ |
|
| 930 |
++ vmware_cmd_stealclock(CMD_STEALCLOCK_DISABLE, 0, 0) |
|
| 931 |
++ |
|
| 932 |
+ static inline int __vmware_platform(void) |
|
| 933 |
+ {
|
|
| 934 |
+ uint32_t eax, ebx, ecx, edx; |
|
| 935 |
+@@ -134,6 +168,114 @@ static void vmware_read_boot_clock64(struct timespec64 *ts) |
|
| 936 |
+ } |
|
| 937 |
+ } |
|
| 938 |
+ |
|
| 939 |
++static uint64_t vmware_steal_clock(int cpu) |
|
| 940 |
++{
|
|
| 941 |
++ struct vmware_steal_time *steal; |
|
| 942 |
++ |
|
| 943 |
++ steal = &per_cpu(steal_time, cpu); |
|
| 944 |
++ return mul_u64_u32_shr(steal->clock, vmware_cyc2ns.cyc2ns_mul, |
|
| 945 |
++ CYC2NS_SCALE_FACTOR); |
|
| 946 |
++} |
|
| 947 |
++ |
|
| 948 |
++static void vmware_register_steal_time(void) |
|
| 949 |
++{
|
|
| 950 |
++ int cpu = smp_processor_id(); |
|
| 951 |
++ struct vmware_steal_time *st = &per_cpu(steal_time, cpu); |
|
| 952 |
++ |
|
| 953 |
++ if (!has_steal_clock) |
|
| 954 |
++ return; |
|
| 955 |
++ |
|
| 956 |
++ memset(st, 0, sizeof(*st)); |
|
| 957 |
++ |
|
| 958 |
++ if (STEALCLOCK_ENABLE(slow_virt_to_phys(st)) != 0) {
|
|
| 959 |
++ has_steal_clock = 0; |
|
| 960 |
++ return; |
|
| 961 |
++ } |
|
| 962 |
++ |
|
| 963 |
++ pr_info("vmware-stealtime: cpu %d, pa %llx\n",
|
|
| 964 |
++ cpu, (unsigned long long) slow_virt_to_phys(st)); |
|
| 965 |
++} |
|
| 966 |
++ |
|
| 967 |
++void vmware_disable_steal_time(void) |
|
| 968 |
++{
|
|
| 969 |
++ if (!has_steal_clock) |
|
| 970 |
++ return; |
|
| 971 |
++ |
|
| 972 |
++ STEALCLOCK_DISABLE(); |
|
| 973 |
++} |
|
| 974 |
++ |
|
| 975 |
++static void vmware_guest_cpu_init(void) |
|
| 976 |
++{
|
|
| 977 |
++ if (has_steal_clock) |
|
| 978 |
++ vmware_register_steal_time(); |
|
| 979 |
++} |
|
| 980 |
++ |
|
| 981 |
++#ifdef CONFIG_SMP |
|
| 982 |
++static void __init vmware_smp_prepare_boot_cpu(void) |
|
| 983 |
++{
|
|
| 984 |
++ vmware_guest_cpu_init(); |
|
| 985 |
++ native_smp_prepare_boot_cpu(); |
|
| 986 |
++} |
|
| 987 |
++ |
|
| 988 |
++static void vmware_guest_cpu_online(void *dummy) |
|
| 989 |
++{
|
|
| 990 |
++ vmware_guest_cpu_init(); |
|
| 991 |
++} |
|
| 992 |
++ |
|
| 993 |
++static void vmware_guest_cpu_offline(void *dummy) |
|
| 994 |
++{
|
|
| 995 |
++ vmware_disable_steal_time(); |
|
| 996 |
++} |
|
| 997 |
++ |
|
| 998 |
++static int vmware_cpu_notify(struct notifier_block *self, unsigned long action, |
|
| 999 |
++ void *hcpu) |
|
| 1000 |
++{
|
|
| 1001 |
++ int cpu = (unsigned long)hcpu; |
|
| 1002 |
++ switch (action) {
|
|
| 1003 |
++ case CPU_ONLINE: |
|
| 1004 |
++ case CPU_DOWN_FAILED: |
|
| 1005 |
++ case CPU_ONLINE_FROZEN: |
|
| 1006 |
++ smp_call_function_single(cpu, vmware_guest_cpu_online, |
|
| 1007 |
++ NULL, 0); |
|
| 1008 |
++ break; |
|
| 1009 |
++ case CPU_DOWN_PREPARE: |
|
| 1010 |
++ case CPU_DOWN_PREPARE_FROZEN: |
|
| 1011 |
++ smp_call_function_single(cpu, vmware_guest_cpu_offline, |
|
| 1012 |
++ NULL, 1); |
|
| 1013 |
++ break; |
|
| 1014 |
++ default: |
|
| 1015 |
++ break; |
|
| 1016 |
++ } |
|
| 1017 |
++ return NOTIFY_OK; |
|
| 1018 |
++} |
|
| 1019 |
++ |
|
| 1020 |
++static struct notifier_block vmware_cpu_notifier = {
|
|
| 1021 |
++ .notifier_call = vmware_cpu_notify, |
|
| 1022 |
++}; |
|
| 1023 |
++#endif |
|
| 1024 |
++ |
|
| 1025 |
++static int sta_enabled = 1; /* steal time accounting */ |
|
| 1026 |
++static int parse_vmw_no_sta(char *arg) |
|
| 1027 |
++{
|
|
| 1028 |
++ sta_enabled = 0; |
|
| 1029 |
++ return 0; |
|
| 1030 |
++} |
|
| 1031 |
++ |
|
| 1032 |
++early_param("vmw-no-sta", parse_vmw_no_sta);
|
|
| 1033 |
++ |
|
| 1034 |
++static __init int activate_jump_labels(void) |
|
| 1035 |
++{
|
|
| 1036 |
++ if (has_steal_clock) {
|
|
| 1037 |
++ static_key_slow_inc(¶virt_steal_enabled); |
|
| 1038 |
++ if (sta_enabled) |
|
| 1039 |
++ static_key_slow_inc(¶virt_steal_rq_enabled); |
|
| 1040 |
++ } |
|
| 1041 |
++ |
|
| 1042 |
++ return 0; |
|
| 1043 |
++} |
|
| 1044 |
++arch_initcall(activate_jump_labels); |
|
| 1045 |
++ |
|
| 1046 |
++ |
|
| 1047 |
+ static void __init paravirt_ops_setup(void) |
|
| 1048 |
+ {
|
|
| 1049 |
+ pv_info.name = "VMware"; |
|
| 1050 |
+@@ -141,9 +283,18 @@ static void __init paravirt_ops_setup(void) |
|
| 1051 |
+ pv_time_ops.sched_clock = vmware_sched_clock; |
|
| 1052 |
+ pv_time_ops.read_boot_clock64 = vmware_read_boot_clock64; |
|
| 1053 |
+ |
|
| 1054 |
++ /* |
|
| 1055 |
++ * TODO: check for STEAL_TIME support |
|
| 1056 |
++ */ |
|
| 1057 |
++ if (1) {
|
|
| 1058 |
++ has_steal_clock = 1; |
|
| 1059 |
++ pv_time_ops.steal_clock = vmware_steal_clock; |
|
| 1060 |
++ } |
|
| 1061 |
++ |
|
| 1062 |
+ #ifdef CONFIG_X86_IO_APIC |
|
| 1063 |
+ no_timer_check = 1; |
|
| 1064 |
+ #endif |
|
| 1065 |
++ |
|
| 1066 |
+ } |
|
| 1067 |
+ |
|
| 1068 |
+ static void __init vmware_platform_setup(void) |
|
| 1069 |
+@@ -176,6 +327,18 @@ static void __init vmware_platform_setup(void) |
|
| 1070 |
+ clocksource_register_khz(&clocksource_vmware, vtsc_khz); |
|
| 1071 |
+ |
|
| 1072 |
+ paravirt_ops_setup(); |
|
| 1073 |
++ |
|
| 1074 |
++#ifdef CONFIG_SMP |
|
| 1075 |
++ smp_ops.smp_prepare_boot_cpu = vmware_smp_prepare_boot_cpu; |
|
| 1076 |
++ register_cpu_notifier(&vmware_cpu_notifier); |
|
| 1077 |
++#else |
|
| 1078 |
++ vmware_guest_cpu_init(); |
|
| 1079 |
++#endif |
|
| 1080 |
++ |
|
| 1081 |
++#ifdef CONFIG_PCI |
|
| 1082 |
++ /* PCI BIOS service won't work from a PV guest. */ |
|
| 1083 |
++ pci_probe &= ~PCI_PROBE_BIOS; |
|
| 1084 |
++#endif |
|
| 1085 |
+ } |
|
| 1086 |
+ |
|
| 1087 |
+ /* |
|
| 1088 |
+-- |
|
| 1089 |
+1.9.1 |
|
| 1090 |
+ |
|
| 1091 |
+ |
|
| 1092 |
+From 8496145f4f5fcd430e5d8f493066a8e54aaaf96b Mon Sep 17 00:00:00 2001 |
|
| 1093 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
| 1094 |
+Date: Wed, 13 Jan 2016 22:54:04 +0000 |
|
| 1095 |
+Subject: [PATCH 09/11] STA. updated version |
|
| 1096 |
+ |
|
| 1097 |
+--- |
|
| 1098 |
+ arch/x86/kernel/cpu/vmware.c | 34 ++++++++++++++++++++++++---------- |
|
| 1099 |
+ 1 file changed, 24 insertions(+), 10 deletions(-) |
|
| 1100 |
+ |
|
| 1101 |
+diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
|
| 1102 |
+index cf1fb64..196703c 100644 |
|
| 1103 |
+--- a/arch/x86/kernel/cpu/vmware.c |
|
| 1104 |
+@@ -41,16 +41,23 @@ |
|
| 1105 |
+ #define VMWARE_PORT_CMD_LEGACY_X2APIC 3 |
|
| 1106 |
+ #define VMWARE_PORT_CMD_VCPU_RESERVED 31 |
|
| 1107 |
+ #define VMWARE_PORT_CMD_STEALCLOCK 91 |
|
| 1108 |
+-# define CMD_STEALCLOCK_ENABLE 0 |
|
| 1109 |
+-# define CMD_STEALCLOCK_DISABLE 1 |
|
| 1110 |
++# define CMD_STEALCLOCK_STATUS 0 |
|
| 1111 |
++# define STEALCLOCK_IS_NOT_AVALIABLE 0 |
|
| 1112 |
++# define STEALCLOCK_IS_ENABLED 1 |
|
| 1113 |
++# define STEALCLOCK_IS_DISABLED 2 |
|
| 1114 |
++# define CMD_STEALCLOCK_ENABLE 1 |
|
| 1115 |
++# define CMD_STEALCLOCK_DISABLE 2 |
|
| 1116 |
+ |
|
| 1117 |
+ |
|
| 1118 |
+ #define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \ |
|
| 1119 |
++ VMWARE_PORT2(cmd, eax, ebx, ecx, edx, UINT_MAX) |
|
| 1120 |
++ |
|
| 1121 |
++#define VMWARE_PORT2(cmd, eax, ebx, ecx, edx, arg) \ |
|
| 1122 |
+ __asm__("inl (%%dx)" : \
|
|
| 1123 |
+ "=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) : \ |
|
| 1124 |
+ "0"(VMWARE_HYPERVISOR_MAGIC), \ |
|
| 1125 |
+ "1"(VMWARE_PORT_CMD_##cmd), \ |
|
| 1126 |
+- "2"(VMWARE_HYPERVISOR_PORT), "3"(UINT_MAX) : \ |
|
| 1127 |
++ "2"(VMWARE_HYPERVISOR_PORT), "3"(arg) : \ |
|
| 1128 |
+ "memory"); |
|
| 1129 |
+ |
|
| 1130 |
+ struct vmware_steal_time {
|
|
| 1131 |
+@@ -60,6 +67,13 @@ struct vmware_steal_time {
|
|
| 1132 |
+ static DEFINE_PER_CPU(struct vmware_steal_time, steal_time) __aligned(64); |
|
| 1133 |
+ static int has_steal_clock = 0; |
|
| 1134 |
+ |
|
| 1135 |
++static int vmware_is_stealclock_available(void) |
|
| 1136 |
++{
|
|
| 1137 |
++ uint32_t eax, ebx, ecx, edx; |
|
| 1138 |
++ VMWARE_PORT2(STEALCLOCK, eax, ebx, ecx, edx, CMD_STEALCLOCK_STATUS); |
|
| 1139 |
++ printk("%s:%d %d %d\n", __FUNCTION__, __LINE__, eax, ebx);
|
|
| 1140 |
++ return eax == 0 && ebx != STEALCLOCK_IS_NOT_AVALIABLE; |
|
| 1141 |
++} |
|
| 1142 |
+ static int vmware_cmd_stealclock(int subcmd, uint32_t arg1, uint32_t arg2) |
|
| 1143 |
+ {
|
|
| 1144 |
+ uint32_t result, info; |
|
| 1145 |
+@@ -283,10 +297,7 @@ static void __init paravirt_ops_setup(void) |
|
| 1146 |
+ pv_time_ops.sched_clock = vmware_sched_clock; |
|
| 1147 |
+ pv_time_ops.read_boot_clock64 = vmware_read_boot_clock64; |
|
| 1148 |
+ |
|
| 1149 |
+- /* |
|
| 1150 |
+- * TODO: check for STEAL_TIME support |
|
| 1151 |
+- */ |
|
| 1152 |
+- if (1) {
|
|
| 1153 |
++ if (vmware_is_stealclock_available()) {
|
|
| 1154 |
+ has_steal_clock = 1; |
|
| 1155 |
+ pv_time_ops.steal_clock = vmware_steal_clock; |
|
| 1156 |
+ } |
|
| 1157 |
+@@ -328,12 +339,15 @@ static void __init vmware_platform_setup(void) |
|
| 1158 |
+ |
|
| 1159 |
+ paravirt_ops_setup(); |
|
| 1160 |
+ |
|
| 1161 |
++ /* vmware_cpu_notifier is used only by STA */ |
|
| 1162 |
++ if (has_steal_clock) {
|
|
| 1163 |
+ #ifdef CONFIG_SMP |
|
| 1164 |
+- smp_ops.smp_prepare_boot_cpu = vmware_smp_prepare_boot_cpu; |
|
| 1165 |
+- register_cpu_notifier(&vmware_cpu_notifier); |
|
| 1166 |
++ smp_ops.smp_prepare_boot_cpu = vmware_smp_prepare_boot_cpu; |
|
| 1167 |
++ register_cpu_notifier(&vmware_cpu_notifier); |
|
| 1168 |
+ #else |
|
| 1169 |
+- vmware_guest_cpu_init(); |
|
| 1170 |
++ vmware_guest_cpu_init(); |
|
| 1171 |
+ #endif |
|
| 1172 |
++ } |
|
| 1173 |
+ |
|
| 1174 |
+ #ifdef CONFIG_PCI |
|
| 1175 |
+ /* PCI BIOS service won't work from a PV guest. */ |
|
| 1176 |
+-- |
|
| 1177 |
+1.9.1 |
|
| 1178 |
+ |
|
| 1179 |
+ |
|
| 1180 |
+From a8f165433de453994aef84a9d6bf1704a18b3a95 Mon Sep 17 00:00:00 2001 |
|
| 1181 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
| 1182 |
+Date: Tue, 15 Mar 2016 22:29:23 +0000 |
|
| 1183 |
+Subject: [PATCH 10/11] STA: version with a single backdoor command. |
|
| 1184 |
+ |
|
| 1185 |
+--- |
|
| 1186 |
+ arch/x86/kernel/cpu/vmware.c | 35 +++++++++++++++-------------------- |
|
| 1187 |
+ 1 file changed, 15 insertions(+), 20 deletions(-) |
|
| 1188 |
+ |
|
| 1189 |
+diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
|
| 1190 |
+index 196703c..743b8ad 100644 |
|
| 1191 |
+--- a/arch/x86/kernel/cpu/vmware.c |
|
| 1192 |
+@@ -41,12 +41,9 @@ |
|
| 1193 |
+ #define VMWARE_PORT_CMD_LEGACY_X2APIC 3 |
|
| 1194 |
+ #define VMWARE_PORT_CMD_VCPU_RESERVED 31 |
|
| 1195 |
+ #define VMWARE_PORT_CMD_STEALCLOCK 91 |
|
| 1196 |
+-# define CMD_STEALCLOCK_STATUS 0 |
|
| 1197 |
+-# define STEALCLOCK_IS_NOT_AVALIABLE 0 |
|
| 1198 |
+-# define STEALCLOCK_IS_ENABLED 1 |
|
| 1199 |
+-# define STEALCLOCK_IS_DISABLED 2 |
|
| 1200 |
+-# define CMD_STEALCLOCK_ENABLE 1 |
|
| 1201 |
+-# define CMD_STEALCLOCK_DISABLE 2 |
|
| 1202 |
++# define STEALCLOCK_IS_NOT_AVALIABLE -1 |
|
| 1203 |
++# define STEALCLOCK_IS_DISABLED 0 |
|
| 1204 |
++# define STEALCLOCK_IS_ENABLED 1 |
|
| 1205 |
+ |
|
| 1206 |
+ |
|
| 1207 |
+ #define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \ |
|
| 1208 |
+@@ -62,19 +59,12 @@ |
|
| 1209 |
+ |
|
| 1210 |
+ struct vmware_steal_time {
|
|
| 1211 |
+ uint64_t clock; /* stolen time counter in units of vtsc */ |
|
| 1212 |
+- uint64_t reserved; |
|
| 1213 |
++ uint64_t reserved[7]; |
|
| 1214 |
+ }; |
|
| 1215 |
+ static DEFINE_PER_CPU(struct vmware_steal_time, steal_time) __aligned(64); |
|
| 1216 |
+ static int has_steal_clock = 0; |
|
| 1217 |
+ |
|
| 1218 |
+-static int vmware_is_stealclock_available(void) |
|
| 1219 |
+-{
|
|
| 1220 |
+- uint32_t eax, ebx, ecx, edx; |
|
| 1221 |
+- VMWARE_PORT2(STEALCLOCK, eax, ebx, ecx, edx, CMD_STEALCLOCK_STATUS); |
|
| 1222 |
+- printk("%s:%d %d %d\n", __FUNCTION__, __LINE__, eax, ebx);
|
|
| 1223 |
+- return eax == 0 && ebx != STEALCLOCK_IS_NOT_AVALIABLE; |
|
| 1224 |
+-} |
|
| 1225 |
+-static int vmware_cmd_stealclock(int subcmd, uint32_t arg1, uint32_t arg2) |
|
| 1226 |
++static int vmware_cmd_stealclock(uint32_t arg1, uint32_t arg2) |
|
| 1227 |
+ {
|
|
| 1228 |
+ uint32_t result, info; |
|
| 1229 |
+ __asm__ __volatile__ ("inl (%%dx)"
|
|
| 1230 |
+@@ -83,17 +73,22 @@ static int vmware_cmd_stealclock(int subcmd, uint32_t arg1, uint32_t arg2) |
|
| 1231 |
+ : "a" (VMWARE_HYPERVISOR_MAGIC), |
|
| 1232 |
+ "c" (VMWARE_PORT_CMD_STEALCLOCK), |
|
| 1233 |
+ "d" (VMWARE_HYPERVISOR_PORT), |
|
| 1234 |
+- "b" (subcmd), |
|
| 1235 |
++ "b" (0), |
|
| 1236 |
+ "S" (arg1), |
|
| 1237 |
+ "D" (arg2)); |
|
| 1238 |
+ return result; |
|
| 1239 |
+ } |
|
| 1240 |
+ #define STEALCLOCK_ENABLE(pa) \ |
|
| 1241 |
+- vmware_cmd_stealclock(CMD_STEALCLOCK_ENABLE, \ |
|
| 1242 |
+- (pa) >> 32, (pa) & 0xffffffff) |
|
| 1243 |
++ (vmware_cmd_stealclock((pa) >> 32, (pa) & 0xffffffff) \ |
|
| 1244 |
++ == STEALCLOCK_IS_ENABLED) |
|
| 1245 |
+ |
|
| 1246 |
+ #define STEALCLOCK_DISABLE() \ |
|
| 1247 |
+- vmware_cmd_stealclock(CMD_STEALCLOCK_DISABLE, 0, 0) |
|
| 1248 |
++ vmware_cmd_stealclock(0, 1) |
|
| 1249 |
++ |
|
| 1250 |
++static int vmware_is_stealclock_available(void) |
|
| 1251 |
++{
|
|
| 1252 |
++ return STEALCLOCK_DISABLE() != STEALCLOCK_IS_NOT_AVALIABLE; |
|
| 1253 |
++} |
|
| 1254 |
+ |
|
| 1255 |
+ static inline int __vmware_platform(void) |
|
| 1256 |
+ {
|
|
| 1257 |
+@@ -201,7 +196,7 @@ static void vmware_register_steal_time(void) |
|
| 1258 |
+ |
|
| 1259 |
+ memset(st, 0, sizeof(*st)); |
|
| 1260 |
+ |
|
| 1261 |
+- if (STEALCLOCK_ENABLE(slow_virt_to_phys(st)) != 0) {
|
|
| 1262 |
++ if (!STEALCLOCK_ENABLE(slow_virt_to_phys(st))) {
|
|
| 1263 |
+ has_steal_clock = 0; |
|
| 1264 |
+ return; |
|
| 1265 |
+ } |
|
| 1266 |
+-- |
|
| 1267 |
+1.9.1 |
|
| 1268 |
+ |
|
| 1269 |
+ |
|
| 1270 |
+From 27b9b08cf68f55fbfa297eb047f7d1309e0a60cf Mon Sep 17 00:00:00 2001 |
|
| 1271 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
| 1272 |
+Date: Fri, 25 Mar 2016 01:14:17 +0000 |
|
| 1273 |
+Subject: [PATCH 11/11] Remove delays for smpboot |
|
| 1274 |
+ |
|
| 1275 |
+--- |
|
| 1276 |
+ arch/x86/kernel/smpboot.c | 6 +++--- |
|
| 1277 |
+ 1 file changed, 3 insertions(+), 3 deletions(-) |
|
| 1278 |
+ |
|
| 1279 |
+diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c |
|
| 1280 |
+index b1f3ed9..8f0be52 100644 |
|
| 1281 |
+--- a/arch/x86/kernel/smpboot.c |
|
| 1282 |
+@@ -560,7 +560,7 @@ wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip) |
|
| 1283 |
+ /* |
|
| 1284 |
+ * Give the other CPU some time to accept the IPI. |
|
| 1285 |
+ */ |
|
| 1286 |
+- udelay(200); |
|
| 1287 |
++// udelay(200); |
|
| 1288 |
+ if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
|
|
| 1289 |
+ maxlvt = lapic_get_maxlvt(); |
|
| 1290 |
+ if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ |
|
| 1291 |
+@@ -665,7 +665,7 @@ wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip) |
|
| 1292 |
+ /* |
|
| 1293 |
+ * Give the other CPU some time to accept the IPI. |
|
| 1294 |
+ */ |
|
| 1295 |
+- udelay(300); |
|
| 1296 |
++// udelay(300); |
|
| 1297 |
+ |
|
| 1298 |
+ pr_debug("Startup point 1\n");
|
|
| 1299 |
+ |
|
| 1300 |
+@@ -675,7 +675,7 @@ wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip) |
|
| 1301 |
+ /* |
|
| 1302 |
+ * Give the other CPU some time to accept the IPI. |
|
| 1303 |
+ */ |
|
| 1304 |
+- udelay(200); |
|
| 1305 |
++// udelay(200); |
|
| 1306 |
+ |
|
| 1307 |
+ if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ |
|
| 1308 |
+ apic_write(APIC_ESR, 0); |
|
| 1309 |
+-- |
|
| 1310 |
+1.9.1 |
|
| 1311 |
+ |
| ... | ... |
@@ -15,9 +15,11 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y |
| 15 | 15 |
CONFIG_MMU=y |
| 16 | 16 |
CONFIG_NEED_DMA_MAP_STATE=y |
| 17 | 17 |
CONFIG_NEED_SG_DMA_LENGTH=y |
| 18 |
+CONFIG_GENERIC_ISA_DMA=y |
|
| 18 | 19 |
CONFIG_GENERIC_BUG=y |
| 19 | 20 |
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y |
| 20 | 21 |
CONFIG_GENERIC_HWEIGHT=y |
| 22 |
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
|
| 21 | 23 |
CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 22 | 24 |
CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 23 | 25 |
CONFIG_ARCH_HAS_CPU_RELAX=y |
| ... | ... |
@@ -102,18 +104,17 @@ CONFIG_GENERIC_CMOS_UPDATE=y |
| 102 | 102 |
CONFIG_TICK_ONESHOT=y |
| 103 | 103 |
CONFIG_NO_HZ_COMMON=y |
| 104 | 104 |
# CONFIG_HZ_PERIODIC is not set |
| 105 |
-# CONFIG_NO_HZ_IDLE is not set |
|
| 106 |
-CONFIG_NO_HZ_FULL=y |
|
| 107 |
-# CONFIG_NO_HZ_FULL_ALL is not set |
|
| 108 |
-# CONFIG_NO_HZ_FULL_SYSIDLE is not set |
|
| 105 |
+CONFIG_NO_HZ_IDLE=y |
|
| 106 |
+# CONFIG_NO_HZ_FULL is not set |
|
| 109 | 107 |
CONFIG_NO_HZ=y |
| 110 | 108 |
CONFIG_HIGH_RES_TIMERS=y |
| 111 | 109 |
|
| 112 | 110 |
# |
| 113 | 111 |
# CPU/Task time and stats accounting |
| 114 | 112 |
# |
| 115 |
-CONFIG_VIRT_CPU_ACCOUNTING=y |
|
| 116 |
-CONFIG_VIRT_CPU_ACCOUNTING_GEN=y |
|
| 113 |
+CONFIG_TICK_CPU_ACCOUNTING=y |
|
| 114 |
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set |
|
| 115 |
+# CONFIG_IRQ_TIME_ACCOUNTING is not set |
|
| 117 | 116 |
CONFIG_BSD_PROCESS_ACCT=y |
| 118 | 117 |
CONFIG_BSD_PROCESS_ACCT_V3=y |
| 119 | 118 |
CONFIG_TASKSTATS=y |
| ... | ... |
@@ -129,14 +130,11 @@ CONFIG_TREE_RCU=y |
| 129 | 129 |
CONFIG_SRCU=y |
| 130 | 130 |
# CONFIG_TASKS_RCU is not set |
| 131 | 131 |
CONFIG_RCU_STALL_COMMON=y |
| 132 |
-CONFIG_CONTEXT_TRACKING=y |
|
| 133 |
-CONFIG_RCU_USER_QS=y |
|
| 134 |
-# CONFIG_CONTEXT_TRACKING_FORCE is not set |
|
| 135 | 132 |
# CONFIG_TREE_RCU_TRACE is not set |
| 136 | 133 |
CONFIG_RCU_NOCB_CPU=y |
| 137 |
-# CONFIG_RCU_NOCB_CPU_NONE is not set |
|
| 134 |
+CONFIG_RCU_NOCB_CPU_NONE=y |
|
| 138 | 135 |
# CONFIG_RCU_NOCB_CPU_ZERO is not set |
| 139 |
-CONFIG_RCU_NOCB_CPU_ALL=y |
|
| 136 |
+# CONFIG_RCU_NOCB_CPU_ALL is not set |
|
| 140 | 137 |
# CONFIG_RCU_EXPEDITE_BOOT is not set |
| 141 | 138 |
# CONFIG_BUILD_BIN2C is not set |
| 142 | 139 |
# CONFIG_IKCONFIG is not set |
| ... | ... |
@@ -191,18 +189,18 @@ CONFIG_HAVE_UID16=y |
| 191 | 191 |
CONFIG_SYSCTL_EXCEPTION_TRACE=y |
| 192 | 192 |
CONFIG_HAVE_PCSPKR_PLATFORM=y |
| 193 | 193 |
CONFIG_BPF=y |
| 194 |
-CONFIG_EXPERT=y |
|
| 195 |
-# CONFIG_UID16 is not set |
|
| 194 |
+# CONFIG_EXPERT is not set |
|
| 195 |
+CONFIG_UID16=y |
|
| 196 | 196 |
CONFIG_MULTIUSER=y |
| 197 | 197 |
CONFIG_SGETMASK_SYSCALL=y |
| 198 |
-# CONFIG_SYSFS_SYSCALL is not set |
|
| 199 |
-CONFIG_SYSCTL_SYSCALL=y |
|
| 198 |
+CONFIG_SYSFS_SYSCALL=y |
|
| 199 |
+# CONFIG_SYSCTL_SYSCALL is not set |
|
| 200 | 200 |
CONFIG_KALLSYMS=y |
| 201 |
-CONFIG_KALLSYMS_ALL=y |
|
| 201 |
+# CONFIG_KALLSYMS_ALL is not set |
|
| 202 | 202 |
CONFIG_PRINTK=y |
| 203 | 203 |
CONFIG_BUG=y |
| 204 | 204 |
CONFIG_ELF_CORE=y |
| 205 |
-# CONFIG_PCSPKR_PLATFORM is not set |
|
| 205 |
+CONFIG_PCSPKR_PLATFORM=y |
|
| 206 | 206 |
CONFIG_BASE_FULL=y |
| 207 | 207 |
CONFIG_FUTEX=y |
| 208 | 208 |
CONFIG_EPOLL=y |
| ... | ... |
@@ -223,12 +221,9 @@ CONFIG_HAVE_PERF_EVENTS=y |
| 223 | 223 |
CONFIG_PERF_EVENTS=y |
| 224 | 224 |
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set |
| 225 | 225 |
CONFIG_VM_EVENT_COUNTERS=y |
| 226 |
-CONFIG_SLUB_DEBUG=y |
|
| 227 | 226 |
# CONFIG_COMPAT_BRK is not set |
| 228 |
-# CONFIG_SLAB is not set |
|
| 229 |
-CONFIG_SLUB=y |
|
| 230 |
-# CONFIG_SLOB is not set |
|
| 231 |
-CONFIG_SLUB_CPU_PARTIAL=y |
|
| 227 |
+CONFIG_SLAB=y |
|
| 228 |
+# CONFIG_SLUB is not set |
|
| 232 | 229 |
CONFIG_SYSTEM_TRUSTED_KEYRING=y |
| 233 | 230 |
# CONFIG_PROFILING is not set |
| 234 | 231 |
CONFIG_HAVE_OPROFILE=y |
| ... | ... |
@@ -259,7 +254,6 @@ CONFIG_HAVE_PERF_REGS=y |
| 259 | 259 |
CONFIG_HAVE_PERF_USER_STACK_DUMP=y |
| 260 | 260 |
CONFIG_HAVE_ARCH_JUMP_LABEL=y |
| 261 | 261 |
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y |
| 262 |
-CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y |
|
| 263 | 262 |
CONFIG_HAVE_CMPXCHG_LOCAL=y |
| 264 | 263 |
CONFIG_HAVE_CMPXCHG_DOUBLE=y |
| 265 | 264 |
CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y |
| ... | ... |
@@ -381,7 +375,7 @@ CONFIG_PARAVIRT=y |
| 381 | 381 |
# CONFIG_KVM_GUEST is not set |
| 382 | 382 |
CONFIG_VMWARE=y |
| 383 | 383 |
CONFIG_VMWARE_ONLY=y |
| 384 |
-# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set |
|
| 384 |
+CONFIG_PARAVIRT_TIME_ACCOUNTING=y |
|
| 385 | 385 |
CONFIG_PARAVIRT_CLOCK=y |
| 386 | 386 |
CONFIG_NO_BOOTMEM=y |
| 387 | 387 |
# CONFIG_MK8 is not set |
| ... | ... |
@@ -399,18 +393,18 @@ CONFIG_X86_CMPXCHG64=y |
| 399 | 399 |
CONFIG_X86_CMOV=y |
| 400 | 400 |
CONFIG_X86_MINIMUM_CPU_FAMILY=64 |
| 401 | 401 |
CONFIG_X86_DEBUGCTLMSR=y |
| 402 |
-CONFIG_PROCESSOR_SELECT=y |
|
| 403 | 402 |
CONFIG_CPU_SUP_INTEL=y |
| 404 |
-# CONFIG_CPU_SUP_AMD is not set |
|
| 405 |
-# CONFIG_CPU_SUP_CENTAUR is not set |
|
| 403 |
+CONFIG_CPU_SUP_AMD=y |
|
| 404 |
+CONFIG_CPU_SUP_CENTAUR=y |
|
| 406 | 405 |
CONFIG_HPET_TIMER=y |
| 407 | 406 |
CONFIG_HPET_EMULATE_RTC=y |
| 408 | 407 |
CONFIG_DMI=y |
| 408 |
+# CONFIG_GART_IOMMU is not set |
|
| 409 | 409 |
# CONFIG_CALGARY_IOMMU is not set |
| 410 | 410 |
CONFIG_SWIOTLB=y |
| 411 | 411 |
CONFIG_IOMMU_HELPER=y |
| 412 | 412 |
# CONFIG_MAXSMP is not set |
| 413 |
-CONFIG_NR_CPUS=32 |
|
| 413 |
+CONFIG_NR_CPUS=128 |
|
| 414 | 414 |
# CONFIG_SCHED_SMT is not set |
| 415 | 415 |
CONFIG_SCHED_MC=y |
| 416 | 416 |
CONFIG_PREEMPT_NONE=y |
| ... | ... |
@@ -501,7 +495,7 @@ CONFIG_HZ=250 |
| 501 | 501 |
CONFIG_SCHED_HRTICK=y |
| 502 | 502 |
# CONFIG_KEXEC is not set |
| 503 | 503 |
# CONFIG_CRASH_DUMP is not set |
| 504 |
-CONFIG_PHYSICAL_START=0x100000 |
|
| 504 |
+CONFIG_PHYSICAL_START=0x1000000 |
|
| 505 | 505 |
CONFIG_RELOCATABLE=y |
| 506 | 506 |
# CONFIG_RANDOMIZE_BASE is not set |
| 507 | 507 |
CONFIG_PHYSICAL_ALIGN=0x1000000 |
| ... | ... |
@@ -540,7 +534,7 @@ CONFIG_ACPI_HOTPLUG_CPU=y |
| 540 | 540 |
# CONFIG_ACPI_INITRD_TABLE_OVERRIDE is not set |
| 541 | 541 |
# CONFIG_ACPI_DEBUG is not set |
| 542 | 542 |
# CONFIG_ACPI_PCI_SLOT is not set |
| 543 |
-# CONFIG_X86_PM_TIMER is not set |
|
| 543 |
+CONFIG_X86_PM_TIMER=y |
|
| 544 | 544 |
CONFIG_ACPI_CONTAINER=y |
| 545 | 545 |
CONFIG_ACPI_HOTPLUG_MEMORY=y |
| 546 | 546 |
CONFIG_ACPI_HOTPLUG_IOAPIC=y |
| ... | ... |
@@ -582,11 +576,14 @@ CONFIG_PCI=y |
| 582 | 582 |
CONFIG_PCI_DIRECT=y |
| 583 | 583 |
# CONFIG_PCI_MMCONFIG is not set |
| 584 | 584 |
CONFIG_PCI_DOMAINS=y |
| 585 |
-# CONFIG_PCI_CNB20LE_QUIRK is not set |
|
| 586 | 585 |
CONFIG_PCIEPORTBUS=y |
| 587 | 586 |
# CONFIG_HOTPLUG_PCI_PCIE is not set |
| 588 | 587 |
# CONFIG_PCIEAER is not set |
| 589 |
-# CONFIG_PCIEASPM is not set |
|
| 588 |
+CONFIG_PCIEASPM=y |
|
| 589 |
+# CONFIG_PCIEASPM_DEBUG is not set |
|
| 590 |
+CONFIG_PCIEASPM_DEFAULT=y |
|
| 591 |
+# CONFIG_PCIEASPM_POWERSAVE is not set |
|
| 592 |
+# CONFIG_PCIEASPM_PERFORMANCE is not set |
|
| 590 | 593 |
CONFIG_PCI_BUS_ADDR_T_64BIT=y |
| 591 | 594 |
CONFIG_PCI_MSI=y |
| 592 | 595 |
CONFIG_PCI_MSI_IRQ_DOMAIN=y |
| ... | ... |
@@ -602,11 +599,12 @@ CONFIG_PCI_LABEL=y |
| 602 | 602 |
# |
| 603 | 603 |
# PCI host controller drivers |
| 604 | 604 |
# |
| 605 |
-# CONFIG_ISA_DMA_API is not set |
|
| 605 |
+CONFIG_ISA_DMA_API=y |
|
| 606 |
+CONFIG_AMD_NB=y |
|
| 606 | 607 |
# CONFIG_PCCARD is not set |
| 607 | 608 |
CONFIG_HOTPLUG_PCI=y |
| 608 | 609 |
CONFIG_HOTPLUG_PCI_ACPI=y |
| 609 |
-CONFIG_HOTPLUG_PCI_ACPI_IBM=m |
|
| 610 |
+# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set |
|
| 610 | 611 |
# CONFIG_HOTPLUG_PCI_CPCI is not set |
| 611 | 612 |
# CONFIG_HOTPLUG_PCI_SHPC is not set |
| 612 | 613 |
# CONFIG_RAPIDIO is not set |
| ... | ... |
@@ -1101,7 +1099,7 @@ CONFIG_EXTRA_FIRMWARE="" |
| 1101 | 1101 |
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set |
| 1102 | 1102 |
CONFIG_ALLOW_DEV_COREDUMP=y |
| 1103 | 1103 |
# CONFIG_DEBUG_DRIVER is not set |
| 1104 |
-CONFIG_DEBUG_DEVRES=y |
|
| 1104 |
+# CONFIG_DEBUG_DEVRES is not set |
|
| 1105 | 1105 |
# CONFIG_SYS_HYPERVISOR is not set |
| 1106 | 1106 |
# CONFIG_GENERIC_CPU_DEVICES is not set |
| 1107 | 1107 |
CONFIG_GENERIC_CPU_AUTOPROBE=y |
| ... | ... |
@@ -1125,6 +1123,7 @@ CONFIG_PNP_DEBUG_MESSAGES=y |
| 1125 | 1125 |
CONFIG_PNPACPI=y |
| 1126 | 1126 |
CONFIG_BLK_DEV=y |
| 1127 | 1127 |
# CONFIG_BLK_DEV_NULL_BLK is not set |
| 1128 |
+# CONFIG_BLK_DEV_FD is not set |
|
| 1128 | 1129 |
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set |
| 1129 | 1130 |
# CONFIG_BLK_CPQ_CISS_DA is not set |
| 1130 | 1131 |
# CONFIG_BLK_DEV_DAC960 is not set |
| ... | ... |
@@ -1292,10 +1291,13 @@ CONFIG_SCSI_MPT3SAS_MAX_SGE=128 |
| 1292 | 1292 |
CONFIG_SCSI_MPT3SAS_LOGGING=y |
| 1293 | 1293 |
# CONFIG_SCSI_UFSHCD is not set |
| 1294 | 1294 |
# CONFIG_SCSI_HPTIOP is not set |
| 1295 |
+# CONFIG_SCSI_BUSLOGIC is not set |
|
| 1295 | 1296 |
CONFIG_VMWARE_PVSCSI=y |
| 1296 | 1297 |
# CONFIG_SCSI_SNIC is not set |
| 1297 | 1298 |
# CONFIG_SCSI_DMX3191D is not set |
| 1299 |
+# CONFIG_SCSI_EATA is not set |
|
| 1298 | 1300 |
# CONFIG_SCSI_FUTURE_DOMAIN is not set |
| 1301 |
+# CONFIG_SCSI_GDTH is not set |
|
| 1299 | 1302 |
# CONFIG_SCSI_ISCI is not set |
| 1300 | 1303 |
# CONFIG_SCSI_IPS is not set |
| 1301 | 1304 |
# CONFIG_SCSI_INITIO is not set |
| ... | ... |
@@ -1395,7 +1397,6 @@ CONFIG_ATA_PIIX=m |
| 1395 | 1395 |
# CONFIG_PATA_MPIIX is not set |
| 1396 | 1396 |
# CONFIG_PATA_NS87410 is not set |
| 1397 | 1397 |
# CONFIG_PATA_OPTI is not set |
| 1398 |
-# CONFIG_PATA_PLATFORM is not set |
|
| 1399 | 1398 |
# CONFIG_PATA_RZ1000 is not set |
| 1400 | 1399 |
|
| 1401 | 1400 |
# |
| ... | ... |
@@ -1604,16 +1605,16 @@ CONFIG_KEYBOARD_ATKBD=y |
| 1604 | 1604 |
# CONFIG_KEYBOARD_XTKBD is not set |
| 1605 | 1605 |
CONFIG_INPUT_MOUSE=y |
| 1606 | 1606 |
CONFIG_MOUSE_PS2=m |
| 1607 |
-# CONFIG_MOUSE_PS2_ALPS is not set |
|
| 1608 |
-# CONFIG_MOUSE_PS2_LOGIPS2PP is not set |
|
| 1609 |
-# CONFIG_MOUSE_PS2_SYNAPTICS is not set |
|
| 1610 |
-# CONFIG_MOUSE_PS2_CYPRESS is not set |
|
| 1611 |
-# CONFIG_MOUSE_PS2_LIFEBOOK is not set |
|
| 1612 |
-# CONFIG_MOUSE_PS2_TRACKPOINT is not set |
|
| 1607 |
+CONFIG_MOUSE_PS2_ALPS=y |
|
| 1608 |
+CONFIG_MOUSE_PS2_LOGIPS2PP=y |
|
| 1609 |
+CONFIG_MOUSE_PS2_SYNAPTICS=y |
|
| 1610 |
+CONFIG_MOUSE_PS2_CYPRESS=y |
|
| 1611 |
+CONFIG_MOUSE_PS2_LIFEBOOK=y |
|
| 1612 |
+CONFIG_MOUSE_PS2_TRACKPOINT=y |
|
| 1613 | 1613 |
# CONFIG_MOUSE_PS2_ELANTECH is not set |
| 1614 | 1614 |
# CONFIG_MOUSE_PS2_SENTELIC is not set |
| 1615 | 1615 |
# CONFIG_MOUSE_PS2_TOUCHKIT is not set |
| 1616 |
-# CONFIG_MOUSE_PS2_FOCALTECH is not set |
|
| 1616 |
+CONFIG_MOUSE_PS2_FOCALTECH=y |
|
| 1617 | 1617 |
# CONFIG_MOUSE_PS2_VMMOUSE is not set |
| 1618 | 1618 |
# CONFIG_MOUSE_SERIAL is not set |
| 1619 | 1619 |
# CONFIG_MOUSE_APPLETOUCH is not set |
| ... | ... |
@@ -1688,7 +1689,6 @@ CONFIG_SERIAL_CORE=m |
| 1688 | 1688 |
# CONFIG_SERIAL_ARC is not set |
| 1689 | 1689 |
# CONFIG_SERIAL_RP2 is not set |
| 1690 | 1690 |
# CONFIG_SERIAL_FSL_LPUART is not set |
| 1691 |
-CONFIG_TTY_PRINTK=y |
|
| 1692 | 1691 |
# CONFIG_IPMI_HANDLER is not set |
| 1693 | 1692 |
# CONFIG_HW_RANDOM is not set |
| 1694 | 1693 |
# CONFIG_NVRAM is not set |
| ... | ... |
@@ -1890,7 +1890,8 @@ CONFIG_BCMA_POSSIBLE=y |
| 1890 | 1890 |
# Graphics support |
| 1891 | 1891 |
# |
| 1892 | 1892 |
# CONFIG_AGP is not set |
| 1893 |
-# CONFIG_VGA_ARB is not set |
|
| 1893 |
+CONFIG_VGA_ARB=y |
|
| 1894 |
+CONFIG_VGA_ARB_MAX_GPUS=16 |
|
| 1894 | 1895 |
# CONFIG_VGA_SWITCHEROO is not set |
| 1895 | 1896 |
|
| 1896 | 1897 |
# |
| ... | ... |
@@ -2093,12 +2094,6 @@ CONFIG_USB_HID=m |
| 2093 | 2093 |
# CONFIG_USB_HIDDEV is not set |
| 2094 | 2094 |
|
| 2095 | 2095 |
# |
| 2096 |
-# USB HID Boot Protocol drivers |
|
| 2097 |
-# |
|
| 2098 |
-# CONFIG_USB_KBD is not set |
|
| 2099 |
-# CONFIG_USB_MOUSE is not set |
|
| 2100 |
- |
|
| 2101 |
-# |
|
| 2102 | 2096 |
# I2C HID support |
| 2103 | 2097 |
# |
| 2104 | 2098 |
# CONFIG_I2C_HID is not set |
| ... | ... |
@@ -2115,7 +2110,6 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
| 2115 | 2115 |
CONFIG_USB_DEFAULT_PERSIST=y |
| 2116 | 2116 |
# CONFIG_USB_DYNAMIC_MINORS is not set |
| 2117 | 2117 |
# CONFIG_USB_OTG_WHITELIST is not set |
| 2118 |
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set |
|
| 2119 | 2118 |
# CONFIG_USB_OTG_FSM is not set |
| 2120 | 2119 |
# CONFIG_USB_ULPI_BUS is not set |
| 2121 | 2120 |
CONFIG_USB_MON=m |
| ... | ... |
@@ -2338,6 +2332,7 @@ CONFIG_VIRT_DRIVERS=y |
| 2338 | 2338 |
# Clock Source drivers |
| 2339 | 2339 |
# |
| 2340 | 2340 |
CONFIG_CLKEVT_I8253=y |
| 2341 |
+CONFIG_I8253_LOCK=y |
|
| 2341 | 2342 |
CONFIG_CLKBLD_I8253=y |
| 2342 | 2343 |
# CONFIG_ATMEL_PIT is not set |
| 2343 | 2344 |
# CONFIG_SH_TIMER_CMT is not set |
| ... | ... |
@@ -2497,7 +2492,7 @@ CONFIG_NETWORK_FILESYSTEMS=y |
| 2497 | 2497 |
CONFIG_NFS_FS=m |
| 2498 | 2498 |
CONFIG_NFS_V2=m |
| 2499 | 2499 |
CONFIG_NFS_V3=m |
| 2500 |
-# CONFIG_NFS_V3_ACL is not set |
|
| 2500 |
+CONFIG_NFS_V3_ACL=y |
|
| 2501 | 2501 |
CONFIG_NFS_V4=m |
| 2502 | 2502 |
# CONFIG_NFS_SWAP is not set |
| 2503 | 2503 |
CONFIG_NFS_V4_1=y |
| ... | ... |
@@ -2507,8 +2502,8 @@ CONFIG_PNFS_BLOCK=m |
| 2507 | 2507 |
CONFIG_PNFS_FLEXFILE_LAYOUT=m |
| 2508 | 2508 |
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" |
| 2509 | 2509 |
# CONFIG_NFS_V4_1_MIGRATION is not set |
| 2510 |
-# CONFIG_NFS_USE_LEGACY_DNS is not set |
|
| 2511 |
-CONFIG_NFS_USE_KERNEL_DNS=y |
|
| 2510 |
+CONFIG_NFS_USE_LEGACY_DNS=y |
|
| 2511 |
+CONFIG_NFS_DEBUG=y |
|
| 2512 | 2512 |
CONFIG_NFSD=m |
| 2513 | 2513 |
CONFIG_NFSD_V3=y |
| 2514 | 2514 |
# CONFIG_NFSD_V3_ACL is not set |
| ... | ... |
@@ -2518,11 +2513,12 @@ CONFIG_NFSD_PNFS=y |
| 2518 | 2518 |
CONFIG_GRACE_PERIOD=m |
| 2519 | 2519 |
CONFIG_LOCKD=m |
| 2520 | 2520 |
CONFIG_LOCKD_V4=y |
| 2521 |
+CONFIG_NFS_ACL_SUPPORT=m |
|
| 2521 | 2522 |
CONFIG_NFS_COMMON=y |
| 2522 | 2523 |
CONFIG_SUNRPC=m |
| 2523 | 2524 |
CONFIG_SUNRPC_GSS=m |
| 2524 | 2525 |
CONFIG_SUNRPC_BACKCHANNEL=y |
| 2525 |
-# CONFIG_SUNRPC_DEBUG is not set |
|
| 2526 |
+CONFIG_SUNRPC_DEBUG=y |
|
| 2526 | 2527 |
# CONFIG_CEPH_FS is not set |
| 2527 | 2528 |
CONFIG_CIFS=m |
| 2528 | 2529 |
# CONFIG_CIFS_STATS is not set |
| ... | ... |
@@ -2598,7 +2594,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 2598 | 2598 |
# |
| 2599 | 2599 |
CONFIG_PRINTK_TIME=y |
| 2600 | 2600 |
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 |
| 2601 |
-CONFIG_BOOT_PRINTK_DELAY=y |
|
| 2601 |
+# CONFIG_BOOT_PRINTK_DELAY is not set |
|
| 2602 | 2602 |
CONFIG_DYNAMIC_DEBUG=y |
| 2603 | 2603 |
|
| 2604 | 2604 |
# |
| ... | ... |
@@ -2616,10 +2612,9 @@ CONFIG_DEBUG_FS=y |
| 2616 | 2616 |
# CONFIG_HEADERS_CHECK is not set |
| 2617 | 2617 |
CONFIG_DEBUG_SECTION_MISMATCH=y |
| 2618 | 2618 |
CONFIG_ARCH_WANT_FRAME_POINTERS=y |
| 2619 |
-CONFIG_FRAME_POINTER=y |
|
| 2619 |
+# CONFIG_FRAME_POINTER is not set |
|
| 2620 | 2620 |
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set |
| 2621 |
-CONFIG_MAGIC_SYSRQ=y |
|
| 2622 |
-CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 |
|
| 2621 |
+# CONFIG_MAGIC_SYSRQ is not set |
|
| 2623 | 2622 |
CONFIG_DEBUG_KERNEL=y |
| 2624 | 2623 |
|
| 2625 | 2624 |
# |
| ... | ... |
@@ -2628,22 +2623,20 @@ CONFIG_DEBUG_KERNEL=y |
| 2628 | 2628 |
# CONFIG_PAGE_EXTENSION is not set |
| 2629 | 2629 |
# CONFIG_DEBUG_PAGEALLOC is not set |
| 2630 | 2630 |
# CONFIG_DEBUG_OBJECTS is not set |
| 2631 |
-# CONFIG_SLUB_DEBUG_ON is not set |
|
| 2632 |
-# CONFIG_SLUB_STATS is not set |
|
| 2631 |
+# CONFIG_DEBUG_SLAB is not set |
|
| 2633 | 2632 |
CONFIG_HAVE_DEBUG_KMEMLEAK=y |
| 2634 | 2633 |
# CONFIG_DEBUG_KMEMLEAK is not set |
| 2635 | 2634 |
# CONFIG_DEBUG_STACK_USAGE is not set |
| 2636 | 2635 |
# CONFIG_DEBUG_VM is not set |
| 2637 | 2636 |
# CONFIG_DEBUG_VIRTUAL is not set |
| 2638 |
-# CONFIG_DEBUG_MEMORY_INIT is not set |
|
| 2637 |
+CONFIG_DEBUG_MEMORY_INIT=y |
|
| 2639 | 2638 |
# CONFIG_DEBUG_PER_CPU_MAPS is not set |
| 2640 | 2639 |
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y |
| 2641 | 2640 |
# CONFIG_DEBUG_STACKOVERFLOW is not set |
| 2642 | 2641 |
CONFIG_HAVE_ARCH_KMEMCHECK=y |
| 2643 | 2642 |
# CONFIG_KMEMCHECK is not set |
| 2644 | 2643 |
CONFIG_HAVE_ARCH_KASAN=y |
| 2645 |
-# CONFIG_KASAN is not set |
|
| 2646 |
-CONFIG_DEBUG_SHIRQ=y |
|
| 2644 |
+# CONFIG_DEBUG_SHIRQ is not set |
|
| 2647 | 2645 |
|
| 2648 | 2646 |
# |
| 2649 | 2647 |
# Debug Lockups and Hangs |
| ... | ... |
@@ -2656,9 +2649,9 @@ CONFIG_PANIC_TIMEOUT=0 |
| 2656 | 2656 |
CONFIG_SCHED_DEBUG=y |
| 2657 | 2657 |
CONFIG_SCHED_INFO=y |
| 2658 | 2658 |
CONFIG_SCHEDSTATS=y |
| 2659 |
-CONFIG_SCHED_STACK_END_CHECK=y |
|
| 2659 |
+# CONFIG_SCHED_STACK_END_CHECK is not set |
|
| 2660 | 2660 |
# CONFIG_DEBUG_TIMEKEEPING is not set |
| 2661 |
-CONFIG_TIMER_STATS=y |
|
| 2661 |
+# CONFIG_TIMER_STATS is not set |
|
| 2662 | 2662 |
|
| 2663 | 2663 |
# |
| 2664 | 2664 |
# Lock Debugging (spinlocks, mutexes, etc...) |
| ... | ... |
@@ -2690,13 +2683,13 @@ CONFIG_DEBUG_BUGVERBOSE=y |
| 2690 | 2690 |
# CONFIG_TORTURE_TEST is not set |
| 2691 | 2691 |
# CONFIG_RCU_TORTURE_TEST is not set |
| 2692 | 2692 |
CONFIG_RCU_CPU_STALL_TIMEOUT=60 |
| 2693 |
-# CONFIG_RCU_CPU_STALL_INFO is not set |
|
| 2693 |
+CONFIG_RCU_CPU_STALL_INFO=y |
|
| 2694 | 2694 |
# CONFIG_RCU_TRACE is not set |
| 2695 | 2695 |
# CONFIG_RCU_EQS_DEBUG is not set |
| 2696 | 2696 |
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
| 2697 | 2697 |
# CONFIG_NOTIFIER_ERROR_INJECTION is not set |
| 2698 | 2698 |
# CONFIG_FAULT_INJECTION is not set |
| 2699 |
-CONFIG_LATENCYTOP=y |
|
| 2699 |
+# CONFIG_LATENCYTOP is not set |
|
| 2700 | 2700 |
CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y |
| 2701 | 2701 |
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set |
| 2702 | 2702 |
CONFIG_USER_STACKTRACE_SUPPORT=y |
| ... | ... |
@@ -2738,14 +2731,14 @@ CONFIG_TRACING_SUPPORT=y |
| 2738 | 2738 |
CONFIG_HAVE_ARCH_KGDB=y |
| 2739 | 2739 |
# CONFIG_KGDB is not set |
| 2740 | 2740 |
CONFIG_STRICT_DEVMEM=y |
| 2741 |
-CONFIG_X86_VERBOSE_BOOTUP=y |
|
| 2741 |
+# CONFIG_X86_VERBOSE_BOOTUP is not set |
|
| 2742 | 2742 |
CONFIG_EARLY_PRINTK=y |
| 2743 | 2743 |
# CONFIG_EARLY_PRINTK_DBGP is not set |
| 2744 | 2744 |
# CONFIG_EARLY_PRINTK_EFI is not set |
| 2745 | 2745 |
# CONFIG_X86_PTDUMP is not set |
| 2746 | 2746 |
CONFIG_DEBUG_RODATA=y |
| 2747 | 2747 |
# CONFIG_DEBUG_RODATA_TEST is not set |
| 2748 |
-CONFIG_DEBUG_SET_MODULE_RONX=y |
|
| 2748 |
+# CONFIG_DEBUG_SET_MODULE_RONX is not set |
|
| 2749 | 2749 |
# CONFIG_DEBUG_NX_TEST is not set |
| 2750 | 2750 |
CONFIG_DOUBLEFAULT=y |
| 2751 | 2751 |
# CONFIG_DEBUG_TLBFLUSH is not set |
| ... | ... |
@@ -2755,12 +2748,12 @@ CONFIG_IO_DELAY_TYPE_0X80=0 |
| 2755 | 2755 |
CONFIG_IO_DELAY_TYPE_0XED=1 |
| 2756 | 2756 |
CONFIG_IO_DELAY_TYPE_UDELAY=2 |
| 2757 | 2757 |
CONFIG_IO_DELAY_TYPE_NONE=3 |
| 2758 |
-CONFIG_IO_DELAY_0X80=y |
|
| 2758 |
+# CONFIG_IO_DELAY_0X80 is not set |
|
| 2759 | 2759 |
# CONFIG_IO_DELAY_0XED is not set |
| 2760 | 2760 |
# CONFIG_IO_DELAY_UDELAY is not set |
| 2761 |
-# CONFIG_IO_DELAY_NONE is not set |
|
| 2762 |
-CONFIG_DEFAULT_IO_DELAY_TYPE=0 |
|
| 2763 |
-CONFIG_DEBUG_BOOT_PARAMS=y |
|
| 2761 |
+CONFIG_IO_DELAY_NONE=y |
|
| 2762 |
+CONFIG_DEFAULT_IO_DELAY_TYPE=3 |
|
| 2763 |
+# CONFIG_DEBUG_BOOT_PARAMS is not set |
|
| 2764 | 2764 |
# CONFIG_CPA_DEBUG is not set |
| 2765 | 2765 |
# CONFIG_OPTIMIZE_INLINING is not set |
| 2766 | 2766 |
# CONFIG_DEBUG_ENTRY is not set |
| ... | ... |
@@ -2,7 +2,7 @@ |
| 2 | 2 |
Summary: Kernel |
| 3 | 3 |
Name: linux-esx |
| 4 | 4 |
Version: 4.2.0 |
| 5 |
-Release: 17%{?dist}
|
|
| 5 |
+Release: 18%{?dist}
|
|
| 6 | 6 |
License: GPLv2 |
| 7 | 7 |
URL: http://www.kernel.org/ |
| 8 | 8 |
Group: System Environment/Kernel |
| ... | ... |
@@ -15,12 +15,16 @@ Patch0: RDS-race-condition-on-unbound-socket-null-deref.patch |
| 15 | 15 |
Patch1: KEYS-Fix-keyring-ref-leak-in-join_session_keyring.patch |
| 16 | 16 |
Patch2: ovl-fix-permission-checking-for-setattr.patch |
| 17 | 17 |
Patch3: double-tcp_mem-limits.patch |
| 18 |
-Patch4: veth-do-not-modify-ip_summed.patch |
|
| 19 |
-Patch5: 01-clear-linux.patch |
|
| 20 |
-Patch6: 02-pci-probe.patch |
|
| 21 |
-Patch7: 03-poweroff.patch |
|
| 22 |
-Patch8: 04-quiet-boot.patch |
|
| 23 |
-Patch9: 05-pv-ops.patch |
|
| 18 |
+Patch4: veth-do-not-modify-ip_summed.patch |
|
| 19 |
+Patch5: sysctl-sched_weighted_cpuload_uses_rla.patch |
|
| 20 |
+Patch6: watchdog-Disable-watchdog-on-virtual-machines.patch |
|
| 21 |
+Patch7: SUNRPC-Ensure-that-we-wait-for-connections-to-comple.patch |
|
| 22 |
+Patch8: SUNRPC-Do-not-reuse-srcport-for-TIME_WAIT-socket.patch |
|
| 23 |
+Patch9: 01-clear-linux.patch |
|
| 24 |
+Patch10: 02-pci-probe.patch |
|
| 25 |
+Patch11: 03-poweroff.patch |
|
| 26 |
+Patch12: 04-quiet-boot.patch |
|
| 27 |
+Patch13: 05-pv-ops.patch |
|
| 24 | 28 |
BuildRequires: bc |
| 25 | 29 |
BuildRequires: kbd |
| 26 | 30 |
BuildRequires: kmod |
| ... | ... |
@@ -65,6 +69,10 @@ The Linux package contains the Linux kernel doc files |
| 65 | 65 |
%patch7 -p1 |
| 66 | 66 |
%patch8 -p1 |
| 67 | 67 |
%patch9 -p1 |
| 68 |
+%patch10 -p1 |
|
| 69 |
+%patch11 -p1 |
|
| 70 |
+%patch12 -p1 |
|
| 71 |
+%patch13 -p1 |
|
| 68 | 72 |
|
| 69 | 73 |
%build |
| 70 | 74 |
make mrproper |
| ... | ... |
@@ -130,6 +138,10 @@ ln -sf %{name}-%{version}-%{release}.cfg /boot/photon.cfg
|
| 130 | 130 |
/usr/src/%{name}-headers-%{version}-%{release}
|
| 131 | 131 |
|
| 132 | 132 |
%changelog |
| 133 |
+* Thu Mar 24 2016 Alexey Makhalov <amakhalov@vmware.com> 4.2.0-18 |
|
| 134 |
+- Apply photon8 config (+stack protector regular) |
|
| 135 |
+- pv-ops patch: added STA support |
|
| 136 |
+- Added patches from generic kernel |
|
| 133 | 137 |
* Tue Mar 09 2016 Harish Udaiya Kumar <hudaiyakumar@vmware.com> 4.2.0-17 |
| 134 | 138 |
- Enable ACPI hotplug support in kernel config |
| 135 | 139 |
* Sun Feb 14 2016 Alexey Makhalov <amakhalov@vmware.com> 4.2.0-16 |