- New pci=scan_all cmdline parameter to verify hardcoded pci-probe values
- pci-probe added more known values
- vmw_balloon late initcall
- make all patches `git am` compatible
Plus kernel version was updated to 4.9.27
Change-Id: Id342243b21d4ff2e52240129271f127df27b0be9
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/2666
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Bo Gan <ganb@vmware.com>
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
Summary: Linux API header files |
2 | 2 |
Name: linux-api-headers |
3 |
-Version: 4.9.26 |
|
3 |
+Version: 4.9.27 |
|
4 | 4 |
Release: 1%{?dist} |
5 | 5 |
License: GPLv2 |
6 | 6 |
URL: http://www.kernel.org/ |
... | ... |
@@ -8,7 +8,7 @@ Group: System Environment/Kernel |
8 | 8 |
Vendor: VMware, Inc. |
9 | 9 |
Distribution: Photon |
10 | 10 |
Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.xz |
11 |
-%define sha1 linux=b244ab8ee3d7a0385c7bc1b1dc1d55f0920df997 |
|
11 |
+%define sha1 linux=d248ff518f822d4324a482a39f3159b1ee86cc84 |
|
12 | 12 |
BuildArch: noarch |
13 | 13 |
%description |
14 | 14 |
The Linux API Headers expose the kernel's API for use by Glibc. |
... | ... |
@@ -25,6 +25,8 @@ find /%{buildroot}%{_includedir} \( -name .install -o -name ..install.cmd \) -de |
25 | 25 |
%defattr(-,root,root) |
26 | 26 |
%{_includedir}/* |
27 | 27 |
%changelog |
28 |
+* Wed May 10 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.27-1 |
|
29 |
+- Update to linux-4.9.27 |
|
28 | 30 |
* Sun May 7 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.26-1 |
29 | 31 |
- Update to linux-4.9.26 |
30 | 32 |
* Tue Apr 25 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.24-1 |
... | ... |
@@ -1,5 +1,17 @@ |
1 |
+From 7d80ae3e4f1dd73fb61010e5a84135d3e92ba47e Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:26:58 -0700 |
|
4 |
+Subject: [PATCH] Patch from Clear Linux |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ drivers/video/console/fbcon.c | 2 +- |
|
8 |
+ include/linux/blkdev.h | 2 +- |
|
9 |
+ init/do_mounts.c | 4 +++- |
|
10 |
+ mm/vmstat.c | 2 +- |
|
11 |
+ 4 files changed, 6 insertions(+), 4 deletions(-) |
|
12 |
+ |
|
1 | 13 |
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c |
2 |
-index 92f3949..4ff61d7 100644 |
|
14 |
+index 4db10d7990c9..1f84959cc87e 100644 |
|
3 | 15 |
--- a/drivers/video/console/fbcon.c |
4 | 16 |
+++ b/drivers/video/console/fbcon.c |
5 | 17 |
@@ -146,7 +146,7 @@ static const struct consw fb_con; |
... | ... |
@@ -12,10 +24,10 @@ index 92f3949..4ff61d7 100644 |
12 | 12 |
#define divides(a, b) ((!(a) || (b)%(a)) ? 0 : 1) |
13 | 13 |
|
14 | 14 |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h |
15 |
-index c70e358..72f56a8 100644 |
|
15 |
+index f6a816129856..f4fb458a91dd 100644 |
|
16 | 16 |
--- a/include/linux/blkdev.h |
17 | 17 |
+++ b/include/linux/blkdev.h |
18 |
-@@ -38,7 +38,7 @@ struct blk_flush_queue; |
|
18 |
+@@ -39,7 +39,7 @@ struct blk_flush_queue; |
|
19 | 19 |
struct pr_ops; |
20 | 20 |
|
21 | 21 |
#define BLKDEV_MIN_RQ 4 |
... | ... |
@@ -25,7 +37,7 @@ index c70e358..72f56a8 100644 |
25 | 25 |
/* |
26 | 26 |
* Maximum number of blkcg policies allowed to be registered concurrently. |
27 | 27 |
diff --git a/init/do_mounts.c b/init/do_mounts.c |
28 |
-index dea5de9..da84094 100644 |
|
28 |
+index dea5de95c2dd..da840946d90b 100644 |
|
29 | 29 |
--- a/init/do_mounts.c |
30 | 30 |
+++ b/init/do_mounts.c |
31 | 31 |
@@ -28,6 +28,7 @@ |
... | ... |
@@ -47,10 +59,10 @@ index dea5de9..da84094 100644 |
47 | 47 |
md_run_setup(); |
48 | 48 |
|
49 | 49 |
diff --git a/mm/vmstat.c b/mm/vmstat.c |
50 |
-index c54fd29..f0baa1a 100644 |
|
50 |
+index 604f26a4f696..bfbbcd76df57 100644 |
|
51 | 51 |
--- a/mm/vmstat.c |
52 | 52 |
+++ b/mm/vmstat.c |
53 |
-@@ -1381,7 +1381,7 @@ static const struct file_operations proc_vmstat_file_operations = { |
|
53 |
+@@ -1549,7 +1549,7 @@ static const struct file_operations proc_vmstat_file_operations = { |
|
54 | 54 |
#ifdef CONFIG_SMP |
55 | 55 |
static struct workqueue_struct *vmstat_wq; |
56 | 56 |
static DEFINE_PER_CPU(struct delayed_work, vmstat_work); |
... | ... |
@@ -60,5 +72,5 @@ index c54fd29..f0baa1a 100644 |
60 | 60 |
#ifdef CONFIG_PROC_FS |
61 | 61 |
static void refresh_vm_stats(struct work_struct *work) |
62 | 62 |
-- |
63 |
-1.9.1 |
|
63 |
+2.11.0 |
|
64 | 64 |
|
... | ... |
@@ -1,20 +1,55 @@ |
1 |
-From a2d9f1f747247f31f769930a8198b12a0667d21f Mon Sep 17 00:00:00 2001 |
|
1 |
+From c6e73db5fafa151b81a969a74c3138488a4310fa Mon Sep 17 00:00:00 2001 |
|
2 | 2 |
From: Alexey Makhalov <amakhalov@vmware.com> |
3 | 3 |
Date: Tue, 29 Sep 2015 15:55:49 -0700 |
4 | 4 |
Subject: [PATCH] pci/probe.c: Hardcodded pci probe. |
5 | 5 |
|
6 |
+Added pci=scan_all cmdline parameter to verify hardcodded pci values |
|
6 | 7 |
--- |
7 |
- drivers/pci/probe.c | 312 +++++++++++++++++++++++++++++++++++++++++++++++++++- |
|
8 |
- 1 file changed, 310 insertions(+), 2 deletions(-) |
|
8 |
+ drivers/pci/pci.c | 2 + |
|
9 |
+ drivers/pci/pci.h | 2 + |
|
10 |
+ drivers/pci/probe.c | 377 +++++++++++++++++++++++++++++++++++++++++++++++++++- |
|
11 |
+ 3 files changed, 377 insertions(+), 4 deletions(-) |
|
9 | 12 |
|
13 |
+diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c |
|
14 |
+index 6922964e3dff..e4db16e7c1d2 100644 |
|
15 |
+--- a/drivers/pci/pci.c |
|
16 |
+@@ -5303,6 +5303,8 @@ static int __init pci_setup(char *str) |
|
17 |
+ pcie_bus_config = PCIE_BUS_PEER2PEER; |
|
18 |
+ } else if (!strncmp(str, "pcie_scan_all", 13)) { |
|
19 |
+ pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS); |
|
20 |
++ } else if (!strncmp(str, "scan_all", 8)) { |
|
21 |
++ pci_scan_all(); |
|
22 |
+ } else { |
|
23 |
+ printk(KERN_ERR "PCI: Unknown option `%s'\n", |
|
24 |
+ str); |
|
25 |
+diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h |
|
26 |
+index a5d37f6a9fb5..aaa456c9bf95 100644 |
|
27 |
+--- a/drivers/pci/pci.h |
|
28 |
+@@ -163,6 +163,8 @@ void pci_no_msi(void); |
|
29 |
+ static inline void pci_no_msi(void) { } |
|
30 |
+ #endif |
|
31 |
+ |
|
32 |
++void pci_scan_all(void); |
|
33 |
++ |
|
34 |
+ static inline void pci_msi_set_enable(struct pci_dev *dev, int enable) |
|
35 |
+ { |
|
36 |
+ u16 control; |
|
10 | 37 |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c |
11 |
-index edb1984..522bdaa 100644 |
|
38 |
+index d266d800f246..11544ddd6e5c 100644 |
|
12 | 39 |
--- a/drivers/pci/probe.c |
13 | 40 |
+++ b/drivers/pci/probe.c |
14 |
-@@ -162,6 +162,281 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar) |
|
41 |
+@@ -163,6 +163,346 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar) |
|
15 | 42 |
|
16 | 43 |
#define PCI_COMMAND_DECODE_ENABLE (PCI_COMMAND_MEMORY | PCI_COMMAND_IO) |
17 | 44 |
|
45 |
++static int pci_scan_and_verify = 0; |
|
46 |
++ |
|
47 |
++void pci_scan_all(void) |
|
48 |
++{ |
|
49 |
++ pci_scan_and_verify = 1; |
|
50 |
++} |
|
18 | 51 |
+ |
19 | 52 |
+/* shortcut version of __pci_read_base where we know the sizes already */ |
20 | 53 |
+int __pci_read_base_shortcut(struct pci_dev *dev, enum pci_bar_type type, |
... | ... |
@@ -58,7 +93,8 @@ index edb1984..522bdaa 100644 |
58 | 58 |
+ mask64 = (u32)PCI_BASE_ADDRESS_MEM_MASK; |
59 | 59 |
+ } |
60 | 60 |
+ } else { |
61 |
-+ res->flags |= (l & IORESOURCE_ROM_ENABLE); |
|
61 |
++ if (l & PCI_ROM_ADDRESS_ENABLE) |
|
62 |
++ res->flags |= IORESOURCE_ROM_ENABLE; |
|
62 | 63 |
+ l64 = l & PCI_ROM_ADDRESS_MASK; |
63 | 64 |
+ sz64 = sz & PCI_ROM_ADDRESS_MASK; |
64 | 65 |
+ mask64 = (u32)PCI_ROM_ADDRESS_MASK; |
... | ... |
@@ -142,6 +178,35 @@ index edb1984..522bdaa 100644 |
142 | 142 |
+ return (res->flags & IORESOURCE_MEM_64) ? 1 : 0; |
143 | 143 |
+} |
144 | 144 |
+ |
145 |
++static int guess_bar_count(int class) |
|
146 |
++{ |
|
147 |
++ if (class == 0x088000) |
|
148 |
++ return 2; |
|
149 |
++ if (class == 0x068000) |
|
150 |
++ return 0; |
|
151 |
++ if (class == 0x060100) |
|
152 |
++ return 0; |
|
153 |
++ if (class == 0x060000) |
|
154 |
++ return 0; |
|
155 |
++ if (class == 0x030000) |
|
156 |
++ return 3; |
|
157 |
++ if (class == 0x020000 || class == 0x010000) |
|
158 |
++ return 4; |
|
159 |
++ if (class == 0x00ff00) |
|
160 |
++ return 1; |
|
161 |
++ return 6; |
|
162 |
++} |
|
163 |
++ |
|
164 |
++static int has_rom(int class, int rom) |
|
165 |
++{ |
|
166 |
++ if (class == 0x088000 || |
|
167 |
++ class == 0x060100 || |
|
168 |
++ class == 0x060000 || |
|
169 |
++ class == 0x00ff00) |
|
170 |
++ return 0; |
|
171 |
++ return rom; |
|
172 |
++} |
|
173 |
++ |
|
145 | 174 |
+static int is_known_device(struct pci_dev *dev, int pos, int *sz) |
146 | 175 |
+{ |
147 | 176 |
+ switch (dev->vendor) { |
... | ... |
@@ -192,8 +257,9 @@ index edb1984..522bdaa 100644 |
192 | 192 |
+ *sz = 0xfffffff1; |
193 | 193 |
+ return 1; |
194 | 194 |
+ case 0x14: |
195 |
-+ *sz = 0xfc000000; |
|
196 |
-+ return 1; |
|
195 |
++ /* variable mem size */ |
|
196 |
++ *sz = 0xffffffff; |
|
197 |
++ return 0; |
|
197 | 198 |
+ case 0x18: |
198 | 199 |
+ *sz = 0xff800000; |
199 | 200 |
+ return 1; |
... | ... |
@@ -215,7 +281,7 @@ index edb1984..522bdaa 100644 |
215 | 215 |
+ *sz = 0xffffffc1; |
216 | 216 |
+ return 1; |
217 | 217 |
+ case 0x14: |
218 |
-+ *sz = 0xffffe000; |
|
218 |
++ *sz = 0xffffe004; |
|
219 | 219 |
+ return 1; |
220 | 220 |
+ case 0x1c: |
221 | 221 |
+ case 0x20: |
... | ... |
@@ -286,19 +352,55 @@ index edb1984..522bdaa 100644 |
286 | 286 |
+ } |
287 | 287 |
+ break; |
288 | 288 |
+ |
289 |
++ /* SCSI storage controller */ |
|
290 |
++ case 0x1000: |
|
291 |
++ switch (dev->device) { |
|
292 |
++ /* LSI Logic */ |
|
293 |
++ case 0x0030: |
|
294 |
++ switch (pos) { |
|
295 |
++ case 0x10: |
|
296 |
++ *sz = 0xff01; |
|
297 |
++ return 1; |
|
298 |
++ case 0x14: |
|
299 |
++ *sz = 0xfffe0004; |
|
300 |
++ return 1; |
|
301 |
++ case 0x1c: |
|
302 |
++ *sz = 0xfffe0004; |
|
303 |
++ return 1; |
|
304 |
++ case 0x18: |
|
305 |
++ case 0x20: |
|
306 |
++ case 0x24: |
|
307 |
++ *sz = 0; /* Not implemented */ |
|
308 |
++ return 1; |
|
309 |
++ case 0x30: |
|
310 |
++ *sz = 0xffffc000; |
|
311 |
++ return 1; |
|
312 |
++ } |
|
313 |
++ break; |
|
314 |
++ } |
|
315 |
++ break; |
|
289 | 316 |
+ } |
317 |
++ *sz = 0xffffffff; |
|
290 | 318 |
+ return 0; |
291 | 319 |
+} |
292 | 320 |
+ |
293 | 321 |
/** |
294 | 322 |
* pci_read_base - read a PCI BAR |
295 | 323 |
* @dev: the PCI device |
296 |
-@@ -181,6 +456,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
|
324 |
+@@ -175,13 +515,20 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar) |
|
325 |
+ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
|
326 |
+ struct resource *res, unsigned int pos) |
|
327 |
+ { |
|
328 |
+- u32 l, sz, mask; |
|
329 |
++ u32 l, sz, known_sz, mask; |
|
330 |
+ u64 l64, sz64, mask64; |
|
331 |
+ u16 orig_cmd; |
|
332 |
+ struct pci_bus_region region, inverted_region; |
|
297 | 333 |
|
298 | 334 |
mask = type ? PCI_ROM_ADDRESS_MASK : ~0; |
299 | 335 |
|
300 |
-+ if (is_known_device(dev, pos, &sz)) |
|
301 |
-+ return __pci_read_base_shortcut(dev, type, res, pos, sz, 0); |
|
336 |
++ if (is_known_device(dev, pos, &known_sz) && !pci_scan_and_verify) |
|
337 |
++ return __pci_read_base_shortcut(dev, type, res, pos, known_sz, 0); |
|
302 | 338 |
+ |
303 | 339 |
+ res->name = pci_name(dev); |
304 | 340 |
+ |
... | ... |
@@ -307,7 +409,7 @@ index edb1984..522bdaa 100644 |
307 | 307 |
/* No printks while decoding is disabled! */ |
308 | 308 |
if (!dev->mmio_always_on) { |
309 | 309 |
pci_read_config_word(dev, PCI_COMMAND, &orig_cmd); |
310 |
-@@ -190,7 +472,6 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
|
310 |
+@@ -191,7 +538,6 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
|
311 | 311 |
} |
312 | 312 |
} |
313 | 313 |
|
... | ... |
@@ -315,56 +417,55 @@ index edb1984..522bdaa 100644 |
315 | 315 |
|
316 | 316 |
pci_read_config_dword(dev, pos, &l); |
317 | 317 |
pci_write_config_dword(dev, pos, l | mask); |
318 |
-@@ -1145,6 +1426,28 @@ int pci_cfg_space_size(struct pci_dev *dev) |
|
318 |
+@@ -207,6 +553,11 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
|
319 |
+ if (sz == 0xffffffff) |
|
320 |
+ sz = 0; |
|
319 | 321 |
|
320 |
- #define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED) |
|
321 |
- |
|
322 |
-+static int guess_bar_count(int class) |
|
323 |
-+{ |
|
324 |
-+ if (class == 0x068000) |
|
325 |
-+ return 0; |
|
326 |
-+ if (class == 0x020000) |
|
327 |
-+ return 3; |
|
328 |
-+ if (class == 0x010000) |
|
329 |
-+ return 2; |
|
330 |
-+ if (class == 0x00ff00) |
|
331 |
-+ return 1; |
|
332 |
-+ return 6; |
|
333 |
-+} |
|
322 |
++ if (pci_scan_and_verify && known_sz != 0xffffffff && known_sz != sz) |
|
323 |
++ dev_err(&dev->dev, |
|
324 |
++ "wrong known bar size: %x != %x\n", |
|
325 |
++ known_sz, sz); |
|
334 | 326 |
+ |
335 |
-+static int has_rom(int class, int rom) |
|
336 |
-+{ |
|
337 |
-+ if (class == 0x020000) |
|
338 |
-+ return 0; |
|
339 |
-+ if (class == 0x010000 || class == 0x00ff00) |
|
340 |
-+ return 0; |
|
341 |
-+ return rom; |
|
342 |
-+} |
|
343 |
-+ |
|
344 |
- static void pci_msi_setup_pci_dev(struct pci_dev *dev) |
|
345 |
- { |
|
346 | 327 |
/* |
347 |
-@@ -1178,6 +1481,7 @@ int pci_setup_device(struct pci_dev *dev) |
|
348 |
- int pos = 0; |
|
349 |
- struct pci_bus_region region; |
|
350 |
- struct resource *res; |
|
351 |
-+ int maxbar; |
|
328 |
+ * I don't know how l can have all bits set. Copied from old code. |
|
329 |
+ * Maybe it fixes a bug on some ancient platform. |
|
330 |
+@@ -311,8 +662,19 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
|
331 |
+ fail: |
|
332 |
+ res->flags = 0; |
|
333 |
+ out: |
|
334 |
+- if (res->flags) |
|
335 |
++ if (res->flags) { |
|
336 |
+ dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res); |
|
337 |
++ if (pci_scan_and_verify) { |
|
338 |
++ int bar = (pos - PCI_BASE_ADDRESS_0) >> 2; |
|
339 |
++ int maxbar = guess_bar_count(dev->class); |
|
340 |
++ if (bar < 6 && bar >= maxbar) |
|
341 |
++ dev_err(&dev->dev, |
|
342 |
++ "wrong guess_bar_count value %d\n", |
|
343 |
++ maxbar); |
|
344 |
++ if (pos == PCI_ROM_ADDRESS && !has_rom(dev->class, 1)) |
|
345 |
++ dev_err(&dev->dev, "wrong has_rom value\n"); |
|
346 |
++ } |
|
347 |
++ } |
|
352 | 348 |
|
353 |
- if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type)) |
|
354 |
- return -EIO; |
|
355 |
-@@ -1224,7 +1528,11 @@ int pci_setup_device(struct pci_dev *dev) |
|
349 |
+ return (res->flags & IORESOURCE_MEM_64) ? 1 : 0; |
|
350 |
+ } |
|
351 |
+@@ -1265,7 +1627,14 @@ int pci_setup_device(struct pci_dev *dev) |
|
356 | 352 |
if (class == PCI_CLASS_BRIDGE_PCI) |
357 | 353 |
goto bad; |
358 | 354 |
pci_read_irq(dev); |
359 | 355 |
- pci_read_bases(dev, 6, PCI_ROM_ADDRESS); |
360 | 356 |
+ |
361 |
-+ maxbar = guess_bar_count(dev->class); |
|
357 |
++ if (pci_scan_and_verify) |
|
358 |
++ pci_read_bases(dev, 6, PCI_ROM_ADDRESS); |
|
359 |
++ else if (class != PCI_CLASS_STORAGE_IDE) |
|
360 |
++ pci_read_bases(dev, |
|
361 |
++ guess_bar_count(dev->class), |
|
362 |
++ has_rom(dev->class, PCI_ROM_ADDRESS)); |
|
362 | 363 |
+ |
363 |
-+ if (class != PCI_CLASS_STORAGE_IDE) |
|
364 |
-+ pci_read_bases(dev, maxbar, has_rom(dev->class, PCI_ROM_ADDRESS)); |
|
365 | 364 |
pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor); |
366 | 365 |
pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device); |
367 | 366 |
|
368 | 367 |
-- |
369 |
-1.9.1 |
|
368 |
+2.11.0 |
|
370 | 369 |
|
... | ... |
@@ -1,5 +1,14 @@ |
1 |
+From 725ac7c54935bbff858092e2db302afe88062162 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:39:18 -0700 |
|
4 |
+Subject: [PATCH] x86/vmware: pv-ops clocksource |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ arch/x86/kernel/cpu/vmware.c | 21 +++++++++++++++++++++ |
|
8 |
+ 1 file changed, 21 insertions(+) |
|
9 |
+ |
|
1 | 10 |
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
2 |
-index c998fba..8129f99 100644 |
|
11 |
+index 70b8c4614e22..987ac571d16c 100644 |
|
3 | 12 |
--- a/arch/x86/kernel/cpu/vmware.c |
4 | 13 |
+++ b/arch/x86/kernel/cpu/vmware.c |
5 | 14 |
@@ -155,6 +155,26 @@ static void __init vmware_cyc2ns_setup(void) |
... | ... |
@@ -37,3 +46,6 @@ index c998fba..8129f99 100644 |
37 | 37 |
} |
38 | 38 |
#else |
39 | 39 |
#define vmware_paravirt_ops_setup() do {} while (0) |
40 |
+-- |
|
41 |
+2.11.0 |
|
42 |
+ |
... | ... |
@@ -1,5 +1,19 @@ |
1 |
+From b2ce2307e8547e420fcce9fbad46119814f7f810 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:39:57 -0700 |
|
4 |
+Subject: [PATCH] x86/vmware: pv-ops boot_clock |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ arch/x86/include/asm/paravirt.h | 5 +++++ |
|
8 |
+ arch/x86/include/asm/paravirt_types.h | 5 +++++ |
|
9 |
+ arch/x86/kernel/cpu/vmware.c | 24 +++++++++++++++++++++++- |
|
10 |
+ arch/x86/kernel/head_64.S | 8 ++++++++ |
|
11 |
+ arch/x86/kernel/paravirt.c | 7 +++++++ |
|
12 |
+ arch/x86/kernel/setup.c | 9 +++++++++ |
|
13 |
+ 6 files changed, 57 insertions(+), 1 deletion(-) |
|
14 |
+ |
|
1 | 15 |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h |
2 |
-index ce93281..3d4ba2a 100644 |
|
16 |
+index ce932812f142..3d4ba2a999cb 100644 |
|
3 | 17 |
--- a/arch/x86/include/asm/paravirt.h |
4 | 18 |
+++ b/arch/x86/include/asm/paravirt.h |
5 | 19 |
@@ -193,6 +193,11 @@ static inline u64 paravirt_steal_clock(int cpu) |
... | ... |
@@ -15,7 +29,7 @@ index ce93281..3d4ba2a 100644 |
15 | 15 |
{ |
16 | 16 |
return PVOP_CALL1(u64, pv_cpu_ops.read_pmc, counter); |
17 | 17 |
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h |
18 |
-index 0f400c0..5f09979 100644 |
|
18 |
+index 0f400c0e4979..5f09979f612d 100644 |
|
19 | 19 |
--- a/arch/x86/include/asm/paravirt_types.h |
20 | 20 |
+++ b/arch/x86/include/asm/paravirt_types.h |
21 | 21 |
@@ -51,6 +51,10 @@ struct mm_struct; |
... | ... |
@@ -38,7 +52,7 @@ index 0f400c0..5f09979 100644 |
38 | 38 |
|
39 | 39 |
struct pv_cpu_ops { |
40 | 40 |
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
41 |
-index 8129f99..387ac46 100644 |
|
41 |
+index 987ac571d16c..0e1fc6e17efc 100644 |
|
42 | 42 |
--- a/arch/x86/kernel/cpu/vmware.c |
43 | 43 |
+++ b/arch/x86/kernel/cpu/vmware.c |
44 | 44 |
@@ -124,6 +124,7 @@ static struct kmsg_dumper kmsg_dumper = { |
... | ... |
@@ -94,7 +108,7 @@ index 8129f99..387ac46 100644 |
94 | 94 |
#else |
95 | 95 |
#define vmware_paravirt_ops_setup() do {} while (0) |
96 | 96 |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S |
97 |
-index b4421cc..f7b8017 100644 |
|
97 |
+index b4421cc191b0..f7b8017fa90a 100644 |
|
98 | 98 |
--- a/arch/x86/kernel/head_64.S |
99 | 99 |
+++ b/arch/x86/kernel/head_64.S |
100 | 100 |
@@ -184,6 +184,14 @@ ENTRY(secondary_startup_64) |
... | ... |
@@ -113,7 +127,7 @@ index b4421cc..f7b8017 100644 |
113 | 113 |
call verify_cpu |
114 | 114 |
|
115 | 115 |
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c |
116 |
-index bbf3d59..10bbdb3 100644 |
|
116 |
+index bbf3d5933eaa..10bbdb3e6651 100644 |
|
117 | 117 |
--- a/arch/x86/kernel/paravirt.c |
118 | 118 |
+++ b/arch/x86/kernel/paravirt.c |
119 | 119 |
@@ -203,6 +203,12 @@ static u64 native_steal_clock(int cpu) |
... | ... |
@@ -138,7 +152,7 @@ index bbf3d59..10bbdb3 100644 |
138 | 138 |
|
139 | 139 |
__visible struct pv_irq_ops pv_irq_ops = { |
140 | 140 |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c |
141 |
-index 9c337b0..67a42e5 100644 |
|
141 |
+index 9c337b0e8ba7..67a42e58b118 100644 |
|
142 | 142 |
--- a/arch/x86/kernel/setup.c |
143 | 143 |
+++ b/arch/x86/kernel/setup.c |
144 | 144 |
@@ -1302,3 +1302,12 @@ void arch_show_smap(struct seq_file *m, struct vm_area_struct *vma) |
... | ... |
@@ -154,3 +168,6 @@ index 9c337b0..67a42e5 100644 |
154 | 154 |
+ paravirt_read_boot_clock64(ts); |
155 | 155 |
+} |
156 | 156 |
+#endif |
157 |
+-- |
|
158 |
+2.11.0 |
|
159 |
+ |
... | ... |
@@ -1,8 +1,20 @@ |
1 |
+From ffb4b625e8b2f0ce0f31433564973eb2c80a7ef5 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:41:17 -0700 |
|
4 |
+Subject: [PATCH] vmware only |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ arch/x86/kernel/cpu/common.c | 2 ++ |
|
8 |
+ arch/x86/kernel/cpu/rdrand.c | 2 ++ |
|
9 |
+ arch/x86/kernel/cpu/vmware.c | 5 +++++ |
|
10 |
+ arch/x86/kernel/smpboot.c | 2 +- |
|
11 |
+ 4 files changed, 10 insertions(+), 1 deletion(-) |
|
12 |
+ |
|
1 | 13 |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c |
2 |
-index cc9e980..be408d4 100644 |
|
14 |
+index 4eece91ada37..5b8e45f48bf3 100644 |
|
3 | 15 |
--- a/arch/x86/kernel/cpu/common.c |
4 | 16 |
+++ b/arch/x86/kernel/cpu/common.c |
5 |
-@@ -1095,7 +1095,9 @@ static void identify_cpu(struct cpuinfo_x86 *c) |
|
17 |
+@@ -1089,7 +1089,9 @@ static void identify_cpu(struct cpuinfo_x86 *c) |
|
6 | 18 |
#endif |
7 | 19 |
|
8 | 20 |
init_hypervisor(c); |
... | ... |
@@ -13,7 +25,7 @@ index cc9e980..be408d4 100644 |
13 | 13 |
setup_pku(c); |
14 | 14 |
|
15 | 15 |
diff --git a/arch/x86/kernel/cpu/rdrand.c b/arch/x86/kernel/cpu/rdrand.c |
16 |
-index cfa97ff..e31cfe6 100644 |
|
16 |
+index cfa97ff67bda..e31cfe683da2 100644 |
|
17 | 17 |
--- a/arch/x86/kernel/cpu/rdrand.c |
18 | 18 |
+++ b/arch/x86/kernel/cpu/rdrand.c |
19 | 19 |
@@ -32,6 +32,7 @@ static int __init x86_rdrand_setup(char *s) |
... | ... |
@@ -30,7 +42,7 @@ index cfa97ff..e31cfe6 100644 |
30 | 30 |
#endif |
31 | 31 |
+#endif |
32 | 32 |
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
33 |
-index 387ac46..b9e3cad 100644 |
|
33 |
+index 0e1fc6e17efc..59e2cc6a70d2 100644 |
|
34 | 34 |
--- a/arch/x86/kernel/cpu/vmware.c |
35 | 35 |
+++ b/arch/x86/kernel/cpu/vmware.c |
36 | 36 |
@@ -30,6 +30,7 @@ |
... | ... |
@@ -53,10 +65,10 @@ index 387ac46..b9e3cad 100644 |
53 | 53 |
|
54 | 54 |
/* |
55 | 55 |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c |
56 |
-index 42f5eb7..693ba78 100644 |
|
56 |
+index 36171bcd91f8..f7f3d0b4b882 100644 |
|
57 | 57 |
--- a/arch/x86/kernel/smpboot.c |
58 | 58 |
+++ b/arch/x86/kernel/smpboot.c |
59 |
-@@ -690,7 +690,7 @@ wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip) |
|
59 |
+@@ -683,7 +683,7 @@ wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip) |
|
60 | 60 |
/* |
61 | 61 |
* Give the other CPU some time to accept the IPI. |
62 | 62 |
*/ |
... | ... |
@@ -65,3 +77,6 @@ index 42f5eb7..693ba78 100644 |
65 | 65 |
if (APIC_INTEGRATED(boot_cpu_apic_version)) { |
66 | 66 |
maxlvt = lapic_get_maxlvt(); |
67 | 67 |
if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ |
68 |
+-- |
|
69 |
+2.11.0 |
|
70 |
+ |
68 | 71 |
deleted file mode 100644 |
... | ... |
@@ -1,174 +0,0 @@ |
1 |
-From 63b0e9edceec10fa41ec33393a1515a5ff444277 Mon Sep 17 00:00:00 2001 |
|
2 |
-From: Mike Galbraith <umgwanakikbuti@gmail.com> |
|
3 |
-Date: Tue, 14 Jul 2015 17:39:50 +0200 |
|
4 |
-Subject: [PATCH] sched/fair: Beef up wake_wide() |
|
5 |
- |
|
6 |
-Josef Bacik reported that Facebook sees better performance with their |
|
7 |
-1:N load (1 dispatch/node, N workers/node) when carrying an old patch |
|
8 |
-to try very hard to wake to an idle CPU. While looking at wake_wide(), |
|
9 |
-I noticed that it doesn't pay attention to the wakeup of a many partner |
|
10 |
-waker, returning 1 only when waking one of its many partners. |
|
11 |
- |
|
12 |
-Correct that, letting explicit domain flags override the heuristic. |
|
13 |
- |
|
14 |
-While at it, adjust task_struct bits, we don't need a 64-bit counter. |
|
15 |
- |
|
16 |
-Tested-by: Josef Bacik <jbacik@fb.com> |
|
17 |
-Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com> |
|
18 |
-[ Tidy things up. ] |
|
19 |
-Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
|
20 |
-Cc: Linus Torvalds <torvalds@linux-foundation.org> |
|
21 |
-Cc: Mike Galbraith <efault@gmx.de> |
|
22 |
-Cc: Peter Zijlstra <peterz@infradead.org> |
|
23 |
-Cc: Thomas Gleixner <tglx@linutronix.de> |
|
24 |
-Cc: kernel-team<Kernel-team@fb.com> |
|
25 |
-Cc: morten.rasmussen@arm.com |
|
26 |
-Cc: riel@redhat.com |
|
27 |
-Link: http://lkml.kernel.org/r/1436888390.7983.49.camel@gmail.com |
|
28 |
-Signed-off-by: Ingo Molnar <mingo@kernel.org> |
|
29 |
- include/linux/sched.h | 4 +-- |
|
30 |
- kernel/sched/fair.c | 67 ++++++++++++++++++++++++++------------------------- |
|
31 |
- 2 files changed, 36 insertions(+), 35 deletions(-) |
|
32 |
- |
|
33 |
-diff --git b/include/linux/sched.h a/include/linux/sched.h |
|
34 |
-index 65a8a86..7412070 100644 |
|
35 |
-+++ a/include/linux/sched.h |
|
36 |
-@@ -1387,9 +1387,9 @@ struct task_struct { |
|
37 |
- #ifdef CONFIG_SMP |
|
38 |
- struct llist_node wake_entry; |
|
39 |
- int on_cpu; |
|
40 |
-- unsigned int wakee_flips; |
|
41 |
-- unsigned long wakee_flip_decay_ts; |
|
42 |
- struct task_struct *last_wakee; |
|
43 |
-+ unsigned long wakee_flips; |
|
44 |
-+ unsigned long wakee_flip_decay_ts; |
|
45 |
- |
|
46 |
- int wake_cpu; |
|
47 |
- #endif |
|
48 |
-diff --git b/kernel/sched/fair.c a/kernel/sched/fair.c |
|
49 |
-index ea23f9f..8b384b8d 100644 |
|
50 |
-+++ a/kernel/sched/fair.c |
|
51 |
-@@ -4659,29 +4659,26 @@ static long effective_load(struct task_group *tg, int cpu, long wl, long wg) |
|
52 |
- |
|
53 |
- #endif |
|
54 |
- |
|
55 |
--/* |
|
56 |
-- * Detect M:N waker/wakee relationships via a switching-frequency heuristic. |
|
57 |
-- * A waker of many should wake a different task than the one last awakened |
|
58 |
-- * at a frequency roughly N times higher than one of its wakees. In order |
|
59 |
-- * to determine whether we should let the load spread vs consolodating to |
|
60 |
-- * shared cache, we look for a minimum 'flip' frequency of llc_size in one |
|
61 |
-- * partner, and a factor of lls_size higher frequency in the other. With |
|
62 |
-- * both conditions met, we can be relatively sure that the relationship is |
|
63 |
-- * non-monogamous, with partner count exceeding socket size. Waker/wakee |
|
64 |
-- * being client/server, worker/dispatcher, interrupt source or whatever is |
|
65 |
-- * irrelevant, spread criteria is apparent partner count exceeds socket size. |
|
66 |
-- */ |
|
67 |
- static int wake_wide(struct task_struct *p) |
|
68 |
- { |
|
69 |
-- unsigned int master = current->wakee_flips; |
|
70 |
-- unsigned int slave = p->wakee_flips; |
|
71 |
- int factor = this_cpu_read(sd_llc_size); |
|
72 |
- |
|
73 |
-- if (master < slave) |
|
74 |
-- swap(master, slave); |
|
75 |
-- if (slave < factor || master < slave * factor) |
|
76 |
-- return 0; |
|
77 |
-- return 1; |
|
78 |
-+ /* |
|
79 |
-+ * Yeah, it's the switching-frequency, could means many wakee or |
|
80 |
-+ * rapidly switch, use factor here will just help to automatically |
|
81 |
-+ * adjust the loose-degree, so bigger node will lead to more pull. |
|
82 |
-+ */ |
|
83 |
-+ if (p->wakee_flips > factor) { |
|
84 |
-+ /* |
|
85 |
-+ * wakee is somewhat hot, it needs certain amount of cpu |
|
86 |
-+ * resource, so if waker is far more hot, prefer to leave |
|
87 |
-+ * it alone. |
|
88 |
-+ */ |
|
89 |
-+ if (current->wakee_flips > (factor * p->wakee_flips)) |
|
90 |
-+ return 1; |
|
91 |
-+ } |
|
92 |
-+ |
|
93 |
-+ return 0; |
|
94 |
- } |
|
95 |
- |
|
96 |
- static int wake_affine(struct sched_domain *sd, struct task_struct *p, int sync) |
|
97 |
-@@ -4693,6 +4690,13 @@ static int wake_affine(struct sched_domain *sd, struct task_struct *p, int sync) |
|
98 |
- unsigned long weight; |
|
99 |
- int balanced; |
|
100 |
- |
|
101 |
-+ /* |
|
102 |
-+ * If we wake multiple tasks be careful to not bounce |
|
103 |
-+ * ourselves around too much. |
|
104 |
-+ */ |
|
105 |
-+ if (wake_wide(p)) |
|
106 |
-+ return 0; |
|
107 |
-+ |
|
108 |
- idx = sd->wake_idx; |
|
109 |
- this_cpu = smp_processor_id(); |
|
110 |
- prev_cpu = task_cpu(p); |
|
111 |
-@@ -4953,17 +4957,17 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f |
|
112 |
- { |
|
113 |
- struct sched_domain *tmp, *affine_sd = NULL, *sd = NULL; |
|
114 |
- int cpu = smp_processor_id(); |
|
115 |
-- int new_cpu = prev_cpu; |
|
116 |
-+ int new_cpu = cpu; |
|
117 |
- int want_affine = 0; |
|
118 |
- int sync = wake_flags & WF_SYNC; |
|
119 |
- |
|
120 |
- if (sd_flag & SD_BALANCE_WAKE) |
|
121 |
-- want_affine = !wake_wide(p) && cpumask_test_cpu(cpu, tsk_cpus_allowed(p)); |
|
122 |
-+ want_affine = cpumask_test_cpu(cpu, tsk_cpus_allowed(p)); |
|
123 |
- |
|
124 |
- rcu_read_lock(); |
|
125 |
- for_each_domain(cpu, tmp) { |
|
126 |
- if (!(tmp->flags & SD_LOAD_BALANCE)) |
|
127 |
-- break; |
|
128 |
-+ continue; |
|
129 |
- |
|
130 |
- /* |
|
131 |
- * If both cpu and prev_cpu are part of this domain, |
|
132 |
-@@ -4977,21 +4981,17 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f |
|
133 |
- |
|
134 |
- if (tmp->flags & sd_flag) |
|
135 |
- sd = tmp; |
|
136 |
-- else if (!want_affine) |
|
137 |
-- break; |
|
138 |
- } |
|
139 |
- |
|
140 |
-- if (affine_sd) { |
|
141 |
-- sd = NULL; /* Prefer wake_affine over balance flags */ |
|
142 |
-- if (cpu != prev_cpu && wake_affine(affine_sd, p, sync)) |
|
143 |
-- new_cpu = cpu; |
|
144 |
-- } |
|
145 |
-+ if (affine_sd && cpu != prev_cpu && wake_affine(affine_sd, p, sync)) |
|
146 |
-+ prev_cpu = cpu; |
|
147 |
- |
|
148 |
-- if (!sd) { |
|
149 |
-- if (sd_flag & SD_BALANCE_WAKE) /* XXX always ? */ |
|
150 |
-- new_cpu = select_idle_sibling(p, new_cpu); |
|
151 |
-+ if (sd_flag & SD_BALANCE_WAKE) { |
|
152 |
-+ new_cpu = select_idle_sibling(p, prev_cpu); |
|
153 |
-+ goto unlock; |
|
154 |
-+ } |
|
155 |
- |
|
156 |
-- } else while (sd) { |
|
157 |
-+ while (sd) { |
|
158 |
- struct sched_group *group; |
|
159 |
- int weight; |
|
160 |
- |
|
161 |
-@@ -5025,6 +5025,7 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f |
|
162 |
- } |
|
163 |
- /* while loop will break here if sd == NULL */ |
|
164 |
- } |
|
165 |
-+unlock: |
|
166 |
- rcu_read_unlock(); |
|
167 |
- |
|
168 |
- return new_cpu; |
|
169 |
-1.9.1 |
|
170 |
- |
... | ... |
@@ -1,7 +1,17 @@ |
1 |
-diff -Naur a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c |
|
2 |
-+++ b/net/sunrpc/xprtsock.c 2016-09-01 15:06:02.939461738 -0700 |
|
3 |
-@@ -2333,6 +2333,7 @@ |
|
1 |
+From 440ba4f4203ab271cec9d02d799dd310caac7efd Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:36:15 -0700 |
|
4 |
+Subject: [PATCH] SUNRPC: Do not reuse srcport for TIME_WAIT socket |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ net/sunrpc/xprtsock.c | 1 + |
|
8 |
+ 1 file changed, 1 insertion(+) |
|
9 |
+ |
|
10 |
+diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c |
|
11 |
+index e01c825bc683..eff5a482f35a 100644 |
|
12 |
+--- a/net/sunrpc/xprtsock.c |
|
13 |
+@@ -2367,6 +2367,7 @@ static void xs_tcp_setup_socket(struct work_struct *work) |
|
4 | 14 |
/* We're probably in TIME_WAIT. Get rid of existing socket, |
5 | 15 |
* and retry |
6 | 16 |
*/ |
... | ... |
@@ -9,3 +19,6 @@ diff -Naur a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c |
9 | 9 |
xs_tcp_force_close(xprt); |
10 | 10 |
break; |
11 | 11 |
case 0: |
12 |
+-- |
|
13 |
+2.11.0 |
|
14 |
+ |
... | ... |
@@ -1,6 +1,17 @@ |
1 |
-+++ b/net/ipv4/tcp.c 2016-09-01 14:52:17.239459557 -0700 |
|
2 |
-@@ -3104,7 +3104,7 @@ |
|
1 |
+From d64863f3ff0a643b0c79c9d0a2b451b20ddd2912 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:32:51 -0700 |
|
4 |
+Subject: [PATCH] Double tcp_mem limits |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ net/ipv4/tcp.c | 2 +- |
|
8 |
+ 1 file changed, 1 insertion(+), 1 deletion(-) |
|
9 |
+ |
|
10 |
+diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c |
|
11 |
+index eb142ca71fc5..70068387dfab 100644 |
|
12 |
+--- a/net/ipv4/tcp.c |
|
13 |
+@@ -3272,7 +3272,7 @@ __setup("thash_entries=", set_thash_entries); |
|
3 | 14 |
|
4 | 15 |
static void __init tcp_init_mem(void) |
5 | 16 |
{ |
... | ... |
@@ -9,3 +20,6 @@ |
9 | 9 |
|
10 | 10 |
limit = max(limit, 128UL); |
11 | 11 |
sysctl_tcp_mem[0] = limit / 4 * 3; /* 4.68 % */ |
12 |
+-- |
|
13 |
+2.11.0 |
|
14 |
+ |
12 | 15 |
deleted file mode 100644 |
... | ... |
@@ -1,53 +0,0 @@ |
1 |
-diff -Naur a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h |
|
2 |
-+++ b/include/linux/sched/sysctl.h 2016-09-01 14:52:39.335459615 -0700 |
|
3 |
-@@ -39,6 +39,7 @@ |
|
4 |
- extern unsigned int sysctl_sched_min_granularity; |
|
5 |
- extern unsigned int sysctl_sched_wakeup_granularity; |
|
6 |
- extern unsigned int sysctl_sched_child_runs_first; |
|
7 |
-+extern unsigned int sysctl_sched_weighted_cpuload_uses_rla; |
|
8 |
- |
|
9 |
- enum sched_tunable_scaling { |
|
10 |
- SCHED_TUNABLESCALING_NONE, |
|
11 |
-diff -Naur a/kernel/sched/fair.c b/kernel/sched/fair.c |
|
12 |
-+++ b/kernel/sched/fair.c 2016-09-01 14:52:39.339459615 -0700 |
|
13 |
-@@ -35,6 +35,10 @@ |
|
14 |
- |
|
15 |
- #include "sched.h" |
|
16 |
- |
|
17 |
-+#ifdef CONFIG_SMP |
|
18 |
-+unsigned int sysctl_sched_weighted_cpuload_uses_rla = 1; |
|
19 |
-+#endif |
|
20 |
-+ |
|
21 |
- /* |
|
22 |
- * Targeted preemption latency for CPU-bound tasks: |
|
23 |
- * (default: 6ms * (1 + ilog(ncpus)), units: nanoseconds) |
|
24 |
-@@ -4360,7 +4364,9 @@ |
|
25 |
- /* Used instead of source_load when we know the type == 0 */ |
|
26 |
- static unsigned long weighted_cpuload(const int cpu) |
|
27 |
- { |
|
28 |
-- return cfs_rq_runnable_load_avg(&cpu_rq(cpu)->cfs); |
|
29 |
-+ if (sysctl_sched_weighted_cpuload_uses_rla) |
|
30 |
-+ return cfs_rq_runnable_load_avg(&cpu_rq(cpu)->cfs); |
|
31 |
-+ return cpu_rq(cpu)->load.weight; |
|
32 |
- } |
|
33 |
- |
|
34 |
- #ifdef CONFIG_NO_HZ_COMMON |
|
35 |
-diff -Naur a/kernel/sysctl.c b/kernel/sysctl.c |
|
36 |
-+++ b/kernel/sysctl.c 2016-09-01 14:52:39.339459615 -0700 |
|
37 |
-@@ -350,6 +350,13 @@ |
|
38 |
- .mode = 0644, |
|
39 |
- .proc_handler = proc_dointvec, |
|
40 |
- }, |
|
41 |
-+ { |
|
42 |
-+ .procname = "sched_weighted_cpuload_uses_rla", |
|
43 |
-+ .data = &sysctl_sched_weighted_cpuload_uses_rla, |
|
44 |
-+ .maxlen = sizeof(unsigned int), |
|
45 |
-+ .mode = 0644, |
|
46 |
-+ .proc_handler = proc_dointvec, |
|
47 |
-+ }, |
|
48 |
- #ifdef CONFIG_SCHEDSTATS |
|
49 |
- { |
|
50 |
- .procname = "sched_schedstats", |
51 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,179 +0,0 @@ |
1 |
-diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
|
2 |
-index 628a059..a964013 100644 |
|
3 |
-+++ b/arch/x86/kernel/cpu/vmware.c |
|
4 |
-@@ -26,16 +26,20 @@ |
|
5 |
- #include <asm/div64.h> |
|
6 |
- #include <asm/x86_init.h> |
|
7 |
- #include <asm/hypervisor.h> |
|
8 |
-+#include <linux/kmsg_dump.h> |
|
9 |
- |
|
10 |
--#define CPUID_VMWARE_INFO_LEAF 0x40000000 |
|
11 |
--#define VMWARE_HYPERVISOR_MAGIC 0x564D5868 |
|
12 |
--#define VMWARE_HYPERVISOR_PORT 0x5658 |
|
13 |
-+#define CPUID_VMWARE_INFO_LEAF 0x40000000 |
|
14 |
-+#define VMWARE_HYPERVISOR_MAGIC 0x564D5868 |
|
15 |
-+#define VMWARE_HYPERVISOR_PORT 0x5658 |
|
16 |
-+#define VMWARE_HYPERVISOR_HB_PORT 0x5659 |
|
17 |
- |
|
18 |
- #define VMWARE_PORT_CMD_GETVERSION 10 |
|
19 |
- #define VMWARE_PORT_CMD_GETHZ 45 |
|
20 |
- #define VMWARE_PORT_CMD_GETVCPU_INFO 68 |
|
21 |
- #define VMWARE_PORT_CMD_LEGACY_X2APIC 3 |
|
22 |
- #define VMWARE_PORT_CMD_VCPU_RESERVED 31 |
|
23 |
-+#define VMWARE_PORT_CMD_MESSAGE 30 |
|
24 |
-+#define VMWARE_HB_PORT_CMD_MESSAGE 0 |
|
25 |
- |
|
26 |
- #define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \ |
|
27 |
- __asm__("inl (%%dx)" : \ |
|
28 |
-@@ -75,6 +79,13 @@ static unsigned long vmware_get_tsc_khz(void) |
|
29 |
- return tsc_hz; |
|
30 |
- } |
|
31 |
- |
|
32 |
-+static void kmsg_dumper_vmware_log(struct kmsg_dumper *dumper, |
|
33 |
-+ enum kmsg_dump_reason reason); |
|
34 |
-+ |
|
35 |
-+static struct kmsg_dumper kmsg_dumper = { |
|
36 |
-+ .dump = kmsg_dumper_vmware_log |
|
37 |
-+}; |
|
38 |
-+ |
|
39 |
- static void __init vmware_platform_setup(void) |
|
40 |
- { |
|
41 |
- uint32_t eax, ebx, ecx, edx; |
|
42 |
-@@ -86,6 +97,8 @@ static void __init vmware_platform_setup(void) |
|
43 |
- x86_platform.calibrate_tsc = vmware_get_tsc_khz; |
|
44 |
- else |
|
45 |
- pr_warn("Failed to get TSC freq from the hypervisor\n"); |
|
46 |
-+ |
|
47 |
-+ kmsg_dump_register(&kmsg_dumper); |
|
48 |
- } |
|
49 |
- |
|
50 |
- /* |
|
51 |
-@@ -145,3 +158,127 @@ const __refconst struct hypervisor_x86 x86_hyper_vmware = { |
|
52 |
- .x2apic_available = vmware_legacy_x2apic_available, |
|
53 |
- }; |
|
54 |
- EXPORT_SYMBOL(x86_hyper_vmware); |
|
55 |
-+ |
|
56 |
-+#define MESSAGE_STATUS_SUCCESS (0x01 << 16) |
|
57 |
-+#define MESSAGE_STATUS_CPT (0x10 << 16) |
|
58 |
-+#define MESSAGE_STATUS_HB (0x80 << 16) |
|
59 |
-+ |
|
60 |
-+#define RPCI_PROTOCOL_NUM 0x49435052 /* 'RPCI' */ |
|
61 |
-+#define GUESTMSG_FLAG_COOKIE 0x80000000 |
|
62 |
-+ |
|
63 |
-+#define MESSAGE_TYPE_OPEN (0 << 16) |
|
64 |
-+#define MESSAGE_TYPE_SENDSIZE (1 << 16) |
|
65 |
-+#define MESSAGE_TYPE_CLOSE (6 << 16) |
|
66 |
-+ |
|
67 |
-+typedef struct { |
|
68 |
-+ uint32_t id; |
|
69 |
-+ uint32_t cookieHigh; |
|
70 |
-+ uint32_t cookieLow; |
|
71 |
-+} vmw_msg; |
|
72 |
-+ |
|
73 |
-+static int |
|
74 |
-+vmware_log_open(vmw_msg *msg) { |
|
75 |
-+ uint32_t result, info, dx, si, di; |
|
76 |
-+ __asm__ __volatile__ ("inl (%%dx)" |
|
77 |
-+ : "=a" (result), |
|
78 |
-+ "=c" (info), |
|
79 |
-+ "=d" (dx), |
|
80 |
-+ "=S" (si), |
|
81 |
-+ "=D" (di) |
|
82 |
-+ : "a" (VMWARE_HYPERVISOR_MAGIC), |
|
83 |
-+ "c" (VMWARE_PORT_CMD_MESSAGE | MESSAGE_TYPE_OPEN), |
|
84 |
-+ "d" (VMWARE_HYPERVISOR_PORT), |
|
85 |
-+ "b" (RPCI_PROTOCOL_NUM | GUESTMSG_FLAG_COOKIE)); |
|
86 |
-+ |
|
87 |
-+ if ((info & MESSAGE_STATUS_SUCCESS) == 0) |
|
88 |
-+ return 1; |
|
89 |
-+ |
|
90 |
-+ msg->id = dx & 0xffff0000; |
|
91 |
-+ msg->cookieHigh = si; |
|
92 |
-+ msg->cookieLow = di; |
|
93 |
-+ return 0; |
|
94 |
-+} |
|
95 |
-+ |
|
96 |
-+static int |
|
97 |
-+vmware_log_close(vmw_msg *msg) { |
|
98 |
-+ uint32_t result, info; |
|
99 |
-+ __asm__ __volatile__ ("inl (%%dx)" |
|
100 |
-+ : "=a" (result), |
|
101 |
-+ "=c" (info) |
|
102 |
-+ : "a" (VMWARE_HYPERVISOR_MAGIC), |
|
103 |
-+ "c" (VMWARE_PORT_CMD_MESSAGE | MESSAGE_TYPE_CLOSE), |
|
104 |
-+ "d" (VMWARE_HYPERVISOR_PORT | msg->id), |
|
105 |
-+ "b" (0), |
|
106 |
-+ "S" (msg->cookieHigh), |
|
107 |
-+ "D" (msg->cookieLow)); |
|
108 |
-+ |
|
109 |
-+ if ((info & MESSAGE_STATUS_SUCCESS) == 0) |
|
110 |
-+ return 1; |
|
111 |
-+ return 0; |
|
112 |
-+} |
|
113 |
-+ |
|
114 |
-+static int |
|
115 |
-+vmware_log_send(vmw_msg *msg, const char *string) { |
|
116 |
-+ uint32_t result, info; |
|
117 |
-+ uint32_t len = strlen(string); |
|
118 |
-+ |
|
119 |
-+retry: |
|
120 |
-+ __asm__ __volatile__ ("inl (%%dx)" |
|
121 |
-+ : "=a" (result), |
|
122 |
-+ "=c" (info) |
|
123 |
-+ : "a" (VMWARE_HYPERVISOR_MAGIC), |
|
124 |
-+ "c" (VMWARE_PORT_CMD_MESSAGE | MESSAGE_TYPE_SENDSIZE), |
|
125 |
-+ "d" (VMWARE_HYPERVISOR_PORT | msg->id), |
|
126 |
-+ "b" (len), |
|
127 |
-+ "S" (msg->cookieHigh), |
|
128 |
-+ "D" (msg->cookieLow)); |
|
129 |
-+ |
|
130 |
-+ if ((info & MESSAGE_STATUS_SUCCESS) == 0 || |
|
131 |
-+ (info & MESSAGE_STATUS_HB) == 0) |
|
132 |
-+ /* Expected success + high-bandwidth. Give up. */ |
|
133 |
-+ return 1; |
|
134 |
-+ |
|
135 |
-+ __asm__ __volatile__ ("pushq %%rbp\n\t" |
|
136 |
-+ "movl %[rbp], %%ebp\n\t" |
|
137 |
-+ "cld\n\t" |
|
138 |
-+ "rep; outsb\n\t" |
|
139 |
-+ "popq %%rbp\n\t" |
|
140 |
-+ : "=a" (result), |
|
141 |
-+ "=b" (info) |
|
142 |
-+ : "a" (VMWARE_HYPERVISOR_MAGIC), |
|
143 |
-+ "c" (len), |
|
144 |
-+ "d" (VMWARE_HYPERVISOR_HB_PORT | msg->id), |
|
145 |
-+ "b" (VMWARE_HB_PORT_CMD_MESSAGE | MESSAGE_STATUS_SUCCESS), |
|
146 |
-+ "S" (string), |
|
147 |
-+ [rbp] "r" (msg->cookieHigh), |
|
148 |
-+ "D" (msg->cookieLow)); |
|
149 |
-+ |
|
150 |
-+ if ((info & MESSAGE_STATUS_SUCCESS) == 0) { |
|
151 |
-+ if (info & MESSAGE_STATUS_CPT) |
|
152 |
-+ /* A checkpoint occurred. Retry. */ |
|
153 |
-+ goto retry; |
|
154 |
-+ return 1; |
|
155 |
-+ } |
|
156 |
-+ return 0; |
|
157 |
-+} |
|
158 |
-+ |
|
159 |
-+static void kmsg_dumper_vmware_log(struct kmsg_dumper *dumper, |
|
160 |
-+ enum kmsg_dump_reason reason) |
|
161 |
-+{ |
|
162 |
-+ vmw_msg msg; |
|
163 |
-+ static char line[1024]; |
|
164 |
-+ size_t len = 0; |
|
165 |
-+ |
|
166 |
-+ line[0] = 'l'; |
|
167 |
-+ line[1] = 'o'; |
|
168 |
-+ line[2] = 'g'; |
|
169 |
-+ line[3] = ' '; |
|
170 |
-+ |
|
171 |
-+ while (kmsg_dump_get_line(dumper, true, line + 4, sizeof(line) - 4, &len)) { |
|
172 |
-+ line[len + 4] = '\0'; |
|
173 |
-+ if (vmware_log_open(&msg) || |
|
174 |
-+ vmware_log_send(&msg, line) || |
|
175 |
-+ vmware_log_close(&msg)) |
|
176 |
-+ break; |
|
177 |
-+ } |
|
178 |
-+} |
179 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,75 +0,0 @@ |
1 |
-From: Dave Jones <davej@redhat.com> |
|
2 |
-Date: Tue, 24 Jun 2014 08:43:34 -0400 |
|
3 |
-Subject: [PATCH] watchdog: Disable watchdog on virtual machines. |
|
4 |
- |
|
5 |
-For various reasons, VMs seem to trigger the soft lockup detector a lot, |
|
6 |
-in cases where it's just not possible for a lockup to occur. |
|
7 |
-(Example: https://bugzilla.redhat.com/show_bug.cgi?id=971139) |
|
8 |
- |
|
9 |
-In some cases it seems that the host just never scheduled the app running |
|
10 |
-the VM for a very long time (Could be the host was under heavy load). |
|
11 |
- |
|
12 |
-Just disable the detector on VMs. |
|
13 |
- |
|
14 |
-Bugzilla: 971139 |
|
15 |
-Upstream-status: Fedora mustard for now |
|
16 |
- |
|
17 |
-Signed-off-by: Dave Jones <davej@redhat.com> |
|
18 |
- kernel/watchdog.c | 29 +++++++++++++++++++++++++++++ |
|
19 |
- 1 file changed, 29 insertions(+) |
|
20 |
- |
|
21 |
-diff --git a/kernel/watchdog.c b/kernel/watchdog.c |
|
22 |
-index a6ffa43f2993..b378b762844a 100644 |
|
23 |
-+++ b/kernel/watchdog.c |
|
24 |
-@@ -21,6 +21,7 @@ |
|
25 |
- #include <linux/sched/rt.h> |
|
26 |
- #include <linux/tick.h> |
|
27 |
- #include <linux/workqueue.h> |
|
28 |
-+#include <linux/dmi.h> |
|
29 |
- |
|
30 |
- #include <asm/irq_regs.h> |
|
31 |
- #include <linux/kvm_para.h> |
|
32 |
-@@ -185,6 +186,32 @@ static int __init softlockup_all_cpu_backtrace_setup(char *str) |
|
33 |
- __setup("hardlockup_all_cpu_backtrace=", hardlockup_all_cpu_backtrace_setup); |
|
34 |
- #endif |
|
35 |
- |
|
36 |
-+static int disable_watchdog(const struct dmi_system_id *d) |
|
37 |
-+{ |
|
38 |
-+ printk(KERN_INFO "watchdog: disabled (inside virtual machine)\n"); |
|
39 |
-+ watchdog_user_enabled = 0; |
|
40 |
-+ return 0; |
|
41 |
-+} |
|
42 |
-+ |
|
43 |
-+static const struct dmi_system_id watchdog_virt_dmi_table[] = { |
|
44 |
-+ { |
|
45 |
-+ .callback = disable_watchdog, |
|
46 |
-+ .ident = "VMware", |
|
47 |
-+ .matches = { |
|
48 |
-+ DMI_MATCH(DMI_SYS_VENDOR, "VMware, Inc."), |
|
49 |
-+ }, |
|
50 |
-+ }, |
|
51 |
-+ { |
|
52 |
-+ .callback = disable_watchdog, |
|
53 |
-+ .ident = "Bochs", |
|
54 |
-+ .matches = { |
|
55 |
-+ DMI_MATCH(DMI_SYS_VENDOR, "Bochs"), |
|
56 |
-+ }, |
|
57 |
-+ }, |
|
58 |
-+ {} |
|
59 |
-+}; |
|
60 |
-+ |
|
61 |
-+ |
|
62 |
- /* |
|
63 |
- * Hard-lockup warnings should be triggered after just a few seconds. Soft- |
|
64 |
- * lockups can have false positives under extreme conditions. So we generally |
|
65 |
-@@ -1037,6 +1064,8 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write, |
|
66 |
- |
|
67 |
- void __init lockup_detector_init(void) |
|
68 |
- { |
|
69 |
-+ dmi_check_system(watchdog_virt_dmi_table); |
|
70 |
-+ |
|
71 |
- set_sample_period(); |
|
72 |
- |
|
73 |
- #ifdef CONFIG_NO_HZ_FULL |
... | ... |
@@ -1,7 +1,19 @@ |
1 |
-diff -Naur a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h |
|
2 |
-+++ b/include/linux/sched/sysctl.h 2016-09-01 14:52:39.335459615 -0700 |
|
3 |
-@@ -39,6 +39,7 @@ |
|
1 |
+From 7daf0cae53fd5188aa09ea6006197798b34961dd Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:34:05 -0700 |
|
4 |
+Subject: [PATCH] sysctl: sched_weighted_cpuload uses rla |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ include/linux/sched/sysctl.h | 1 + |
|
8 |
+ kernel/sched/fair.c | 8 +++++++- |
|
9 |
+ kernel/sysctl.c | 7 +++++++ |
|
10 |
+ 3 files changed, 15 insertions(+), 1 deletion(-) |
|
11 |
+ |
|
12 |
+diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h |
|
13 |
+index 22db1e63707e..4851e047b071 100644 |
|
14 |
+--- a/include/linux/sched/sysctl.h |
|
15 |
+@@ -18,6 +18,7 @@ extern unsigned int sysctl_sched_latency; |
|
4 | 16 |
extern unsigned int sysctl_sched_min_granularity; |
5 | 17 |
extern unsigned int sysctl_sched_wakeup_granularity; |
6 | 18 |
extern unsigned int sysctl_sched_child_runs_first; |
... | ... |
@@ -9,9 +21,10 @@ diff -Naur a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h |
9 | 9 |
|
10 | 10 |
enum sched_tunable_scaling { |
11 | 11 |
SCHED_TUNABLESCALING_NONE, |
12 |
-diff -Naur a/kernel/sched/fair.c b/kernel/sched/fair.c |
|
13 |
-+++ b/kernel/sched/fair.c 2016-09-01 14:52:39.339459615 -0700 |
|
12 |
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c |
|
13 |
+index c242944f5cbd..5ed6ba7234dc 100644 |
|
14 |
+--- a/kernel/sched/fair.c |
|
14 | 15 |
@@ -35,6 +35,10 @@ |
15 | 16 |
|
16 | 17 |
#include "sched.h" |
... | ... |
@@ -23,7 +36,7 @@ diff -Naur a/kernel/sched/fair.c b/kernel/sched/fair.c |
23 | 23 |
/* |
24 | 24 |
* Targeted preemption latency for CPU-bound tasks: |
25 | 25 |
* (default: 6ms * (1 + ilog(ncpus)), units: nanoseconds) |
26 |
-@@ -4360,7 +4364,9 @@ |
|
26 |
+@@ -4796,7 +4800,9 @@ static void cpu_load_update(struct rq *this_rq, unsigned long this_load, |
|
27 | 27 |
/* Used instead of source_load when we know the type == 0 */ |
28 | 28 |
static unsigned long weighted_cpuload(const int cpu) |
29 | 29 |
{ |
... | ... |
@@ -34,10 +47,11 @@ diff -Naur a/kernel/sched/fair.c b/kernel/sched/fair.c |
34 | 34 |
} |
35 | 35 |
|
36 | 36 |
#ifdef CONFIG_NO_HZ_COMMON |
37 |
-diff -Naur a/kernel/sysctl.c b/kernel/sysctl.c |
|
38 |
-+++ b/kernel/sysctl.c 2016-09-01 14:52:39.339459615 -0700 |
|
39 |
-@@ -350,6 +350,13 @@ |
|
37 |
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c |
|
38 |
+index c1095cdc0fe2..728b5603a7ed 100644 |
|
39 |
+--- a/kernel/sysctl.c |
|
40 |
+@@ -354,6 +354,13 @@ static struct ctl_table kern_table[] = { |
|
40 | 41 |
.mode = 0644, |
41 | 42 |
.proc_handler = proc_dointvec, |
42 | 43 |
}, |
... | ... |
@@ -51,3 +65,6 @@ diff -Naur a/kernel/sysctl.c b/kernel/sysctl.c |
51 | 51 |
#ifdef CONFIG_SCHEDSTATS |
52 | 52 |
{ |
53 | 53 |
.procname = "sched_schedstats", |
54 |
+-- |
|
55 |
+2.11.0 |
|
56 |
+ |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
%global security_hardening none |
2 | 2 |
Summary: Kernel |
3 | 3 |
Name: linux-esx |
4 |
-Version: 4.9.26 |
|
4 |
+Version: 4.9.27 |
|
5 | 5 |
Release: 1%{?dist} |
6 | 6 |
License: GPLv2 |
7 | 7 |
URL: http://www.kernel.org/ |
... | ... |
@@ -9,7 +9,7 @@ Group: System Environment/Kernel |
9 | 9 |
Vendor: VMware, Inc. |
10 | 10 |
Distribution: Photon |
11 | 11 |
Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.xz |
12 |
-%define sha1 linux=b244ab8ee3d7a0385c7bc1b1dc1d55f0920df997 |
|
12 |
+%define sha1 linux=d248ff518f822d4324a482a39f3159b1ee86cc84 |
|
13 | 13 |
Source1: config-esx |
14 | 14 |
Source2: initramfs.trigger |
15 | 15 |
# common |
... | ... |
@@ -35,6 +35,7 @@ Patch17: 04-quiet-boot.patch |
35 | 35 |
Patch18: 05-pv-ops-clocksource.patch |
36 | 36 |
Patch19: 06-pv-ops-boot_clock.patch |
37 | 37 |
Patch20: 07-vmware-only.patch |
38 |
+Patch21: vmware-balloon-late-initcall.patch |
|
38 | 39 |
BuildRequires: bc |
39 | 40 |
BuildRequires: kbd |
40 | 41 |
BuildRequires: kmod |
... | ... |
@@ -91,6 +92,7 @@ The Linux package contains the Linux kernel doc files |
91 | 91 |
%patch18 -p1 |
92 | 92 |
%patch19 -p1 |
93 | 93 |
%patch20 -p1 |
94 |
+%patch21 -p1 |
|
94 | 95 |
|
95 | 96 |
%build |
96 | 97 |
# patch vmw_balloon driver |
... | ... |
@@ -187,6 +189,10 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg |
187 | 187 |
/usr/src/linux-headers-%{uname_r} |
188 | 188 |
|
189 | 189 |
%changelog |
190 |
+* Wed May 10 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.27-1 |
|
191 |
+- New pci=scan_all cmdline parameter to verify hardcoded pci-probe values |
|
192 |
+- pci-probe added more known values |
|
193 |
+- vmw_balloon late initcall |
|
190 | 194 |
* Sun May 7 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.26-1 |
191 | 195 |
- Version update |
192 | 196 |
- Use ordered rdtsc in clocksource_vmware |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
%global security_hardening none |
2 | 2 |
Summary: Kernel |
3 | 3 |
Name: linux-secure |
4 |
-Version: 4.9.26 |
|
4 |
+Version: 4.9.27 |
|
5 | 5 |
Release: 1%{?dist} |
6 | 6 |
License: GPLv2 |
7 | 7 |
URL: http://www.kernel.org/ |
... | ... |
@@ -9,7 +9,7 @@ Group: System Environment/Kernel |
9 | 9 |
Vendor: VMware, Inc. |
10 | 10 |
Distribution: Photon |
11 | 11 |
Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.xz |
12 |
-%define sha1 linux=b244ab8ee3d7a0385c7bc1b1dc1d55f0920df997 |
|
12 |
+%define sha1 linux=d248ff518f822d4324a482a39f3159b1ee86cc84 |
|
13 | 13 |
Source1: config-secure |
14 | 14 |
Source2: aufs4.9.tar.gz |
15 | 15 |
Source3: initramfs.trigger |
... | ... |
@@ -228,6 +228,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg |
228 | 228 |
/usr/src/linux-headers-%{uname_r} |
229 | 229 |
|
230 | 230 |
%changelog |
231 |
+* Wed May 10 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.27-1 |
|
232 |
+- Version update |
|
231 | 233 |
* Sun May 7 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.26-1 |
232 | 234 |
- Version update |
233 | 235 |
- Removed version suffix from config file name |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
%global security_hardening none |
2 | 2 |
Summary: Kernel |
3 | 3 |
Name: linux |
4 |
-Version: 4.9.26 |
|
4 |
+Version: 4.9.27 |
|
5 | 5 |
Release: 1%{?dist} |
6 | 6 |
License: GPLv2 |
7 | 7 |
URL: http://www.kernel.org/ |
... | ... |
@@ -9,7 +9,7 @@ Group: System Environment/Kernel |
9 | 9 |
Vendor: VMware, Inc. |
10 | 10 |
Distribution: Photon |
11 | 11 |
Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.xz |
12 |
-%define sha1 linux=b244ab8ee3d7a0385c7bc1b1dc1d55f0920df997 |
|
12 |
+%define sha1 linux=d248ff518f822d4324a482a39f3159b1ee86cc84 |
|
13 | 13 |
Source1: config |
14 | 14 |
Source2: initramfs.trigger |
15 | 15 |
# common |
... | ... |
@@ -253,6 +253,8 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg |
253 | 253 |
/usr/share/doc/* |
254 | 254 |
|
255 | 255 |
%changelog |
256 |
+* Wed May 10 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.27-1 |
|
257 |
+- Version update |
|
256 | 258 |
* Sun May 7 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.26-1 |
257 | 259 |
- Version update |
258 | 260 |
- Removed version suffix from config file name |
... | ... |
@@ -1,5 +1,14 @@ |
1 |
+From 43b616d904088b830bdb42ed9c016ce5f239bc73 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:37:20 -0700 |
|
4 |
+Subject: [PATCH] net 9p vsock support |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ net/9p/trans_fd.c | 45 +++++++++++++++++++++++++++++++++++++-------- |
|
8 |
+ 1 file changed, 37 insertions(+), 8 deletions(-) |
|
9 |
+ |
|
1 | 10 |
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c |
2 |
-index bced8c0..ac57c4b 100644 |
|
11 |
+index 7bc2208b6cc4..4acfd8a7f52c 100644 |
|
3 | 12 |
--- a/net/9p/trans_fd.c |
4 | 13 |
+++ b/net/9p/trans_fd.c |
5 | 14 |
@@ -37,6 +37,8 @@ |
... | ... |
@@ -36,7 +45,7 @@ index bced8c0..ac57c4b 100644 |
36 | 36 |
{Opt_err, NULL}, |
37 | 37 |
}; |
38 | 38 |
|
39 |
-@@ -735,6 +739,7 @@ static int parse_opts(char *params, struct p9_fd_opts *opts) |
|
39 |
+@@ -739,6 +743,7 @@ static int parse_opts(char *params, struct p9_fd_opts *opts) |
|
40 | 40 |
opts->rfd = ~0; |
41 | 41 |
opts->wfd = ~0; |
42 | 42 |
opts->privport = 0; |
... | ... |
@@ -44,7 +53,7 @@ index bced8c0..ac57c4b 100644 |
44 | 44 |
|
45 | 45 |
if (!params) |
46 | 46 |
return 0; |
47 |
-@@ -774,6 +779,9 @@ static int parse_opts(char *params, struct p9_fd_opts *opts) |
|
47 |
+@@ -778,6 +783,9 @@ static int parse_opts(char *params, struct p9_fd_opts *opts) |
|
48 | 48 |
case Opt_privport: |
49 | 49 |
opts->privport = 1; |
50 | 50 |
break; |
... | ... |
@@ -54,7 +63,7 @@ index bced8c0..ac57c4b 100644 |
54 | 54 |
default: |
55 | 55 |
continue; |
56 | 56 |
} |
57 |
-@@ -938,11 +946,27 @@ p9_fd_create_tcp(struct p9_client *client, const char *addr, char *args) |
|
57 |
+@@ -942,11 +950,27 @@ p9_fd_create_tcp(struct p9_client *client, const char *addr, char *args) |
|
58 | 58 |
|
59 | 59 |
csocket = NULL; |
60 | 60 |
|
... | ... |
@@ -87,7 +96,7 @@ index bced8c0..ac57c4b 100644 |
87 | 87 |
if (err) { |
88 | 88 |
pr_err("%s (%d): problem creating socket\n", |
89 | 89 |
__func__, task_pid_nr(current)); |
90 |
-@@ -963,8 +987,13 @@ p9_fd_create_tcp(struct p9_client *client, const char *addr, char *args) |
|
90 |
+@@ -967,8 +991,13 @@ p9_fd_create_tcp(struct p9_client *client, const char *addr, char *args) |
|
91 | 91 |
(struct sockaddr *)&sin_server, |
92 | 92 |
sizeof(struct sockaddr_in), 0); |
93 | 93 |
if (err < 0) { |
... | ... |
@@ -103,3 +112,6 @@ index bced8c0..ac57c4b 100644 |
103 | 103 |
sock_release(csocket); |
104 | 104 |
return err; |
105 | 105 |
} |
106 |
+-- |
|
107 |
+2.11.0 |
|
108 |
+ |
... | ... |
@@ -1,8 +1,17 @@ |
1 |
+From 3f0069a352b7a55db73b522918116cd6d6a4dcfd Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:38:15 -0700 |
|
4 |
+Subject: [PATCH] serial 8250 do not probe U6 16550A fifo size |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ drivers/tty/serial/8250/8250_port.c | 2 ++ |
|
8 |
+ 1 file changed, 2 insertions(+) |
|
9 |
+ |
|
1 | 10 |
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c |
2 |
-index 56ccbce..ea95693 100644 |
|
11 |
+index 080d5a59d0a7..67d5cf07346e 100644 |
|
3 | 12 |
--- a/drivers/tty/serial/8250/8250_port.c |
4 | 13 |
+++ b/drivers/tty/serial/8250/8250_port.c |
5 |
-@@ -1045,10 +1045,12 @@ static void autoconfig_16550a(struct uart_8250_port *up) |
|
14 |
+@@ -1148,10 +1148,12 @@ static void autoconfig_16550a(struct uart_8250_port *up) |
|
6 | 15 |
* We distinguish between 16550A and U6 16550A by counting |
7 | 16 |
* how many bytes are in the FIFO. |
8 | 17 |
*/ |
... | ... |
@@ -15,3 +24,6 @@ index 56ccbce..ea95693 100644 |
15 | 15 |
} |
16 | 16 |
|
17 | 17 |
/* |
18 |
+-- |
|
19 |
+2.11.0 |
|
20 |
+ |
18 | 21 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,26 @@ |
0 |
+From 79e9fe45e1c96e04a02a0fcf6f4d11623d1e810b Mon Sep 17 00:00:00 2001 |
|
1 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
2 |
+Date: Wed, 10 May 2017 15:24:33 -0700 |
|
3 |
+Subject: [PATCH] vmware balloon late initcall |
|
4 |
+ |
|
5 |
+Initialize balloon driver later (after vmci) |
|
6 |
+--- |
|
7 |
+ drivers/misc/vmw_balloon.c | 2 +- |
|
8 |
+ 1 file changed, 1 insertion(+), 1 deletion(-) |
|
9 |
+ |
|
10 |
+diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c |
|
11 |
+index 1e688bfec567..6944c55b9ee4 100644 |
|
12 |
+--- a/drivers/misc/vmw_balloon.c |
|
13 |
+@@ -1298,7 +1298,7 @@ static int __init vmballoon_init(void) |
|
14 |
+ |
|
15 |
+ return 0; |
|
16 |
+ } |
|
17 |
+-module_init(vmballoon_init); |
|
18 |
++late_initcall(vmballoon_init); |
|
19 |
+ |
|
20 |
+ static void __exit vmballoon_exit(void) |
|
21 |
+ { |
|
22 |
+-- |
|
23 |
+2.11.0 |
|
24 |
+ |
... | ... |
@@ -1,8 +1,18 @@ |
1 |
+From 71048bf46e2beea4cbfa41a7b0987f1817fc2218 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:31:15 -0700 |
|
4 |
+Subject: [PATCH] Log kmsg dump on panic |
|
5 |
+ |
|
6 |
+In case of panic kmsg will be dumped to vmware.log file |
|
7 |
+--- |
|
8 |
+ arch/x86/kernel/cpu/vmware.c | 143 ++++++++++++++++++++++++++++++++++++++++++- |
|
9 |
+ 1 file changed, 140 insertions(+), 3 deletions(-) |
|
10 |
+ |
|
1 | 11 |
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
2 |
-index 628a059..a964013 100644 |
|
12 |
+index 6745c0b7414e..1ef88701b2d9 100644 |
|
3 | 13 |
--- a/arch/x86/kernel/cpu/vmware.c |
4 | 14 |
+++ b/arch/x86/kernel/cpu/vmware.c |
5 |
-@@ -26,19 +26,23 @@ |
|
15 |
+@@ -30,19 +30,23 @@ |
|
6 | 16 |
#include <asm/hypervisor.h> |
7 | 17 |
#include <asm/timer.h> |
8 | 18 |
#include <asm/apic.h> |
... | ... |
@@ -29,7 +39,7 @@ index 628a059..a964013 100644 |
29 | 29 |
|
30 | 30 |
#define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \ |
31 | 31 |
__asm__("inl (%%dx)" : \ |
32 |
-@@ -75,6 +79,13 @@ static unsigned long vmware_get_tsc_khz(void) |
|
32 |
+@@ -66,6 +70,13 @@ static unsigned long vmware_get_tsc_khz(void) |
|
33 | 33 |
return vmware_tsc_khz; |
34 | 34 |
} |
35 | 35 |
|
... | ... |
@@ -43,7 +53,7 @@ index 628a059..a964013 100644 |
43 | 43 |
#ifdef CONFIG_PARAVIRT |
44 | 44 |
static struct cyc2ns_data vmware_cyc2ns __ro_after_init; |
45 | 45 |
static int vmw_sched_clock __initdata = 1; |
46 |
-@@ -86,6 +97,8 @@ static void __init vmware_platform_setup(void) |
|
46 |
+@@ -152,6 +163,8 @@ static void __init vmware_platform_setup(void) |
|
47 | 47 |
#endif |
48 | 48 |
|
49 | 49 |
vmware_paravirt_ops_setup(); |
... | ... |
@@ -52,7 +62,7 @@ index 628a059..a964013 100644 |
52 | 52 |
} |
53 | 53 |
|
54 | 54 |
/* |
55 |
-@@ -145,3 +158,127 @@ const __refconst struct hypervisor_x86 x86_hyper_vmware = { |
|
55 |
+@@ -211,3 +224,127 @@ const __refconst struct hypervisor_x86 x86_hyper_vmware = { |
|
56 | 56 |
.x2apic_available = vmware_legacy_x2apic_available, |
57 | 57 |
}; |
58 | 58 |
EXPORT_SYMBOL(x86_hyper_vmware); |
... | ... |
@@ -180,3 +190,6 @@ index 628a059..a964013 100644 |
180 | 180 |
+ break; |
181 | 181 |
+ } |
182 | 182 |
+} |
183 |
+-- |
|
184 |
+2.11.0 |
|
185 |
+ |
... | ... |
@@ -1,5 +1,14 @@ |
1 |
+From ddbfe173c561aa8c81462d0782b3852f32cb71f6 Mon Sep 17 00:00:00 2001 |
|
2 |
+From: Alexey Makhalov <amakhalov@vmware.com> |
|
3 |
+Date: Tue, 9 May 2017 12:37:47 -0700 |
|
4 |
+Subject: [PATCH] x86/vmware: sta support |
|
5 |
+ |
|
6 |
+--- |
|
7 |
+ arch/x86/kernel/cpu/vmware.c | 184 +++++++++++++++++++++++++++++++++++++++++-- |
|
8 |
+ 1 file changed, 177 insertions(+), 7 deletions(-) |
|
9 |
+ |
|
1 | 10 |
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c |
2 |
-index 1ef8870..c998fba 100644 |
|
11 |
+index 1ef88701b2d9..70b8c4614e22 100644 |
|
3 | 12 |
--- a/arch/x86/kernel/cpu/vmware.c |
4 | 13 |
+++ b/arch/x86/kernel/cpu/vmware.c |
5 | 14 |
@@ -30,6 +30,8 @@ |
... | ... |
@@ -236,3 +245,6 @@ index 1ef8870..c998fba 100644 |
236 | 236 |
kmsg_dump_register(&kmsg_dumper); |
237 | 237 |
} |
238 | 238 |
|
239 |
+-- |
|
240 |
+2.11.0 |
|
241 |
+ |