Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:5.4 commit in: /
Date: Sat, 09 Oct 2021 21:32:26
Message-Id: 1633815129.70190753010f3b562210947c1bad735efe8fe38c.mpagano@gentoo
1 commit: 70190753010f3b562210947c1bad735efe8fe38c
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sat Oct 9 21:32:09 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sat Oct 9 21:32:09 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=70190753
7
8 Linux patch 5.4.152
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1151_linux-5.4.152.patch | 426 +++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 430 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index dd4e25f..d41d541 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -647,6 +647,10 @@ Patch: 1150_linux-5.4.151.patch
21 From: http://www.kernel.org
22 Desc: Linux 5.4.151
23
24 +Patch: 1151_linux-5.4.152.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 5.4.152
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1151_linux-5.4.152.patch b/1151_linux-5.4.152.patch
33 new file mode 100644
34 index 0000000..b624b1a
35 --- /dev/null
36 +++ b/1151_linux-5.4.152.patch
37 @@ -0,0 +1,426 @@
38 +diff --git a/Makefile b/Makefile
39 +index 4eeb72027815b..ffcdc36c56f54 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 5
45 + PATCHLEVEL = 4
46 +-SUBLEVEL = 151
47 ++SUBLEVEL = 152
48 + EXTRAVERSION =
49 + NAME = Kleptomaniac Octopus
50 +
51 +diff --git a/arch/sparc/lib/iomap.c b/arch/sparc/lib/iomap.c
52 +index c9da9f139694d..f3a8cd491ce0d 100644
53 +--- a/arch/sparc/lib/iomap.c
54 ++++ b/arch/sparc/lib/iomap.c
55 +@@ -19,8 +19,10 @@ void ioport_unmap(void __iomem *addr)
56 + EXPORT_SYMBOL(ioport_map);
57 + EXPORT_SYMBOL(ioport_unmap);
58 +
59 ++#ifdef CONFIG_PCI
60 + void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
61 + {
62 + /* nothing to do */
63 + }
64 + EXPORT_SYMBOL(pci_iounmap);
65 ++#endif
66 +diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
67 +index e622158f56598..00bccb4d17722 100644
68 +--- a/arch/x86/events/core.c
69 ++++ b/arch/x86/events/core.c
70 +@@ -2108,6 +2108,7 @@ static int x86_pmu_event_init(struct perf_event *event)
71 + if (err) {
72 + if (event->destroy)
73 + event->destroy(event);
74 ++ event->destroy = NULL;
75 + }
76 +
77 + if (READ_ONCE(x86_pmu.attr_rdpmc) &&
78 +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
79 +index f1a0eebdcf641..0aaf40be956ff 100644
80 +--- a/arch/x86/kvm/x86.c
81 ++++ b/arch/x86/kvm/x86.c
82 +@@ -1239,6 +1239,13 @@ static const u32 msrs_to_save_all[] = {
83 + MSR_ARCH_PERFMON_EVENTSEL0 + 12, MSR_ARCH_PERFMON_EVENTSEL0 + 13,
84 + MSR_ARCH_PERFMON_EVENTSEL0 + 14, MSR_ARCH_PERFMON_EVENTSEL0 + 15,
85 + MSR_ARCH_PERFMON_EVENTSEL0 + 16, MSR_ARCH_PERFMON_EVENTSEL0 + 17,
86 ++
87 ++ MSR_K7_EVNTSEL0, MSR_K7_EVNTSEL1, MSR_K7_EVNTSEL2, MSR_K7_EVNTSEL3,
88 ++ MSR_K7_PERFCTR0, MSR_K7_PERFCTR1, MSR_K7_PERFCTR2, MSR_K7_PERFCTR3,
89 ++ MSR_F15H_PERF_CTL0, MSR_F15H_PERF_CTL1, MSR_F15H_PERF_CTL2,
90 ++ MSR_F15H_PERF_CTL3, MSR_F15H_PERF_CTL4, MSR_F15H_PERF_CTL5,
91 ++ MSR_F15H_PERF_CTR0, MSR_F15H_PERF_CTR1, MSR_F15H_PERF_CTR2,
92 ++ MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5,
93 + };
94 +
95 + static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)];
96 +diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
97 +index 5c354c7aff946..7c6c05fd5dfc3 100644
98 +--- a/drivers/ata/libata-core.c
99 ++++ b/drivers/ata/libata-core.c
100 +@@ -2252,6 +2252,25 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev)
101 +
102 + }
103 +
104 ++static bool ata_dev_check_adapter(struct ata_device *dev,
105 ++ unsigned short vendor_id)
106 ++{
107 ++ struct pci_dev *pcidev = NULL;
108 ++ struct device *parent_dev = NULL;
109 ++
110 ++ for (parent_dev = dev->tdev.parent; parent_dev != NULL;
111 ++ parent_dev = parent_dev->parent) {
112 ++ if (dev_is_pci(parent_dev)) {
113 ++ pcidev = to_pci_dev(parent_dev);
114 ++ if (pcidev->vendor == vendor_id)
115 ++ return true;
116 ++ break;
117 ++ }
118 ++ }
119 ++
120 ++ return false;
121 ++}
122 ++
123 + static int ata_dev_config_ncq(struct ata_device *dev,
124 + char *desc, size_t desc_sz)
125 + {
126 +@@ -2268,6 +2287,13 @@ static int ata_dev_config_ncq(struct ata_device *dev,
127 + snprintf(desc, desc_sz, "NCQ (not used)");
128 + return 0;
129 + }
130 ++
131 ++ if (dev->horkage & ATA_HORKAGE_NO_NCQ_ON_ATI &&
132 ++ ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI)) {
133 ++ snprintf(desc, desc_sz, "NCQ (not used)");
134 ++ return 0;
135 ++ }
136 ++
137 + if (ap->flags & ATA_FLAG_NCQ) {
138 + hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE);
139 + dev->flags |= ATA_DFLAG_NCQ;
140 +@@ -4557,9 +4583,11 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
141 + { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
142 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
143 + { "Samsung SSD 860*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
144 +- ATA_HORKAGE_ZERO_AFTER_TRIM, },
145 ++ ATA_HORKAGE_ZERO_AFTER_TRIM |
146 ++ ATA_HORKAGE_NO_NCQ_ON_ATI, },
147 + { "Samsung SSD 870*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
148 +- ATA_HORKAGE_ZERO_AFTER_TRIM, },
149 ++ ATA_HORKAGE_ZERO_AFTER_TRIM |
150 ++ ATA_HORKAGE_NO_NCQ_ON_ATI, },
151 + { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
152 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
153 +
154 +@@ -6916,6 +6944,8 @@ static int __init ata_parse_force_one(char **cur,
155 + { "ncq", .horkage_off = ATA_HORKAGE_NONCQ },
156 + { "noncqtrim", .horkage_on = ATA_HORKAGE_NO_NCQ_TRIM },
157 + { "ncqtrim", .horkage_off = ATA_HORKAGE_NO_NCQ_TRIM },
158 ++ { "noncqati", .horkage_on = ATA_HORKAGE_NO_NCQ_ON_ATI },
159 ++ { "ncqati", .horkage_off = ATA_HORKAGE_NO_NCQ_ON_ATI },
160 + { "dump_id", .horkage_on = ATA_HORKAGE_DUMP_ID },
161 + { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) },
162 + { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) },
163 +diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c
164 +index c1d345c3cab35..b2dd293fc87eb 100644
165 +--- a/drivers/net/phy/mdio_device.c
166 ++++ b/drivers/net/phy/mdio_device.c
167 +@@ -180,6 +180,16 @@ static int mdio_remove(struct device *dev)
168 + return 0;
169 + }
170 +
171 ++static void mdio_shutdown(struct device *dev)
172 ++{
173 ++ struct mdio_device *mdiodev = to_mdio_device(dev);
174 ++ struct device_driver *drv = mdiodev->dev.driver;
175 ++ struct mdio_driver *mdiodrv = to_mdio_driver(drv);
176 ++
177 ++ if (mdiodrv->shutdown)
178 ++ mdiodrv->shutdown(mdiodev);
179 ++}
180 ++
181 + /**
182 + * mdio_driver_register - register an mdio_driver with the MDIO layer
183 + * @new_driver: new mdio_driver to register
184 +@@ -194,6 +204,7 @@ int mdio_driver_register(struct mdio_driver *drv)
185 + mdiodrv->driver.bus = &mdio_bus_type;
186 + mdiodrv->driver.probe = mdio_probe;
187 + mdiodrv->driver.remove = mdio_remove;
188 ++ mdiodrv->driver.shutdown = mdio_shutdown;
189 +
190 + retval = driver_register(&mdiodrv->driver);
191 + if (retval) {
192 +diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
193 +index c213f2b812691..995566a2785fa 100644
194 +--- a/drivers/net/xen-netback/netback.c
195 ++++ b/drivers/net/xen-netback/netback.c
196 +@@ -492,7 +492,7 @@ check_frags:
197 + * the header's copy failed, and they are
198 + * sharing a slot, send an error
199 + */
200 +- if (i == 0 && sharedslot)
201 ++ if (i == 0 && !first_shinfo && sharedslot)
202 + xenvif_idx_release(queue, pending_idx,
203 + XEN_NETIF_RSP_ERROR);
204 + else
205 +diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
206 +index f55249766d224..152b486051522 100644
207 +--- a/drivers/scsi/sd.c
208 ++++ b/drivers/scsi/sd.c
209 +@@ -3345,15 +3345,16 @@ static int sd_probe(struct device *dev)
210 + }
211 +
212 + device_initialize(&sdkp->dev);
213 +- sdkp->dev.parent = dev;
214 ++ sdkp->dev.parent = get_device(dev);
215 + sdkp->dev.class = &sd_disk_class;
216 + dev_set_name(&sdkp->dev, "%s", dev_name(dev));
217 +
218 + error = device_add(&sdkp->dev);
219 +- if (error)
220 +- goto out_free_index;
221 ++ if (error) {
222 ++ put_device(&sdkp->dev);
223 ++ goto out;
224 ++ }
225 +
226 +- get_device(dev);
227 + dev_set_drvdata(dev, sdkp);
228 +
229 + gd->major = sd_major((index & 0xf0) >> 4);
230 +diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
231 +index c2afba2a5414d..43e682297fd5f 100644
232 +--- a/drivers/scsi/ses.c
233 ++++ b/drivers/scsi/ses.c
234 +@@ -87,9 +87,16 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,
235 + 0
236 + };
237 + unsigned char recv_page_code;
238 ++ unsigned int retries = SES_RETRIES;
239 ++ struct scsi_sense_hdr sshdr;
240 ++
241 ++ do {
242 ++ ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
243 ++ &sshdr, SES_TIMEOUT, 1, NULL);
244 ++ } while (ret > 0 && --retries && scsi_sense_valid(&sshdr) &&
245 ++ (sshdr.sense_key == NOT_READY ||
246 ++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
247 +
248 +- ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
249 +- NULL, SES_TIMEOUT, SES_RETRIES, NULL);
250 + if (unlikely(ret))
251 + return ret;
252 +
253 +@@ -121,9 +128,16 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code,
254 + bufflen & 0xff,
255 + 0
256 + };
257 ++ struct scsi_sense_hdr sshdr;
258 ++ unsigned int retries = SES_RETRIES;
259 ++
260 ++ do {
261 ++ result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
262 ++ &sshdr, SES_TIMEOUT, 1, NULL);
263 ++ } while (result > 0 && --retries && scsi_sense_valid(&sshdr) &&
264 ++ (sshdr.sense_key == NOT_READY ||
265 ++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
266 +
267 +- result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
268 +- NULL, SES_TIMEOUT, SES_RETRIES, NULL);
269 + if (result)
270 + sdev_printk(KERN_ERR, sdev, "SEND DIAGNOSTIC result: %8x\n",
271 + result);
272 +diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
273 +index f29fbadb05487..78329d0e9af0a 100644
274 +--- a/drivers/usb/dwc2/hcd.c
275 ++++ b/drivers/usb/dwc2/hcd.c
276 +@@ -5074,6 +5074,10 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
277 + hcd->has_tt = 1;
278 +
279 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
280 ++ if (!res) {
281 ++ retval = -EINVAL;
282 ++ goto error1;
283 ++ }
284 + hcd->rsrc_start = res->start;
285 + hcd->rsrc_len = resource_size(res);
286 +
287 +diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
288 +index e0cc551645059..abac81a2e694c 100644
289 +--- a/fs/ext2/balloc.c
290 ++++ b/fs/ext2/balloc.c
291 +@@ -48,10 +48,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
292 + struct ext2_sb_info *sbi = EXT2_SB(sb);
293 +
294 + if (block_group >= sbi->s_groups_count) {
295 +- ext2_error (sb, "ext2_get_group_desc",
296 +- "block_group >= groups_count - "
297 +- "block_group = %d, groups_count = %lu",
298 +- block_group, sbi->s_groups_count);
299 ++ WARN(1, "block_group >= groups_count - "
300 ++ "block_group = %d, groups_count = %lu",
301 ++ block_group, sbi->s_groups_count);
302 +
303 + return NULL;
304 + }
305 +@@ -59,10 +58,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
306 + group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(sb);
307 + offset = block_group & (EXT2_DESC_PER_BLOCK(sb) - 1);
308 + if (!sbi->s_group_desc[group_desc]) {
309 +- ext2_error (sb, "ext2_get_group_desc",
310 +- "Group descriptor not loaded - "
311 +- "block_group = %d, group_desc = %lu, desc = %lu",
312 +- block_group, group_desc, offset);
313 ++ WARN(1, "Group descriptor not loaded - "
314 ++ "block_group = %d, group_desc = %lu, desc = %lu",
315 ++ block_group, group_desc, offset);
316 + return NULL;
317 + }
318 +
319 +diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
320 +index 4a258065188e1..670e97dd67f06 100644
321 +--- a/fs/nfsd/nfscache.c
322 ++++ b/fs/nfsd/nfscache.c
323 +@@ -173,14 +173,10 @@ int nfsd_reply_cache_init(struct nfsd_net *nn)
324 + if (status)
325 + goto out_nomem;
326 +
327 +- nn->drc_hashtbl = kcalloc(hashsize,
328 +- sizeof(*nn->drc_hashtbl), GFP_KERNEL);
329 +- if (!nn->drc_hashtbl) {
330 +- nn->drc_hashtbl = vzalloc(array_size(hashsize,
331 +- sizeof(*nn->drc_hashtbl)));
332 +- if (!nn->drc_hashtbl)
333 +- goto out_shrinker;
334 +- }
335 ++ nn->drc_hashtbl = kvzalloc(array_size(hashsize,
336 ++ sizeof(*nn->drc_hashtbl)), GFP_KERNEL);
337 ++ if (!nn->drc_hashtbl)
338 ++ goto out_shrinker;
339 +
340 + for (i = 0; i < hashsize; i++) {
341 + INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head);
342 +diff --git a/include/linux/libata.h b/include/linux/libata.h
343 +index 3c3d8d6b16183..3d5adbaf8214f 100644
344 +--- a/include/linux/libata.h
345 ++++ b/include/linux/libata.h
346 +@@ -423,6 +423,7 @@ enum {
347 + ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
348 + ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */
349 + ATA_HORKAGE_MAX_TRIM_128M = (1 << 26), /* Limit max trim size to 128M */
350 ++ ATA_HORKAGE_NO_NCQ_ON_ATI = (1 << 27), /* Disable NCQ on ATI chipset */
351 +
352 + /* DMA mask for user DMA control: User visible values; DO NOT
353 + renumber */
354 +diff --git a/include/linux/mdio.h b/include/linux/mdio.h
355 +index a7604248777b7..0f1f784de80e9 100644
356 +--- a/include/linux/mdio.h
357 ++++ b/include/linux/mdio.h
358 +@@ -64,6 +64,9 @@ struct mdio_driver {
359 +
360 + /* Clears up any memory if needed */
361 + void (*remove)(struct mdio_device *mdiodev);
362 ++
363 ++ /* Quiesces the device on system shutdown, turns off interrupts etc */
364 ++ void (*shutdown)(struct mdio_device *mdiodev);
365 + };
366 + #define to_mdio_driver(d) \
367 + container_of(to_mdio_common_driver(d), struct mdio_driver, mdiodrv)
368 +diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
369 +index 00bb97d76000f..2cbc09aad7f64 100644
370 +--- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
371 ++++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
372 +@@ -82,7 +82,8 @@ int get_warnings_count(void)
373 + FILE *f;
374 +
375 + f = popen("dmesg | grep \"WARNING:\" | wc -l", "r");
376 +- fscanf(f, "%d", &warnings);
377 ++ if (fscanf(f, "%d", &warnings) < 1)
378 ++ warnings = 0;
379 + fclose(f);
380 +
381 + return warnings;
382 +diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
383 +index 67386aa3f31d1..8794ce382bf5a 100644
384 +--- a/tools/testing/selftests/lib.mk
385 ++++ b/tools/testing/selftests/lib.mk
386 +@@ -48,6 +48,7 @@ ARCH ?= $(SUBARCH)
387 + # When local build is done, headers are installed in the default
388 + # INSTALL_HDR_PATH usr/include.
389 + .PHONY: khdr
390 ++.NOTPARALLEL:
391 + khdr:
392 + ifndef KSFT_KHDR_INSTALL_DONE
393 + ifeq (1,$(DEFAULT_INSTALL_HDR_PATH))
394 +diff --git a/tools/usb/testusb.c b/tools/usb/testusb.c
395 +index ee8208b2f9460..69c3ead25313d 100644
396 +--- a/tools/usb/testusb.c
397 ++++ b/tools/usb/testusb.c
398 +@@ -265,12 +265,6 @@ nomem:
399 + }
400 +
401 + entry->ifnum = ifnum;
402 +-
403 +- /* FIXME update USBDEVFS_CONNECTINFO so it tells about high speed etc */
404 +-
405 +- fprintf(stderr, "%s speed\t%s\t%u\n",
406 +- speed(entry->speed), entry->name, entry->ifnum);
407 +-
408 + entry->next = testdevs;
409 + testdevs = entry;
410 + return 0;
411 +@@ -299,6 +293,14 @@ static void *handle_testdev (void *arg)
412 + return 0;
413 + }
414 +
415 ++ status = ioctl(fd, USBDEVFS_GET_SPEED, NULL);
416 ++ if (status < 0)
417 ++ fprintf(stderr, "USBDEVFS_GET_SPEED failed %d\n", status);
418 ++ else
419 ++ dev->speed = status;
420 ++ fprintf(stderr, "%s speed\t%s\t%u\n",
421 ++ speed(dev->speed), dev->name, dev->ifnum);
422 ++
423 + restart:
424 + for (i = 0; i < TEST_CASES; i++) {
425 + if (dev->test != -1 && dev->test != i)
426 +diff --git a/tools/vm/page-types.c b/tools/vm/page-types.c
427 +index 58c0eab71bca3..d2e836b2d16b0 100644
428 +--- a/tools/vm/page-types.c
429 ++++ b/tools/vm/page-types.c
430 +@@ -1329,7 +1329,7 @@ int main(int argc, char *argv[])
431 + if (opt_list && opt_list_mapcnt)
432 + kpagecount_fd = checked_open(PROC_KPAGECOUNT, O_RDONLY);
433 +
434 +- if (opt_mark_idle && opt_file)
435 ++ if (opt_mark_idle)
436 + page_idle_fd = checked_open(SYS_KERNEL_MM_PAGE_IDLE, O_RDWR);
437 +
438 + if (opt_list && opt_pid)
439 +diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
440 +index 77f84cbca7406..f31976010622f 100644
441 +--- a/virt/kvm/kvm_main.c
442 ++++ b/virt/kvm/kvm_main.c
443 +@@ -2470,15 +2470,19 @@ out:
444 +
445 + static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu)
446 + {
447 +- unsigned int old, val, shrink;
448 ++ unsigned int old, val, shrink, grow_start;
449 +
450 + old = val = vcpu->halt_poll_ns;
451 + shrink = READ_ONCE(halt_poll_ns_shrink);
452 ++ grow_start = READ_ONCE(halt_poll_ns_grow_start);
453 + if (shrink == 0)
454 + val = 0;
455 + else
456 + val /= shrink;
457 +
458 ++ if (val < grow_start)
459 ++ val = 0;
460 ++
461 + vcpu->halt_poll_ns = val;
462 + trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old);
463 + }