Annotation of /trunk/kernel-alx/patches-4.9/0252-4.9.153-all-fixes.patch
Parent Directory | Revision Log
Revision 3305 -
(hide annotations)
(download)
Tue Mar 12 10:43:12 2019 UTC (5 years, 6 months ago) by niro
File size: 38335 byte(s)
Tue Mar 12 10:43:12 2019 UTC (5 years, 6 months ago) by niro
File size: 38335 byte(s)
-linux-4.9.153
1 | niro | 3305 | diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt |
2 | index 74329fd0add2..077c37ed976f 100644 | ||
3 | --- a/Documentation/filesystems/proc.txt | ||
4 | +++ b/Documentation/filesystems/proc.txt | ||
5 | @@ -484,7 +484,9 @@ manner. The codes are the following: | ||
6 | |||
7 | Note that there is no guarantee that every flag and associated mnemonic will | ||
8 | be present in all further kernel releases. Things get changed, the flags may | ||
9 | -be vanished or the reverse -- new added. | ||
10 | +be vanished or the reverse -- new added. Interpretation of their meaning | ||
11 | +might change in future as well. So each consumer of these flags has to | ||
12 | +follow each specific kernel version for the exact semantic. | ||
13 | |||
14 | This file is only present if the CONFIG_MMU kernel configuration option is | ||
15 | enabled. | ||
16 | diff --git a/Makefile b/Makefile | ||
17 | index 27a9292fc0ed..44a487ee24d2 100644 | ||
18 | --- a/Makefile | ||
19 | +++ b/Makefile | ||
20 | @@ -1,6 +1,6 @@ | ||
21 | VERSION = 4 | ||
22 | PATCHLEVEL = 9 | ||
23 | -SUBLEVEL = 152 | ||
24 | +SUBLEVEL = 153 | ||
25 | EXTRAVERSION = | ||
26 | NAME = Roaring Lionus | ||
27 | |||
28 | diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c | ||
29 | index 199a23f058d5..0770d6d1c37f 100644 | ||
30 | --- a/arch/arm64/kernel/perf_event.c | ||
31 | +++ b/arch/arm64/kernel/perf_event.c | ||
32 | @@ -1114,6 +1114,7 @@ static struct platform_driver armv8_pmu_driver = { | ||
33 | .driver = { | ||
34 | .name = ARMV8_PMU_PDEV_NAME, | ||
35 | .of_match_table = armv8_pmu_of_device_ids, | ||
36 | + .suppress_bind_attrs = true, | ||
37 | }, | ||
38 | .probe = armv8_pmu_device_probe, | ||
39 | }; | ||
40 | diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig | ||
41 | index 1d987061d1a1..bb9940c6927e 100644 | ||
42 | --- a/arch/mips/Kconfig | ||
43 | +++ b/arch/mips/Kconfig | ||
44 | @@ -791,6 +791,7 @@ config SIBYTE_SWARM | ||
45 | select SYS_SUPPORTS_HIGHMEM | ||
46 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
47 | select ZONE_DMA32 if 64BIT | ||
48 | + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI | ||
49 | |||
50 | config SIBYTE_LITTLESUR | ||
51 | bool "Sibyte BCM91250C2-LittleSur" | ||
52 | @@ -813,6 +814,7 @@ config SIBYTE_SENTOSA | ||
53 | select SYS_HAS_CPU_SB1 | ||
54 | select SYS_SUPPORTS_BIG_ENDIAN | ||
55 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
56 | + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI | ||
57 | |||
58 | config SIBYTE_BIGSUR | ||
59 | bool "Sibyte BCM91480B-BigSur" | ||
60 | @@ -826,6 +828,7 @@ config SIBYTE_BIGSUR | ||
61 | select SYS_SUPPORTS_HIGHMEM | ||
62 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
63 | select ZONE_DMA32 if 64BIT | ||
64 | + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI | ||
65 | |||
66 | config SNI_RM | ||
67 | bool "SNI RM200/300/400" | ||
68 | diff --git a/arch/mips/sibyte/common/Makefile b/arch/mips/sibyte/common/Makefile | ||
69 | index b3d6bf23a662..3ef3fb658136 100644 | ||
70 | --- a/arch/mips/sibyte/common/Makefile | ||
71 | +++ b/arch/mips/sibyte/common/Makefile | ||
72 | @@ -1,4 +1,5 @@ | ||
73 | obj-y := cfe.o | ||
74 | +obj-$(CONFIG_SWIOTLB) += dma.o | ||
75 | obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o | ||
76 | obj-$(CONFIG_SIBYTE_CFE_CONSOLE) += cfe_console.o | ||
77 | obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o | ||
78 | diff --git a/arch/mips/sibyte/common/dma.c b/arch/mips/sibyte/common/dma.c | ||
79 | new file mode 100644 | ||
80 | index 000000000000..eb47a94f3583 | ||
81 | --- /dev/null | ||
82 | +++ b/arch/mips/sibyte/common/dma.c | ||
83 | @@ -0,0 +1,14 @@ | ||
84 | +// SPDX-License-Identifier: GPL-2.0+ | ||
85 | +/* | ||
86 | + * DMA support for Broadcom SiByte platforms. | ||
87 | + * | ||
88 | + * Copyright (c) 2018 Maciej W. Rozycki | ||
89 | + */ | ||
90 | + | ||
91 | +#include <linux/swiotlb.h> | ||
92 | +#include <asm/bootinfo.h> | ||
93 | + | ||
94 | +void __init plat_swiotlb_setup(void) | ||
95 | +{ | ||
96 | + swiotlb_init(1); | ||
97 | +} | ||
98 | diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c | ||
99 | index 760545519a0b..687e8b8bf5c6 100644 | ||
100 | --- a/arch/powerpc/xmon/xmon.c | ||
101 | +++ b/arch/powerpc/xmon/xmon.c | ||
102 | @@ -73,6 +73,9 @@ static int xmon_gate; | ||
103 | #define xmon_owner 0 | ||
104 | #endif /* CONFIG_SMP */ | ||
105 | |||
106 | +#ifdef CONFIG_PPC_PSERIES | ||
107 | +static int set_indicator_token = RTAS_UNKNOWN_SERVICE; | ||
108 | +#endif | ||
109 | static unsigned long in_xmon __read_mostly = 0; | ||
110 | |||
111 | static unsigned long adrs; | ||
112 | @@ -340,7 +343,6 @@ static inline void disable_surveillance(void) | ||
113 | #ifdef CONFIG_PPC_PSERIES | ||
114 | /* Since this can't be a module, args should end up below 4GB. */ | ||
115 | static struct rtas_args args; | ||
116 | - int token; | ||
117 | |||
118 | /* | ||
119 | * At this point we have got all the cpus we can into | ||
120 | @@ -349,11 +351,11 @@ static inline void disable_surveillance(void) | ||
121 | * If we did try to take rtas.lock there would be a | ||
122 | * real possibility of deadlock. | ||
123 | */ | ||
124 | - token = rtas_token("set-indicator"); | ||
125 | - if (token == RTAS_UNKNOWN_SERVICE) | ||
126 | + if (set_indicator_token == RTAS_UNKNOWN_SERVICE) | ||
127 | return; | ||
128 | |||
129 | - rtas_call_unlocked(&args, token, 3, 1, NULL, SURVEILLANCE_TOKEN, 0, 0); | ||
130 | + rtas_call_unlocked(&args, set_indicator_token, 3, 1, NULL, | ||
131 | + SURVEILLANCE_TOKEN, 0, 0); | ||
132 | |||
133 | #endif /* CONFIG_PPC_PSERIES */ | ||
134 | } | ||
135 | @@ -3227,6 +3229,14 @@ static void xmon_init(int enable) | ||
136 | __debugger_iabr_match = xmon_iabr_match; | ||
137 | __debugger_break_match = xmon_break_match; | ||
138 | __debugger_fault_handler = xmon_fault_handler; | ||
139 | + | ||
140 | +#ifdef CONFIG_PPC_PSERIES | ||
141 | + /* | ||
142 | + * Get the token here to avoid trying to get a lock | ||
143 | + * during the crash, causing a deadlock. | ||
144 | + */ | ||
145 | + set_indicator_token = rtas_token("set-indicator"); | ||
146 | +#endif | ||
147 | } else { | ||
148 | __debugger = NULL; | ||
149 | __debugger_ipi = NULL; | ||
150 | diff --git a/drivers/base/bus.c b/drivers/base/bus.c | ||
151 | index e32a74eb28a3..a7ae9a0e8a78 100644 | ||
152 | --- a/drivers/base/bus.c | ||
153 | +++ b/drivers/base/bus.c | ||
154 | @@ -33,6 +33,9 @@ static struct kset *system_kset; | ||
155 | |||
156 | #define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr) | ||
157 | |||
158 | +#define DRIVER_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \ | ||
159 | + struct driver_attribute driver_attr_##_name = \ | ||
160 | + __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) | ||
161 | |||
162 | static int __must_check bus_rescan_devices_helper(struct device *dev, | ||
163 | void *data); | ||
164 | @@ -197,7 +200,7 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf, | ||
165 | bus_put(bus); | ||
166 | return err; | ||
167 | } | ||
168 | -static DRIVER_ATTR_WO(unbind); | ||
169 | +static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, S_IWUSR, NULL, unbind_store); | ||
170 | |||
171 | /* | ||
172 | * Manually attach a device to a driver. | ||
173 | @@ -233,7 +236,7 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf, | ||
174 | bus_put(bus); | ||
175 | return err; | ||
176 | } | ||
177 | -static DRIVER_ATTR_WO(bind); | ||
178 | +static DRIVER_ATTR_IGNORE_LOCKDEP(bind, S_IWUSR, NULL, bind_store); | ||
179 | |||
180 | static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf) | ||
181 | { | ||
182 | diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c | ||
183 | index a0bb52bc6582..dac36ef450ba 100644 | ||
184 | --- a/drivers/char/ipmi/ipmi_ssif.c | ||
185 | +++ b/drivers/char/ipmi/ipmi_ssif.c | ||
186 | @@ -641,8 +641,9 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, | ||
187 | |||
188 | /* Remove the multi-part read marker. */ | ||
189 | len -= 2; | ||
190 | + data += 2; | ||
191 | for (i = 0; i < len; i++) | ||
192 | - ssif_info->data[i] = data[i+2]; | ||
193 | + ssif_info->data[i] = data[i]; | ||
194 | ssif_info->multi_len = len; | ||
195 | ssif_info->multi_pos = 1; | ||
196 | |||
197 | @@ -670,8 +671,19 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, | ||
198 | } | ||
199 | |||
200 | blocknum = data[0]; | ||
201 | + len--; | ||
202 | + data++; | ||
203 | + | ||
204 | + if (blocknum != 0xff && len != 31) { | ||
205 | + /* All blocks but the last must have 31 data bytes. */ | ||
206 | + result = -EIO; | ||
207 | + if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) | ||
208 | + pr_info("Received middle message <31\n"); | ||
209 | |||
210 | - if (ssif_info->multi_len + len - 1 > IPMI_MAX_MSG_LENGTH) { | ||
211 | + goto continue_op; | ||
212 | + } | ||
213 | + | ||
214 | + if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) { | ||
215 | /* Received message too big, abort the operation. */ | ||
216 | result = -E2BIG; | ||
217 | if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) | ||
218 | @@ -680,16 +692,14 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, | ||
219 | goto continue_op; | ||
220 | } | ||
221 | |||
222 | - /* Remove the blocknum from the data. */ | ||
223 | - len--; | ||
224 | for (i = 0; i < len; i++) | ||
225 | - ssif_info->data[i + ssif_info->multi_len] = data[i + 1]; | ||
226 | + ssif_info->data[i + ssif_info->multi_len] = data[i]; | ||
227 | ssif_info->multi_len += len; | ||
228 | if (blocknum == 0xff) { | ||
229 | /* End of read */ | ||
230 | len = ssif_info->multi_len; | ||
231 | data = ssif_info->data; | ||
232 | - } else if (blocknum + 1 != ssif_info->multi_pos) { | ||
233 | + } else if (blocknum != ssif_info->multi_pos) { | ||
234 | /* | ||
235 | * Out of sequence block, just abort. Block | ||
236 | * numbers start at zero for the second block, | ||
237 | @@ -717,6 +727,7 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, | ||
238 | } | ||
239 | } | ||
240 | |||
241 | + continue_op: | ||
242 | if (result < 0) { | ||
243 | ssif_inc_stat(ssif_info, receive_errors); | ||
244 | } else { | ||
245 | @@ -724,8 +735,6 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, | ||
246 | ssif_inc_stat(ssif_info, received_message_parts); | ||
247 | } | ||
248 | |||
249 | - | ||
250 | - continue_op: | ||
251 | if (ssif_info->ssif_debug & SSIF_DEBUG_STATE) | ||
252 | pr_info(PFX "DONE 1: state = %d, result=%d.\n", | ||
253 | ssif_info->ssif_state, result); | ||
254 | diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c | ||
255 | index 93a19667003d..14682df5d312 100644 | ||
256 | --- a/drivers/clk/imx/clk-imx6q.c | ||
257 | +++ b/drivers/clk/imx/clk-imx6q.c | ||
258 | @@ -258,8 +258,12 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | ||
259 | * lvds1_gate and lvds2_gate are pseudo-gates. Both can be | ||
260 | * independently configured as clock inputs or outputs. We treat | ||
261 | * the "output_enable" bit as a gate, even though it's really just | ||
262 | - * enabling clock output. | ||
263 | + * enabling clock output. Initially the gate bits are cleared, as | ||
264 | + * otherwise the exclusive configuration gets locked in the setup done | ||
265 | + * by software running before the clock driver, with no way to change | ||
266 | + * it. | ||
267 | */ | ||
268 | + writel(readl(base + 0x160) & ~0x3c00, base + 0x160); | ||
269 | clk[IMX6QDL_CLK_LVDS1_GATE] = imx_clk_gate_exclusive("lvds1_gate", "lvds1_sel", base + 0x160, 10, BIT(12)); | ||
270 | clk[IMX6QDL_CLK_LVDS2_GATE] = imx_clk_gate_exclusive("lvds2_gate", "lvds2_sel", base + 0x160, 11, BIT(13)); | ||
271 | |||
272 | diff --git a/drivers/cpuidle/cpuidle-pseries.c b/drivers/cpuidle/cpuidle-pseries.c | ||
273 | index 166ccd711ec9..83203c59bf59 100644 | ||
274 | --- a/drivers/cpuidle/cpuidle-pseries.c | ||
275 | +++ b/drivers/cpuidle/cpuidle-pseries.c | ||
276 | @@ -230,7 +230,13 @@ static int pseries_idle_probe(void) | ||
277 | return -ENODEV; | ||
278 | |||
279 | if (firmware_has_feature(FW_FEATURE_SPLPAR)) { | ||
280 | - if (lppaca_shared_proc(get_lppaca())) { | ||
281 | + /* | ||
282 | + * Use local_paca instead of get_lppaca() since | ||
283 | + * preemption is not disabled, and it is not required in | ||
284 | + * fact, since lppaca_ptr does not need to be the value | ||
285 | + * associated to the current CPU, it can be from any CPU. | ||
286 | + */ | ||
287 | + if (lppaca_shared_proc(local_paca->lppaca_ptr)) { | ||
288 | cpuidle_state_table = shared_states; | ||
289 | max_idle_state = ARRAY_SIZE(shared_states); | ||
290 | } else { | ||
291 | diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c | ||
292 | index 47219ebd8ff2..0f9fe2ca2a91 100644 | ||
293 | --- a/drivers/infiniband/sw/rxe/rxe_req.c | ||
294 | +++ b/drivers/infiniband/sw/rxe/rxe_req.c | ||
295 | @@ -643,6 +643,7 @@ next_wqe: | ||
296 | rmr->access = wqe->wr.wr.reg.access; | ||
297 | rmr->lkey = wqe->wr.wr.reg.key; | ||
298 | rmr->rkey = wqe->wr.wr.reg.key; | ||
299 | + rmr->iova = wqe->wr.wr.reg.mr->iova; | ||
300 | wqe->state = wqe_state_done; | ||
301 | wqe->status = IB_WC_SUCCESS; | ||
302 | } else { | ||
303 | diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c | ||
304 | index 56fcccc30554..e0cfde3501e0 100644 | ||
305 | --- a/drivers/md/dm-kcopyd.c | ||
306 | +++ b/drivers/md/dm-kcopyd.c | ||
307 | @@ -55,15 +55,17 @@ struct dm_kcopyd_client { | ||
308 | struct dm_kcopyd_throttle *throttle; | ||
309 | |||
310 | /* | ||
311 | - * We maintain three lists of jobs: | ||
312 | + * We maintain four lists of jobs: | ||
313 | * | ||
314 | * i) jobs waiting for pages | ||
315 | * ii) jobs that have pages, and are waiting for the io to be issued. | ||
316 | - * iii) jobs that have completed. | ||
317 | + * iii) jobs that don't need to do any IO and just run a callback | ||
318 | + * iv) jobs that have completed. | ||
319 | * | ||
320 | - * All three of these are protected by job_lock. | ||
321 | + * All four of these are protected by job_lock. | ||
322 | */ | ||
323 | spinlock_t job_lock; | ||
324 | + struct list_head callback_jobs; | ||
325 | struct list_head complete_jobs; | ||
326 | struct list_head io_jobs; | ||
327 | struct list_head pages_jobs; | ||
328 | @@ -584,6 +586,7 @@ static void do_work(struct work_struct *work) | ||
329 | struct dm_kcopyd_client *kc = container_of(work, | ||
330 | struct dm_kcopyd_client, kcopyd_work); | ||
331 | struct blk_plug plug; | ||
332 | + unsigned long flags; | ||
333 | |||
334 | /* | ||
335 | * The order that these are called is *very* important. | ||
336 | @@ -592,6 +595,10 @@ static void do_work(struct work_struct *work) | ||
337 | * list. io jobs call wake when they complete and it all | ||
338 | * starts again. | ||
339 | */ | ||
340 | + spin_lock_irqsave(&kc->job_lock, flags); | ||
341 | + list_splice_tail_init(&kc->callback_jobs, &kc->complete_jobs); | ||
342 | + spin_unlock_irqrestore(&kc->job_lock, flags); | ||
343 | + | ||
344 | blk_start_plug(&plug); | ||
345 | process_jobs(&kc->complete_jobs, kc, run_complete_job); | ||
346 | process_jobs(&kc->pages_jobs, kc, run_pages_job); | ||
347 | @@ -609,7 +616,7 @@ static void dispatch_job(struct kcopyd_job *job) | ||
348 | struct dm_kcopyd_client *kc = job->kc; | ||
349 | atomic_inc(&kc->nr_jobs); | ||
350 | if (unlikely(!job->source.count)) | ||
351 | - push(&kc->complete_jobs, job); | ||
352 | + push(&kc->callback_jobs, job); | ||
353 | else if (job->pages == &zero_page_list) | ||
354 | push(&kc->io_jobs, job); | ||
355 | else | ||
356 | @@ -796,7 +803,7 @@ void dm_kcopyd_do_callback(void *j, int read_err, unsigned long write_err) | ||
357 | job->read_err = read_err; | ||
358 | job->write_err = write_err; | ||
359 | |||
360 | - push(&kc->complete_jobs, job); | ||
361 | + push(&kc->callback_jobs, job); | ||
362 | wake(kc); | ||
363 | } | ||
364 | EXPORT_SYMBOL(dm_kcopyd_do_callback); | ||
365 | @@ -826,6 +833,7 @@ struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *thro | ||
366 | return ERR_PTR(-ENOMEM); | ||
367 | |||
368 | spin_lock_init(&kc->job_lock); | ||
369 | + INIT_LIST_HEAD(&kc->callback_jobs); | ||
370 | INIT_LIST_HEAD(&kc->complete_jobs); | ||
371 | INIT_LIST_HEAD(&kc->io_jobs); | ||
372 | INIT_LIST_HEAD(&kc->pages_jobs); | ||
373 | @@ -875,6 +883,7 @@ void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc) | ||
374 | /* Wait for completion of all jobs submitted by this client. */ | ||
375 | wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs)); | ||
376 | |||
377 | + BUG_ON(!list_empty(&kc->callback_jobs)); | ||
378 | BUG_ON(!list_empty(&kc->complete_jobs)); | ||
379 | BUG_ON(!list_empty(&kc->io_jobs)); | ||
380 | BUG_ON(!list_empty(&kc->pages_jobs)); | ||
381 | diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c | ||
382 | index c65feeada864..2da0b9b213c7 100644 | ||
383 | --- a/drivers/md/dm-snap.c | ||
384 | +++ b/drivers/md/dm-snap.c | ||
385 | @@ -19,6 +19,7 @@ | ||
386 | #include <linux/vmalloc.h> | ||
387 | #include <linux/log2.h> | ||
388 | #include <linux/dm-kcopyd.h> | ||
389 | +#include <linux/semaphore.h> | ||
390 | |||
391 | #include "dm.h" | ||
392 | |||
393 | @@ -105,6 +106,9 @@ struct dm_snapshot { | ||
394 | /* The on disk metadata handler */ | ||
395 | struct dm_exception_store *store; | ||
396 | |||
397 | + /* Maximum number of in-flight COW jobs. */ | ||
398 | + struct semaphore cow_count; | ||
399 | + | ||
400 | struct dm_kcopyd_client *kcopyd_client; | ||
401 | |||
402 | /* Wait for events based on state_bits */ | ||
403 | @@ -145,6 +149,19 @@ struct dm_snapshot { | ||
404 | #define RUNNING_MERGE 0 | ||
405 | #define SHUTDOWN_MERGE 1 | ||
406 | |||
407 | +/* | ||
408 | + * Maximum number of chunks being copied on write. | ||
409 | + * | ||
410 | + * The value was decided experimentally as a trade-off between memory | ||
411 | + * consumption, stalling the kernel's workqueues and maintaining a high enough | ||
412 | + * throughput. | ||
413 | + */ | ||
414 | +#define DEFAULT_COW_THRESHOLD 2048 | ||
415 | + | ||
416 | +static int cow_threshold = DEFAULT_COW_THRESHOLD; | ||
417 | +module_param_named(snapshot_cow_threshold, cow_threshold, int, 0644); | ||
418 | +MODULE_PARM_DESC(snapshot_cow_threshold, "Maximum number of chunks being copied on write"); | ||
419 | + | ||
420 | DECLARE_DM_KCOPYD_THROTTLE_WITH_MODULE_PARM(snapshot_copy_throttle, | ||
421 | "A percentage of time allocated for copy on write"); | ||
422 | |||
423 | @@ -1189,6 +1206,8 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) | ||
424 | goto bad_hash_tables; | ||
425 | } | ||
426 | |||
427 | + sema_init(&s->cow_count, (cow_threshold > 0) ? cow_threshold : INT_MAX); | ||
428 | + | ||
429 | s->kcopyd_client = dm_kcopyd_client_create(&dm_kcopyd_throttle); | ||
430 | if (IS_ERR(s->kcopyd_client)) { | ||
431 | r = PTR_ERR(s->kcopyd_client); | ||
432 | @@ -1560,6 +1579,7 @@ static void copy_callback(int read_err, unsigned long write_err, void *context) | ||
433 | } | ||
434 | list_add(&pe->out_of_order_entry, lh); | ||
435 | } | ||
436 | + up(&s->cow_count); | ||
437 | } | ||
438 | |||
439 | /* | ||
440 | @@ -1583,6 +1603,7 @@ static void start_copy(struct dm_snap_pending_exception *pe) | ||
441 | dest.count = src.count; | ||
442 | |||
443 | /* Hand over to kcopyd */ | ||
444 | + down(&s->cow_count); | ||
445 | dm_kcopyd_copy(s->kcopyd_client, &src, 1, &dest, 0, copy_callback, pe); | ||
446 | } | ||
447 | |||
448 | @@ -1602,6 +1623,7 @@ static void start_full_bio(struct dm_snap_pending_exception *pe, | ||
449 | pe->full_bio = bio; | ||
450 | pe->full_bio_end_io = bio->bi_end_io; | ||
451 | |||
452 | + down(&s->cow_count); | ||
453 | callback_data = dm_kcopyd_prepare_callback(s->kcopyd_client, | ||
454 | copy_callback, pe); | ||
455 | |||
456 | diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c | ||
457 | index 251a556112a9..280b5ffea592 100644 | ||
458 | --- a/drivers/media/firewire/firedtv-avc.c | ||
459 | +++ b/drivers/media/firewire/firedtv-avc.c | ||
460 | @@ -968,7 +968,8 @@ static int get_ca_object_length(struct avc_response_frame *r) | ||
461 | return r->operand[7]; | ||
462 | } | ||
463 | |||
464 | -int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len) | ||
465 | +int avc_ca_app_info(struct firedtv *fdtv, unsigned char *app_info, | ||
466 | + unsigned int *len) | ||
467 | { | ||
468 | struct avc_command_frame *c = (void *)fdtv->avc_data; | ||
469 | struct avc_response_frame *r = (void *)fdtv->avc_data; | ||
470 | @@ -1009,7 +1010,8 @@ out: | ||
471 | return ret; | ||
472 | } | ||
473 | |||
474 | -int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len) | ||
475 | +int avc_ca_info(struct firedtv *fdtv, unsigned char *app_info, | ||
476 | + unsigned int *len) | ||
477 | { | ||
478 | struct avc_command_frame *c = (void *)fdtv->avc_data; | ||
479 | struct avc_response_frame *r = (void *)fdtv->avc_data; | ||
480 | diff --git a/drivers/media/firewire/firedtv.h b/drivers/media/firewire/firedtv.h | ||
481 | index 345d1eda8c05..5b18a08c6285 100644 | ||
482 | --- a/drivers/media/firewire/firedtv.h | ||
483 | +++ b/drivers/media/firewire/firedtv.h | ||
484 | @@ -124,8 +124,10 @@ int avc_lnb_control(struct firedtv *fdtv, char voltage, char burst, | ||
485 | struct dvb_diseqc_master_cmd *diseqcmd); | ||
486 | void avc_remote_ctrl_work(struct work_struct *work); | ||
487 | int avc_register_remote_control(struct firedtv *fdtv); | ||
488 | -int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len); | ||
489 | -int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len); | ||
490 | +int avc_ca_app_info(struct firedtv *fdtv, unsigned char *app_info, | ||
491 | + unsigned int *len); | ||
492 | +int avc_ca_info(struct firedtv *fdtv, unsigned char *app_info, | ||
493 | + unsigned int *len); | ||
494 | int avc_ca_reset(struct firedtv *fdtv); | ||
495 | int avc_ca_pmt(struct firedtv *fdtv, char *app_info, int length); | ||
496 | int avc_ca_get_time_date(struct firedtv *fdtv, int *interval); | ||
497 | diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c | ||
498 | index 0ad8ef565b74..b73d68e7b195 100644 | ||
499 | --- a/drivers/mmc/host/atmel-mci.c | ||
500 | +++ b/drivers/mmc/host/atmel-mci.c | ||
501 | @@ -1984,13 +1984,14 @@ static void atmci_tasklet_func(unsigned long priv) | ||
502 | } | ||
503 | |||
504 | atmci_request_end(host, host->mrq); | ||
505 | - state = STATE_IDLE; | ||
506 | + goto unlock; /* atmci_request_end() sets host->state */ | ||
507 | break; | ||
508 | } | ||
509 | } while (state != prev_state); | ||
510 | |||
511 | host->state = state; | ||
512 | |||
513 | +unlock: | ||
514 | spin_unlock(&host->lock); | ||
515 | } | ||
516 | |||
517 | diff --git a/drivers/net/ethernet/intel/e1000e/ptp.c b/drivers/net/ethernet/intel/e1000e/ptp.c | ||
518 | index ad03763e009a..a9f8edc17827 100644 | ||
519 | --- a/drivers/net/ethernet/intel/e1000e/ptp.c | ||
520 | +++ b/drivers/net/ethernet/intel/e1000e/ptp.c | ||
521 | @@ -191,10 +191,14 @@ static int e1000e_phc_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) | ||
522 | struct e1000_adapter *adapter = container_of(ptp, struct e1000_adapter, | ||
523 | ptp_clock_info); | ||
524 | unsigned long flags; | ||
525 | - u64 ns; | ||
526 | + u64 cycles, ns; | ||
527 | |||
528 | spin_lock_irqsave(&adapter->systim_lock, flags); | ||
529 | - ns = timecounter_read(&adapter->tc); | ||
530 | + | ||
531 | + /* Use timecounter_cyc2time() to allow non-monotonic SYSTIM readings */ | ||
532 | + cycles = adapter->cc.read(&adapter->cc); | ||
533 | + ns = timecounter_cyc2time(&adapter->tc, cycles); | ||
534 | + | ||
535 | spin_unlock_irqrestore(&adapter->systim_lock, flags); | ||
536 | |||
537 | *ts = ns_to_timespec64(ns); | ||
538 | @@ -250,9 +254,12 @@ static void e1000e_systim_overflow_work(struct work_struct *work) | ||
539 | systim_overflow_work.work); | ||
540 | struct e1000_hw *hw = &adapter->hw; | ||
541 | struct timespec64 ts; | ||
542 | + u64 ns; | ||
543 | |||
544 | - adapter->ptp_clock_info.gettime64(&adapter->ptp_clock_info, &ts); | ||
545 | + /* Update the timecounter */ | ||
546 | + ns = timecounter_read(&adapter->tc); | ||
547 | |||
548 | + ts = ns_to_timespec64(ns); | ||
549 | e_dbg("SYSTIM overflow check at %lld.%09lu\n", | ||
550 | (long long) ts.tv_sec, ts.tv_nsec); | ||
551 | |||
552 | diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c | ||
553 | index 24754d3fb0ac..7a4393ffe98e 100644 | ||
554 | --- a/drivers/net/ethernet/realtek/r8169.c | ||
555 | +++ b/drivers/net/ethernet/realtek/r8169.c | ||
556 | @@ -324,6 +324,8 @@ enum cfg_version { | ||
557 | }; | ||
558 | |||
559 | static const struct pci_device_id rtl8169_pci_tbl[] = { | ||
560 | + { PCI_VDEVICE(REALTEK, 0x2502), RTL_CFG_1 }, | ||
561 | + { PCI_VDEVICE(REALTEK, 0x2600), RTL_CFG_1 }, | ||
562 | { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), 0, 0, RTL_CFG_0 }, | ||
563 | { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), 0, 0, RTL_CFG_2 }, | ||
564 | { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), 0, 0, RTL_CFG_1 }, | ||
565 | diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c | ||
566 | index ed277685da1d..10bd13b30178 100644 | ||
567 | --- a/drivers/platform/x86/asus-wmi.c | ||
568 | +++ b/drivers/platform/x86/asus-wmi.c | ||
569 | @@ -2154,7 +2154,8 @@ static int asus_wmi_add(struct platform_device *pdev) | ||
570 | err = asus_wmi_backlight_init(asus); | ||
571 | if (err && err != -ENODEV) | ||
572 | goto fail_backlight; | ||
573 | - } | ||
574 | + } else | ||
575 | + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL); | ||
576 | |||
577 | status = wmi_install_notify_handler(asus->driver->event_guid, | ||
578 | asus_wmi_notify, asus); | ||
579 | diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c | ||
580 | index e413113c86ac..663d8f503c86 100644 | ||
581 | --- a/drivers/scsi/megaraid/megaraid_sas_fp.c | ||
582 | +++ b/drivers/scsi/megaraid/megaraid_sas_fp.c | ||
583 | @@ -1275,7 +1275,7 @@ void mr_update_load_balance_params(struct MR_DRV_RAID_MAP_ALL *drv_map, | ||
584 | |||
585 | for (ldCount = 0; ldCount < MAX_LOGICAL_DRIVES_EXT; ldCount++) { | ||
586 | ld = MR_TargetIdToLdGet(ldCount, drv_map); | ||
587 | - if (ld >= MAX_LOGICAL_DRIVES_EXT) { | ||
588 | + if (ld >= MAX_LOGICAL_DRIVES_EXT - 1) { | ||
589 | lbInfo[ldCount].loadBalanceFlag = 0; | ||
590 | continue; | ||
591 | } | ||
592 | diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c | ||
593 | index f722a0e6caa4..fe1a20973e47 100644 | ||
594 | --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c | ||
595 | +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c | ||
596 | @@ -1902,7 +1902,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance, | ||
597 | device_id < instance->fw_supported_vd_count)) { | ||
598 | |||
599 | ld = MR_TargetIdToLdGet(device_id, local_map_ptr); | ||
600 | - if (ld >= instance->fw_supported_vd_count) | ||
601 | + if (ld >= instance->fw_supported_vd_count - 1) | ||
602 | fp_possible = 0; | ||
603 | |||
604 | raid = MR_LdRaidGet(ld, local_map_ptr); | ||
605 | diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c | ||
606 | index 96a343ec8313..b2b969990a5d 100644 | ||
607 | --- a/drivers/scsi/smartpqi/smartpqi_init.c | ||
608 | +++ b/drivers/scsi/smartpqi/smartpqi_init.c | ||
609 | @@ -2523,6 +2523,9 @@ static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info, | ||
610 | switch (response->header.iu_type) { | ||
611 | case PQI_RESPONSE_IU_RAID_PATH_IO_SUCCESS: | ||
612 | case PQI_RESPONSE_IU_AIO_PATH_IO_SUCCESS: | ||
613 | + if (io_request->scmd) | ||
614 | + io_request->scmd->result = 0; | ||
615 | + /* fall through */ | ||
616 | case PQI_RESPONSE_IU_GENERAL_MANAGEMENT: | ||
617 | break; | ||
618 | case PQI_RESPONSE_IU_TASK_MANAGEMENT: | ||
619 | diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c | ||
620 | index 2a91ed3ef380..37d7d57cf2c6 100644 | ||
621 | --- a/drivers/target/target_core_spc.c | ||
622 | +++ b/drivers/target/target_core_spc.c | ||
623 | @@ -108,12 +108,17 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf) | ||
624 | |||
625 | buf[7] = 0x2; /* CmdQue=1 */ | ||
626 | |||
627 | - memcpy(&buf[8], "LIO-ORG ", 8); | ||
628 | - memset(&buf[16], 0x20, 16); | ||
629 | + /* | ||
630 | + * ASCII data fields described as being left-aligned shall have any | ||
631 | + * unused bytes at the end of the field (i.e., highest offset) and the | ||
632 | + * unused bytes shall be filled with ASCII space characters (20h). | ||
633 | + */ | ||
634 | + memset(&buf[8], 0x20, 8 + 16 + 4); | ||
635 | + memcpy(&buf[8], "LIO-ORG", sizeof("LIO-ORG") - 1); | ||
636 | memcpy(&buf[16], dev->t10_wwn.model, | ||
637 | - min_t(size_t, strlen(dev->t10_wwn.model), 16)); | ||
638 | + strnlen(dev->t10_wwn.model, 16)); | ||
639 | memcpy(&buf[32], dev->t10_wwn.revision, | ||
640 | - min_t(size_t, strlen(dev->t10_wwn.revision), 4)); | ||
641 | + strnlen(dev->t10_wwn.revision, 4)); | ||
642 | buf[4] = 31; /* Set additional length to 31 */ | ||
643 | |||
644 | return 0; | ||
645 | @@ -251,7 +256,9 @@ check_t10_vend_desc: | ||
646 | buf[off] = 0x2; /* ASCII */ | ||
647 | buf[off+1] = 0x1; /* T10 Vendor ID */ | ||
648 | buf[off+2] = 0x0; | ||
649 | - memcpy(&buf[off+4], "LIO-ORG", 8); | ||
650 | + /* left align Vendor ID and pad with spaces */ | ||
651 | + memset(&buf[off+4], 0x20, 8); | ||
652 | + memcpy(&buf[off+4], "LIO-ORG", sizeof("LIO-ORG") - 1); | ||
653 | /* Extra Byte for NULL Terminator */ | ||
654 | id_len++; | ||
655 | /* Identifier Length */ | ||
656 | diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c | ||
657 | index 41b0dd67fcce..2d8089fc2139 100644 | ||
658 | --- a/drivers/tty/serial/amba-pl011.c | ||
659 | +++ b/drivers/tty/serial/amba-pl011.c | ||
660 | @@ -2712,6 +2712,7 @@ static struct platform_driver arm_sbsa_uart_platform_driver = { | ||
661 | .name = "sbsa-uart", | ||
662 | .of_match_table = of_match_ptr(sbsa_uart_of_match), | ||
663 | .acpi_match_table = ACPI_PTR(sbsa_uart_acpi_match), | ||
664 | + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_AMBA_PL011), | ||
665 | }, | ||
666 | }; | ||
667 | |||
668 | @@ -2740,6 +2741,7 @@ static struct amba_driver pl011_driver = { | ||
669 | .drv = { | ||
670 | .name = "uart-pl011", | ||
671 | .pm = &pl011_dev_pm_ops, | ||
672 | + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_AMBA_PL011), | ||
673 | }, | ||
674 | .id_table = pl011_ids, | ||
675 | .probe = pl011_probe, | ||
676 | diff --git a/drivers/tty/serial/pic32_uart.c b/drivers/tty/serial/pic32_uart.c | ||
677 | index 7f8e99bbcb73..fb77d55a8d95 100644 | ||
678 | --- a/drivers/tty/serial/pic32_uart.c | ||
679 | +++ b/drivers/tty/serial/pic32_uart.c | ||
680 | @@ -920,6 +920,7 @@ static struct platform_driver pic32_uart_platform_driver = { | ||
681 | .driver = { | ||
682 | .name = PIC32_DEV_NAME, | ||
683 | .of_match_table = of_match_ptr(pic32_serial_dt_ids), | ||
684 | + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_PIC32), | ||
685 | }, | ||
686 | }; | ||
687 | |||
688 | diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c | ||
689 | index 53e6db8b0330..bcfdaf6ddbb2 100644 | ||
690 | --- a/drivers/tty/serial/serial_core.c | ||
691 | +++ b/drivers/tty/serial/serial_core.c | ||
692 | @@ -195,10 +195,15 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state, | ||
693 | if (!state->xmit.buf) { | ||
694 | state->xmit.buf = (unsigned char *) page; | ||
695 | uart_circ_clear(&state->xmit); | ||
696 | + uart_port_unlock(uport, flags); | ||
697 | } else { | ||
698 | + uart_port_unlock(uport, flags); | ||
699 | + /* | ||
700 | + * Do not free() the page under the port lock, see | ||
701 | + * uart_shutdown(). | ||
702 | + */ | ||
703 | free_page(page); | ||
704 | } | ||
705 | - uart_port_unlock(uport, flags); | ||
706 | |||
707 | retval = uport->ops->startup(uport); | ||
708 | if (retval == 0) { | ||
709 | @@ -258,6 +263,7 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state) | ||
710 | struct uart_port *uport = uart_port_check(state); | ||
711 | struct tty_port *port = &state->port; | ||
712 | unsigned long flags = 0; | ||
713 | + char *xmit_buf = NULL; | ||
714 | |||
715 | /* | ||
716 | * Set the TTY IO error marker | ||
717 | @@ -288,14 +294,18 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state) | ||
718 | tty_port_set_suspended(port, 0); | ||
719 | |||
720 | /* | ||
721 | - * Free the transmit buffer page. | ||
722 | + * Do not free() the transmit buffer page under the port lock since | ||
723 | + * this can create various circular locking scenarios. For instance, | ||
724 | + * console driver may need to allocate/free a debug object, which | ||
725 | + * can endup in printk() recursion. | ||
726 | */ | ||
727 | uart_port_lock(state, flags); | ||
728 | - if (state->xmit.buf) { | ||
729 | - free_page((unsigned long)state->xmit.buf); | ||
730 | - state->xmit.buf = NULL; | ||
731 | - } | ||
732 | + xmit_buf = state->xmit.buf; | ||
733 | + state->xmit.buf = NULL; | ||
734 | uart_port_unlock(uport, flags); | ||
735 | + | ||
736 | + if (xmit_buf) | ||
737 | + free_page((unsigned long)xmit_buf); | ||
738 | } | ||
739 | |||
740 | /** | ||
741 | diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c | ||
742 | index fcf2e51f2cfe..7333d64f68f2 100644 | ||
743 | --- a/drivers/tty/serial/xilinx_uartps.c | ||
744 | +++ b/drivers/tty/serial/xilinx_uartps.c | ||
745 | @@ -1602,6 +1602,7 @@ static struct platform_driver cdns_uart_platform_driver = { | ||
746 | .name = CDNS_UART_NAME, | ||
747 | .of_match_table = cdns_uart_of_match, | ||
748 | .pm = &cdns_uart_dev_pm_ops, | ||
749 | + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_XILINX_PS_UART), | ||
750 | }, | ||
751 | }; | ||
752 | |||
753 | diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c | ||
754 | index 79b0de846f21..226640563df3 100644 | ||
755 | --- a/fs/jffs2/super.c | ||
756 | +++ b/fs/jffs2/super.c | ||
757 | @@ -101,7 +101,8 @@ static int jffs2_sync_fs(struct super_block *sb, int wait) | ||
758 | struct jffs2_sb_info *c = JFFS2_SB_INFO(sb); | ||
759 | |||
760 | #ifdef CONFIG_JFFS2_FS_WRITEBUFFER | ||
761 | - cancel_delayed_work_sync(&c->wbuf_dwork); | ||
762 | + if (jffs2_is_writebuffered(c)) | ||
763 | + cancel_delayed_work_sync(&c->wbuf_dwork); | ||
764 | #endif | ||
765 | |||
766 | mutex_lock(&c->alloc_sem); | ||
767 | diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c | ||
768 | index fe0d1f9571bb..5d53d0d63d19 100644 | ||
769 | --- a/fs/ocfs2/localalloc.c | ||
770 | +++ b/fs/ocfs2/localalloc.c | ||
771 | @@ -345,13 +345,18 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb) | ||
772 | if (num_used | ||
773 | || alloc->id1.bitmap1.i_used | ||
774 | || alloc->id1.bitmap1.i_total | ||
775 | - || la->la_bm_off) | ||
776 | - mlog(ML_ERROR, "Local alloc hasn't been recovered!\n" | ||
777 | + || la->la_bm_off) { | ||
778 | + mlog(ML_ERROR, "inconsistent detected, clean journal with" | ||
779 | + " unrecovered local alloc, please run fsck.ocfs2!\n" | ||
780 | "found = %u, set = %u, taken = %u, off = %u\n", | ||
781 | num_used, le32_to_cpu(alloc->id1.bitmap1.i_used), | ||
782 | le32_to_cpu(alloc->id1.bitmap1.i_total), | ||
783 | OCFS2_LOCAL_ALLOC(alloc)->la_bm_off); | ||
784 | |||
785 | + status = -EINVAL; | ||
786 | + goto bail; | ||
787 | + } | ||
788 | + | ||
789 | osb->local_alloc_bh = alloc_bh; | ||
790 | osb->local_alloc_state = OCFS2_LA_ENABLED; | ||
791 | |||
792 | diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c | ||
793 | index ecdb3baa1283..11e558efd61e 100644 | ||
794 | --- a/fs/pstore/ram_core.c | ||
795 | +++ b/fs/pstore/ram_core.c | ||
796 | @@ -488,6 +488,11 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig, | ||
797 | sig ^= PERSISTENT_RAM_SIG; | ||
798 | |||
799 | if (prz->buffer->sig == sig) { | ||
800 | + if (buffer_size(prz) == 0) { | ||
801 | + pr_debug("found existing empty buffer\n"); | ||
802 | + return 0; | ||
803 | + } | ||
804 | + | ||
805 | if (buffer_size(prz) > prz->buffer_size || | ||
806 | buffer_start(prz) > buffer_size(prz)) | ||
807 | pr_info("found existing invalid buffer, size %zu, start %zu\n", | ||
808 | diff --git a/include/asm-generic/qspinlock_types.h b/include/asm-generic/qspinlock_types.h | ||
809 | index d10f1e7d6ba8..6503e96710fa 100644 | ||
810 | --- a/include/asm-generic/qspinlock_types.h | ||
811 | +++ b/include/asm-generic/qspinlock_types.h | ||
812 | @@ -18,6 +18,8 @@ | ||
813 | #ifndef __ASM_GENERIC_QSPINLOCK_TYPES_H | ||
814 | #define __ASM_GENERIC_QSPINLOCK_TYPES_H | ||
815 | |||
816 | +#include <asm/byteorder.h> | ||
817 | + | ||
818 | /* | ||
819 | * Including atomic.h with PARAVIRT on will cause compilation errors because | ||
820 | * of recursive header file incluson via paravirt_types.h. So don't include | ||
821 | diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h | ||
822 | index 32728ff8095c..4ea779b25a51 100644 | ||
823 | --- a/include/linux/backing-dev-defs.h | ||
824 | +++ b/include/linux/backing-dev-defs.h | ||
825 | @@ -225,6 +225,14 @@ static inline void wb_get(struct bdi_writeback *wb) | ||
826 | */ | ||
827 | static inline void wb_put(struct bdi_writeback *wb) | ||
828 | { | ||
829 | + if (WARN_ON_ONCE(!wb->bdi)) { | ||
830 | + /* | ||
831 | + * A driver bug might cause a file to be removed before bdi was | ||
832 | + * initialized. | ||
833 | + */ | ||
834 | + return; | ||
835 | + } | ||
836 | + | ||
837 | if (wb != &wb->bdi->wb) | ||
838 | percpu_ref_put(&wb->refcnt); | ||
839 | } | ||
840 | diff --git a/mm/page-writeback.c b/mm/page-writeback.c | ||
841 | index 807236aed275..281a46aeae61 100644 | ||
842 | --- a/mm/page-writeback.c | ||
843 | +++ b/mm/page-writeback.c | ||
844 | @@ -2148,6 +2148,7 @@ int write_cache_pages(struct address_space *mapping, | ||
845 | { | ||
846 | int ret = 0; | ||
847 | int done = 0; | ||
848 | + int error; | ||
849 | struct pagevec pvec; | ||
850 | int nr_pages; | ||
851 | pgoff_t uninitialized_var(writeback_index); | ||
852 | @@ -2244,25 +2245,31 @@ continue_unlock: | ||
853 | goto continue_unlock; | ||
854 | |||
855 | trace_wbc_writepage(wbc, inode_to_bdi(mapping->host)); | ||
856 | - ret = (*writepage)(page, wbc, data); | ||
857 | - if (unlikely(ret)) { | ||
858 | - if (ret == AOP_WRITEPAGE_ACTIVATE) { | ||
859 | + error = (*writepage)(page, wbc, data); | ||
860 | + if (unlikely(error)) { | ||
861 | + /* | ||
862 | + * Handle errors according to the type of | ||
863 | + * writeback. There's no need to continue for | ||
864 | + * background writeback. Just push done_index | ||
865 | + * past this page so media errors won't choke | ||
866 | + * writeout for the entire file. For integrity | ||
867 | + * writeback, we must process the entire dirty | ||
868 | + * set regardless of errors because the fs may | ||
869 | + * still have state to clear for each page. In | ||
870 | + * that case we continue processing and return | ||
871 | + * the first error. | ||
872 | + */ | ||
873 | + if (error == AOP_WRITEPAGE_ACTIVATE) { | ||
874 | unlock_page(page); | ||
875 | - ret = 0; | ||
876 | - } else { | ||
877 | - /* | ||
878 | - * done_index is set past this page, | ||
879 | - * so media errors will not choke | ||
880 | - * background writeout for the entire | ||
881 | - * file. This has consequences for | ||
882 | - * range_cyclic semantics (ie. it may | ||
883 | - * not be suitable for data integrity | ||
884 | - * writeout). | ||
885 | - */ | ||
886 | + error = 0; | ||
887 | + } else if (wbc->sync_mode != WB_SYNC_ALL) { | ||
888 | + ret = error; | ||
889 | done_index = page->index + 1; | ||
890 | done = 1; | ||
891 | break; | ||
892 | } | ||
893 | + if (!ret) | ||
894 | + ret = error; | ||
895 | } | ||
896 | |||
897 | /* | ||
898 | diff --git a/net/core/sock.c b/net/core/sock.c | ||
899 | index 68c831e1a5c0..3041aa6df602 100644 | ||
900 | --- a/net/core/sock.c | ||
901 | +++ b/net/core/sock.c | ||
902 | @@ -699,6 +699,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname, | ||
903 | break; | ||
904 | case SO_DONTROUTE: | ||
905 | sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool); | ||
906 | + sk_dst_reset(sk); | ||
907 | break; | ||
908 | case SO_BROADCAST: | ||
909 | sock_valbool_flag(sk, SOCK_BROADCAST, valbool); | ||
910 | diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c | ||
911 | index f7b425615c12..c81b2c5caf26 100644 | ||
912 | --- a/net/ipv6/af_inet6.c | ||
913 | +++ b/net/ipv6/af_inet6.c | ||
914 | @@ -306,6 +306,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | ||
915 | |||
916 | /* Check if the address belongs to the host. */ | ||
917 | if (addr_type == IPV6_ADDR_MAPPED) { | ||
918 | + struct net_device *dev = NULL; | ||
919 | int chk_addr_ret; | ||
920 | |||
921 | /* Binding to v4-mapped address on a v6-only socket | ||
922 | @@ -316,9 +317,20 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | ||
923 | goto out; | ||
924 | } | ||
925 | |||
926 | + rcu_read_lock(); | ||
927 | + if (sk->sk_bound_dev_if) { | ||
928 | + dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if); | ||
929 | + if (!dev) { | ||
930 | + err = -ENODEV; | ||
931 | + goto out_unlock; | ||
932 | + } | ||
933 | + } | ||
934 | + | ||
935 | /* Reproduce AF_INET checks to make the bindings consistent */ | ||
936 | v4addr = addr->sin6_addr.s6_addr32[3]; | ||
937 | - chk_addr_ret = inet_addr_type(net, v4addr); | ||
938 | + chk_addr_ret = inet_addr_type_dev_table(net, dev, v4addr); | ||
939 | + rcu_read_unlock(); | ||
940 | + | ||
941 | if (!net->ipv4.sysctl_ip_nonlocal_bind && | ||
942 | !(inet->freebind || inet->transparent) && | ||
943 | v4addr != htonl(INADDR_ANY) && | ||
944 | diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l | ||
945 | index c410d257da06..0c7800112ff5 100644 | ||
946 | --- a/scripts/kconfig/zconf.l | ||
947 | +++ b/scripts/kconfig/zconf.l | ||
948 | @@ -71,7 +71,7 @@ static void warn_ignored_character(char chr) | ||
949 | { | ||
950 | fprintf(stderr, | ||
951 | "%s:%d:warning: ignoring unsupported character '%c'\n", | ||
952 | - zconf_curname(), zconf_lineno(), chr); | ||
953 | + current_file->name, yylineno, chr); | ||
954 | } | ||
955 | %} | ||
956 | |||
957 | @@ -191,6 +191,8 @@ n [A-Za-z0-9_-] | ||
958 | } | ||
959 | <<EOF>> { | ||
960 | BEGIN(INITIAL); | ||
961 | + yylval.string = text; | ||
962 | + return T_WORD_QUOTE; | ||
963 | } | ||
964 | } | ||
965 | |||
966 | diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c | ||
967 | index 8ded80867b92..d293b546a2aa 100644 | ||
968 | --- a/security/selinux/hooks.c | ||
969 | +++ b/security/selinux/hooks.c | ||
970 | @@ -2758,7 +2758,7 @@ static int selinux_sb_kern_mount(struct super_block *sb, int flags, void *data) | ||
971 | return rc; | ||
972 | |||
973 | /* Allow all mounts performed by the kernel */ | ||
974 | - if (flags & MS_KERNMOUNT) | ||
975 | + if (flags & (MS_KERNMOUNT | MS_SUBMOUNT)) | ||
976 | return 0; | ||
977 | |||
978 | ad.type = LSM_AUDIT_DATA_DENTRY; | ||
979 | diff --git a/sound/firewire/Kconfig b/sound/firewire/Kconfig | ||
980 | index ab894ed1ff67..8557e54d2659 100644 | ||
981 | --- a/sound/firewire/Kconfig | ||
982 | +++ b/sound/firewire/Kconfig | ||
983 | @@ -40,6 +40,7 @@ config SND_OXFW | ||
984 | * Mackie(Loud) U.420/U.420d | ||
985 | * TASCAM FireOne | ||
986 | * Stanton Controllers & Systems 1 Deck/Mixer | ||
987 | + * APOGEE duet FireWire | ||
988 | |||
989 | To compile this driver as a module, choose M here: the module | ||
990 | will be called snd-oxfw. | ||
991 | diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c | ||
992 | index d0dfa822266b..3b4eaffe4a7f 100644 | ||
993 | --- a/sound/firewire/bebob/bebob.c | ||
994 | +++ b/sound/firewire/bebob/bebob.c | ||
995 | @@ -434,7 +434,7 @@ static const struct ieee1394_device_id bebob_id_table[] = { | ||
996 | /* Apogee Electronics, DA/AD/DD-16X (X-FireWire card) */ | ||
997 | SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x00010048, &spec_normal), | ||
998 | /* Apogee Electronics, Ensemble */ | ||
999 | - SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x00001eee, &spec_normal), | ||
1000 | + SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x01eeee, &spec_normal), | ||
1001 | /* ESI, Quatafire610 */ | ||
1002 | SND_BEBOB_DEV_ENTRY(VEN_ESI, 0x00010064, &spec_normal), | ||
1003 | /* AcousticReality, eARMasterOne */ | ||
1004 | diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c | ||
1005 | index 696b6cf35003..b0395c4209ab 100644 | ||
1006 | --- a/sound/firewire/oxfw/oxfw.c | ||
1007 | +++ b/sound/firewire/oxfw/oxfw.c | ||
1008 | @@ -20,6 +20,7 @@ | ||
1009 | #define VENDOR_LACIE 0x00d04b | ||
1010 | #define VENDOR_TASCAM 0x00022e | ||
1011 | #define OUI_STANTON 0x001260 | ||
1012 | +#define OUI_APOGEE 0x0003db | ||
1013 | |||
1014 | #define MODEL_SATELLITE 0x00200f | ||
1015 | |||
1016 | @@ -441,6 +442,13 @@ static const struct ieee1394_device_id oxfw_id_table[] = { | ||
1017 | .vendor_id = OUI_STANTON, | ||
1018 | .model_id = 0x002000, | ||
1019 | }, | ||
1020 | + // APOGEE, duet FireWire | ||
1021 | + { | ||
1022 | + .match_flags = IEEE1394_MATCH_VENDOR_ID | | ||
1023 | + IEEE1394_MATCH_MODEL_ID, | ||
1024 | + .vendor_id = OUI_APOGEE, | ||
1025 | + .model_id = 0x01dddd, | ||
1026 | + }, | ||
1027 | { } | ||
1028 | }; | ||
1029 | MODULE_DEVICE_TABLE(ieee1394, oxfw_id_table); | ||
1030 | diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile | ||
1031 | index ce4b7e527566..a690d230c311 100644 | ||
1032 | --- a/tools/lib/subcmd/Makefile | ||
1033 | +++ b/tools/lib/subcmd/Makefile | ||
1034 | @@ -29,8 +29,6 @@ endif | ||
1035 | CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE | ||
1036 | |||
1037 | CFLAGS += -I$(srctree)/tools/include/ | ||
1038 | -CFLAGS += -I$(srctree)/include/uapi | ||
1039 | -CFLAGS += -I$(srctree)/include | ||
1040 | |||
1041 | SUBCMD_IN := $(OUTPUT)libsubcmd-in.o | ||
1042 | |||
1043 | diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c | ||
1044 | index 90fa2286edcf..c88adcbf966e 100644 | ||
1045 | --- a/tools/perf/arch/x86/util/intel-pt.c | ||
1046 | +++ b/tools/perf/arch/x86/util/intel-pt.c | ||
1047 | @@ -522,10 +522,21 @@ static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu, | ||
1048 | struct perf_evsel *evsel) | ||
1049 | { | ||
1050 | int err; | ||
1051 | + char c; | ||
1052 | |||
1053 | if (!evsel) | ||
1054 | return 0; | ||
1055 | |||
1056 | + /* | ||
1057 | + * If supported, force pass-through config term (pt=1) even if user | ||
1058 | + * sets pt=0, which avoids senseless kernel errors. | ||
1059 | + */ | ||
1060 | + if (perf_pmu__scan_file(intel_pt_pmu, "format/pt", "%c", &c) == 1 && | ||
1061 | + !(evsel->attr.config & 1)) { | ||
1062 | + pr_warning("pt=0 doesn't make sense, forcing pt=1\n"); | ||
1063 | + evsel->attr.config |= 1; | ||
1064 | + } | ||
1065 | + | ||
1066 | err = intel_pt_val_config_term(intel_pt_pmu, "caps/cycle_thresholds", | ||
1067 | "cyc_thresh", "caps/psb_cyc", | ||
1068 | evsel->attr.config); | ||
1069 | diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c | ||
1070 | index 415a9c38d9f0..14f111a10650 100644 | ||
1071 | --- a/tools/perf/util/parse-events.c | ||
1072 | +++ b/tools/perf/util/parse-events.c | ||
1073 | @@ -2225,7 +2225,7 @@ restart: | ||
1074 | if (!name_only && strlen(syms->alias)) | ||
1075 | snprintf(name, MAX_NAME_LEN, "%s OR %s", syms->symbol, syms->alias); | ||
1076 | else | ||
1077 | - strncpy(name, syms->symbol, MAX_NAME_LEN); | ||
1078 | + strlcpy(name, syms->symbol, MAX_NAME_LEN); | ||
1079 | |||
1080 | evt_list[evt_i] = strdup(name); | ||
1081 | if (evt_list[evt_i] == NULL) | ||
1082 | diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c | ||
1083 | index 1cbada2dc6be..f735ee038713 100644 | ||
1084 | --- a/tools/perf/util/svghelper.c | ||
1085 | +++ b/tools/perf/util/svghelper.c | ||
1086 | @@ -334,7 +334,7 @@ static char *cpu_model(void) | ||
1087 | if (file) { | ||
1088 | while (fgets(buf, 255, file)) { | ||
1089 | if (strstr(buf, "model name")) { | ||
1090 | - strncpy(cpu_m, &buf[13], 255); | ||
1091 | + strlcpy(cpu_m, &buf[13], 255); | ||
1092 | break; | ||
1093 | } | ||
1094 | } |