Browse code

linux-esx: pci probe improvements

- 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>

Alexey Makhalov authored on 2017/05/11 07:46:54
Showing 21 changed files
... ...
@@ -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
+