Annotation of /trunk/kernel-alx/patches-4.9/0172-4.9.73-all-fixes.patch
Parent Directory | Revision Log
Revision 3061 -
(hide annotations)
(download)
Wed Jan 10 10:33:35 2018 UTC (6 years, 8 months ago) by niro
File size: 21881 byte(s)
Wed Jan 10 10:33:35 2018 UTC (6 years, 8 months ago) by niro
File size: 21881 byte(s)
-linux-4.9.73
1 | niro | 3061 | diff --git a/Makefile b/Makefile |
2 | index 78dde51d9d74..64eb0bf614ee 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 72 | ||
9 | +SUBLEVEL = 73 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c | ||
14 | index 72c27b8d2cf3..083f92746951 100644 | ||
15 | --- a/arch/powerpc/perf/core-book3s.c | ||
16 | +++ b/arch/powerpc/perf/core-book3s.c | ||
17 | @@ -401,8 +401,12 @@ static __u64 power_pmu_bhrb_to(u64 addr) | ||
18 | int ret; | ||
19 | __u64 target; | ||
20 | |||
21 | - if (is_kernel_addr(addr)) | ||
22 | - return branch_target((unsigned int *)addr); | ||
23 | + if (is_kernel_addr(addr)) { | ||
24 | + if (probe_kernel_read(&instr, (void *)addr, sizeof(instr))) | ||
25 | + return 0; | ||
26 | + | ||
27 | + return branch_target(&instr); | ||
28 | + } | ||
29 | |||
30 | /* Userspace: need copy instruction here then translate it */ | ||
31 | pagefault_disable(); | ||
32 | diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c | ||
33 | index 72b737b8c9d6..c8f8dd8ca0a1 100644 | ||
34 | --- a/arch/x86/kvm/emulate.c | ||
35 | +++ b/arch/x86/kvm/emulate.c | ||
36 | @@ -2395,9 +2395,21 @@ static int rsm_load_seg_64(struct x86_emulate_ctxt *ctxt, u64 smbase, int n) | ||
37 | } | ||
38 | |||
39 | static int rsm_enter_protected_mode(struct x86_emulate_ctxt *ctxt, | ||
40 | - u64 cr0, u64 cr4) | ||
41 | + u64 cr0, u64 cr3, u64 cr4) | ||
42 | { | ||
43 | int bad; | ||
44 | + u64 pcid; | ||
45 | + | ||
46 | + /* In order to later set CR4.PCIDE, CR3[11:0] must be zero. */ | ||
47 | + pcid = 0; | ||
48 | + if (cr4 & X86_CR4_PCIDE) { | ||
49 | + pcid = cr3 & 0xfff; | ||
50 | + cr3 &= ~0xfff; | ||
51 | + } | ||
52 | + | ||
53 | + bad = ctxt->ops->set_cr(ctxt, 3, cr3); | ||
54 | + if (bad) | ||
55 | + return X86EMUL_UNHANDLEABLE; | ||
56 | |||
57 | /* | ||
58 | * First enable PAE, long mode needs it before CR0.PG = 1 is set. | ||
59 | @@ -2416,6 +2428,12 @@ static int rsm_enter_protected_mode(struct x86_emulate_ctxt *ctxt, | ||
60 | bad = ctxt->ops->set_cr(ctxt, 4, cr4); | ||
61 | if (bad) | ||
62 | return X86EMUL_UNHANDLEABLE; | ||
63 | + if (pcid) { | ||
64 | + bad = ctxt->ops->set_cr(ctxt, 3, cr3 | pcid); | ||
65 | + if (bad) | ||
66 | + return X86EMUL_UNHANDLEABLE; | ||
67 | + } | ||
68 | + | ||
69 | } | ||
70 | |||
71 | return X86EMUL_CONTINUE; | ||
72 | @@ -2426,11 +2444,11 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt, u64 smbase) | ||
73 | struct desc_struct desc; | ||
74 | struct desc_ptr dt; | ||
75 | u16 selector; | ||
76 | - u32 val, cr0, cr4; | ||
77 | + u32 val, cr0, cr3, cr4; | ||
78 | int i; | ||
79 | |||
80 | cr0 = GET_SMSTATE(u32, smbase, 0x7ffc); | ||
81 | - ctxt->ops->set_cr(ctxt, 3, GET_SMSTATE(u32, smbase, 0x7ff8)); | ||
82 | + cr3 = GET_SMSTATE(u32, smbase, 0x7ff8); | ||
83 | ctxt->eflags = GET_SMSTATE(u32, smbase, 0x7ff4) | X86_EFLAGS_FIXED; | ||
84 | ctxt->_eip = GET_SMSTATE(u32, smbase, 0x7ff0); | ||
85 | |||
86 | @@ -2472,14 +2490,14 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt, u64 smbase) | ||
87 | |||
88 | ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smbase, 0x7ef8)); | ||
89 | |||
90 | - return rsm_enter_protected_mode(ctxt, cr0, cr4); | ||
91 | + return rsm_enter_protected_mode(ctxt, cr0, cr3, cr4); | ||
92 | } | ||
93 | |||
94 | static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) | ||
95 | { | ||
96 | struct desc_struct desc; | ||
97 | struct desc_ptr dt; | ||
98 | - u64 val, cr0, cr4; | ||
99 | + u64 val, cr0, cr3, cr4; | ||
100 | u32 base3; | ||
101 | u16 selector; | ||
102 | int i, r; | ||
103 | @@ -2496,7 +2514,7 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) | ||
104 | ctxt->ops->set_dr(ctxt, 7, (val & DR7_VOLATILE) | DR7_FIXED_1); | ||
105 | |||
106 | cr0 = GET_SMSTATE(u64, smbase, 0x7f58); | ||
107 | - ctxt->ops->set_cr(ctxt, 3, GET_SMSTATE(u64, smbase, 0x7f50)); | ||
108 | + cr3 = GET_SMSTATE(u64, smbase, 0x7f50); | ||
109 | cr4 = GET_SMSTATE(u64, smbase, 0x7f48); | ||
110 | ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smbase, 0x7f00)); | ||
111 | val = GET_SMSTATE(u64, smbase, 0x7ed0); | ||
112 | @@ -2524,7 +2542,7 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) | ||
113 | dt.address = GET_SMSTATE(u64, smbase, 0x7e68); | ||
114 | ctxt->ops->set_gdt(ctxt, &dt); | ||
115 | |||
116 | - r = rsm_enter_protected_mode(ctxt, cr0, cr4); | ||
117 | + r = rsm_enter_protected_mode(ctxt, cr0, cr3, cr4); | ||
118 | if (r != X86EMUL_CONTINUE) | ||
119 | return r; | ||
120 | |||
121 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c | ||
122 | index f4d893713d54..7e28e6c877d9 100644 | ||
123 | --- a/arch/x86/kvm/x86.c | ||
124 | +++ b/arch/x86/kvm/x86.c | ||
125 | @@ -7132,7 +7132,7 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | ||
126 | #endif | ||
127 | |||
128 | kvm_rip_write(vcpu, regs->rip); | ||
129 | - kvm_set_rflags(vcpu, regs->rflags); | ||
130 | + kvm_set_rflags(vcpu, regs->rflags | X86_EFLAGS_FIXED); | ||
131 | |||
132 | vcpu->arch.exception.pending = false; | ||
133 | |||
134 | diff --git a/crypto/mcryptd.c b/crypto/mcryptd.c | ||
135 | index c207458d6299..a14100e74754 100644 | ||
136 | --- a/crypto/mcryptd.c | ||
137 | +++ b/crypto/mcryptd.c | ||
138 | @@ -80,6 +80,7 @@ static int mcryptd_init_queue(struct mcryptd_queue *queue, | ||
139 | pr_debug("cpu_queue #%d %p\n", cpu, queue->cpu_queue); | ||
140 | crypto_init_queue(&cpu_queue->queue, max_cpu_qlen); | ||
141 | INIT_WORK(&cpu_queue->work, mcryptd_queue_worker); | ||
142 | + spin_lock_init(&cpu_queue->q_lock); | ||
143 | } | ||
144 | return 0; | ||
145 | } | ||
146 | @@ -103,15 +104,16 @@ static int mcryptd_enqueue_request(struct mcryptd_queue *queue, | ||
147 | int cpu, err; | ||
148 | struct mcryptd_cpu_queue *cpu_queue; | ||
149 | |||
150 | - cpu = get_cpu(); | ||
151 | - cpu_queue = this_cpu_ptr(queue->cpu_queue); | ||
152 | - rctx->tag.cpu = cpu; | ||
153 | + cpu_queue = raw_cpu_ptr(queue->cpu_queue); | ||
154 | + spin_lock(&cpu_queue->q_lock); | ||
155 | + cpu = smp_processor_id(); | ||
156 | + rctx->tag.cpu = smp_processor_id(); | ||
157 | |||
158 | err = crypto_enqueue_request(&cpu_queue->queue, request); | ||
159 | pr_debug("enqueue request: cpu %d cpu_queue %p request %p\n", | ||
160 | cpu, cpu_queue, request); | ||
161 | + spin_unlock(&cpu_queue->q_lock); | ||
162 | queue_work_on(cpu, kcrypto_wq, &cpu_queue->work); | ||
163 | - put_cpu(); | ||
164 | |||
165 | return err; | ||
166 | } | ||
167 | @@ -160,16 +162,11 @@ static void mcryptd_queue_worker(struct work_struct *work) | ||
168 | cpu_queue = container_of(work, struct mcryptd_cpu_queue, work); | ||
169 | i = 0; | ||
170 | while (i < MCRYPTD_BATCH || single_task_running()) { | ||
171 | - /* | ||
172 | - * preempt_disable/enable is used to prevent | ||
173 | - * being preempted by mcryptd_enqueue_request() | ||
174 | - */ | ||
175 | - local_bh_disable(); | ||
176 | - preempt_disable(); | ||
177 | + | ||
178 | + spin_lock_bh(&cpu_queue->q_lock); | ||
179 | backlog = crypto_get_backlog(&cpu_queue->queue); | ||
180 | req = crypto_dequeue_request(&cpu_queue->queue); | ||
181 | - preempt_enable(); | ||
182 | - local_bh_enable(); | ||
183 | + spin_unlock_bh(&cpu_queue->q_lock); | ||
184 | |||
185 | if (!req) { | ||
186 | mcryptd_opportunistic_flush(); | ||
187 | @@ -184,7 +181,7 @@ static void mcryptd_queue_worker(struct work_struct *work) | ||
188 | ++i; | ||
189 | } | ||
190 | if (cpu_queue->queue.qlen) | ||
191 | - queue_work(kcrypto_wq, &cpu_queue->work); | ||
192 | + queue_work_on(smp_processor_id(), kcrypto_wq, &cpu_queue->work); | ||
193 | } | ||
194 | |||
195 | void mcryptd_flusher(struct work_struct *__work) | ||
196 | diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c | ||
197 | index ec4f507b524f..4558cc73abf3 100644 | ||
198 | --- a/drivers/acpi/apei/erst.c | ||
199 | +++ b/drivers/acpi/apei/erst.c | ||
200 | @@ -1020,7 +1020,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, | ||
201 | /* The record may be cleared by others, try read next record */ | ||
202 | if (len == -ENOENT) | ||
203 | goto skip; | ||
204 | - else if (len < sizeof(*rcd)) { | ||
205 | + else if (len < 0 || len < sizeof(*rcd)) { | ||
206 | rc = -EIO; | ||
207 | goto out; | ||
208 | } | ||
209 | diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c | ||
210 | index f3bc901ac930..fe03d00de22b 100644 | ||
211 | --- a/drivers/acpi/nfit/core.c | ||
212 | +++ b/drivers/acpi/nfit/core.c | ||
213 | @@ -1390,6 +1390,11 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc, | ||
214 | dev_name(&adev_dimm->dev)); | ||
215 | return -ENXIO; | ||
216 | } | ||
217 | + /* | ||
218 | + * Record nfit_mem for the notification path to track back to | ||
219 | + * the nfit sysfs attributes for this dimm device object. | ||
220 | + */ | ||
221 | + dev_set_drvdata(&adev_dimm->dev, nfit_mem); | ||
222 | |||
223 | /* | ||
224 | * Until standardization materializes we need to consider 4 | ||
225 | @@ -1446,9 +1451,11 @@ static void shutdown_dimm_notify(void *data) | ||
226 | sysfs_put(nfit_mem->flags_attr); | ||
227 | nfit_mem->flags_attr = NULL; | ||
228 | } | ||
229 | - if (adev_dimm) | ||
230 | + if (adev_dimm) { | ||
231 | acpi_remove_notify_handler(adev_dimm->handle, | ||
232 | ACPI_DEVICE_NOTIFY, acpi_nvdimm_notify); | ||
233 | + dev_set_drvdata(&adev_dimm->dev, NULL); | ||
234 | + } | ||
235 | } | ||
236 | mutex_unlock(&acpi_desc->init_mutex); | ||
237 | } | ||
238 | diff --git a/drivers/clk/sunxi/clk-sun9i-mmc.c b/drivers/clk/sunxi/clk-sun9i-mmc.c | ||
239 | index 6041bdba2e97..f69f9e8c6f38 100644 | ||
240 | --- a/drivers/clk/sunxi/clk-sun9i-mmc.c | ||
241 | +++ b/drivers/clk/sunxi/clk-sun9i-mmc.c | ||
242 | @@ -16,6 +16,7 @@ | ||
243 | |||
244 | #include <linux/clk.h> | ||
245 | #include <linux/clk-provider.h> | ||
246 | +#include <linux/delay.h> | ||
247 | #include <linux/init.h> | ||
248 | #include <linux/of.h> | ||
249 | #include <linux/of_device.h> | ||
250 | @@ -83,9 +84,20 @@ static int sun9i_mmc_reset_deassert(struct reset_controller_dev *rcdev, | ||
251 | return 0; | ||
252 | } | ||
253 | |||
254 | +static int sun9i_mmc_reset_reset(struct reset_controller_dev *rcdev, | ||
255 | + unsigned long id) | ||
256 | +{ | ||
257 | + sun9i_mmc_reset_assert(rcdev, id); | ||
258 | + udelay(10); | ||
259 | + sun9i_mmc_reset_deassert(rcdev, id); | ||
260 | + | ||
261 | + return 0; | ||
262 | +} | ||
263 | + | ||
264 | static const struct reset_control_ops sun9i_mmc_reset_ops = { | ||
265 | .assert = sun9i_mmc_reset_assert, | ||
266 | .deassert = sun9i_mmc_reset_deassert, | ||
267 | + .reset = sun9i_mmc_reset_reset, | ||
268 | }; | ||
269 | |||
270 | static int sun9i_a80_mmc_config_clk_probe(struct platform_device *pdev) | ||
271 | diff --git a/drivers/mfd/cros_ec_spi.c b/drivers/mfd/cros_ec_spi.c | ||
272 | index a518832ed5f5..59dbdaa24c28 100644 | ||
273 | --- a/drivers/mfd/cros_ec_spi.c | ||
274 | +++ b/drivers/mfd/cros_ec_spi.c | ||
275 | @@ -664,6 +664,7 @@ static int cros_ec_spi_probe(struct spi_device *spi) | ||
276 | sizeof(struct ec_response_get_protocol_info); | ||
277 | ec_dev->dout_size = sizeof(struct ec_host_request); | ||
278 | |||
279 | + ec_spi->last_transfer_ns = ktime_get_ns(); | ||
280 | |||
281 | err = cros_ec_register(ec_dev); | ||
282 | if (err) { | ||
283 | diff --git a/drivers/mfd/twl4030-audio.c b/drivers/mfd/twl4030-audio.c | ||
284 | index 0a1606480023..cc832d309599 100644 | ||
285 | --- a/drivers/mfd/twl4030-audio.c | ||
286 | +++ b/drivers/mfd/twl4030-audio.c | ||
287 | @@ -159,13 +159,18 @@ unsigned int twl4030_audio_get_mclk(void) | ||
288 | EXPORT_SYMBOL_GPL(twl4030_audio_get_mclk); | ||
289 | |||
290 | static bool twl4030_audio_has_codec(struct twl4030_audio_data *pdata, | ||
291 | - struct device_node *node) | ||
292 | + struct device_node *parent) | ||
293 | { | ||
294 | + struct device_node *node; | ||
295 | + | ||
296 | if (pdata && pdata->codec) | ||
297 | return true; | ||
298 | |||
299 | - if (of_find_node_by_name(node, "codec")) | ||
300 | + node = of_get_child_by_name(parent, "codec"); | ||
301 | + if (node) { | ||
302 | + of_node_put(node); | ||
303 | return true; | ||
304 | + } | ||
305 | |||
306 | return false; | ||
307 | } | ||
308 | diff --git a/drivers/mfd/twl6040.c b/drivers/mfd/twl6040.c | ||
309 | index d66502d36ba0..dd19f17a1b63 100644 | ||
310 | --- a/drivers/mfd/twl6040.c | ||
311 | +++ b/drivers/mfd/twl6040.c | ||
312 | @@ -97,12 +97,16 @@ static struct reg_sequence twl6040_patch[] = { | ||
313 | }; | ||
314 | |||
315 | |||
316 | -static bool twl6040_has_vibra(struct device_node *node) | ||
317 | +static bool twl6040_has_vibra(struct device_node *parent) | ||
318 | { | ||
319 | -#ifdef CONFIG_OF | ||
320 | - if (of_find_node_by_name(node, "vibra")) | ||
321 | + struct device_node *node; | ||
322 | + | ||
323 | + node = of_get_child_by_name(parent, "vibra"); | ||
324 | + if (node) { | ||
325 | + of_node_put(node); | ||
326 | return true; | ||
327 | -#endif | ||
328 | + } | ||
329 | + | ||
330 | return false; | ||
331 | } | ||
332 | |||
333 | diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c | ||
334 | index 6ea10a9f33e8..fa463268d019 100644 | ||
335 | --- a/drivers/net/ethernet/marvell/mvneta.c | ||
336 | +++ b/drivers/net/ethernet/marvell/mvneta.c | ||
337 | @@ -1182,6 +1182,10 @@ static void mvneta_port_disable(struct mvneta_port *pp) | ||
338 | val &= ~MVNETA_GMAC0_PORT_ENABLE; | ||
339 | mvreg_write(pp, MVNETA_GMAC_CTRL_0, val); | ||
340 | |||
341 | + pp->link = 0; | ||
342 | + pp->duplex = -1; | ||
343 | + pp->speed = 0; | ||
344 | + | ||
345 | udelay(200); | ||
346 | } | ||
347 | |||
348 | @@ -1905,9 +1909,9 @@ static int mvneta_rx_swbm(struct mvneta_port *pp, int rx_todo, | ||
349 | |||
350 | if (!mvneta_rxq_desc_is_first_last(rx_status) || | ||
351 | (rx_status & MVNETA_RXD_ERR_SUMMARY)) { | ||
352 | + mvneta_rx_error(pp, rx_desc); | ||
353 | err_drop_frame: | ||
354 | dev->stats.rx_errors++; | ||
355 | - mvneta_rx_error(pp, rx_desc); | ||
356 | /* leave the descriptor untouched */ | ||
357 | continue; | ||
358 | } | ||
359 | @@ -2922,7 +2926,7 @@ static void mvneta_cleanup_rxqs(struct mvneta_port *pp) | ||
360 | { | ||
361 | int queue; | ||
362 | |||
363 | - for (queue = 0; queue < txq_number; queue++) | ||
364 | + for (queue = 0; queue < rxq_number; queue++) | ||
365 | mvneta_rxq_deinit(pp, &pp->rxqs[queue]); | ||
366 | } | ||
367 | |||
368 | diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c | ||
369 | index 71eb6c637b60..42abdd2391c9 100644 | ||
370 | --- a/drivers/nvdimm/pfn_devs.c | ||
371 | +++ b/drivers/nvdimm/pfn_devs.c | ||
372 | @@ -352,9 +352,9 @@ struct device *nd_pfn_create(struct nd_region *nd_region) | ||
373 | int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig) | ||
374 | { | ||
375 | u64 checksum, offset; | ||
376 | - unsigned long align; | ||
377 | enum nd_pfn_mode mode; | ||
378 | struct nd_namespace_io *nsio; | ||
379 | + unsigned long align, start_pad; | ||
380 | struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb; | ||
381 | struct nd_namespace_common *ndns = nd_pfn->ndns; | ||
382 | const u8 *parent_uuid = nd_dev_to_uuid(&ndns->dev); | ||
383 | @@ -398,6 +398,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig) | ||
384 | |||
385 | align = le32_to_cpu(pfn_sb->align); | ||
386 | offset = le64_to_cpu(pfn_sb->dataoff); | ||
387 | + start_pad = le32_to_cpu(pfn_sb->start_pad); | ||
388 | if (align == 0) | ||
389 | align = 1UL << ilog2(offset); | ||
390 | mode = le32_to_cpu(pfn_sb->mode); | ||
391 | @@ -456,7 +457,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig) | ||
392 | return -EBUSY; | ||
393 | } | ||
394 | |||
395 | - if ((align && !IS_ALIGNED(offset, align)) | ||
396 | + if ((align && !IS_ALIGNED(nsio->res.start + offset + start_pad, align)) | ||
397 | || !IS_ALIGNED(offset, PAGE_SIZE)) { | ||
398 | dev_err(&nd_pfn->dev, | ||
399 | "bad offset: %#llx dax disabled align: %#lx\n", | ||
400 | diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c | ||
401 | index bc286cbbbc9b..1cced1d039d7 100644 | ||
402 | --- a/drivers/parisc/lba_pci.c | ||
403 | +++ b/drivers/parisc/lba_pci.c | ||
404 | @@ -1656,3 +1656,36 @@ void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask) | ||
405 | iounmap(base_addr); | ||
406 | } | ||
407 | |||
408 | + | ||
409 | +/* | ||
410 | + * The design of the Diva management card in rp34x0 machines (rp3410, rp3440) | ||
411 | + * seems rushed, so that many built-in components simply don't work. | ||
412 | + * The following quirks disable the serial AUX port and the built-in ATI RV100 | ||
413 | + * Radeon 7000 graphics card which both don't have any external connectors and | ||
414 | + * thus are useless, and even worse, e.g. the AUX port occupies ttyS0 and as | ||
415 | + * such makes those machines the only PARISC machines on which we can't use | ||
416 | + * ttyS0 as boot console. | ||
417 | + */ | ||
418 | +static void quirk_diva_ati_card(struct pci_dev *dev) | ||
419 | +{ | ||
420 | + if (dev->subsystem_vendor != PCI_VENDOR_ID_HP || | ||
421 | + dev->subsystem_device != 0x1292) | ||
422 | + return; | ||
423 | + | ||
424 | + dev_info(&dev->dev, "Hiding Diva built-in ATI card"); | ||
425 | + dev->device = 0; | ||
426 | +} | ||
427 | +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RADEON_QY, | ||
428 | + quirk_diva_ati_card); | ||
429 | + | ||
430 | +static void quirk_diva_aux_disable(struct pci_dev *dev) | ||
431 | +{ | ||
432 | + if (dev->subsystem_vendor != PCI_VENDOR_ID_HP || | ||
433 | + dev->subsystem_device != 0x1291) | ||
434 | + return; | ||
435 | + | ||
436 | + dev_info(&dev->dev, "Hiding Diva built-in AUX serial device"); | ||
437 | + dev->device = 0; | ||
438 | +} | ||
439 | +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX, | ||
440 | + quirk_diva_aux_disable); | ||
441 | diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c | ||
442 | index 8a68e2b554e1..802997e2ddcc 100644 | ||
443 | --- a/drivers/pci/pci-driver.c | ||
444 | +++ b/drivers/pci/pci-driver.c | ||
445 | @@ -953,7 +953,12 @@ static int pci_pm_thaw_noirq(struct device *dev) | ||
446 | if (pci_has_legacy_pm_support(pci_dev)) | ||
447 | return pci_legacy_resume_early(dev); | ||
448 | |||
449 | - pci_update_current_state(pci_dev, PCI_D0); | ||
450 | + /* | ||
451 | + * pci_restore_state() requires the device to be in D0 (because of MSI | ||
452 | + * restoration among other things), so force it into D0 in case the | ||
453 | + * driver's "freeze" callbacks put it into a low-power state directly. | ||
454 | + */ | ||
455 | + pci_set_power_state(pci_dev, PCI_D0); | ||
456 | pci_restore_state(pci_dev); | ||
457 | |||
458 | if (drv && drv->pm && drv->pm->thaw_noirq) | ||
459 | diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c | ||
460 | index 0d34d8a4ab14..e8c08eb97530 100644 | ||
461 | --- a/drivers/pinctrl/intel/pinctrl-cherryview.c | ||
462 | +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c | ||
463 | @@ -1594,6 +1594,22 @@ static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) | ||
464 | clear_bit(i, chip->irq_valid_mask); | ||
465 | } | ||
466 | |||
467 | + /* | ||
468 | + * The same set of machines in chv_no_valid_mask[] have incorrectly | ||
469 | + * configured GPIOs that generate spurious interrupts so we use | ||
470 | + * this same list to apply another quirk for them. | ||
471 | + * | ||
472 | + * See also https://bugzilla.kernel.org/show_bug.cgi?id=197953. | ||
473 | + */ | ||
474 | + if (!need_valid_mask) { | ||
475 | + /* | ||
476 | + * Mask all interrupts the community is able to generate | ||
477 | + * but leave the ones that can only generate GPEs unmasked. | ||
478 | + */ | ||
479 | + chv_writel(GENMASK(31, pctrl->community->nirqs), | ||
480 | + pctrl->regs + CHV_INTMASK); | ||
481 | + } | ||
482 | + | ||
483 | /* Clear all interrupts */ | ||
484 | chv_writel(0xffff, pctrl->regs + CHV_INTSTAT); | ||
485 | |||
486 | diff --git a/drivers/spi/spi-xilinx.c b/drivers/spi/spi-xilinx.c | ||
487 | index bc7100b93dfc..e0b9fe1d0e37 100644 | ||
488 | --- a/drivers/spi/spi-xilinx.c | ||
489 | +++ b/drivers/spi/spi-xilinx.c | ||
490 | @@ -271,6 +271,7 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) | ||
491 | while (remaining_words) { | ||
492 | int n_words, tx_words, rx_words; | ||
493 | u32 sr; | ||
494 | + int stalled; | ||
495 | |||
496 | n_words = min(remaining_words, xspi->buffer_size); | ||
497 | |||
498 | @@ -299,7 +300,17 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) | ||
499 | |||
500 | /* Read out all the data from the Rx FIFO */ | ||
501 | rx_words = n_words; | ||
502 | + stalled = 10; | ||
503 | while (rx_words) { | ||
504 | + if (rx_words == n_words && !(stalled--) && | ||
505 | + !(sr & XSPI_SR_TX_EMPTY_MASK) && | ||
506 | + (sr & XSPI_SR_RX_EMPTY_MASK)) { | ||
507 | + dev_err(&spi->dev, | ||
508 | + "Detected stall. Check C_SPI_MODE and C_SPI_MEMORY\n"); | ||
509 | + xspi_init_hw(xspi); | ||
510 | + return -EIO; | ||
511 | + } | ||
512 | + | ||
513 | if ((sr & XSPI_SR_TX_EMPTY_MASK) && (rx_words > 1)) { | ||
514 | xilinx_spi_rx(xspi); | ||
515 | rx_words--; | ||
516 | diff --git a/include/crypto/mcryptd.h b/include/crypto/mcryptd.h | ||
517 | index 4a53c0d38cd2..e045722a69aa 100644 | ||
518 | --- a/include/crypto/mcryptd.h | ||
519 | +++ b/include/crypto/mcryptd.h | ||
520 | @@ -26,6 +26,7 @@ static inline struct mcryptd_ahash *__mcryptd_ahash_cast( | ||
521 | |||
522 | struct mcryptd_cpu_queue { | ||
523 | struct crypto_queue queue; | ||
524 | + spinlock_t q_lock; | ||
525 | struct work_struct work; | ||
526 | }; | ||
527 | |||
528 | diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c | ||
529 | index 8b1ebe4c6aba..d7eeebfafe8d 100644 | ||
530 | --- a/kernel/bpf/verifier.c | ||
531 | +++ b/kernel/bpf/verifier.c | ||
532 | @@ -2722,11 +2722,12 @@ static bool states_equal(struct bpf_verifier_env *env, | ||
533 | |||
534 | /* If we didn't map access then again we don't care about the | ||
535 | * mismatched range values and it's ok if our old type was | ||
536 | - * UNKNOWN and we didn't go to a NOT_INIT'ed reg. | ||
537 | + * UNKNOWN and we didn't go to a NOT_INIT'ed or pointer reg. | ||
538 | */ | ||
539 | if (rold->type == NOT_INIT || | ||
540 | (!varlen_map_access && rold->type == UNKNOWN_VALUE && | ||
541 | - rcur->type != NOT_INIT)) | ||
542 | + rcur->type != NOT_INIT && | ||
543 | + !__is_pointer_value(env->allow_ptr_leaks, rcur))) | ||
544 | continue; | ||
545 | |||
546 | /* Don't care about the reg->id in this case. */ | ||
547 | diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c | ||
548 | index b450a27588c8..16f8124b1150 100644 | ||
549 | --- a/sound/core/rawmidi.c | ||
550 | +++ b/sound/core/rawmidi.c | ||
551 | @@ -579,15 +579,14 @@ static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream, | ||
552 | return 0; | ||
553 | } | ||
554 | |||
555 | -int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info) | ||
556 | +static int __snd_rawmidi_info_select(struct snd_card *card, | ||
557 | + struct snd_rawmidi_info *info) | ||
558 | { | ||
559 | struct snd_rawmidi *rmidi; | ||
560 | struct snd_rawmidi_str *pstr; | ||
561 | struct snd_rawmidi_substream *substream; | ||
562 | |||
563 | - mutex_lock(®ister_mutex); | ||
564 | rmidi = snd_rawmidi_search(card, info->device); | ||
565 | - mutex_unlock(®ister_mutex); | ||
566 | if (!rmidi) | ||
567 | return -ENXIO; | ||
568 | if (info->stream < 0 || info->stream > 1) | ||
569 | @@ -603,6 +602,16 @@ int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info | ||
570 | } | ||
571 | return -ENXIO; | ||
572 | } | ||
573 | + | ||
574 | +int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info) | ||
575 | +{ | ||
576 | + int ret; | ||
577 | + | ||
578 | + mutex_lock(®ister_mutex); | ||
579 | + ret = __snd_rawmidi_info_select(card, info); | ||
580 | + mutex_unlock(®ister_mutex); | ||
581 | + return ret; | ||
582 | +} | ||
583 | EXPORT_SYMBOL(snd_rawmidi_info_select); | ||
584 | |||
585 | static int snd_rawmidi_info_select_user(struct snd_card *card, | ||
586 | diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c | ||
587 | index 24c897f0b571..08015c139116 100644 | ||
588 | --- a/sound/usb/mixer.c | ||
589 | +++ b/sound/usb/mixer.c | ||
590 | @@ -2167,20 +2167,25 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid, | ||
591 | kctl->private_value = (unsigned long)namelist; | ||
592 | kctl->private_free = usb_mixer_selector_elem_free; | ||
593 | |||
594 | - nameid = uac_selector_unit_iSelector(desc); | ||
595 | + /* check the static mapping table at first */ | ||
596 | len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name)); | ||
597 | - if (len) | ||
598 | - ; | ||
599 | - else if (nameid) | ||
600 | - len = snd_usb_copy_string_desc(state, nameid, kctl->id.name, | ||
601 | - sizeof(kctl->id.name)); | ||
602 | - else | ||
603 | - len = get_term_name(state, &state->oterm, | ||
604 | - kctl->id.name, sizeof(kctl->id.name), 0); | ||
605 | - | ||
606 | if (!len) { | ||
607 | - strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name)); | ||
608 | + /* no mapping ? */ | ||
609 | + /* if iSelector is given, use it */ | ||
610 | + nameid = uac_selector_unit_iSelector(desc); | ||
611 | + if (nameid) | ||
612 | + len = snd_usb_copy_string_desc(state, nameid, | ||
613 | + kctl->id.name, | ||
614 | + sizeof(kctl->id.name)); | ||
615 | + /* ... or pick up the terminal name at next */ | ||
616 | + if (!len) | ||
617 | + len = get_term_name(state, &state->oterm, | ||
618 | + kctl->id.name, sizeof(kctl->id.name), 0); | ||
619 | + /* ... or use the fixed string "USB" as the last resort */ | ||
620 | + if (!len) | ||
621 | + strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name)); | ||
622 | |||
623 | + /* and add the proper suffix */ | ||
624 | if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR) | ||
625 | append_ctl_name(kctl, " Clock Source"); | ||
626 | else if ((state->oterm.type & 0xff00) == 0x0100) | ||
627 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c | ||
628 | index 7613b9e07b5c..1cd7f8b0bf77 100644 | ||
629 | --- a/sound/usb/quirks.c | ||
630 | +++ b/sound/usb/quirks.c | ||
631 | @@ -1170,10 +1170,11 @@ static bool is_marantz_denon_dac(unsigned int id) | ||
632 | /* TEAC UD-501/UD-503/NT-503 USB DACs need a vendor cmd to switch | ||
633 | * between PCM/DOP and native DSD mode | ||
634 | */ | ||
635 | -static bool is_teac_50X_dac(unsigned int id) | ||
636 | +static bool is_teac_dsd_dac(unsigned int id) | ||
637 | { | ||
638 | switch (id) { | ||
639 | case USB_ID(0x0644, 0x8043): /* TEAC UD-501/UD-503/NT-503 */ | ||
640 | + case USB_ID(0x0644, 0x8044): /* Esoteric D-05X */ | ||
641 | return true; | ||
642 | } | ||
643 | return false; | ||
644 | @@ -1206,7 +1207,7 @@ int snd_usb_select_mode_quirk(struct snd_usb_substream *subs, | ||
645 | break; | ||
646 | } | ||
647 | mdelay(20); | ||
648 | - } else if (is_teac_50X_dac(subs->stream->chip->usb_id)) { | ||
649 | + } else if (is_teac_dsd_dac(subs->stream->chip->usb_id)) { | ||
650 | /* Vendor mode switch cmd is required. */ | ||
651 | switch (fmt->altsetting) { | ||
652 | case 3: /* DSD mode (DSD_U32) requested */ | ||
653 | @@ -1376,7 +1377,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, | ||
654 | } | ||
655 | |||
656 | /* TEAC devices with USB DAC functionality */ | ||
657 | - if (is_teac_50X_dac(chip->usb_id)) { | ||
658 | + if (is_teac_dsd_dac(chip->usb_id)) { | ||
659 | if (fp->altsetting == 3) | ||
660 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; | ||
661 | } |