Contents of /trunk/kernel-alx/patches-5.4/0130-5.4.31-all-fixes.patch
Parent Directory | Revision Log
Revision 3511 -
(show annotations)
(download)
Mon May 11 14:36:37 2020 UTC (4 years, 4 months ago) by niro
File size: 43307 byte(s)
Mon May 11 14:36:37 2020 UTC (4 years, 4 months ago) by niro
File size: 43307 byte(s)
-linux-5.4.31
1 | diff --git a/Makefile b/Makefile |
2 | index e1f41756f475..af28533919cc 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,7 +1,7 @@ |
6 | # SPDX-License-Identifier: GPL-2.0 |
7 | VERSION = 5 |
8 | PATCHLEVEL = 4 |
9 | -SUBLEVEL = 30 |
10 | +SUBLEVEL = 31 |
11 | EXTRAVERSION = |
12 | NAME = Kleptomaniac Octopus |
13 | |
14 | diff --git a/drivers/extcon/extcon-axp288.c b/drivers/extcon/extcon-axp288.c |
15 | index 415afaf479e7..0840c0f1bf2e 100644 |
16 | --- a/drivers/extcon/extcon-axp288.c |
17 | +++ b/drivers/extcon/extcon-axp288.c |
18 | @@ -423,9 +423,40 @@ static int axp288_extcon_probe(struct platform_device *pdev) |
19 | /* Start charger cable type detection */ |
20 | axp288_extcon_enable(info); |
21 | |
22 | + device_init_wakeup(dev, true); |
23 | + platform_set_drvdata(pdev, info); |
24 | + |
25 | + return 0; |
26 | +} |
27 | + |
28 | +static int __maybe_unused axp288_extcon_suspend(struct device *dev) |
29 | +{ |
30 | + struct axp288_extcon_info *info = dev_get_drvdata(dev); |
31 | + |
32 | + if (device_may_wakeup(dev)) |
33 | + enable_irq_wake(info->irq[VBUS_RISING_IRQ]); |
34 | + |
35 | return 0; |
36 | } |
37 | |
38 | +static int __maybe_unused axp288_extcon_resume(struct device *dev) |
39 | +{ |
40 | + struct axp288_extcon_info *info = dev_get_drvdata(dev); |
41 | + |
42 | + /* |
43 | + * Wakeup when a charger is connected to do charger-type |
44 | + * connection and generate an extcon event which makes the |
45 | + * axp288 charger driver set the input current limit. |
46 | + */ |
47 | + if (device_may_wakeup(dev)) |
48 | + disable_irq_wake(info->irq[VBUS_RISING_IRQ]); |
49 | + |
50 | + return 0; |
51 | +} |
52 | + |
53 | +static SIMPLE_DEV_PM_OPS(axp288_extcon_pm_ops, axp288_extcon_suspend, |
54 | + axp288_extcon_resume); |
55 | + |
56 | static const struct platform_device_id axp288_extcon_table[] = { |
57 | { .name = "axp288_extcon" }, |
58 | {}, |
59 | @@ -437,6 +468,7 @@ static struct platform_driver axp288_extcon_driver = { |
60 | .id_table = axp288_extcon_table, |
61 | .driver = { |
62 | .name = "axp288_extcon", |
63 | + .pm = &axp288_extcon_pm_ops, |
64 | }, |
65 | }; |
66 | |
67 | diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c |
68 | index 93b3500e522b..4f0f0de83293 100644 |
69 | --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c |
70 | +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c |
71 | @@ -1375,7 +1375,7 @@ static int vcn_v1_0_set_clockgating_state(void *handle, |
72 | |
73 | if (enable) { |
74 | /* wait for STATUS to clear */ |
75 | - if (vcn_v1_0_is_idle(handle)) |
76 | + if (!vcn_v1_0_is_idle(handle)) |
77 | return -EBUSY; |
78 | vcn_v1_0_enable_clock_gating(adev); |
79 | } else { |
80 | diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c |
81 | index 0ab890c927ec..6dd2334dd5e6 100644 |
82 | --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c |
83 | +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c |
84 | @@ -2879,6 +2879,17 @@ static bool retrieve_link_cap(struct dc_link *link) |
85 | sink_id.ieee_device_id, |
86 | sizeof(sink_id.ieee_device_id)); |
87 | |
88 | + /* Quirk Apple MBP 2017 15" Retina panel: Wrong DP_MAX_LINK_RATE */ |
89 | + { |
90 | + uint8_t str_mbp_2017[] = { 101, 68, 21, 101, 98, 97 }; |
91 | + |
92 | + if ((link->dpcd_caps.sink_dev_id == 0x0010fa) && |
93 | + !memcmp(link->dpcd_caps.sink_dev_id_str, str_mbp_2017, |
94 | + sizeof(str_mbp_2017))) { |
95 | + link->reported_link_cap.link_rate = 0x0c; |
96 | + } |
97 | + } |
98 | + |
99 | core_link_read_dpcd( |
100 | link, |
101 | DP_SINK_HW_REVISION_START, |
102 | diff --git a/drivers/gpu/drm/bochs/bochs_hw.c b/drivers/gpu/drm/bochs/bochs_hw.c |
103 | index e567bdfa2ab8..bb1391784caf 100644 |
104 | --- a/drivers/gpu/drm/bochs/bochs_hw.c |
105 | +++ b/drivers/gpu/drm/bochs/bochs_hw.c |
106 | @@ -156,10 +156,8 @@ int bochs_hw_init(struct drm_device *dev) |
107 | size = min(size, mem); |
108 | } |
109 | |
110 | - if (pci_request_region(pdev, 0, "bochs-drm") != 0) { |
111 | - DRM_ERROR("Cannot request framebuffer\n"); |
112 | - return -EBUSY; |
113 | - } |
114 | + if (pci_request_region(pdev, 0, "bochs-drm") != 0) |
115 | + DRM_WARN("Cannot request framebuffer, boot fb still active?\n"); |
116 | |
117 | bochs->fb_map = ioremap(addr, size); |
118 | if (bochs->fb_map == NULL) { |
119 | diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c |
120 | index f1c714acc280..3ff6fbd79b12 100644 |
121 | --- a/drivers/i2c/busses/i2c-i801.c |
122 | +++ b/drivers/i2c/busses/i2c-i801.c |
123 | @@ -129,11 +129,6 @@ |
124 | #define TCOBASE 0x050 |
125 | #define TCOCTL 0x054 |
126 | |
127 | -#define ACPIBASE 0x040 |
128 | -#define ACPIBASE_SMI_OFF 0x030 |
129 | -#define ACPICTRL 0x044 |
130 | -#define ACPICTRL_EN 0x080 |
131 | - |
132 | #define SBREG_BAR 0x10 |
133 | #define SBREG_SMBCTRL 0xc6000c |
134 | #define SBREG_SMBCTRL_DNV 0xcf000c |
135 | @@ -1544,7 +1539,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, |
136 | pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden); |
137 | spin_unlock(&p2sb_spinlock); |
138 | |
139 | - res = &tco_res[ICH_RES_MEM_OFF]; |
140 | + res = &tco_res[1]; |
141 | if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS) |
142 | res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV; |
143 | else |
144 | @@ -1554,7 +1549,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, |
145 | res->flags = IORESOURCE_MEM; |
146 | |
147 | return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, |
148 | - tco_res, 3, &spt_tco_platform_data, |
149 | + tco_res, 2, &spt_tco_platform_data, |
150 | sizeof(spt_tco_platform_data)); |
151 | } |
152 | |
153 | @@ -1567,17 +1562,16 @@ static struct platform_device * |
154 | i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev, |
155 | struct resource *tco_res) |
156 | { |
157 | - return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, |
158 | - tco_res, 2, &cnl_tco_platform_data, |
159 | - sizeof(cnl_tco_platform_data)); |
160 | + return platform_device_register_resndata(&pci_dev->dev, |
161 | + "iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data, |
162 | + sizeof(cnl_tco_platform_data)); |
163 | } |
164 | |
165 | static void i801_add_tco(struct i801_priv *priv) |
166 | { |
167 | - u32 base_addr, tco_base, tco_ctl, ctrl_val; |
168 | struct pci_dev *pci_dev = priv->pci_dev; |
169 | - struct resource tco_res[3], *res; |
170 | - unsigned int devfn; |
171 | + struct resource tco_res[2], *res; |
172 | + u32 tco_base, tco_ctl; |
173 | |
174 | /* If we have ACPI based watchdog use that instead */ |
175 | if (acpi_has_watchdog()) |
176 | @@ -1592,30 +1586,15 @@ static void i801_add_tco(struct i801_priv *priv) |
177 | return; |
178 | |
179 | memset(tco_res, 0, sizeof(tco_res)); |
180 | - |
181 | - res = &tco_res[ICH_RES_IO_TCO]; |
182 | - res->start = tco_base & ~1; |
183 | - res->end = res->start + 32 - 1; |
184 | - res->flags = IORESOURCE_IO; |
185 | - |
186 | /* |
187 | - * Power Management registers. |
188 | + * Always populate the main iTCO IO resource here. The second entry |
189 | + * for NO_REBOOT MMIO is filled by the SPT specific function. |
190 | */ |
191 | - devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2); |
192 | - pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr); |
193 | - |
194 | - res = &tco_res[ICH_RES_IO_SMI]; |
195 | - res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF; |
196 | - res->end = res->start + 3; |
197 | + res = &tco_res[0]; |
198 | + res->start = tco_base & ~1; |
199 | + res->end = res->start + 32 - 1; |
200 | res->flags = IORESOURCE_IO; |
201 | |
202 | - /* |
203 | - * Enable the ACPI I/O space. |
204 | - */ |
205 | - pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val); |
206 | - ctrl_val |= ACPICTRL_EN; |
207 | - pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val); |
208 | - |
209 | if (priv->features & FEATURE_TCO_CNL) |
210 | priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res); |
211 | else |
212 | diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c |
213 | index c2f0d9ba93de..13e4203497b3 100644 |
214 | --- a/drivers/infiniband/hw/hfi1/user_sdma.c |
215 | +++ b/drivers/infiniband/hw/hfi1/user_sdma.c |
216 | @@ -141,6 +141,7 @@ static int defer_packet_queue( |
217 | */ |
218 | xchg(&pq->state, SDMA_PKT_Q_DEFERRED); |
219 | if (list_empty(&pq->busy.list)) { |
220 | + pq->busy.lock = &sde->waitlock; |
221 | iowait_get_priority(&pq->busy); |
222 | iowait_queue(pkts_sent, &pq->busy, &sde->dmawait); |
223 | } |
224 | @@ -155,6 +156,7 @@ static void activate_packet_queue(struct iowait *wait, int reason) |
225 | { |
226 | struct hfi1_user_sdma_pkt_q *pq = |
227 | container_of(wait, struct hfi1_user_sdma_pkt_q, busy); |
228 | + pq->busy.lock = NULL; |
229 | xchg(&pq->state, SDMA_PKT_Q_ACTIVE); |
230 | wake_up(&wait->wait_dma); |
231 | }; |
232 | @@ -256,6 +258,21 @@ pq_reqs_nomem: |
233 | return ret; |
234 | } |
235 | |
236 | +static void flush_pq_iowait(struct hfi1_user_sdma_pkt_q *pq) |
237 | +{ |
238 | + unsigned long flags; |
239 | + seqlock_t *lock = pq->busy.lock; |
240 | + |
241 | + if (!lock) |
242 | + return; |
243 | + write_seqlock_irqsave(lock, flags); |
244 | + if (!list_empty(&pq->busy.list)) { |
245 | + list_del_init(&pq->busy.list); |
246 | + pq->busy.lock = NULL; |
247 | + } |
248 | + write_sequnlock_irqrestore(lock, flags); |
249 | +} |
250 | + |
251 | int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, |
252 | struct hfi1_ctxtdata *uctxt) |
253 | { |
254 | @@ -281,6 +298,7 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, |
255 | kfree(pq->reqs); |
256 | kfree(pq->req_in_use); |
257 | kmem_cache_destroy(pq->txreq_cache); |
258 | + flush_pq_iowait(pq); |
259 | kfree(pq); |
260 | } else { |
261 | spin_unlock(&fd->pq_rcu_lock); |
262 | @@ -587,11 +605,12 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, |
263 | if (ret < 0) { |
264 | if (ret != -EBUSY) |
265 | goto free_req; |
266 | - wait_event_interruptible_timeout( |
267 | + if (wait_event_interruptible_timeout( |
268 | pq->busy.wait_dma, |
269 | - (pq->state == SDMA_PKT_Q_ACTIVE), |
270 | + pq->state == SDMA_PKT_Q_ACTIVE, |
271 | msecs_to_jiffies( |
272 | - SDMA_IOWAIT_TIMEOUT)); |
273 | + SDMA_IOWAIT_TIMEOUT)) <= 0) |
274 | + flush_pq_iowait(pq); |
275 | } |
276 | } |
277 | *count += idx; |
278 | diff --git a/drivers/md/dm.c b/drivers/md/dm.c |
279 | index cf71a2277d60..1e6e0c970e19 100644 |
280 | --- a/drivers/md/dm.c |
281 | +++ b/drivers/md/dm.c |
282 | @@ -1760,8 +1760,9 @@ static blk_qc_t dm_process_bio(struct mapped_device *md, |
283 | * won't be imposed. |
284 | */ |
285 | if (current->bio_list) { |
286 | - blk_queue_split(md->queue, &bio); |
287 | - if (!is_abnormal_io(bio)) |
288 | + if (is_abnormal_io(bio)) |
289 | + blk_queue_split(md->queue, &bio); |
290 | + else |
291 | dm_queue_split(md, ti, &bio); |
292 | } |
293 | |
294 | diff --git a/drivers/misc/cardreader/rts5227.c b/drivers/misc/cardreader/rts5227.c |
295 | index 423fecc19fc4..3a9467aaa435 100644 |
296 | --- a/drivers/misc/cardreader/rts5227.c |
297 | +++ b/drivers/misc/cardreader/rts5227.c |
298 | @@ -394,6 +394,7 @@ static const struct pcr_ops rts522a_pcr_ops = { |
299 | void rts522a_init_params(struct rtsx_pcr *pcr) |
300 | { |
301 | rts5227_init_params(pcr); |
302 | + pcr->ops = &rts522a_pcr_ops; |
303 | pcr->tx_initial_phase = SET_CLOCK_PHASE(20, 20, 11); |
304 | pcr->reg_pm_ctrl3 = RTS522A_PM_CTRL3; |
305 | |
306 | diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h |
307 | index 69d9b1736bf9..e56dc4754064 100644 |
308 | --- a/drivers/misc/mei/hw-me-regs.h |
309 | +++ b/drivers/misc/mei/hw-me-regs.h |
310 | @@ -87,6 +87,8 @@ |
311 | #define MEI_DEV_ID_CMP_H 0x06e0 /* Comet Lake H */ |
312 | #define MEI_DEV_ID_CMP_H_3 0x06e4 /* Comet Lake H 3 (iTouch) */ |
313 | |
314 | +#define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */ |
315 | + |
316 | #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */ |
317 | |
318 | #define MEI_DEV_ID_TGP_LP 0xA0E0 /* Tiger Lake Point LP */ |
319 | diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c |
320 | index 309cb8a23381..75ab2ffbf235 100644 |
321 | --- a/drivers/misc/mei/pci-me.c |
322 | +++ b/drivers/misc/mei/pci-me.c |
323 | @@ -109,6 +109,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { |
324 | {MEI_PCI_DEVICE(MEI_DEV_ID_MCC, MEI_ME_PCH12_CFG)}, |
325 | {MEI_PCI_DEVICE(MEI_DEV_ID_MCC_4, MEI_ME_PCH8_CFG)}, |
326 | |
327 | + {MEI_PCI_DEVICE(MEI_DEV_ID_CDF, MEI_ME_PCH8_CFG)}, |
328 | + |
329 | /* required last entry */ |
330 | {0, } |
331 | }; |
332 | diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c |
333 | index 6e208a060a58..1154f0435b0a 100644 |
334 | --- a/drivers/misc/pci_endpoint_test.c |
335 | +++ b/drivers/misc/pci_endpoint_test.c |
336 | @@ -98,6 +98,7 @@ struct pci_endpoint_test { |
337 | struct completion irq_raised; |
338 | int last_irq; |
339 | int num_irqs; |
340 | + int irq_type; |
341 | /* mutex to protect the ioctls */ |
342 | struct mutex mutex; |
343 | struct miscdevice miscdev; |
344 | @@ -157,6 +158,7 @@ static void pci_endpoint_test_free_irq_vectors(struct pci_endpoint_test *test) |
345 | struct pci_dev *pdev = test->pdev; |
346 | |
347 | pci_free_irq_vectors(pdev); |
348 | + test->irq_type = IRQ_TYPE_UNDEFINED; |
349 | } |
350 | |
351 | static bool pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test, |
352 | @@ -191,6 +193,8 @@ static bool pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test, |
353 | irq = 0; |
354 | res = false; |
355 | } |
356 | + |
357 | + test->irq_type = type; |
358 | test->num_irqs = irq; |
359 | |
360 | return res; |
361 | @@ -330,6 +334,7 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size) |
362 | dma_addr_t orig_dst_phys_addr; |
363 | size_t offset; |
364 | size_t alignment = test->alignment; |
365 | + int irq_type = test->irq_type; |
366 | u32 src_crc32; |
367 | u32 dst_crc32; |
368 | |
369 | @@ -426,6 +431,7 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size) |
370 | dma_addr_t orig_phys_addr; |
371 | size_t offset; |
372 | size_t alignment = test->alignment; |
373 | + int irq_type = test->irq_type; |
374 | u32 crc32; |
375 | |
376 | if (size > SIZE_MAX - alignment) |
377 | @@ -494,6 +500,7 @@ static bool pci_endpoint_test_read(struct pci_endpoint_test *test, size_t size) |
378 | dma_addr_t orig_phys_addr; |
379 | size_t offset; |
380 | size_t alignment = test->alignment; |
381 | + int irq_type = test->irq_type; |
382 | u32 crc32; |
383 | |
384 | if (size > SIZE_MAX - alignment) |
385 | @@ -555,7 +562,7 @@ static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test, |
386 | return false; |
387 | } |
388 | |
389 | - if (irq_type == req_irq_type) |
390 | + if (test->irq_type == req_irq_type) |
391 | return true; |
392 | |
393 | pci_endpoint_test_release_irq(test); |
394 | @@ -567,12 +574,10 @@ static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test, |
395 | if (!pci_endpoint_test_request_irq(test)) |
396 | goto err; |
397 | |
398 | - irq_type = req_irq_type; |
399 | return true; |
400 | |
401 | err: |
402 | pci_endpoint_test_free_irq_vectors(test); |
403 | - irq_type = IRQ_TYPE_UNDEFINED; |
404 | return false; |
405 | } |
406 | |
407 | @@ -633,7 +638,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev, |
408 | { |
409 | int err; |
410 | int id; |
411 | - char name[20]; |
412 | + char name[24]; |
413 | enum pci_barno bar; |
414 | void __iomem *base; |
415 | struct device *dev = &pdev->dev; |
416 | @@ -652,6 +657,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev, |
417 | test->test_reg_bar = 0; |
418 | test->alignment = 0; |
419 | test->pdev = pdev; |
420 | + test->irq_type = IRQ_TYPE_UNDEFINED; |
421 | |
422 | if (no_msi) |
423 | irq_type = IRQ_TYPE_LEGACY; |
424 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h |
425 | index a3efa29a4629..63116be6b1d6 100644 |
426 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h |
427 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h |
428 | @@ -38,8 +38,8 @@ enum { |
429 | |
430 | enum { |
431 | MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_START = 0, |
432 | - MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 1, |
433 | - MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 2, |
434 | + MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 1, |
435 | + MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 2, |
436 | }; |
437 | |
438 | struct mlx5e_ktls_offload_context_tx { |
439 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c |
440 | index f260dd96873b..52a56622034a 100644 |
441 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c |
442 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c |
443 | @@ -218,7 +218,7 @@ tx_sync_info_get(struct mlx5e_ktls_offload_context_tx *priv_tx, |
444 | * this packet was already acknowledged and its record info |
445 | * was released. |
446 | */ |
447 | - ends_before = before(tcp_seq + datalen, tls_record_start_seq(record)); |
448 | + ends_before = before(tcp_seq + datalen - 1, tls_record_start_seq(record)); |
449 | |
450 | if (unlikely(tls_record_is_start_marker(record))) { |
451 | ret = ends_before ? MLX5E_KTLS_SYNC_SKIP_NO_DATA : MLX5E_KTLS_SYNC_FAIL; |
452 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c |
453 | index a935993a3c51..d43247a95ce5 100644 |
454 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c |
455 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c |
456 | @@ -1934,6 +1934,8 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes) |
457 | if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new, |
458 | BRCMF_SDIO_FT_NORMAL)) { |
459 | rd->len = 0; |
460 | + brcmf_sdio_rxfail(bus, true, true); |
461 | + sdio_release_host(bus->sdiodev->func1); |
462 | brcmu_pkt_buf_free_skb(pkt); |
463 | continue; |
464 | } |
465 | diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c |
466 | index 386ca67ec7b4..cb5465d9c068 100644 |
467 | --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c |
468 | +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c |
469 | @@ -8,7 +8,7 @@ |
470 | * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. |
471 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH |
472 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
473 | - * Copyright(c) 2018 - 2019 Intel Corporation |
474 | + * Copyright(c) 2018 - 2020 Intel Corporation |
475 | * |
476 | * This program is free software; you can redistribute it and/or modify |
477 | * it under the terms of version 2 of the GNU General Public License as |
478 | @@ -31,7 +31,7 @@ |
479 | * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. |
480 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH |
481 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
482 | - * Copyright(c) 2018 - 2019 Intel Corporation |
483 | + * Copyright(c) 2018 - 2020 Intel Corporation |
484 | * All rights reserved. |
485 | * |
486 | * Redistribution and use in source and binary forms, with or without |
487 | @@ -1373,11 +1373,7 @@ static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt, |
488 | goto out; |
489 | } |
490 | |
491 | - /* |
492 | - * region register have absolute value so apply rxf offset after |
493 | - * reading the registers |
494 | - */ |
495 | - offs += rxf_data.offset; |
496 | + offs = rxf_data.offset; |
497 | |
498 | /* Lock fence */ |
499 | iwl_write_prph_no_grab(fwrt->trans, RXF_SET_FENCE_MODE + offs, 0x1); |
500 | @@ -2315,10 +2311,7 @@ static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx) |
501 | goto out; |
502 | } |
503 | |
504 | - if (iwl_fw_dbg_stop_restart_recording(fwrt, ¶ms, true)) { |
505 | - IWL_ERR(fwrt, "Failed to stop DBGC recording, aborting dump\n"); |
506 | - goto out; |
507 | - } |
508 | + iwl_fw_dbg_stop_restart_recording(fwrt, ¶ms, true); |
509 | |
510 | IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection start\n"); |
511 | if (iwl_trans_dbg_ini_valid(fwrt->trans)) |
512 | @@ -2484,14 +2477,14 @@ static int iwl_fw_dbg_restart_recording(struct iwl_trans *trans, |
513 | return 0; |
514 | } |
515 | |
516 | -int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, |
517 | - struct iwl_fw_dbg_params *params, |
518 | - bool stop) |
519 | +void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, |
520 | + struct iwl_fw_dbg_params *params, |
521 | + bool stop) |
522 | { |
523 | int ret = 0; |
524 | |
525 | if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status)) |
526 | - return 0; |
527 | + return; |
528 | |
529 | if (fw_has_capa(&fwrt->fw->ucode_capa, |
530 | IWL_UCODE_TLV_CAPA_DBG_SUSPEND_RESUME_CMD_SUPP)) |
531 | @@ -2508,7 +2501,5 @@ int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, |
532 | iwl_fw_set_dbg_rec_on(fwrt); |
533 | } |
534 | #endif |
535 | - |
536 | - return ret; |
537 | } |
538 | IWL_EXPORT_SYMBOL(iwl_fw_dbg_stop_restart_recording); |
539 | diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h |
540 | index e3b5dd34643f..2ac61629f46f 100644 |
541 | --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h |
542 | +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h |
543 | @@ -263,9 +263,9 @@ _iwl_fw_dbg_trigger_simple_stop(struct iwl_fw_runtime *fwrt, |
544 | _iwl_fw_dbg_trigger_simple_stop((fwrt), (wdev), \ |
545 | iwl_fw_dbg_get_trigger((fwrt)->fw,\ |
546 | (trig))) |
547 | -int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, |
548 | - struct iwl_fw_dbg_params *params, |
549 | - bool stop); |
550 | +void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, |
551 | + struct iwl_fw_dbg_params *params, |
552 | + bool stop); |
553 | |
554 | #ifdef CONFIG_IWLWIFI_DEBUGFS |
555 | static inline void iwl_fw_set_dbg_rec_on(struct iwl_fw_runtime *fwrt) |
556 | diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c |
557 | index 098d48153a38..24df3182ec9e 100644 |
558 | --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c |
559 | +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c |
560 | @@ -147,7 +147,11 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, |
561 | (vht_ena && (vht_cap->cap & IEEE80211_VHT_CAP_RXLDPC)))) |
562 | flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; |
563 | |
564 | - /* consider our LDPC support in case of HE */ |
565 | + /* consider LDPC support in case of HE */ |
566 | + if (he_cap->has_he && (he_cap->he_cap_elem.phy_cap_info[1] & |
567 | + IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) |
568 | + flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; |
569 | + |
570 | if (sband->iftype_data && sband->iftype_data->he_cap.has_he && |
571 | !(sband->iftype_data->he_cap.he_cap_elem.phy_cap_info[1] & |
572 | IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) |
573 | diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c |
574 | index 4ff51da3b13f..73e8475ddc8a 100644 |
575 | --- a/drivers/nvme/host/rdma.c |
576 | +++ b/drivers/nvme/host/rdma.c |
577 | @@ -850,9 +850,11 @@ out_free_tagset: |
578 | if (new) |
579 | blk_mq_free_tag_set(ctrl->ctrl.admin_tagset); |
580 | out_free_async_qe: |
581 | - nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe, |
582 | - sizeof(struct nvme_command), DMA_TO_DEVICE); |
583 | - ctrl->async_event_sqe.data = NULL; |
584 | + if (ctrl->async_event_sqe.data) { |
585 | + nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe, |
586 | + sizeof(struct nvme_command), DMA_TO_DEVICE); |
587 | + ctrl->async_event_sqe.data = NULL; |
588 | + } |
589 | out_free_queue: |
590 | nvme_rdma_free_queue(&ctrl->queues[0]); |
591 | return error; |
592 | diff --git a/drivers/nvmem/nvmem-sysfs.c b/drivers/nvmem/nvmem-sysfs.c |
593 | index 9e0c429cd08a..8759c4470012 100644 |
594 | --- a/drivers/nvmem/nvmem-sysfs.c |
595 | +++ b/drivers/nvmem/nvmem-sysfs.c |
596 | @@ -56,6 +56,9 @@ static ssize_t bin_attr_nvmem_read(struct file *filp, struct kobject *kobj, |
597 | |
598 | count = round_down(count, nvmem->word_size); |
599 | |
600 | + if (!nvmem->reg_read) |
601 | + return -EPERM; |
602 | + |
603 | rc = nvmem->reg_read(nvmem->priv, pos, buf, count); |
604 | |
605 | if (rc) |
606 | @@ -90,6 +93,9 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, struct kobject *kobj, |
607 | |
608 | count = round_down(count, nvmem->word_size); |
609 | |
610 | + if (!nvmem->reg_write) |
611 | + return -EPERM; |
612 | + |
613 | rc = nvmem->reg_write(nvmem->priv, pos, buf, count); |
614 | |
615 | if (rc) |
616 | diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c |
617 | index 793412954529..e401f040f157 100644 |
618 | --- a/drivers/pci/pci-sysfs.c |
619 | +++ b/drivers/pci/pci-sysfs.c |
620 | @@ -464,7 +464,8 @@ static ssize_t dev_rescan_store(struct device *dev, |
621 | } |
622 | return count; |
623 | } |
624 | -static DEVICE_ATTR_WO(dev_rescan); |
625 | +static struct device_attribute dev_attr_dev_rescan = __ATTR(rescan, 0200, NULL, |
626 | + dev_rescan_store); |
627 | |
628 | static ssize_t remove_store(struct device *dev, struct device_attribute *attr, |
629 | const char *buf, size_t count) |
630 | @@ -501,7 +502,8 @@ static ssize_t bus_rescan_store(struct device *dev, |
631 | } |
632 | return count; |
633 | } |
634 | -static DEVICE_ATTR_WO(bus_rescan); |
635 | +static struct device_attribute dev_attr_bus_rescan = __ATTR(rescan, 0200, NULL, |
636 | + bus_rescan_store); |
637 | |
638 | #if defined(CONFIG_PM) && defined(CONFIG_ACPI) |
639 | static ssize_t d3cold_allowed_store(struct device *dev, |
640 | diff --git a/drivers/power/supply/axp288_charger.c b/drivers/power/supply/axp288_charger.c |
641 | index 1bbba6bba673..cf4c67b2d235 100644 |
642 | --- a/drivers/power/supply/axp288_charger.c |
643 | +++ b/drivers/power/supply/axp288_charger.c |
644 | @@ -21,6 +21,7 @@ |
645 | #include <linux/property.h> |
646 | #include <linux/mfd/axp20x.h> |
647 | #include <linux/extcon.h> |
648 | +#include <linux/dmi.h> |
649 | |
650 | #define PS_STAT_VBUS_TRIGGER BIT(0) |
651 | #define PS_STAT_BAT_CHRG_DIR BIT(2) |
652 | @@ -545,6 +546,49 @@ out: |
653 | return IRQ_HANDLED; |
654 | } |
655 | |
656 | +/* |
657 | + * The HP Pavilion x2 10 series comes in a number of variants: |
658 | + * Bay Trail SoC + AXP288 PMIC, DMI_BOARD_NAME: "815D" |
659 | + * Cherry Trail SoC + AXP288 PMIC, DMI_BOARD_NAME: "813E" |
660 | + * Cherry Trail SoC + TI PMIC, DMI_BOARD_NAME: "827C" or "82F4" |
661 | + * |
662 | + * The variants with the AXP288 PMIC are all kinds of special: |
663 | + * |
664 | + * 1. All variants use a Type-C connector which the AXP288 does not support, so |
665 | + * when using a Type-C charger it is not recognized. Unlike most AXP288 devices, |
666 | + * this model actually has mostly working ACPI AC / Battery code, the ACPI code |
667 | + * "solves" this by simply setting the input_current_limit to 3A. |
668 | + * There are still some issues with the ACPI code, so we use this native driver, |
669 | + * and to solve the charging not working (500mA is not enough) issue we hardcode |
670 | + * the 3A input_current_limit like the ACPI code does. |
671 | + * |
672 | + * 2. If no charger is connected the machine boots with the vbus-path disabled. |
673 | + * Normally this is done when a 5V boost converter is active to avoid the PMIC |
674 | + * trying to charge from the 5V boost converter's output. This is done when |
675 | + * an OTG host cable is inserted and the ID pin on the micro-B receptacle is |
676 | + * pulled low and the ID pin has an ACPI event handler associated with it |
677 | + * which re-enables the vbus-path when the ID pin is pulled high when the |
678 | + * OTG host cable is removed. The Type-C connector has no ID pin, there is |
679 | + * no ID pin handler and there appears to be no 5V boost converter, so we |
680 | + * end up not charging because the vbus-path is disabled, until we unplug |
681 | + * the charger which automatically clears the vbus-path disable bit and then |
682 | + * on the second plug-in of the adapter we start charging. To solve the not |
683 | + * charging on first charger plugin we unconditionally enable the vbus-path at |
684 | + * probe on this model, which is safe since there is no 5V boost converter. |
685 | + */ |
686 | +static const struct dmi_system_id axp288_hp_x2_dmi_ids[] = { |
687 | + { |
688 | + /* |
689 | + * Bay Trail model has "Hewlett-Packard" as sys_vendor, Cherry |
690 | + * Trail model has "HP", so we only match on product_name. |
691 | + */ |
692 | + .matches = { |
693 | + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"), |
694 | + }, |
695 | + }, |
696 | + {} /* Terminating entry */ |
697 | +}; |
698 | + |
699 | static void axp288_charger_extcon_evt_worker(struct work_struct *work) |
700 | { |
701 | struct axp288_chrg_info *info = |
702 | @@ -568,7 +612,11 @@ static void axp288_charger_extcon_evt_worker(struct work_struct *work) |
703 | } |
704 | |
705 | /* Determine cable/charger type */ |
706 | - if (extcon_get_state(edev, EXTCON_CHG_USB_SDP) > 0) { |
707 | + if (dmi_check_system(axp288_hp_x2_dmi_ids)) { |
708 | + /* See comment above axp288_hp_x2_dmi_ids declaration */ |
709 | + dev_dbg(&info->pdev->dev, "HP X2 with Type-C, setting inlmt to 3A\n"); |
710 | + current_limit = 3000000; |
711 | + } else if (extcon_get_state(edev, EXTCON_CHG_USB_SDP) > 0) { |
712 | dev_dbg(&info->pdev->dev, "USB SDP charger is connected\n"); |
713 | current_limit = 500000; |
714 | } else if (extcon_get_state(edev, EXTCON_CHG_USB_CDP) > 0) { |
715 | @@ -685,6 +733,13 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info) |
716 | return ret; |
717 | } |
718 | |
719 | + if (dmi_check_system(axp288_hp_x2_dmi_ids)) { |
720 | + /* See comment above axp288_hp_x2_dmi_ids declaration */ |
721 | + ret = axp288_charger_vbus_path_select(info, true); |
722 | + if (ret < 0) |
723 | + return ret; |
724 | + } |
725 | + |
726 | /* Read current charge voltage and current limit */ |
727 | ret = regmap_read(info->regmap, AXP20X_CHRG_CTRL1, &val); |
728 | if (ret < 0) { |
729 | diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c |
730 | index 3c82de5f9417..73a852b2f417 100644 |
731 | --- a/drivers/soc/mediatek/mtk-cmdq-helper.c |
732 | +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c |
733 | @@ -38,6 +38,7 @@ struct cmdq_client *cmdq_mbox_create(struct device *dev, int index, u32 timeout) |
734 | client->pkt_cnt = 0; |
735 | client->client.dev = dev; |
736 | client->client.tx_block = false; |
737 | + client->client.knows_txdone = true; |
738 | client->chan = mbox_request_channel(&client->client, index); |
739 | |
740 | if (IS_ERR(client->chan)) { |
741 | diff --git a/drivers/watchdog/iTCO_vendor.h b/drivers/watchdog/iTCO_vendor.h |
742 | index 0f7373ba10d5..69e92e692ae0 100644 |
743 | --- a/drivers/watchdog/iTCO_vendor.h |
744 | +++ b/drivers/watchdog/iTCO_vendor.h |
745 | @@ -1,10 +1,12 @@ |
746 | /* SPDX-License-Identifier: GPL-2.0 */ |
747 | /* iTCO Vendor Specific Support hooks */ |
748 | #ifdef CONFIG_ITCO_VENDOR_SUPPORT |
749 | +extern int iTCO_vendorsupport; |
750 | extern void iTCO_vendor_pre_start(struct resource *, unsigned int); |
751 | extern void iTCO_vendor_pre_stop(struct resource *); |
752 | extern int iTCO_vendor_check_noreboot_on(void); |
753 | #else |
754 | +#define iTCO_vendorsupport 0 |
755 | #define iTCO_vendor_pre_start(acpibase, heartbeat) {} |
756 | #define iTCO_vendor_pre_stop(acpibase) {} |
757 | #define iTCO_vendor_check_noreboot_on() 1 |
758 | diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c |
759 | index 4f1b96f59349..cf0eaa04b064 100644 |
760 | --- a/drivers/watchdog/iTCO_vendor_support.c |
761 | +++ b/drivers/watchdog/iTCO_vendor_support.c |
762 | @@ -39,8 +39,10 @@ |
763 | /* Broken BIOS */ |
764 | #define BROKEN_BIOS 911 |
765 | |
766 | -static int vendorsupport; |
767 | -module_param(vendorsupport, int, 0); |
768 | +int iTCO_vendorsupport; |
769 | +EXPORT_SYMBOL(iTCO_vendorsupport); |
770 | + |
771 | +module_param_named(vendorsupport, iTCO_vendorsupport, int, 0); |
772 | MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default=" |
773 | "0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS"); |
774 | |
775 | @@ -152,7 +154,7 @@ static void broken_bios_stop(struct resource *smires) |
776 | void iTCO_vendor_pre_start(struct resource *smires, |
777 | unsigned int heartbeat) |
778 | { |
779 | - switch (vendorsupport) { |
780 | + switch (iTCO_vendorsupport) { |
781 | case SUPERMICRO_OLD_BOARD: |
782 | supermicro_old_pre_start(smires); |
783 | break; |
784 | @@ -165,7 +167,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_start); |
785 | |
786 | void iTCO_vendor_pre_stop(struct resource *smires) |
787 | { |
788 | - switch (vendorsupport) { |
789 | + switch (iTCO_vendorsupport) { |
790 | case SUPERMICRO_OLD_BOARD: |
791 | supermicro_old_pre_stop(smires); |
792 | break; |
793 | @@ -178,7 +180,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop); |
794 | |
795 | int iTCO_vendor_check_noreboot_on(void) |
796 | { |
797 | - switch (vendorsupport) { |
798 | + switch (iTCO_vendorsupport) { |
799 | case SUPERMICRO_OLD_BOARD: |
800 | return 0; |
801 | default: |
802 | @@ -189,13 +191,13 @@ EXPORT_SYMBOL(iTCO_vendor_check_noreboot_on); |
803 | |
804 | static int __init iTCO_vendor_init_module(void) |
805 | { |
806 | - if (vendorsupport == SUPERMICRO_NEW_BOARD) { |
807 | + if (iTCO_vendorsupport == SUPERMICRO_NEW_BOARD) { |
808 | pr_warn("Option vendorsupport=%d is no longer supported, " |
809 | "please use the w83627hf_wdt driver instead\n", |
810 | SUPERMICRO_NEW_BOARD); |
811 | return -EINVAL; |
812 | } |
813 | - pr_info("vendor-support=%d\n", vendorsupport); |
814 | + pr_info("vendor-support=%d\n", iTCO_vendorsupport); |
815 | return 0; |
816 | } |
817 | |
818 | diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c |
819 | index 156360e37714..e707c4797f76 100644 |
820 | --- a/drivers/watchdog/iTCO_wdt.c |
821 | +++ b/drivers/watchdog/iTCO_wdt.c |
822 | @@ -459,13 +459,25 @@ static int iTCO_wdt_probe(struct platform_device *pdev) |
823 | if (!p->tco_res) |
824 | return -ENODEV; |
825 | |
826 | - p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI); |
827 | - if (!p->smi_res) |
828 | - return -ENODEV; |
829 | - |
830 | p->iTCO_version = pdata->version; |
831 | p->pci_dev = to_pci_dev(dev->parent); |
832 | |
833 | + p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI); |
834 | + if (p->smi_res) { |
835 | + /* The TCO logic uses the TCO_EN bit in the SMI_EN register */ |
836 | + if (!devm_request_region(dev, p->smi_res->start, |
837 | + resource_size(p->smi_res), |
838 | + pdev->name)) { |
839 | + pr_err("I/O address 0x%04llx already in use, device disabled\n", |
840 | + (u64)SMI_EN(p)); |
841 | + return -EBUSY; |
842 | + } |
843 | + } else if (iTCO_vendorsupport || |
844 | + turn_SMI_watchdog_clear_off >= p->iTCO_version) { |
845 | + pr_err("SMI I/O resource is missing\n"); |
846 | + return -ENODEV; |
847 | + } |
848 | + |
849 | iTCO_wdt_no_reboot_bit_setup(p, pdata); |
850 | |
851 | /* |
852 | @@ -492,14 +504,6 @@ static int iTCO_wdt_probe(struct platform_device *pdev) |
853 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ |
854 | p->update_no_reboot_bit(p->no_reboot_priv, true); |
855 | |
856 | - /* The TCO logic uses the TCO_EN bit in the SMI_EN register */ |
857 | - if (!devm_request_region(dev, p->smi_res->start, |
858 | - resource_size(p->smi_res), |
859 | - pdev->name)) { |
860 | - pr_err("I/O address 0x%04llx already in use, device disabled\n", |
861 | - (u64)SMI_EN(p)); |
862 | - return -EBUSY; |
863 | - } |
864 | if (turn_SMI_watchdog_clear_off >= p->iTCO_version) { |
865 | /* |
866 | * Bit 13: TCO_EN -> 0 |
867 | diff --git a/include/uapi/linux/coresight-stm.h b/include/uapi/linux/coresight-stm.h |
868 | index aac550a52f80..8847dbf24151 100644 |
869 | --- a/include/uapi/linux/coresight-stm.h |
870 | +++ b/include/uapi/linux/coresight-stm.h |
871 | @@ -2,8 +2,10 @@ |
872 | #ifndef __UAPI_CORESIGHT_STM_H_ |
873 | #define __UAPI_CORESIGHT_STM_H_ |
874 | |
875 | -#define STM_FLAG_TIMESTAMPED BIT(3) |
876 | -#define STM_FLAG_GUARANTEED BIT(7) |
877 | +#include <linux/const.h> |
878 | + |
879 | +#define STM_FLAG_TIMESTAMPED _BITUL(3) |
880 | +#define STM_FLAG_GUARANTEED _BITUL(7) |
881 | |
882 | /* |
883 | * The CoreSight STM supports guaranteed and invariant timing |
884 | diff --git a/kernel/padata.c b/kernel/padata.c |
885 | index fda7a7039422..c4b774331e46 100644 |
886 | --- a/kernel/padata.c |
887 | +++ b/kernel/padata.c |
888 | @@ -516,7 +516,7 @@ static int padata_replace(struct padata_instance *pinst) |
889 | { |
890 | int notification_mask = 0; |
891 | struct padata_shell *ps; |
892 | - int err; |
893 | + int err = 0; |
894 | |
895 | pinst->flags |= PADATA_RESET; |
896 | |
897 | @@ -643,8 +643,8 @@ int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, |
898 | struct cpumask *serial_mask, *parallel_mask; |
899 | int err = -EINVAL; |
900 | |
901 | - mutex_lock(&pinst->lock); |
902 | get_online_cpus(); |
903 | + mutex_lock(&pinst->lock); |
904 | |
905 | switch (cpumask_type) { |
906 | case PADATA_CPU_PARALLEL: |
907 | @@ -662,8 +662,8 @@ int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, |
908 | err = __padata_set_cpumasks(pinst, parallel_mask, serial_mask); |
909 | |
910 | out: |
911 | - put_online_cpus(); |
912 | mutex_unlock(&pinst->lock); |
913 | + put_online_cpus(); |
914 | |
915 | return err; |
916 | } |
917 | diff --git a/lib/test_xarray.c b/lib/test_xarray.c |
918 | index 55c14e8c8859..8c7d7a8468b8 100644 |
919 | --- a/lib/test_xarray.c |
920 | +++ b/lib/test_xarray.c |
921 | @@ -12,6 +12,9 @@ |
922 | static unsigned int tests_run; |
923 | static unsigned int tests_passed; |
924 | |
925 | +static const unsigned int order_limit = |
926 | + IS_ENABLED(CONFIG_XARRAY_MULTI) ? BITS_PER_LONG : 1; |
927 | + |
928 | #ifndef XA_DEBUG |
929 | # ifdef __KERNEL__ |
930 | void xa_dump(const struct xarray *xa) { } |
931 | @@ -959,6 +962,20 @@ static noinline void check_multi_find_2(struct xarray *xa) |
932 | } |
933 | } |
934 | |
935 | +static noinline void check_multi_find_3(struct xarray *xa) |
936 | +{ |
937 | + unsigned int order; |
938 | + |
939 | + for (order = 5; order < order_limit; order++) { |
940 | + unsigned long index = 1UL << (order - 5); |
941 | + |
942 | + XA_BUG_ON(xa, !xa_empty(xa)); |
943 | + xa_store_order(xa, 0, order - 4, xa_mk_index(0), GFP_KERNEL); |
944 | + XA_BUG_ON(xa, xa_find_after(xa, &index, ULONG_MAX, XA_PRESENT)); |
945 | + xa_erase_index(xa, 0); |
946 | + } |
947 | +} |
948 | + |
949 | static noinline void check_find_1(struct xarray *xa) |
950 | { |
951 | unsigned long i, j, k; |
952 | @@ -1081,6 +1098,7 @@ static noinline void check_find(struct xarray *xa) |
953 | for (i = 2; i < 10; i++) |
954 | check_multi_find_1(xa, i); |
955 | check_multi_find_2(xa); |
956 | + check_multi_find_3(xa); |
957 | } |
958 | |
959 | /* See find_swap_entry() in mm/shmem.c */ |
960 | diff --git a/lib/xarray.c b/lib/xarray.c |
961 | index 1d9fab7db8da..acd1fad2e862 100644 |
962 | --- a/lib/xarray.c |
963 | +++ b/lib/xarray.c |
964 | @@ -1839,7 +1839,8 @@ static bool xas_sibling(struct xa_state *xas) |
965 | if (!node) |
966 | return false; |
967 | mask = (XA_CHUNK_SIZE << node->shift) - 1; |
968 | - return (xas->xa_index & mask) > (xas->xa_offset << node->shift); |
969 | + return (xas->xa_index & mask) > |
970 | + ((unsigned long)xas->xa_offset << node->shift); |
971 | } |
972 | |
973 | /** |
974 | diff --git a/mm/mempolicy.c b/mm/mempolicy.c |
975 | index fbb3258af275..787c5fc91b21 100644 |
976 | --- a/mm/mempolicy.c |
977 | +++ b/mm/mempolicy.c |
978 | @@ -2822,7 +2822,9 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) |
979 | switch (mode) { |
980 | case MPOL_PREFERRED: |
981 | /* |
982 | - * Insist on a nodelist of one node only |
983 | + * Insist on a nodelist of one node only, although later |
984 | + * we use first_node(nodes) to grab a single node, so here |
985 | + * nodelist (or nodes) cannot be empty. |
986 | */ |
987 | if (nodelist) { |
988 | char *rest = nodelist; |
989 | @@ -2830,6 +2832,8 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) |
990 | rest++; |
991 | if (*rest) |
992 | goto out; |
993 | + if (nodes_empty(nodes)) |
994 | + goto out; |
995 | } |
996 | break; |
997 | case MPOL_INTERLEAVE: |
998 | diff --git a/net/core/dev.c b/net/core/dev.c |
999 | index 931dfdcbabf1..c19c424197e3 100644 |
1000 | --- a/net/core/dev.c |
1001 | +++ b/net/core/dev.c |
1002 | @@ -2795,6 +2795,8 @@ static u16 skb_tx_hash(const struct net_device *dev, |
1003 | |
1004 | if (skb_rx_queue_recorded(skb)) { |
1005 | hash = skb_get_rx_queue(skb); |
1006 | + if (hash >= qoffset) |
1007 | + hash -= qoffset; |
1008 | while (unlikely(hash >= qcount)) |
1009 | hash -= qcount; |
1010 | return hash + qoffset; |
1011 | diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c |
1012 | index 6f7155d91313..5af22c9712a6 100644 |
1013 | --- a/net/ipv4/tcp_input.c |
1014 | +++ b/net/ipv4/tcp_input.c |
1015 | @@ -6096,7 +6096,11 @@ static void tcp_rcv_synrecv_state_fastopen(struct sock *sk) |
1016 | { |
1017 | struct request_sock *req; |
1018 | |
1019 | - tcp_try_undo_loss(sk, false); |
1020 | + /* If we are still handling the SYNACK RTO, see if timestamp ECR allows |
1021 | + * undo. If peer SACKs triggered fast recovery, we can't undo here. |
1022 | + */ |
1023 | + if (inet_csk(sk)->icsk_ca_state == TCP_CA_Loss) |
1024 | + tcp_try_undo_loss(sk, false); |
1025 | |
1026 | /* Reset rtx states to prevent spurious retransmits_timed_out() */ |
1027 | tcp_sk(sk)->retrans_stamp = 0; |
1028 | diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c |
1029 | index 813fd6888142..136eb465bfcb 100644 |
1030 | --- a/net/rxrpc/sendmsg.c |
1031 | +++ b/net/rxrpc/sendmsg.c |
1032 | @@ -58,8 +58,8 @@ static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx, |
1033 | |
1034 | rtt = READ_ONCE(call->peer->rtt); |
1035 | rtt2 = nsecs_to_jiffies64(rtt) * 2; |
1036 | - if (rtt2 < 1) |
1037 | - rtt2 = 1; |
1038 | + if (rtt2 < 2) |
1039 | + rtt2 = 2; |
1040 | |
1041 | timeout = rtt2; |
1042 | tx_start = READ_ONCE(call->tx_hard_ack); |
1043 | diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include |
1044 | index bfb44b265a94..77a69ba9cd19 100644 |
1045 | --- a/scripts/Kconfig.include |
1046 | +++ b/scripts/Kconfig.include |
1047 | @@ -40,3 +40,10 @@ $(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supporte |
1048 | |
1049 | # gcc version including patch level |
1050 | gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) |
1051 | + |
1052 | +# machine bit flags |
1053 | +# $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise. |
1054 | +# $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise. |
1055 | +cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1)) |
1056 | +m32-flag := $(cc-option-bit,-m32) |
1057 | +m64-flag := $(cc-option-bit,-m64) |
1058 | diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c |
1059 | index 32ed46464af7..adad3651889e 100644 |
1060 | --- a/sound/pci/hda/patch_ca0132.c |
1061 | +++ b/sound/pci/hda/patch_ca0132.c |
1062 | @@ -1180,6 +1180,7 @@ static const struct snd_pci_quirk ca0132_quirks[] = { |
1063 | SND_PCI_QUIRK(0x1458, 0xA016, "Recon3Di", QUIRK_R3DI), |
1064 | SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI), |
1065 | SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI), |
1066 | + SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI), |
1067 | SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D), |
1068 | SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5), |
1069 | {} |
1070 | diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile |
1071 | index 13f1e8b9ac52..2b6551269e43 100644 |
1072 | --- a/tools/power/x86/turbostat/Makefile |
1073 | +++ b/tools/power/x86/turbostat/Makefile |
1074 | @@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2 |
1075 | |
1076 | %: %.c |
1077 | @mkdir -p $(BUILD_OUTPUT) |
1078 | - $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) |
1079 | + $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap |
1080 | |
1081 | .PHONY : clean |
1082 | clean : |
1083 | diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c |
1084 | index 5d0fddda842c..988326b67a91 100644 |
1085 | --- a/tools/power/x86/turbostat/turbostat.c |
1086 | +++ b/tools/power/x86/turbostat/turbostat.c |
1087 | @@ -30,7 +30,7 @@ |
1088 | #include <sched.h> |
1089 | #include <time.h> |
1090 | #include <cpuid.h> |
1091 | -#include <linux/capability.h> |
1092 | +#include <sys/capability.h> |
1093 | #include <errno.h> |
1094 | #include <math.h> |
1095 | |
1096 | @@ -304,6 +304,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */ |
1097 | |
1098 | void setup_all_buffers(void); |
1099 | |
1100 | +char *sys_lpi_file; |
1101 | +char *sys_lpi_file_sysfs = "/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us"; |
1102 | +char *sys_lpi_file_debugfs = "/sys/kernel/debug/pmc_core/slp_s0_residency_usec"; |
1103 | + |
1104 | int cpu_is_not_present(int cpu) |
1105 | { |
1106 | return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set); |
1107 | @@ -2916,8 +2920,6 @@ int snapshot_gfx_mhz(void) |
1108 | * |
1109 | * record snapshot of |
1110 | * /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us |
1111 | - * |
1112 | - * return 1 if config change requires a restart, else return 0 |
1113 | */ |
1114 | int snapshot_cpu_lpi_us(void) |
1115 | { |
1116 | @@ -2941,17 +2943,14 @@ int snapshot_cpu_lpi_us(void) |
1117 | /* |
1118 | * snapshot_sys_lpi() |
1119 | * |
1120 | - * record snapshot of |
1121 | - * /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us |
1122 | - * |
1123 | - * return 1 if config change requires a restart, else return 0 |
1124 | + * record snapshot of sys_lpi_file |
1125 | */ |
1126 | int snapshot_sys_lpi_us(void) |
1127 | { |
1128 | FILE *fp; |
1129 | int retval; |
1130 | |
1131 | - fp = fopen_or_die("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", "r"); |
1132 | + fp = fopen_or_die(sys_lpi_file, "r"); |
1133 | |
1134 | retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us); |
1135 | if (retval != 1) { |
1136 | @@ -3151,28 +3150,42 @@ void check_dev_msr() |
1137 | err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" "); |
1138 | } |
1139 | |
1140 | -void check_permissions() |
1141 | +/* |
1142 | + * check for CAP_SYS_RAWIO |
1143 | + * return 0 on success |
1144 | + * return 1 on fail |
1145 | + */ |
1146 | +int check_for_cap_sys_rawio(void) |
1147 | { |
1148 | - struct __user_cap_header_struct cap_header_data; |
1149 | - cap_user_header_t cap_header = &cap_header_data; |
1150 | - struct __user_cap_data_struct cap_data_data; |
1151 | - cap_user_data_t cap_data = &cap_data_data; |
1152 | - extern int capget(cap_user_header_t hdrp, cap_user_data_t datap); |
1153 | - int do_exit = 0; |
1154 | - char pathname[32]; |
1155 | + cap_t caps; |
1156 | + cap_flag_value_t cap_flag_value; |
1157 | |
1158 | - /* check for CAP_SYS_RAWIO */ |
1159 | - cap_header->pid = getpid(); |
1160 | - cap_header->version = _LINUX_CAPABILITY_VERSION; |
1161 | - if (capget(cap_header, cap_data) < 0) |
1162 | - err(-6, "capget(2) failed"); |
1163 | + caps = cap_get_proc(); |
1164 | + if (caps == NULL) |
1165 | + err(-6, "cap_get_proc\n"); |
1166 | |
1167 | - if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) { |
1168 | - do_exit++; |
1169 | + if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value)) |
1170 | + err(-6, "cap_get\n"); |
1171 | + |
1172 | + if (cap_flag_value != CAP_SET) { |
1173 | warnx("capget(CAP_SYS_RAWIO) failed," |
1174 | " try \"# setcap cap_sys_rawio=ep %s\"", progname); |
1175 | + return 1; |
1176 | } |
1177 | |
1178 | + if (cap_free(caps) == -1) |
1179 | + err(-6, "cap_free\n"); |
1180 | + |
1181 | + return 0; |
1182 | +} |
1183 | +void check_permissions(void) |
1184 | +{ |
1185 | + int do_exit = 0; |
1186 | + char pathname[32]; |
1187 | + |
1188 | + /* check for CAP_SYS_RAWIO */ |
1189 | + do_exit += check_for_cap_sys_rawio(); |
1190 | + |
1191 | /* test file permissions */ |
1192 | sprintf(pathname, "/dev/cpu/%d/msr", base_cpu); |
1193 | if (euidaccess(pathname, R_OK)) { |
1194 | @@ -4907,10 +4920,16 @@ void process_cpuid() |
1195 | else |
1196 | BIC_NOT_PRESENT(BIC_CPU_LPI); |
1197 | |
1198 | - if (!access("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", R_OK)) |
1199 | + if (!access(sys_lpi_file_sysfs, R_OK)) { |
1200 | + sys_lpi_file = sys_lpi_file_sysfs; |
1201 | BIC_PRESENT(BIC_SYS_LPI); |
1202 | - else |
1203 | + } else if (!access(sys_lpi_file_debugfs, R_OK)) { |
1204 | + sys_lpi_file = sys_lpi_file_debugfs; |
1205 | + BIC_PRESENT(BIC_SYS_LPI); |
1206 | + } else { |
1207 | + sys_lpi_file_sysfs = NULL; |
1208 | BIC_NOT_PRESENT(BIC_SYS_LPI); |
1209 | + } |
1210 | |
1211 | if (!quiet) |
1212 | decode_misc_feature_control(); |
1213 | @@ -5323,9 +5342,9 @@ int add_counter(unsigned int msr_num, char *path, char *name, |
1214 | } |
1215 | |
1216 | msrp->msr_num = msr_num; |
1217 | - strncpy(msrp->name, name, NAME_BYTES); |
1218 | + strncpy(msrp->name, name, NAME_BYTES - 1); |
1219 | if (path) |
1220 | - strncpy(msrp->path, path, PATH_BYTES); |
1221 | + strncpy(msrp->path, path, PATH_BYTES - 1); |
1222 | msrp->width = width; |
1223 | msrp->type = type; |
1224 | msrp->format = format; |
1225 | diff --git a/usr/Kconfig b/usr/Kconfig |
1226 | index a6b68503d177..a80cc7972274 100644 |
1227 | --- a/usr/Kconfig |
1228 | +++ b/usr/Kconfig |
1229 | @@ -131,17 +131,6 @@ choice |
1230 | |
1231 | If in doubt, select 'None' |
1232 | |
1233 | -config INITRAMFS_COMPRESSION_NONE |
1234 | - bool "None" |
1235 | - help |
1236 | - Do not compress the built-in initramfs at all. This may sound wasteful |
1237 | - in space, but, you should be aware that the built-in initramfs will be |
1238 | - compressed at a later stage anyways along with the rest of the kernel, |
1239 | - on those architectures that support this. However, not compressing the |
1240 | - initramfs may lead to slightly higher memory consumption during a |
1241 | - short time at boot, while both the cpio image and the unpacked |
1242 | - filesystem image will be present in memory simultaneously |
1243 | - |
1244 | config INITRAMFS_COMPRESSION_GZIP |
1245 | bool "Gzip" |
1246 | depends on RD_GZIP |
1247 | @@ -214,6 +203,17 @@ config INITRAMFS_COMPRESSION_LZ4 |
1248 | If you choose this, keep in mind that most distros don't provide lz4 |
1249 | by default which could cause a build failure. |
1250 | |
1251 | +config INITRAMFS_COMPRESSION_NONE |
1252 | + bool "None" |
1253 | + help |
1254 | + Do not compress the built-in initramfs at all. This may sound wasteful |
1255 | + in space, but, you should be aware that the built-in initramfs will be |
1256 | + compressed at a later stage anyways along with the rest of the kernel, |
1257 | + on those architectures that support this. However, not compressing the |
1258 | + initramfs may lead to slightly higher memory consumption during a |
1259 | + short time at boot, while both the cpio image and the unpacked |
1260 | + filesystem image will be present in memory simultaneously |
1261 | + |
1262 | endchoice |
1263 | |
1264 | config INITRAMFS_COMPRESSION |