Contents of /trunk/kernel-alx/patches-4.19/0167-4.19.68-all-fixes.patch
Parent Directory | Revision Log
Revision 3464 -
(show annotations)
(download)
Tue Oct 29 10:31:25 2019 UTC (4 years, 10 months ago) by niro
File size: 89559 byte(s)
Tue Oct 29 10:31:25 2019 UTC (4 years, 10 months ago) by niro
File size: 89559 byte(s)
-linux-4.19.68
1 | diff --git a/Makefile b/Makefile |
2 | index b6aa6e8d4411..6f164b04d953 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,7 +1,7 @@ |
6 | # SPDX-License-Identifier: GPL-2.0 |
7 | VERSION = 4 |
8 | PATCHLEVEL = 19 |
9 | -SUBLEVEL = 67 |
10 | +SUBLEVEL = 68 |
11 | EXTRAVERSION = |
12 | NAME = "People's Front" |
13 | |
14 | diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h |
15 | index 7ed320895d1f..f52a2968a3b6 100644 |
16 | --- a/arch/arm64/include/asm/efi.h |
17 | +++ b/arch/arm64/include/asm/efi.h |
18 | @@ -94,7 +94,11 @@ static inline unsigned long efi_get_max_initrd_addr(unsigned long dram_base, |
19 | ((protocol##_t *)instance)->f(instance, ##__VA_ARGS__) |
20 | |
21 | #define alloc_screen_info(x...) &screen_info |
22 | -#define free_screen_info(x...) |
23 | + |
24 | +static inline void free_screen_info(efi_system_table_t *sys_table_arg, |
25 | + struct screen_info *si) |
26 | +{ |
27 | +} |
28 | |
29 | /* redeclare as 'hidden' so the compiler will generate relative references */ |
30 | extern struct screen_info screen_info __attribute__((__visibility__("hidden"))); |
31 | diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h |
32 | index ea423db39364..2214a403f39b 100644 |
33 | --- a/arch/arm64/include/asm/pgtable.h |
34 | +++ b/arch/arm64/include/asm/pgtable.h |
35 | @@ -419,8 +419,8 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, |
36 | PMD_TYPE_SECT) |
37 | |
38 | #if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3 |
39 | -#define pud_sect(pud) (0) |
40 | -#define pud_table(pud) (1) |
41 | +static inline bool pud_sect(pud_t pud) { return false; } |
42 | +static inline bool pud_table(pud_t pud) { return true; } |
43 | #else |
44 | #define pud_sect(pud) ((pud_val(pud) & PUD_TYPE_MASK) == \ |
45 | PUD_TYPE_SECT) |
46 | diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c |
47 | index 57e962290df3..7eff8afa035f 100644 |
48 | --- a/arch/arm64/kernel/ftrace.c |
49 | +++ b/arch/arm64/kernel/ftrace.c |
50 | @@ -76,7 +76,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) |
51 | |
52 | if (offset < -SZ_128M || offset >= SZ_128M) { |
53 | #ifdef CONFIG_ARM64_MODULE_PLTS |
54 | - struct plt_entry trampoline; |
55 | + struct plt_entry trampoline, *dst; |
56 | struct module *mod; |
57 | |
58 | /* |
59 | @@ -104,24 +104,27 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) |
60 | * is added in the future, but for now, the pr_err() below |
61 | * deals with a theoretical issue only. |
62 | */ |
63 | + dst = mod->arch.ftrace_trampoline; |
64 | trampoline = get_plt_entry(addr); |
65 | - if (!plt_entries_equal(mod->arch.ftrace_trampoline, |
66 | - &trampoline)) { |
67 | - if (!plt_entries_equal(mod->arch.ftrace_trampoline, |
68 | - &(struct plt_entry){})) { |
69 | + if (!plt_entries_equal(dst, &trampoline)) { |
70 | + if (!plt_entries_equal(dst, &(struct plt_entry){})) { |
71 | pr_err("ftrace: far branches to multiple entry points unsupported inside a single module\n"); |
72 | return -EINVAL; |
73 | } |
74 | |
75 | /* point the trampoline to our ftrace entry point */ |
76 | module_disable_ro(mod); |
77 | - *mod->arch.ftrace_trampoline = trampoline; |
78 | + *dst = trampoline; |
79 | module_enable_ro(mod, true); |
80 | |
81 | - /* update trampoline before patching in the branch */ |
82 | - smp_wmb(); |
83 | + /* |
84 | + * Ensure updated trampoline is visible to instruction |
85 | + * fetch before we patch in the branch. |
86 | + */ |
87 | + __flush_icache_range((unsigned long)&dst[0], |
88 | + (unsigned long)&dst[1]); |
89 | } |
90 | - addr = (unsigned long)(void *)mod->arch.ftrace_trampoline; |
91 | + addr = (unsigned long)dst; |
92 | #else /* CONFIG_ARM64_MODULE_PLTS */ |
93 | return -EINVAL; |
94 | #endif /* CONFIG_ARM64_MODULE_PLTS */ |
95 | diff --git a/arch/arm64/kernel/return_address.c b/arch/arm64/kernel/return_address.c |
96 | index 933adbc0f654..0311fe52c8ff 100644 |
97 | --- a/arch/arm64/kernel/return_address.c |
98 | +++ b/arch/arm64/kernel/return_address.c |
99 | @@ -11,6 +11,7 @@ |
100 | |
101 | #include <linux/export.h> |
102 | #include <linux/ftrace.h> |
103 | +#include <linux/kprobes.h> |
104 | |
105 | #include <asm/stack_pointer.h> |
106 | #include <asm/stacktrace.h> |
107 | @@ -32,6 +33,7 @@ static int save_return_addr(struct stackframe *frame, void *d) |
108 | return 0; |
109 | } |
110 | } |
111 | +NOKPROBE_SYMBOL(save_return_addr); |
112 | |
113 | void *return_address(unsigned int level) |
114 | { |
115 | @@ -55,3 +57,4 @@ void *return_address(unsigned int level) |
116 | return NULL; |
117 | } |
118 | EXPORT_SYMBOL_GPL(return_address); |
119 | +NOKPROBE_SYMBOL(return_address); |
120 | diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c |
121 | index 4989f7ea1e59..bb482ec044b6 100644 |
122 | --- a/arch/arm64/kernel/stacktrace.c |
123 | +++ b/arch/arm64/kernel/stacktrace.c |
124 | @@ -18,6 +18,7 @@ |
125 | #include <linux/kernel.h> |
126 | #include <linux/export.h> |
127 | #include <linux/ftrace.h> |
128 | +#include <linux/kprobes.h> |
129 | #include <linux/sched.h> |
130 | #include <linux/sched/debug.h> |
131 | #include <linux/sched/task_stack.h> |
132 | @@ -85,6 +86,7 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame) |
133 | |
134 | return 0; |
135 | } |
136 | +NOKPROBE_SYMBOL(unwind_frame); |
137 | |
138 | void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame, |
139 | int (*fn)(struct stackframe *, void *), void *data) |
140 | @@ -99,6 +101,7 @@ void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame, |
141 | break; |
142 | } |
143 | } |
144 | +NOKPROBE_SYMBOL(walk_stackframe); |
145 | |
146 | #ifdef CONFIG_STACKTRACE |
147 | struct stack_trace_data { |
148 | diff --git a/arch/arm64/kvm/regmap.c b/arch/arm64/kvm/regmap.c |
149 | index 7a5173ea2276..4c2e96ef306e 100644 |
150 | --- a/arch/arm64/kvm/regmap.c |
151 | +++ b/arch/arm64/kvm/regmap.c |
152 | @@ -189,13 +189,18 @@ void vcpu_write_spsr32(struct kvm_vcpu *vcpu, unsigned long v) |
153 | switch (spsr_idx) { |
154 | case KVM_SPSR_SVC: |
155 | write_sysreg_el1(v, spsr); |
156 | + break; |
157 | case KVM_SPSR_ABT: |
158 | write_sysreg(v, spsr_abt); |
159 | + break; |
160 | case KVM_SPSR_UND: |
161 | write_sysreg(v, spsr_und); |
162 | + break; |
163 | case KVM_SPSR_IRQ: |
164 | write_sysreg(v, spsr_irq); |
165 | + break; |
166 | case KVM_SPSR_FIQ: |
167 | write_sysreg(v, spsr_fiq); |
168 | + break; |
169 | } |
170 | } |
171 | diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h |
172 | index dd6b05bff75b..d911a8c2314d 100644 |
173 | --- a/arch/riscv/include/asm/switch_to.h |
174 | +++ b/arch/riscv/include/asm/switch_to.h |
175 | @@ -23,7 +23,7 @@ extern void __fstate_restore(struct task_struct *restore_from); |
176 | |
177 | static inline void __fstate_clean(struct pt_regs *regs) |
178 | { |
179 | - regs->sstatus |= (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; |
180 | + regs->sstatus = (regs->sstatus & ~SR_FS) | SR_FS_CLEAN; |
181 | } |
182 | |
183 | static inline void fstate_save(struct task_struct *task, |
184 | diff --git a/arch/sh/kernel/hw_breakpoint.c b/arch/sh/kernel/hw_breakpoint.c |
185 | index d9ff3b42da7c..2569ffc061f9 100644 |
186 | --- a/arch/sh/kernel/hw_breakpoint.c |
187 | +++ b/arch/sh/kernel/hw_breakpoint.c |
188 | @@ -160,6 +160,7 @@ int arch_bp_generic_fields(int sh_len, int sh_type, |
189 | switch (sh_type) { |
190 | case SH_BREAKPOINT_READ: |
191 | *gen_type = HW_BREAKPOINT_R; |
192 | + break; |
193 | case SH_BREAKPOINT_WRITE: |
194 | *gen_type = HW_BREAKPOINT_W; |
195 | break; |
196 | diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c |
197 | index a285fbd0fd9b..15580e4fc766 100644 |
198 | --- a/arch/xtensa/kernel/setup.c |
199 | +++ b/arch/xtensa/kernel/setup.c |
200 | @@ -515,6 +515,7 @@ void cpu_reset(void) |
201 | "add %2, %2, %7\n\t" |
202 | "addi %0, %0, -1\n\t" |
203 | "bnez %0, 1b\n\t" |
204 | + "isync\n\t" |
205 | /* Jump to identity mapping */ |
206 | "jx %3\n" |
207 | "2:\n\t" |
208 | diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c |
209 | index c92c10d55374..5bece9752ed6 100644 |
210 | --- a/drivers/ata/libahci_platform.c |
211 | +++ b/drivers/ata/libahci_platform.c |
212 | @@ -313,6 +313,9 @@ static int ahci_platform_get_phy(struct ahci_host_priv *hpriv, u32 port, |
213 | hpriv->phys[port] = NULL; |
214 | rc = 0; |
215 | break; |
216 | + case -EPROBE_DEFER: |
217 | + /* Do not complain yet */ |
218 | + break; |
219 | |
220 | default: |
221 | dev_err(dev, |
222 | diff --git a/drivers/ata/libata-zpodd.c b/drivers/ata/libata-zpodd.c |
223 | index 173e6f2dd9af..eefda51f97d3 100644 |
224 | --- a/drivers/ata/libata-zpodd.c |
225 | +++ b/drivers/ata/libata-zpodd.c |
226 | @@ -56,7 +56,7 @@ static enum odd_mech_type zpodd_get_mech_type(struct ata_device *dev) |
227 | unsigned int ret; |
228 | struct rm_feature_desc *desc; |
229 | struct ata_taskfile tf; |
230 | - static const char cdb[] = { GPCMD_GET_CONFIGURATION, |
231 | + static const char cdb[ATAPI_CDB_LEN] = { GPCMD_GET_CONFIGURATION, |
232 | 2, /* only 1 feature descriptor requested */ |
233 | 0, 3, /* 3, removable medium feature */ |
234 | 0, 0, 0,/* reserved */ |
235 | diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c |
236 | index 33481368740e..113152425a95 100644 |
237 | --- a/drivers/clk/at91/clk-generated.c |
238 | +++ b/drivers/clk/at91/clk-generated.c |
239 | @@ -153,6 +153,8 @@ static int clk_generated_determine_rate(struct clk_hw *hw, |
240 | continue; |
241 | |
242 | div = DIV_ROUND_CLOSEST(parent_rate, req->rate); |
243 | + if (div > GENERATED_MAX_DIV + 1) |
244 | + div = GENERATED_MAX_DIV + 1; |
245 | |
246 | clk_generated_best_diff(req, parent, parent_rate, div, |
247 | &best_diff, &best_rate); |
248 | diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c |
249 | index f4b013e9352d..24485bee9b49 100644 |
250 | --- a/drivers/clk/renesas/renesas-cpg-mssr.c |
251 | +++ b/drivers/clk/renesas/renesas-cpg-mssr.c |
252 | @@ -535,17 +535,11 @@ static int cpg_mssr_reset(struct reset_controller_dev *rcdev, |
253 | unsigned int reg = id / 32; |
254 | unsigned int bit = id % 32; |
255 | u32 bitmask = BIT(bit); |
256 | - unsigned long flags; |
257 | - u32 value; |
258 | |
259 | dev_dbg(priv->dev, "reset %u%02u\n", reg, bit); |
260 | |
261 | /* Reset module */ |
262 | - spin_lock_irqsave(&priv->rmw_lock, flags); |
263 | - value = readl(priv->base + SRCR(reg)); |
264 | - value |= bitmask; |
265 | - writel(value, priv->base + SRCR(reg)); |
266 | - spin_unlock_irqrestore(&priv->rmw_lock, flags); |
267 | + writel(bitmask, priv->base + SRCR(reg)); |
268 | |
269 | /* Wait for at least one cycle of the RCLK clock (@ ca. 32 kHz) */ |
270 | udelay(35); |
271 | @@ -562,16 +556,10 @@ static int cpg_mssr_assert(struct reset_controller_dev *rcdev, unsigned long id) |
272 | unsigned int reg = id / 32; |
273 | unsigned int bit = id % 32; |
274 | u32 bitmask = BIT(bit); |
275 | - unsigned long flags; |
276 | - u32 value; |
277 | |
278 | dev_dbg(priv->dev, "assert %u%02u\n", reg, bit); |
279 | |
280 | - spin_lock_irqsave(&priv->rmw_lock, flags); |
281 | - value = readl(priv->base + SRCR(reg)); |
282 | - value |= bitmask; |
283 | - writel(value, priv->base + SRCR(reg)); |
284 | - spin_unlock_irqrestore(&priv->rmw_lock, flags); |
285 | + writel(bitmask, priv->base + SRCR(reg)); |
286 | return 0; |
287 | } |
288 | |
289 | diff --git a/drivers/clk/sprd/Kconfig b/drivers/clk/sprd/Kconfig |
290 | index 87892471eb96..bad8099832d4 100644 |
291 | --- a/drivers/clk/sprd/Kconfig |
292 | +++ b/drivers/clk/sprd/Kconfig |
293 | @@ -2,6 +2,7 @@ config SPRD_COMMON_CLK |
294 | tristate "Clock support for Spreadtrum SoCs" |
295 | depends on ARCH_SPRD || COMPILE_TEST |
296 | default ARCH_SPRD |
297 | + select REGMAP_MMIO |
298 | |
299 | if SPRD_COMMON_CLK |
300 | |
301 | diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
302 | index f5fb93795a69..65cecfdd9b45 100644 |
303 | --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
304 | +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
305 | @@ -707,7 +707,7 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, |
306 | thread = (*pos & GENMASK_ULL(59, 52)) >> 52; |
307 | bank = (*pos & GENMASK_ULL(61, 60)) >> 60; |
308 | |
309 | - data = kmalloc_array(1024, sizeof(*data), GFP_KERNEL); |
310 | + data = kcalloc(1024, sizeof(*data), GFP_KERNEL); |
311 | if (!data) |
312 | return -ENOMEM; |
313 | |
314 | diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig |
315 | index bf6cad6c9178..7a3e5a8f6439 100644 |
316 | --- a/drivers/gpu/drm/bridge/Kconfig |
317 | +++ b/drivers/gpu/drm/bridge/Kconfig |
318 | @@ -46,6 +46,7 @@ config DRM_DUMB_VGA_DAC |
319 | config DRM_LVDS_ENCODER |
320 | tristate "Transparent parallel to LVDS encoder support" |
321 | depends on OF |
322 | + select DRM_KMS_HELPER |
323 | select DRM_PANEL_BRIDGE |
324 | help |
325 | Support for transparent parallel to LVDS encoders that don't require |
326 | diff --git a/drivers/gpu/drm/exynos/exynos_drm_scaler.c b/drivers/gpu/drm/exynos/exynos_drm_scaler.c |
327 | index 0ddb6eec7b11..df228436a03d 100644 |
328 | --- a/drivers/gpu/drm/exynos/exynos_drm_scaler.c |
329 | +++ b/drivers/gpu/drm/exynos/exynos_drm_scaler.c |
330 | @@ -108,12 +108,12 @@ static inline int scaler_reset(struct scaler_context *scaler) |
331 | scaler_write(SCALER_CFG_SOFT_RESET, SCALER_CFG); |
332 | do { |
333 | cpu_relax(); |
334 | - } while (retry > 1 && |
335 | + } while (--retry > 1 && |
336 | scaler_read(SCALER_CFG) & SCALER_CFG_SOFT_RESET); |
337 | do { |
338 | cpu_relax(); |
339 | scaler_write(1, SCALER_INT_EN); |
340 | - } while (retry > 0 && scaler_read(SCALER_INT_EN) != 1); |
341 | + } while (--retry > 0 && scaler_read(SCALER_INT_EN) != 1); |
342 | |
343 | return retry ? 0 : -EIO; |
344 | } |
345 | diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c |
346 | index ed9a3a1e50ef..dbfd2c006f74 100644 |
347 | --- a/drivers/gpu/drm/msm/msm_drv.c |
348 | +++ b/drivers/gpu/drm/msm/msm_drv.c |
349 | @@ -1284,7 +1284,8 @@ static int add_gpu_components(struct device *dev, |
350 | if (!np) |
351 | return 0; |
352 | |
353 | - drm_of_component_match_add(dev, matchptr, compare_of, np); |
354 | + if (of_device_is_available(np)) |
355 | + drm_of_component_match_add(dev, matchptr, compare_of, np); |
356 | |
357 | of_node_put(np); |
358 | |
359 | diff --git a/drivers/hid/hid-holtek-kbd.c b/drivers/hid/hid-holtek-kbd.c |
360 | index 6e1a4a4fc0c1..ab9da597106f 100644 |
361 | --- a/drivers/hid/hid-holtek-kbd.c |
362 | +++ b/drivers/hid/hid-holtek-kbd.c |
363 | @@ -126,9 +126,14 @@ static int holtek_kbd_input_event(struct input_dev *dev, unsigned int type, |
364 | |
365 | /* Locate the boot interface, to receive the LED change events */ |
366 | struct usb_interface *boot_interface = usb_ifnum_to_if(usb_dev, 0); |
367 | + struct hid_device *boot_hid; |
368 | + struct hid_input *boot_hid_input; |
369 | |
370 | - struct hid_device *boot_hid = usb_get_intfdata(boot_interface); |
371 | - struct hid_input *boot_hid_input = list_first_entry(&boot_hid->inputs, |
372 | + if (unlikely(boot_interface == NULL)) |
373 | + return -ENODEV; |
374 | + |
375 | + boot_hid = usb_get_intfdata(boot_interface); |
376 | + boot_hid_input = list_first_entry(&boot_hid->inputs, |
377 | struct hid_input, list); |
378 | |
379 | return boot_hid_input->input->event(boot_hid_input->input, type, code, |
380 | diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c |
381 | index a746017fac17..5a949ca42b1d 100644 |
382 | --- a/drivers/hid/usbhid/hiddev.c |
383 | +++ b/drivers/hid/usbhid/hiddev.c |
384 | @@ -297,6 +297,14 @@ static int hiddev_open(struct inode *inode, struct file *file) |
385 | spin_unlock_irq(&list->hiddev->list_lock); |
386 | |
387 | mutex_lock(&hiddev->existancelock); |
388 | + /* |
389 | + * recheck exist with existance lock held to |
390 | + * avoid opening a disconnected device |
391 | + */ |
392 | + if (!list->hiddev->exist) { |
393 | + res = -ENODEV; |
394 | + goto bail_unlock; |
395 | + } |
396 | if (!list->hiddev->open++) |
397 | if (list->hiddev->exist) { |
398 | struct hid_device *hid = hiddev->hid; |
399 | @@ -313,6 +321,10 @@ bail_normal_power: |
400 | hid_hw_power(hid, PM_HINT_NORMAL); |
401 | bail_unlock: |
402 | mutex_unlock(&hiddev->existancelock); |
403 | + |
404 | + spin_lock_irq(&list->hiddev->list_lock); |
405 | + list_del(&list->node); |
406 | + spin_unlock_irq(&list->hiddev->list_lock); |
407 | bail: |
408 | file->private_data = NULL; |
409 | vfree(list); |
410 | diff --git a/drivers/iio/adc/max9611.c b/drivers/iio/adc/max9611.c |
411 | index ce9af43fa2de..49c1956e6a67 100644 |
412 | --- a/drivers/iio/adc/max9611.c |
413 | +++ b/drivers/iio/adc/max9611.c |
414 | @@ -483,7 +483,7 @@ static int max9611_init(struct max9611_dev *max9611) |
415 | if (ret) |
416 | return ret; |
417 | |
418 | - regval = ret & MAX9611_TEMP_MASK; |
419 | + regval &= MAX9611_TEMP_MASK; |
420 | |
421 | if ((regval > MAX9611_TEMP_MAX_POS && |
422 | regval < MAX9611_TEMP_MIN_NEG) || |
423 | diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c |
424 | index ef459f2f2eeb..7586c1dd73f1 100644 |
425 | --- a/drivers/infiniband/core/mad.c |
426 | +++ b/drivers/infiniband/core/mad.c |
427 | @@ -3182,18 +3182,18 @@ static int ib_mad_port_open(struct ib_device *device, |
428 | if (has_smi) |
429 | cq_size *= 2; |
430 | |
431 | + port_priv->pd = ib_alloc_pd(device, 0); |
432 | + if (IS_ERR(port_priv->pd)) { |
433 | + dev_err(&device->dev, "Couldn't create ib_mad PD\n"); |
434 | + ret = PTR_ERR(port_priv->pd); |
435 | + goto error3; |
436 | + } |
437 | + |
438 | port_priv->cq = ib_alloc_cq(port_priv->device, port_priv, cq_size, 0, |
439 | IB_POLL_WORKQUEUE); |
440 | if (IS_ERR(port_priv->cq)) { |
441 | dev_err(&device->dev, "Couldn't create ib_mad CQ\n"); |
442 | ret = PTR_ERR(port_priv->cq); |
443 | - goto error3; |
444 | - } |
445 | - |
446 | - port_priv->pd = ib_alloc_pd(device, 0); |
447 | - if (IS_ERR(port_priv->pd)) { |
448 | - dev_err(&device->dev, "Couldn't create ib_mad PD\n"); |
449 | - ret = PTR_ERR(port_priv->pd); |
450 | goto error4; |
451 | } |
452 | |
453 | @@ -3236,11 +3236,11 @@ error8: |
454 | error7: |
455 | destroy_mad_qp(&port_priv->qp_info[0]); |
456 | error6: |
457 | - ib_dealloc_pd(port_priv->pd); |
458 | -error4: |
459 | ib_free_cq(port_priv->cq); |
460 | cleanup_recv_queue(&port_priv->qp_info[1]); |
461 | cleanup_recv_queue(&port_priv->qp_info[0]); |
462 | +error4: |
463 | + ib_dealloc_pd(port_priv->pd); |
464 | error3: |
465 | kfree(port_priv); |
466 | |
467 | @@ -3270,8 +3270,8 @@ static int ib_mad_port_close(struct ib_device *device, int port_num) |
468 | destroy_workqueue(port_priv->wq); |
469 | destroy_mad_qp(&port_priv->qp_info[1]); |
470 | destroy_mad_qp(&port_priv->qp_info[0]); |
471 | - ib_dealloc_pd(port_priv->pd); |
472 | ib_free_cq(port_priv->cq); |
473 | + ib_dealloc_pd(port_priv->pd); |
474 | cleanup_recv_queue(&port_priv->qp_info[1]); |
475 | cleanup_recv_queue(&port_priv->qp_info[0]); |
476 | /* XXX: Handle deallocation of MAD registration tables */ |
477 | diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c |
478 | index c34a6852d691..a18f3f8ad77f 100644 |
479 | --- a/drivers/infiniband/core/user_mad.c |
480 | +++ b/drivers/infiniband/core/user_mad.c |
481 | @@ -49,6 +49,7 @@ |
482 | #include <linux/sched.h> |
483 | #include <linux/semaphore.h> |
484 | #include <linux/slab.h> |
485 | +#include <linux/nospec.h> |
486 | |
487 | #include <linux/uaccess.h> |
488 | |
489 | @@ -868,11 +869,14 @@ static int ib_umad_unreg_agent(struct ib_umad_file *file, u32 __user *arg) |
490 | |
491 | if (get_user(id, arg)) |
492 | return -EFAULT; |
493 | + if (id >= IB_UMAD_MAX_AGENTS) |
494 | + return -EINVAL; |
495 | |
496 | mutex_lock(&file->port->file_mutex); |
497 | mutex_lock(&file->mutex); |
498 | |
499 | - if (id >= IB_UMAD_MAX_AGENTS || !__get_agent(file, id)) { |
500 | + id = array_index_nospec(id, IB_UMAD_MAX_AGENTS); |
501 | + if (!__get_agent(file, id)) { |
502 | ret = -EINVAL; |
503 | goto out; |
504 | } |
505 | diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c |
506 | index 9bab4fb65c68..bd1fdadf7ba0 100644 |
507 | --- a/drivers/infiniband/hw/mlx5/mr.c |
508 | +++ b/drivers/infiniband/hw/mlx5/mr.c |
509 | @@ -51,22 +51,12 @@ static void clean_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr); |
510 | static void dereg_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr); |
511 | static int mr_cache_max_order(struct mlx5_ib_dev *dev); |
512 | static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr); |
513 | -static bool umr_can_modify_entity_size(struct mlx5_ib_dev *dev) |
514 | -{ |
515 | - return !MLX5_CAP_GEN(dev->mdev, umr_modify_entity_size_disabled); |
516 | -} |
517 | |
518 | static bool umr_can_use_indirect_mkey(struct mlx5_ib_dev *dev) |
519 | { |
520 | return !MLX5_CAP_GEN(dev->mdev, umr_indirect_mkey_disabled); |
521 | } |
522 | |
523 | -static bool use_umr(struct mlx5_ib_dev *dev, int order) |
524 | -{ |
525 | - return order <= mr_cache_max_order(dev) && |
526 | - umr_can_modify_entity_size(dev); |
527 | -} |
528 | - |
529 | static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) |
530 | { |
531 | int err = mlx5_core_destroy_mkey(dev->mdev, &mr->mmkey); |
532 | @@ -1305,7 +1295,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, |
533 | { |
534 | struct mlx5_ib_dev *dev = to_mdev(pd->device); |
535 | struct mlx5_ib_mr *mr = NULL; |
536 | - bool populate_mtts = false; |
537 | + bool use_umr; |
538 | struct ib_umem *umem; |
539 | int page_shift; |
540 | int npages; |
541 | @@ -1338,29 +1328,30 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, |
542 | if (err < 0) |
543 | return ERR_PTR(err); |
544 | |
545 | - if (use_umr(dev, order)) { |
546 | + use_umr = !MLX5_CAP_GEN(dev->mdev, umr_modify_entity_size_disabled) && |
547 | + (!MLX5_CAP_GEN(dev->mdev, umr_modify_atomic_disabled) || |
548 | + !MLX5_CAP_GEN(dev->mdev, atomic)); |
549 | + |
550 | + if (order <= mr_cache_max_order(dev) && use_umr) { |
551 | mr = alloc_mr_from_cache(pd, umem, virt_addr, length, ncont, |
552 | page_shift, order, access_flags); |
553 | if (PTR_ERR(mr) == -EAGAIN) { |
554 | mlx5_ib_dbg(dev, "cache empty for order %d\n", order); |
555 | mr = NULL; |
556 | } |
557 | - populate_mtts = false; |
558 | } else if (!MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset)) { |
559 | if (access_flags & IB_ACCESS_ON_DEMAND) { |
560 | err = -EINVAL; |
561 | pr_err("Got MR registration for ODP MR > 512MB, not supported for Connect-IB\n"); |
562 | goto error; |
563 | } |
564 | - populate_mtts = true; |
565 | + use_umr = false; |
566 | } |
567 | |
568 | if (!mr) { |
569 | - if (!umr_can_modify_entity_size(dev)) |
570 | - populate_mtts = true; |
571 | mutex_lock(&dev->slow_path_mutex); |
572 | mr = reg_create(NULL, pd, virt_addr, length, umem, ncont, |
573 | - page_shift, access_flags, populate_mtts); |
574 | + page_shift, access_flags, !use_umr); |
575 | mutex_unlock(&dev->slow_path_mutex); |
576 | } |
577 | |
578 | @@ -1378,7 +1369,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, |
579 | update_odp_mr(mr); |
580 | #endif |
581 | |
582 | - if (!populate_mtts) { |
583 | + if (use_umr) { |
584 | int update_xlt_flags = MLX5_IB_UPD_XLT_ENABLE; |
585 | |
586 | if (access_flags & IB_ACCESS_ON_DEMAND) |
587 | diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c |
588 | index 78073259c9a1..c431df7401b4 100644 |
589 | --- a/drivers/input/joystick/iforce/iforce-usb.c |
590 | +++ b/drivers/input/joystick/iforce/iforce-usb.c |
591 | @@ -141,7 +141,12 @@ static int iforce_usb_probe(struct usb_interface *intf, |
592 | return -ENODEV; |
593 | |
594 | epirq = &interface->endpoint[0].desc; |
595 | + if (!usb_endpoint_is_int_in(epirq)) |
596 | + return -ENODEV; |
597 | + |
598 | epout = &interface->endpoint[1].desc; |
599 | + if (!usb_endpoint_is_int_out(epout)) |
600 | + return -ENODEV; |
601 | |
602 | if (!(iforce = kzalloc(sizeof(struct iforce) + 32, GFP_KERNEL))) |
603 | goto fail; |
604 | diff --git a/drivers/input/mouse/trackpoint.h b/drivers/input/mouse/trackpoint.h |
605 | index 10a039148234..538986e5ac5b 100644 |
606 | --- a/drivers/input/mouse/trackpoint.h |
607 | +++ b/drivers/input/mouse/trackpoint.h |
608 | @@ -161,7 +161,8 @@ struct trackpoint_data { |
609 | #ifdef CONFIG_MOUSE_PS2_TRACKPOINT |
610 | int trackpoint_detect(struct psmouse *psmouse, bool set_properties); |
611 | #else |
612 | -inline int trackpoint_detect(struct psmouse *psmouse, bool set_properties) |
613 | +static inline int trackpoint_detect(struct psmouse *psmouse, |
614 | + bool set_properties) |
615 | { |
616 | return -ENOSYS; |
617 | } |
618 | diff --git a/drivers/input/tablet/kbtab.c b/drivers/input/tablet/kbtab.c |
619 | index 75b500651e4e..b1cf0c971274 100644 |
620 | --- a/drivers/input/tablet/kbtab.c |
621 | +++ b/drivers/input/tablet/kbtab.c |
622 | @@ -116,6 +116,10 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i |
623 | if (intf->cur_altsetting->desc.bNumEndpoints < 1) |
624 | return -ENODEV; |
625 | |
626 | + endpoint = &intf->cur_altsetting->endpoint[0].desc; |
627 | + if (!usb_endpoint_is_int_in(endpoint)) |
628 | + return -ENODEV; |
629 | + |
630 | kbtab = kzalloc(sizeof(struct kbtab), GFP_KERNEL); |
631 | input_dev = input_allocate_device(); |
632 | if (!kbtab || !input_dev) |
633 | @@ -154,8 +158,6 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i |
634 | input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0); |
635 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0); |
636 | |
637 | - endpoint = &intf->cur_altsetting->endpoint[0].desc; |
638 | - |
639 | usb_fill_int_urb(kbtab->irq, dev, |
640 | usb_rcvintpipe(dev, endpoint->bEndpointAddress), |
641 | kbtab->data, 8, |
642 | diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c |
643 | index 3a1d30304f7e..66b4800bcdd8 100644 |
644 | --- a/drivers/iommu/amd_iommu_init.c |
645 | +++ b/drivers/iommu/amd_iommu_init.c |
646 | @@ -1710,7 +1710,7 @@ static const struct attribute_group *amd_iommu_groups[] = { |
647 | NULL, |
648 | }; |
649 | |
650 | -static int iommu_init_pci(struct amd_iommu *iommu) |
651 | +static int __init iommu_init_pci(struct amd_iommu *iommu) |
652 | { |
653 | int cap_ptr = iommu->cap_ptr; |
654 | u32 range, misc, low, high; |
655 | diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c |
656 | index ee30e8965d1b..9ba73e11757d 100644 |
657 | --- a/drivers/irqchip/irq-gic-v3-its.c |
658 | +++ b/drivers/irqchip/irq-gic-v3-its.c |
659 | @@ -2883,7 +2883,7 @@ static int its_vpe_init(struct its_vpe *vpe) |
660 | |
661 | if (!its_alloc_vpe_table(vpe_id)) { |
662 | its_vpe_id_free(vpe_id); |
663 | - its_free_pending_table(vpe->vpt_page); |
664 | + its_free_pending_table(vpt_page); |
665 | return -ENOMEM; |
666 | } |
667 | |
668 | diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c |
669 | index 4760307ab43f..cef8f5e2e8fc 100644 |
670 | --- a/drivers/irqchip/irq-imx-gpcv2.c |
671 | +++ b/drivers/irqchip/irq-imx-gpcv2.c |
672 | @@ -131,6 +131,7 @@ static struct irq_chip gpcv2_irqchip_data_chip = { |
673 | .irq_unmask = imx_gpcv2_irq_unmask, |
674 | .irq_set_wake = imx_gpcv2_irq_set_wake, |
675 | .irq_retrigger = irq_chip_retrigger_hierarchy, |
676 | + .irq_set_type = irq_chip_set_type_parent, |
677 | #ifdef CONFIG_SMP |
678 | .irq_set_affinity = irq_chip_set_affinity_parent, |
679 | #endif |
680 | diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h |
681 | index 7d480c930eaf..7e426e4d1352 100644 |
682 | --- a/drivers/md/dm-core.h |
683 | +++ b/drivers/md/dm-core.h |
684 | @@ -130,6 +130,7 @@ struct mapped_device { |
685 | }; |
686 | |
687 | int md_in_flight(struct mapped_device *md); |
688 | +void disable_discard(struct mapped_device *md); |
689 | void disable_write_same(struct mapped_device *md); |
690 | void disable_write_zeroes(struct mapped_device *md); |
691 | |
692 | diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c |
693 | index 6e547b8dd298..264b84e274aa 100644 |
694 | --- a/drivers/md/dm-rq.c |
695 | +++ b/drivers/md/dm-rq.c |
696 | @@ -295,11 +295,14 @@ static void dm_done(struct request *clone, blk_status_t error, bool mapped) |
697 | } |
698 | |
699 | if (unlikely(error == BLK_STS_TARGET)) { |
700 | - if (req_op(clone) == REQ_OP_WRITE_SAME && |
701 | - !clone->q->limits.max_write_same_sectors) |
702 | + if (req_op(clone) == REQ_OP_DISCARD && |
703 | + !clone->q->limits.max_discard_sectors) |
704 | + disable_discard(tio->md); |
705 | + else if (req_op(clone) == REQ_OP_WRITE_SAME && |
706 | + !clone->q->limits.max_write_same_sectors) |
707 | disable_write_same(tio->md); |
708 | - if (req_op(clone) == REQ_OP_WRITE_ZEROES && |
709 | - !clone->q->limits.max_write_zeroes_sectors) |
710 | + else if (req_op(clone) == REQ_OP_WRITE_ZEROES && |
711 | + !clone->q->limits.max_write_zeroes_sectors) |
712 | disable_write_zeroes(tio->md); |
713 | } |
714 | |
715 | diff --git a/drivers/md/dm.c b/drivers/md/dm.c |
716 | index 42768fe92b41..c9860e3b04dd 100644 |
717 | --- a/drivers/md/dm.c |
718 | +++ b/drivers/md/dm.c |
719 | @@ -910,6 +910,15 @@ static void dec_pending(struct dm_io *io, blk_status_t error) |
720 | } |
721 | } |
722 | |
723 | +void disable_discard(struct mapped_device *md) |
724 | +{ |
725 | + struct queue_limits *limits = dm_get_queue_limits(md); |
726 | + |
727 | + /* device doesn't really support DISCARD, disable it */ |
728 | + limits->max_discard_sectors = 0; |
729 | + blk_queue_flag_clear(QUEUE_FLAG_DISCARD, md->queue); |
730 | +} |
731 | + |
732 | void disable_write_same(struct mapped_device *md) |
733 | { |
734 | struct queue_limits *limits = dm_get_queue_limits(md); |
735 | @@ -935,11 +944,14 @@ static void clone_endio(struct bio *bio) |
736 | dm_endio_fn endio = tio->ti->type->end_io; |
737 | |
738 | if (unlikely(error == BLK_STS_TARGET) && md->type != DM_TYPE_NVME_BIO_BASED) { |
739 | - if (bio_op(bio) == REQ_OP_WRITE_SAME && |
740 | - !bio->bi_disk->queue->limits.max_write_same_sectors) |
741 | + if (bio_op(bio) == REQ_OP_DISCARD && |
742 | + !bio->bi_disk->queue->limits.max_discard_sectors) |
743 | + disable_discard(md); |
744 | + else if (bio_op(bio) == REQ_OP_WRITE_SAME && |
745 | + !bio->bi_disk->queue->limits.max_write_same_sectors) |
746 | disable_write_same(md); |
747 | - if (bio_op(bio) == REQ_OP_WRITE_ZEROES && |
748 | - !bio->bi_disk->queue->limits.max_write_zeroes_sectors) |
749 | + else if (bio_op(bio) == REQ_OP_WRITE_ZEROES && |
750 | + !bio->bi_disk->queue->limits.max_write_zeroes_sectors) |
751 | disable_write_zeroes(md); |
752 | } |
753 | |
754 | diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c |
755 | index 7fdac277e382..9c77bfe4334f 100644 |
756 | --- a/drivers/mmc/host/sdhci-of-arasan.c |
757 | +++ b/drivers/mmc/host/sdhci-of-arasan.c |
758 | @@ -788,7 +788,8 @@ static int sdhci_arasan_probe(struct platform_device *pdev) |
759 | |
760 | ret = mmc_of_parse(host->mmc); |
761 | if (ret) { |
762 | - dev_err(&pdev->dev, "parsing dt failed (%d)\n", ret); |
763 | + if (ret != -EPROBE_DEFER) |
764 | + dev_err(&pdev->dev, "parsing dt failed (%d)\n", ret); |
765 | goto unreg_clk; |
766 | } |
767 | |
768 | diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c |
769 | index be0b785becd0..8f14f85b8e95 100644 |
770 | --- a/drivers/net/bonding/bond_main.c |
771 | +++ b/drivers/net/bonding/bond_main.c |
772 | @@ -1102,6 +1102,8 @@ static void bond_compute_features(struct bonding *bond) |
773 | done: |
774 | bond_dev->vlan_features = vlan_features; |
775 | bond_dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL | |
776 | + NETIF_F_HW_VLAN_CTAG_TX | |
777 | + NETIF_F_HW_VLAN_STAG_TX | |
778 | NETIF_F_GSO_UDP_L4; |
779 | bond_dev->gso_max_segs = gso_max_segs; |
780 | netif_set_gso_max_size(bond_dev, gso_max_size); |
781 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |
782 | index 33baa17fa9d5..cf01e73d1bcc 100644 |
783 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |
784 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |
785 | @@ -3058,12 +3058,13 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link) |
786 | /* if VF indicate to PF this function is going down (PF will delete sp |
787 | * elements and clear initializations |
788 | */ |
789 | - if (IS_VF(bp)) |
790 | + if (IS_VF(bp)) { |
791 | + bnx2x_clear_vlan_info(bp); |
792 | bnx2x_vfpf_close_vf(bp); |
793 | - else if (unload_mode != UNLOAD_RECOVERY) |
794 | + } else if (unload_mode != UNLOAD_RECOVERY) { |
795 | /* if this is a normal/close unload need to clean up chip*/ |
796 | bnx2x_chip_cleanup(bp, unload_mode, keep_link); |
797 | - else { |
798 | + } else { |
799 | /* Send the UNLOAD_REQUEST to the MCP */ |
800 | bnx2x_send_unload_req(bp, unload_mode); |
801 | |
802 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h |
803 | index 0e508e5defce..ee5159ef837e 100644 |
804 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h |
805 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h |
806 | @@ -425,6 +425,8 @@ void bnx2x_set_reset_global(struct bnx2x *bp); |
807 | void bnx2x_disable_close_the_gate(struct bnx2x *bp); |
808 | int bnx2x_init_hw_func_cnic(struct bnx2x *bp); |
809 | |
810 | +void bnx2x_clear_vlan_info(struct bnx2x *bp); |
811 | + |
812 | /** |
813 | * bnx2x_sp_event - handle ramrods completion. |
814 | * |
815 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c |
816 | index 2c9af0f420e5..68c62e32e882 100644 |
817 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c |
818 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c |
819 | @@ -8488,11 +8488,21 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan, |
820 | return rc; |
821 | } |
822 | |
823 | +void bnx2x_clear_vlan_info(struct bnx2x *bp) |
824 | +{ |
825 | + struct bnx2x_vlan_entry *vlan; |
826 | + |
827 | + /* Mark that hw forgot all entries */ |
828 | + list_for_each_entry(vlan, &bp->vlan_reg, link) |
829 | + vlan->hw = false; |
830 | + |
831 | + bp->vlan_cnt = 0; |
832 | +} |
833 | + |
834 | static int bnx2x_del_all_vlans(struct bnx2x *bp) |
835 | { |
836 | struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj; |
837 | unsigned long ramrod_flags = 0, vlan_flags = 0; |
838 | - struct bnx2x_vlan_entry *vlan; |
839 | int rc; |
840 | |
841 | __set_bit(RAMROD_COMP_WAIT, &ramrod_flags); |
842 | @@ -8501,10 +8511,7 @@ static int bnx2x_del_all_vlans(struct bnx2x *bp) |
843 | if (rc) |
844 | return rc; |
845 | |
846 | - /* Mark that hw forgot all entries */ |
847 | - list_for_each_entry(vlan, &bp->vlan_reg, link) |
848 | - vlan->hw = false; |
849 | - bp->vlan_cnt = 0; |
850 | + bnx2x_clear_vlan_info(bp); |
851 | |
852 | return 0; |
853 | } |
854 | diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c |
855 | index f5cd9539980f..45d9a5f8fa1b 100644 |
856 | --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c |
857 | +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c |
858 | @@ -1190,7 +1190,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) |
859 | err = mlx4_qp_alloc(mdev->dev, priv->base_qpn, rss_map->indir_qp); |
860 | if (err) { |
861 | en_err(priv, "Failed to allocate RSS indirection QP\n"); |
862 | - goto rss_err; |
863 | + goto qp_alloc_err; |
864 | } |
865 | |
866 | rss_map->indir_qp->event = mlx4_en_sqp_event; |
867 | @@ -1244,6 +1244,7 @@ indir_err: |
868 | MLX4_QP_STATE_RST, NULL, 0, 0, rss_map->indir_qp); |
869 | mlx4_qp_remove(mdev->dev, rss_map->indir_qp); |
870 | mlx4_qp_free(mdev->dev, rss_map->indir_qp); |
871 | +qp_alloc_err: |
872 | kfree(rss_map->indir_qp); |
873 | rss_map->indir_qp = NULL; |
874 | rss_err: |
875 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c |
876 | index 45cdde694d20..a4be04debe67 100644 |
877 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c |
878 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c |
879 | @@ -437,12 +437,6 @@ arfs_hash_bucket(struct arfs_table *arfs_t, __be16 src_port, |
880 | return &arfs_t->rules_hash[bucket_idx]; |
881 | } |
882 | |
883 | -static u8 arfs_get_ip_proto(const struct sk_buff *skb) |
884 | -{ |
885 | - return (skb->protocol == htons(ETH_P_IP)) ? |
886 | - ip_hdr(skb)->protocol : ipv6_hdr(skb)->nexthdr; |
887 | -} |
888 | - |
889 | static struct arfs_table *arfs_get_table(struct mlx5e_arfs_tables *arfs, |
890 | u8 ip_proto, __be16 etype) |
891 | { |
892 | @@ -599,31 +593,9 @@ out: |
893 | arfs_may_expire_flow(priv); |
894 | } |
895 | |
896 | -/* return L4 destination port from ip4/6 packets */ |
897 | -static __be16 arfs_get_dst_port(const struct sk_buff *skb) |
898 | -{ |
899 | - char *transport_header; |
900 | - |
901 | - transport_header = skb_transport_header(skb); |
902 | - if (arfs_get_ip_proto(skb) == IPPROTO_TCP) |
903 | - return ((struct tcphdr *)transport_header)->dest; |
904 | - return ((struct udphdr *)transport_header)->dest; |
905 | -} |
906 | - |
907 | -/* return L4 source port from ip4/6 packets */ |
908 | -static __be16 arfs_get_src_port(const struct sk_buff *skb) |
909 | -{ |
910 | - char *transport_header; |
911 | - |
912 | - transport_header = skb_transport_header(skb); |
913 | - if (arfs_get_ip_proto(skb) == IPPROTO_TCP) |
914 | - return ((struct tcphdr *)transport_header)->source; |
915 | - return ((struct udphdr *)transport_header)->source; |
916 | -} |
917 | - |
918 | static struct arfs_rule *arfs_alloc_rule(struct mlx5e_priv *priv, |
919 | struct arfs_table *arfs_t, |
920 | - const struct sk_buff *skb, |
921 | + const struct flow_keys *fk, |
922 | u16 rxq, u32 flow_id) |
923 | { |
924 | struct arfs_rule *rule; |
925 | @@ -638,19 +610,19 @@ static struct arfs_rule *arfs_alloc_rule(struct mlx5e_priv *priv, |
926 | INIT_WORK(&rule->arfs_work, arfs_handle_work); |
927 | |
928 | tuple = &rule->tuple; |
929 | - tuple->etype = skb->protocol; |
930 | + tuple->etype = fk->basic.n_proto; |
931 | + tuple->ip_proto = fk->basic.ip_proto; |
932 | if (tuple->etype == htons(ETH_P_IP)) { |
933 | - tuple->src_ipv4 = ip_hdr(skb)->saddr; |
934 | - tuple->dst_ipv4 = ip_hdr(skb)->daddr; |
935 | + tuple->src_ipv4 = fk->addrs.v4addrs.src; |
936 | + tuple->dst_ipv4 = fk->addrs.v4addrs.dst; |
937 | } else { |
938 | - memcpy(&tuple->src_ipv6, &ipv6_hdr(skb)->saddr, |
939 | + memcpy(&tuple->src_ipv6, &fk->addrs.v6addrs.src, |
940 | sizeof(struct in6_addr)); |
941 | - memcpy(&tuple->dst_ipv6, &ipv6_hdr(skb)->daddr, |
942 | + memcpy(&tuple->dst_ipv6, &fk->addrs.v6addrs.dst, |
943 | sizeof(struct in6_addr)); |
944 | } |
945 | - tuple->ip_proto = arfs_get_ip_proto(skb); |
946 | - tuple->src_port = arfs_get_src_port(skb); |
947 | - tuple->dst_port = arfs_get_dst_port(skb); |
948 | + tuple->src_port = fk->ports.src; |
949 | + tuple->dst_port = fk->ports.dst; |
950 | |
951 | rule->flow_id = flow_id; |
952 | rule->filter_id = priv->fs.arfs.last_filter_id++ % RPS_NO_FILTER; |
953 | @@ -661,37 +633,33 @@ static struct arfs_rule *arfs_alloc_rule(struct mlx5e_priv *priv, |
954 | return rule; |
955 | } |
956 | |
957 | -static bool arfs_cmp_ips(struct arfs_tuple *tuple, |
958 | - const struct sk_buff *skb) |
959 | +static bool arfs_cmp(const struct arfs_tuple *tuple, const struct flow_keys *fk) |
960 | { |
961 | - if (tuple->etype == htons(ETH_P_IP) && |
962 | - tuple->src_ipv4 == ip_hdr(skb)->saddr && |
963 | - tuple->dst_ipv4 == ip_hdr(skb)->daddr) |
964 | - return true; |
965 | - if (tuple->etype == htons(ETH_P_IPV6) && |
966 | - (!memcmp(&tuple->src_ipv6, &ipv6_hdr(skb)->saddr, |
967 | - sizeof(struct in6_addr))) && |
968 | - (!memcmp(&tuple->dst_ipv6, &ipv6_hdr(skb)->daddr, |
969 | - sizeof(struct in6_addr)))) |
970 | - return true; |
971 | + if (tuple->src_port != fk->ports.src || tuple->dst_port != fk->ports.dst) |
972 | + return false; |
973 | + if (tuple->etype != fk->basic.n_proto) |
974 | + return false; |
975 | + if (tuple->etype == htons(ETH_P_IP)) |
976 | + return tuple->src_ipv4 == fk->addrs.v4addrs.src && |
977 | + tuple->dst_ipv4 == fk->addrs.v4addrs.dst; |
978 | + if (tuple->etype == htons(ETH_P_IPV6)) |
979 | + return !memcmp(&tuple->src_ipv6, &fk->addrs.v6addrs.src, |
980 | + sizeof(struct in6_addr)) && |
981 | + !memcmp(&tuple->dst_ipv6, &fk->addrs.v6addrs.dst, |
982 | + sizeof(struct in6_addr)); |
983 | return false; |
984 | } |
985 | |
986 | static struct arfs_rule *arfs_find_rule(struct arfs_table *arfs_t, |
987 | - const struct sk_buff *skb) |
988 | + const struct flow_keys *fk) |
989 | { |
990 | struct arfs_rule *arfs_rule; |
991 | struct hlist_head *head; |
992 | - __be16 src_port = arfs_get_src_port(skb); |
993 | - __be16 dst_port = arfs_get_dst_port(skb); |
994 | |
995 | - head = arfs_hash_bucket(arfs_t, src_port, dst_port); |
996 | + head = arfs_hash_bucket(arfs_t, fk->ports.src, fk->ports.dst); |
997 | hlist_for_each_entry(arfs_rule, head, hlist) { |
998 | - if (arfs_rule->tuple.src_port == src_port && |
999 | - arfs_rule->tuple.dst_port == dst_port && |
1000 | - arfs_cmp_ips(&arfs_rule->tuple, skb)) { |
1001 | + if (arfs_cmp(&arfs_rule->tuple, fk)) |
1002 | return arfs_rule; |
1003 | - } |
1004 | } |
1005 | |
1006 | return NULL; |
1007 | @@ -704,20 +672,24 @@ int mlx5e_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb, |
1008 | struct mlx5e_arfs_tables *arfs = &priv->fs.arfs; |
1009 | struct arfs_table *arfs_t; |
1010 | struct arfs_rule *arfs_rule; |
1011 | + struct flow_keys fk; |
1012 | + |
1013 | + if (!skb_flow_dissect_flow_keys(skb, &fk, 0)) |
1014 | + return -EPROTONOSUPPORT; |
1015 | |
1016 | - if (skb->protocol != htons(ETH_P_IP) && |
1017 | - skb->protocol != htons(ETH_P_IPV6)) |
1018 | + if (fk.basic.n_proto != htons(ETH_P_IP) && |
1019 | + fk.basic.n_proto != htons(ETH_P_IPV6)) |
1020 | return -EPROTONOSUPPORT; |
1021 | |
1022 | if (skb->encapsulation) |
1023 | return -EPROTONOSUPPORT; |
1024 | |
1025 | - arfs_t = arfs_get_table(arfs, arfs_get_ip_proto(skb), skb->protocol); |
1026 | + arfs_t = arfs_get_table(arfs, fk.basic.ip_proto, fk.basic.n_proto); |
1027 | if (!arfs_t) |
1028 | return -EPROTONOSUPPORT; |
1029 | |
1030 | spin_lock_bh(&arfs->arfs_lock); |
1031 | - arfs_rule = arfs_find_rule(arfs_t, skb); |
1032 | + arfs_rule = arfs_find_rule(arfs_t, &fk); |
1033 | if (arfs_rule) { |
1034 | if (arfs_rule->rxq == rxq_index) { |
1035 | spin_unlock_bh(&arfs->arfs_lock); |
1036 | @@ -725,8 +697,7 @@ int mlx5e_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb, |
1037 | } |
1038 | arfs_rule->rxq = rxq_index; |
1039 | } else { |
1040 | - arfs_rule = arfs_alloc_rule(priv, arfs_t, skb, |
1041 | - rxq_index, flow_id); |
1042 | + arfs_rule = arfs_alloc_rule(priv, arfs_t, &fk, rxq_index, flow_id); |
1043 | if (!arfs_rule) { |
1044 | spin_unlock_bh(&arfs->arfs_lock); |
1045 | return -ENOMEM; |
1046 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c |
1047 | index 792bb8bc0cd3..2b9350f4c752 100644 |
1048 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c |
1049 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c |
1050 | @@ -1083,6 +1083,9 @@ static int mlx5e_set_pauseparam(struct net_device *netdev, |
1051 | struct mlx5_core_dev *mdev = priv->mdev; |
1052 | int err; |
1053 | |
1054 | + if (!MLX5_CAP_GEN(mdev, vport_group_manager)) |
1055 | + return -EOPNOTSUPP; |
1056 | + |
1057 | if (pauseparam->autoneg) |
1058 | return -EINVAL; |
1059 | |
1060 | diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c |
1061 | index dc30f11f4766..3feb49badda9 100644 |
1062 | --- a/drivers/net/team/team.c |
1063 | +++ b/drivers/net/team/team.c |
1064 | @@ -1011,6 +1011,8 @@ static void __team_compute_features(struct team *team) |
1065 | |
1066 | team->dev->vlan_features = vlan_features; |
1067 | team->dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL | |
1068 | + NETIF_F_HW_VLAN_CTAG_TX | |
1069 | + NETIF_F_HW_VLAN_STAG_TX | |
1070 | NETIF_F_GSO_UDP_L4; |
1071 | team->dev->hard_header_len = max_hard_header_len; |
1072 | |
1073 | diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c |
1074 | index f4247b275e09..b7a0df95d4b0 100644 |
1075 | --- a/drivers/net/usb/pegasus.c |
1076 | +++ b/drivers/net/usb/pegasus.c |
1077 | @@ -285,7 +285,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int loc, int val) |
1078 | static int read_eprom_word(pegasus_t *pegasus, __u8 index, __u16 *retdata) |
1079 | { |
1080 | int i; |
1081 | - __u8 tmp; |
1082 | + __u8 tmp = 0; |
1083 | __le16 retdatai; |
1084 | int ret; |
1085 | |
1086 | diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c |
1087 | index d5081ffdc8f0..1c849106b793 100644 |
1088 | --- a/drivers/net/xen-netback/netback.c |
1089 | +++ b/drivers/net/xen-netback/netback.c |
1090 | @@ -925,6 +925,7 @@ static void xenvif_tx_build_gops(struct xenvif_queue *queue, |
1091 | skb_shinfo(skb)->nr_frags = MAX_SKB_FRAGS; |
1092 | nskb = xenvif_alloc_skb(0); |
1093 | if (unlikely(nskb == NULL)) { |
1094 | + skb_shinfo(skb)->nr_frags = 0; |
1095 | kfree_skb(skb); |
1096 | xenvif_tx_err(queue, &txreq, extra_count, idx); |
1097 | if (net_ratelimit()) |
1098 | @@ -940,6 +941,7 @@ static void xenvif_tx_build_gops(struct xenvif_queue *queue, |
1099 | |
1100 | if (xenvif_set_skb_gso(queue->vif, skb, gso)) { |
1101 | /* Failure in xenvif_set_skb_gso is fatal. */ |
1102 | + skb_shinfo(skb)->nr_frags = 0; |
1103 | kfree_skb(skb); |
1104 | kfree_skb(nskb); |
1105 | break; |
1106 | diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c |
1107 | index 1c64fd8e9234..72bdda4ccebf 100644 |
1108 | --- a/drivers/pwm/sysfs.c |
1109 | +++ b/drivers/pwm/sysfs.c |
1110 | @@ -263,7 +263,6 @@ static int pwm_export_child(struct device *parent, struct pwm_device *pwm) |
1111 | export->pwm = pwm; |
1112 | mutex_init(&export->lock); |
1113 | |
1114 | - export->child.class = parent->class; |
1115 | export->child.release = pwm_export_release; |
1116 | export->child.parent = parent; |
1117 | export->child.devt = MKDEV(0, 0); |
1118 | diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c |
1119 | index c43eccdea65d..f570b8c5d857 100644 |
1120 | --- a/drivers/scsi/hpsa.c |
1121 | +++ b/drivers/scsi/hpsa.c |
1122 | @@ -2320,6 +2320,8 @@ static int handle_ioaccel_mode2_error(struct ctlr_info *h, |
1123 | case IOACCEL2_SERV_RESPONSE_COMPLETE: |
1124 | switch (c2->error_data.status) { |
1125 | case IOACCEL2_STATUS_SR_TASK_COMP_GOOD: |
1126 | + if (cmd) |
1127 | + cmd->result = 0; |
1128 | break; |
1129 | case IOACCEL2_STATUS_SR_TASK_COMP_CHK_COND: |
1130 | cmd->result |= SAM_STAT_CHECK_CONDITION; |
1131 | @@ -2479,8 +2481,10 @@ static void process_ioaccel2_completion(struct ctlr_info *h, |
1132 | |
1133 | /* check for good status */ |
1134 | if (likely(c2->error_data.serv_response == 0 && |
1135 | - c2->error_data.status == 0)) |
1136 | + c2->error_data.status == 0)) { |
1137 | + cmd->result = 0; |
1138 | return hpsa_cmd_free_and_done(h, c, cmd); |
1139 | + } |
1140 | |
1141 | /* |
1142 | * Any RAID offload error results in retry which will use |
1143 | @@ -5617,6 +5621,12 @@ static int hpsa_scsi_queue_command(struct Scsi_Host *sh, struct scsi_cmnd *cmd) |
1144 | } |
1145 | c = cmd_tagged_alloc(h, cmd); |
1146 | |
1147 | + /* |
1148 | + * This is necessary because the SML doesn't zero out this field during |
1149 | + * error recovery. |
1150 | + */ |
1151 | + cmd->result = 0; |
1152 | + |
1153 | /* |
1154 | * Call alternate submit routine for I/O accelerated commands. |
1155 | * Retries always go down the normal I/O path. |
1156 | diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c |
1157 | index f84f9bf15027..ddce32fe0513 100644 |
1158 | --- a/drivers/scsi/qla2xxx/qla_init.c |
1159 | +++ b/drivers/scsi/qla2xxx/qla_init.c |
1160 | @@ -4732,7 +4732,7 @@ qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags) |
1161 | ql_log(ql_log_warn, vha, 0xd049, |
1162 | "Failed to allocate ct_sns request.\n"); |
1163 | kfree(fcport); |
1164 | - fcport = NULL; |
1165 | + return NULL; |
1166 | } |
1167 | INIT_WORK(&fcport->del_work, qla24xx_delete_sess_fn); |
1168 | INIT_LIST_HEAD(&fcport->gnl_entry); |
1169 | diff --git a/drivers/staging/comedi/drivers/dt3000.c b/drivers/staging/comedi/drivers/dt3000.c |
1170 | index 2edf3ee91300..caf4d4df4bd3 100644 |
1171 | --- a/drivers/staging/comedi/drivers/dt3000.c |
1172 | +++ b/drivers/staging/comedi/drivers/dt3000.c |
1173 | @@ -342,9 +342,9 @@ static irqreturn_t dt3k_interrupt(int irq, void *d) |
1174 | static int dt3k_ns_to_timer(unsigned int timer_base, unsigned int *nanosec, |
1175 | unsigned int flags) |
1176 | { |
1177 | - int divider, base, prescale; |
1178 | + unsigned int divider, base, prescale; |
1179 | |
1180 | - /* This function needs improvment */ |
1181 | + /* This function needs improvement */ |
1182 | /* Don't know if divider==0 works. */ |
1183 | |
1184 | for (prescale = 0; prescale < 16; prescale++) { |
1185 | @@ -358,7 +358,7 @@ static int dt3k_ns_to_timer(unsigned int timer_base, unsigned int *nanosec, |
1186 | divider = (*nanosec) / base; |
1187 | break; |
1188 | case CMDF_ROUND_UP: |
1189 | - divider = (*nanosec) / base; |
1190 | + divider = DIV_ROUND_UP(*nanosec, base); |
1191 | break; |
1192 | } |
1193 | if (divider < 65536) { |
1194 | @@ -368,7 +368,7 @@ static int dt3k_ns_to_timer(unsigned int timer_base, unsigned int *nanosec, |
1195 | } |
1196 | |
1197 | prescale = 15; |
1198 | - base = timer_base * (1 << prescale); |
1199 | + base = timer_base * (prescale + 1); |
1200 | divider = 65535; |
1201 | *nanosec = divider * base; |
1202 | return (prescale << 16) | (divider); |
1203 | diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c |
1204 | index 5b442bc68a76..59675cc7aa01 100644 |
1205 | --- a/drivers/usb/class/cdc-acm.c |
1206 | +++ b/drivers/usb/class/cdc-acm.c |
1207 | @@ -1333,10 +1333,6 @@ made_compressed_probe: |
1208 | tty_port_init(&acm->port); |
1209 | acm->port.ops = &acm_port_ops; |
1210 | |
1211 | - minor = acm_alloc_minor(acm); |
1212 | - if (minor < 0) |
1213 | - goto alloc_fail1; |
1214 | - |
1215 | ctrlsize = usb_endpoint_maxp(epctrl); |
1216 | readsize = usb_endpoint_maxp(epread) * |
1217 | (quirks == SINGLE_RX_URB ? 1 : 2); |
1218 | @@ -1344,6 +1340,13 @@ made_compressed_probe: |
1219 | acm->writesize = usb_endpoint_maxp(epwrite) * 20; |
1220 | acm->control = control_interface; |
1221 | acm->data = data_interface; |
1222 | + |
1223 | + usb_get_intf(acm->control); /* undone in destruct() */ |
1224 | + |
1225 | + minor = acm_alloc_minor(acm); |
1226 | + if (minor < 0) |
1227 | + goto alloc_fail1; |
1228 | + |
1229 | acm->minor = minor; |
1230 | acm->dev = usb_dev; |
1231 | if (h.usb_cdc_acm_descriptor) |
1232 | @@ -1490,7 +1493,6 @@ skip_countries: |
1233 | usb_driver_claim_interface(&acm_driver, data_interface, acm); |
1234 | usb_set_intfdata(data_interface, acm); |
1235 | |
1236 | - usb_get_intf(control_interface); |
1237 | tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor, |
1238 | &control_interface->dev); |
1239 | if (IS_ERR(tty_dev)) { |
1240 | diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c |
1241 | index 65de6f73b672..558890ada0e5 100644 |
1242 | --- a/drivers/usb/core/file.c |
1243 | +++ b/drivers/usb/core/file.c |
1244 | @@ -193,9 +193,10 @@ int usb_register_dev(struct usb_interface *intf, |
1245 | intf->minor = minor; |
1246 | break; |
1247 | } |
1248 | - up_write(&minor_rwsem); |
1249 | - if (intf->minor < 0) |
1250 | + if (intf->minor < 0) { |
1251 | + up_write(&minor_rwsem); |
1252 | return -EXFULL; |
1253 | + } |
1254 | |
1255 | /* create a usb class device for this usb interface */ |
1256 | snprintf(name, sizeof(name), class_driver->name, minor - minor_base); |
1257 | @@ -203,12 +204,11 @@ int usb_register_dev(struct usb_interface *intf, |
1258 | MKDEV(USB_MAJOR, minor), class_driver, |
1259 | "%s", kbasename(name)); |
1260 | if (IS_ERR(intf->usb_dev)) { |
1261 | - down_write(&minor_rwsem); |
1262 | usb_minors[minor] = NULL; |
1263 | intf->minor = -1; |
1264 | - up_write(&minor_rwsem); |
1265 | retval = PTR_ERR(intf->usb_dev); |
1266 | } |
1267 | + up_write(&minor_rwsem); |
1268 | return retval; |
1269 | } |
1270 | EXPORT_SYMBOL_GPL(usb_register_dev); |
1271 | @@ -234,12 +234,12 @@ void usb_deregister_dev(struct usb_interface *intf, |
1272 | return; |
1273 | |
1274 | dev_dbg(&intf->dev, "removing %d minor\n", intf->minor); |
1275 | + device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor)); |
1276 | |
1277 | down_write(&minor_rwsem); |
1278 | usb_minors[intf->minor] = NULL; |
1279 | up_write(&minor_rwsem); |
1280 | |
1281 | - device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor)); |
1282 | intf->usb_dev = NULL; |
1283 | intf->minor = -1; |
1284 | destroy_usb_class(); |
1285 | diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c |
1286 | index 4020ce8db6ce..0d3fd2083165 100644 |
1287 | --- a/drivers/usb/core/message.c |
1288 | +++ b/drivers/usb/core/message.c |
1289 | @@ -2211,14 +2211,14 @@ int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr, |
1290 | (struct usb_cdc_dmm_desc *)buffer; |
1291 | break; |
1292 | case USB_CDC_MDLM_TYPE: |
1293 | - if (elength < sizeof(struct usb_cdc_mdlm_desc *)) |
1294 | + if (elength < sizeof(struct usb_cdc_mdlm_desc)) |
1295 | goto next_desc; |
1296 | if (desc) |
1297 | return -EINVAL; |
1298 | desc = (struct usb_cdc_mdlm_desc *)buffer; |
1299 | break; |
1300 | case USB_CDC_MDLM_DETAIL_TYPE: |
1301 | - if (elength < sizeof(struct usb_cdc_mdlm_detail_desc *)) |
1302 | + if (elength < sizeof(struct usb_cdc_mdlm_detail_desc)) |
1303 | goto next_desc; |
1304 | if (detail) |
1305 | return -EINVAL; |
1306 | diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c |
1307 | index fea02c7ad4f4..a5254e82d628 100644 |
1308 | --- a/drivers/usb/gadget/udc/renesas_usb3.c |
1309 | +++ b/drivers/usb/gadget/udc/renesas_usb3.c |
1310 | @@ -19,6 +19,7 @@ |
1311 | #include <linux/pm_runtime.h> |
1312 | #include <linux/sizes.h> |
1313 | #include <linux/slab.h> |
1314 | +#include <linux/string.h> |
1315 | #include <linux/sys_soc.h> |
1316 | #include <linux/uaccess.h> |
1317 | #include <linux/usb/ch9.h> |
1318 | @@ -2378,9 +2379,9 @@ static ssize_t role_store(struct device *dev, struct device_attribute *attr, |
1319 | if (usb3->forced_b_device) |
1320 | return -EBUSY; |
1321 | |
1322 | - if (!strncmp(buf, "host", strlen("host"))) |
1323 | + if (sysfs_streq(buf, "host")) |
1324 | new_mode_is_host = true; |
1325 | - else if (!strncmp(buf, "peripheral", strlen("peripheral"))) |
1326 | + else if (sysfs_streq(buf, "peripheral")) |
1327 | new_mode_is_host = false; |
1328 | else |
1329 | return -EINVAL; |
1330 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
1331 | index e0a4749ba565..56f572cb08f8 100644 |
1332 | --- a/drivers/usb/serial/option.c |
1333 | +++ b/drivers/usb/serial/option.c |
1334 | @@ -968,6 +968,11 @@ static const struct usb_device_id option_ids[] = { |
1335 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) }, |
1336 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) }, |
1337 | |
1338 | + /* Motorola devices */ |
1339 | + { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x2a70, 0xff, 0xff, 0xff) }, /* mdm6600 */ |
1340 | + { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x2e0a, 0xff, 0xff, 0xff) }, /* mdm9600 */ |
1341 | + { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x4281, 0x0a, 0x00, 0xfc) }, /* mdm ram dl */ |
1342 | + { USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x900e, 0xff, 0xff, 0xff) }, /* mdm qc dl */ |
1343 | |
1344 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, |
1345 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, |
1346 | @@ -1549,6 +1554,7 @@ static const struct usb_device_id option_ids[] = { |
1347 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G v2 */ |
1348 | .driver_info = RSVD(2) }, |
1349 | { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */ |
1350 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0x00, 0x00) }, /* ZTE MF871A */ |
1351 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) }, |
1352 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) }, |
1353 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) }, |
1354 | @@ -1952,11 +1958,15 @@ static const struct usb_device_id option_ids[] = { |
1355 | .driver_info = RSVD(4) }, |
1356 | { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff), /* D-Link DWM-222 */ |
1357 | .driver_info = RSVD(4) }, |
1358 | + { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e3d, 0xff), /* D-Link DWM-222 A2 */ |
1359 | + .driver_info = RSVD(4) }, |
1360 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ |
1361 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ |
1362 | { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */ |
1363 | { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */ |
1364 | .driver_info = RSVD(4) }, |
1365 | + { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */ |
1366 | + .driver_info = RSVD(4) }, |
1367 | { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */ |
1368 | { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) }, |
1369 | { USB_DEVICE(VIATELECOM_VENDOR_ID, VIATELECOM_PRODUCT_CDS7) }, |
1370 | diff --git a/drivers/xen/xen-pciback/conf_space_capability.c b/drivers/xen/xen-pciback/conf_space_capability.c |
1371 | index 73427d8e0116..e5694133ebe5 100644 |
1372 | --- a/drivers/xen/xen-pciback/conf_space_capability.c |
1373 | +++ b/drivers/xen/xen-pciback/conf_space_capability.c |
1374 | @@ -116,13 +116,12 @@ static int pm_ctrl_write(struct pci_dev *dev, int offset, u16 new_value, |
1375 | { |
1376 | int err; |
1377 | u16 old_value; |
1378 | - pci_power_t new_state, old_state; |
1379 | + pci_power_t new_state; |
1380 | |
1381 | err = pci_read_config_word(dev, offset, &old_value); |
1382 | if (err) |
1383 | goto out; |
1384 | |
1385 | - old_state = (pci_power_t)(old_value & PCI_PM_CTRL_STATE_MASK); |
1386 | new_state = (pci_power_t)(new_value & PCI_PM_CTRL_STATE_MASK); |
1387 | |
1388 | new_value &= PM_OK_BITS; |
1389 | diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c |
1390 | index ac6c383d6314..19855659f650 100644 |
1391 | --- a/fs/btrfs/backref.c |
1392 | +++ b/fs/btrfs/backref.c |
1393 | @@ -1485,7 +1485,7 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr) |
1394 | goto out; |
1395 | } |
1396 | |
1397 | - trans = btrfs_attach_transaction(root); |
1398 | + trans = btrfs_join_transaction_nostart(root); |
1399 | if (IS_ERR(trans)) { |
1400 | if (PTR_ERR(trans) != -ENOENT && PTR_ERR(trans) != -EROFS) { |
1401 | ret = PTR_ERR(trans); |
1402 | diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c |
1403 | index f1ca53a3ff0b..26317bca5649 100644 |
1404 | --- a/fs/btrfs/transaction.c |
1405 | +++ b/fs/btrfs/transaction.c |
1406 | @@ -28,15 +28,18 @@ static const unsigned int btrfs_blocked_trans_types[TRANS_STATE_MAX] = { |
1407 | [TRANS_STATE_COMMIT_START] = (__TRANS_START | __TRANS_ATTACH), |
1408 | [TRANS_STATE_COMMIT_DOING] = (__TRANS_START | |
1409 | __TRANS_ATTACH | |
1410 | - __TRANS_JOIN), |
1411 | + __TRANS_JOIN | |
1412 | + __TRANS_JOIN_NOSTART), |
1413 | [TRANS_STATE_UNBLOCKED] = (__TRANS_START | |
1414 | __TRANS_ATTACH | |
1415 | __TRANS_JOIN | |
1416 | - __TRANS_JOIN_NOLOCK), |
1417 | + __TRANS_JOIN_NOLOCK | |
1418 | + __TRANS_JOIN_NOSTART), |
1419 | [TRANS_STATE_COMPLETED] = (__TRANS_START | |
1420 | __TRANS_ATTACH | |
1421 | __TRANS_JOIN | |
1422 | - __TRANS_JOIN_NOLOCK), |
1423 | + __TRANS_JOIN_NOLOCK | |
1424 | + __TRANS_JOIN_NOSTART), |
1425 | }; |
1426 | |
1427 | void btrfs_put_transaction(struct btrfs_transaction *transaction) |
1428 | @@ -531,7 +534,8 @@ again: |
1429 | ret = join_transaction(fs_info, type); |
1430 | if (ret == -EBUSY) { |
1431 | wait_current_trans(fs_info); |
1432 | - if (unlikely(type == TRANS_ATTACH)) |
1433 | + if (unlikely(type == TRANS_ATTACH || |
1434 | + type == TRANS_JOIN_NOSTART)) |
1435 | ret = -ENOENT; |
1436 | } |
1437 | } while (ret == -EBUSY); |
1438 | @@ -647,6 +651,16 @@ struct btrfs_trans_handle *btrfs_join_transaction_nolock(struct btrfs_root *root |
1439 | BTRFS_RESERVE_NO_FLUSH, true); |
1440 | } |
1441 | |
1442 | +/* |
1443 | + * Similar to regular join but it never starts a transaction when none is |
1444 | + * running or after waiting for the current one to finish. |
1445 | + */ |
1446 | +struct btrfs_trans_handle *btrfs_join_transaction_nostart(struct btrfs_root *root) |
1447 | +{ |
1448 | + return start_transaction(root, 0, TRANS_JOIN_NOSTART, |
1449 | + BTRFS_RESERVE_NO_FLUSH, true); |
1450 | +} |
1451 | + |
1452 | /* |
1453 | * btrfs_attach_transaction() - catch the running transaction |
1454 | * |
1455 | diff --git a/fs/btrfs/transaction.h b/fs/btrfs/transaction.h |
1456 | index 4cbb1b55387d..c1d34cc70472 100644 |
1457 | --- a/fs/btrfs/transaction.h |
1458 | +++ b/fs/btrfs/transaction.h |
1459 | @@ -97,11 +97,13 @@ struct btrfs_transaction { |
1460 | #define __TRANS_JOIN (1U << 11) |
1461 | #define __TRANS_JOIN_NOLOCK (1U << 12) |
1462 | #define __TRANS_DUMMY (1U << 13) |
1463 | +#define __TRANS_JOIN_NOSTART (1U << 14) |
1464 | |
1465 | #define TRANS_START (__TRANS_START | __TRANS_FREEZABLE) |
1466 | #define TRANS_ATTACH (__TRANS_ATTACH) |
1467 | #define TRANS_JOIN (__TRANS_JOIN | __TRANS_FREEZABLE) |
1468 | #define TRANS_JOIN_NOLOCK (__TRANS_JOIN_NOLOCK) |
1469 | +#define TRANS_JOIN_NOSTART (__TRANS_JOIN_NOSTART) |
1470 | |
1471 | #define TRANS_EXTWRITERS (__TRANS_START | __TRANS_ATTACH) |
1472 | |
1473 | @@ -187,6 +189,7 @@ struct btrfs_trans_handle *btrfs_start_transaction_fallback_global_rsv( |
1474 | int min_factor); |
1475 | struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root); |
1476 | struct btrfs_trans_handle *btrfs_join_transaction_nolock(struct btrfs_root *root); |
1477 | +struct btrfs_trans_handle *btrfs_join_transaction_nostart(struct btrfs_root *root); |
1478 | struct btrfs_trans_handle *btrfs_attach_transaction(struct btrfs_root *root); |
1479 | struct btrfs_trans_handle *btrfs_attach_transaction_barrier( |
1480 | struct btrfs_root *root); |
1481 | diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c |
1482 | index 3a24ce3deb01..c146e12a8601 100644 |
1483 | --- a/fs/ocfs2/xattr.c |
1484 | +++ b/fs/ocfs2/xattr.c |
1485 | @@ -3833,7 +3833,6 @@ static int ocfs2_xattr_bucket_find(struct inode *inode, |
1486 | u16 blk_per_bucket = ocfs2_blocks_per_xattr_bucket(inode->i_sb); |
1487 | int low_bucket = 0, bucket, high_bucket; |
1488 | struct ocfs2_xattr_bucket *search; |
1489 | - u32 last_hash; |
1490 | u64 blkno, lower_blkno = 0; |
1491 | |
1492 | search = ocfs2_xattr_bucket_new(inode); |
1493 | @@ -3877,8 +3876,6 @@ static int ocfs2_xattr_bucket_find(struct inode *inode, |
1494 | if (xh->xh_count) |
1495 | xe = &xh->xh_entries[le16_to_cpu(xh->xh_count) - 1]; |
1496 | |
1497 | - last_hash = le32_to_cpu(xe->xe_name_hash); |
1498 | - |
1499 | /* record lower_blkno which may be the insert place. */ |
1500 | lower_blkno = blkno; |
1501 | |
1502 | diff --git a/fs/seq_file.c b/fs/seq_file.c |
1503 | index 1dea7a8a5255..05e58b56f620 100644 |
1504 | --- a/fs/seq_file.c |
1505 | +++ b/fs/seq_file.c |
1506 | @@ -119,6 +119,7 @@ static int traverse(struct seq_file *m, loff_t offset) |
1507 | } |
1508 | if (seq_has_overflowed(m)) |
1509 | goto Eoverflow; |
1510 | + p = m->op->next(m, p, &m->index); |
1511 | if (pos + m->count > offset) { |
1512 | m->from = offset - pos; |
1513 | m->count -= m->from; |
1514 | @@ -126,7 +127,6 @@ static int traverse(struct seq_file *m, loff_t offset) |
1515 | } |
1516 | pos += m->count; |
1517 | m->count = 0; |
1518 | - p = m->op->next(m, p, &m->index); |
1519 | if (pos == offset) |
1520 | break; |
1521 | } |
1522 | diff --git a/include/asm-generic/getorder.h b/include/asm-generic/getorder.h |
1523 | index c64bea7a52be..e9f20b813a69 100644 |
1524 | --- a/include/asm-generic/getorder.h |
1525 | +++ b/include/asm-generic/getorder.h |
1526 | @@ -7,24 +7,6 @@ |
1527 | #include <linux/compiler.h> |
1528 | #include <linux/log2.h> |
1529 | |
1530 | -/* |
1531 | - * Runtime evaluation of get_order() |
1532 | - */ |
1533 | -static inline __attribute_const__ |
1534 | -int __get_order(unsigned long size) |
1535 | -{ |
1536 | - int order; |
1537 | - |
1538 | - size--; |
1539 | - size >>= PAGE_SHIFT; |
1540 | -#if BITS_PER_LONG == 32 |
1541 | - order = fls(size); |
1542 | -#else |
1543 | - order = fls64(size); |
1544 | -#endif |
1545 | - return order; |
1546 | -} |
1547 | - |
1548 | /** |
1549 | * get_order - Determine the allocation order of a memory size |
1550 | * @size: The size for which to get the order |
1551 | @@ -43,19 +25,27 @@ int __get_order(unsigned long size) |
1552 | * to hold an object of the specified size. |
1553 | * |
1554 | * The result is undefined if the size is 0. |
1555 | - * |
1556 | - * This function may be used to initialise variables with compile time |
1557 | - * evaluations of constants. |
1558 | */ |
1559 | -#define get_order(n) \ |
1560 | -( \ |
1561 | - __builtin_constant_p(n) ? ( \ |
1562 | - ((n) == 0UL) ? BITS_PER_LONG - PAGE_SHIFT : \ |
1563 | - (((n) < (1UL << PAGE_SHIFT)) ? 0 : \ |
1564 | - ilog2((n) - 1) - PAGE_SHIFT + 1) \ |
1565 | - ) : \ |
1566 | - __get_order(n) \ |
1567 | -) |
1568 | +static inline __attribute_const__ int get_order(unsigned long size) |
1569 | +{ |
1570 | + if (__builtin_constant_p(size)) { |
1571 | + if (!size) |
1572 | + return BITS_PER_LONG - PAGE_SHIFT; |
1573 | + |
1574 | + if (size < (1UL << PAGE_SHIFT)) |
1575 | + return 0; |
1576 | + |
1577 | + return ilog2((size) - 1) - PAGE_SHIFT + 1; |
1578 | + } |
1579 | + |
1580 | + size--; |
1581 | + size >>= PAGE_SHIFT; |
1582 | +#if BITS_PER_LONG == 32 |
1583 | + return fls(size); |
1584 | +#else |
1585 | + return fls64(size); |
1586 | +#endif |
1587 | +} |
1588 | |
1589 | #endif /* __ASSEMBLY__ */ |
1590 | |
1591 | diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h |
1592 | index fbf5cfc9b352..fd965ffbb92e 100644 |
1593 | --- a/include/drm/i915_pciids.h |
1594 | +++ b/include/drm/i915_pciids.h |
1595 | @@ -386,6 +386,7 @@ |
1596 | INTEL_VGA_DEVICE(0x3E91, info), /* SRV GT2 */ \ |
1597 | INTEL_VGA_DEVICE(0x3E92, info), /* SRV GT2 */ \ |
1598 | INTEL_VGA_DEVICE(0x3E96, info), /* SRV GT2 */ \ |
1599 | + INTEL_VGA_DEVICE(0x3E98, info), /* SRV GT2 */ \ |
1600 | INTEL_VGA_DEVICE(0x3E9A, info) /* SRV GT2 */ |
1601 | |
1602 | /* CFL H */ |
1603 | diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h |
1604 | index 90ac450745f1..561fefc2a980 100644 |
1605 | --- a/include/kvm/arm_vgic.h |
1606 | +++ b/include/kvm/arm_vgic.h |
1607 | @@ -361,6 +361,7 @@ int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu); |
1608 | |
1609 | void kvm_vgic_load(struct kvm_vcpu *vcpu); |
1610 | void kvm_vgic_put(struct kvm_vcpu *vcpu); |
1611 | +void kvm_vgic_vmcr_sync(struct kvm_vcpu *vcpu); |
1612 | |
1613 | #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel)) |
1614 | #define vgic_initialized(k) ((k)->arch.vgic.initialized) |
1615 | diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c |
1616 | index 4e3625109b28..64d54acc9928 100644 |
1617 | --- a/kernel/sched/cpufreq_schedutil.c |
1618 | +++ b/kernel/sched/cpufreq_schedutil.c |
1619 | @@ -40,6 +40,7 @@ struct sugov_policy { |
1620 | struct task_struct *thread; |
1621 | bool work_in_progress; |
1622 | |
1623 | + bool limits_changed; |
1624 | bool need_freq_update; |
1625 | }; |
1626 | |
1627 | @@ -90,8 +91,11 @@ static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 time) |
1628 | !cpufreq_this_cpu_can_update(sg_policy->policy)) |
1629 | return false; |
1630 | |
1631 | - if (unlikely(sg_policy->need_freq_update)) |
1632 | + if (unlikely(sg_policy->limits_changed)) { |
1633 | + sg_policy->limits_changed = false; |
1634 | + sg_policy->need_freq_update = true; |
1635 | return true; |
1636 | + } |
1637 | |
1638 | delta_ns = time - sg_policy->last_freq_update_time; |
1639 | |
1640 | @@ -405,7 +409,7 @@ static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; } |
1641 | static inline void ignore_dl_rate_limit(struct sugov_cpu *sg_cpu, struct sugov_policy *sg_policy) |
1642 | { |
1643 | if (cpu_bw_dl(cpu_rq(sg_cpu->cpu)) > sg_cpu->bw_dl) |
1644 | - sg_policy->need_freq_update = true; |
1645 | + sg_policy->limits_changed = true; |
1646 | } |
1647 | |
1648 | static void sugov_update_single(struct update_util_data *hook, u64 time, |
1649 | @@ -425,7 +429,8 @@ static void sugov_update_single(struct update_util_data *hook, u64 time, |
1650 | if (!sugov_should_update_freq(sg_policy, time)) |
1651 | return; |
1652 | |
1653 | - busy = sugov_cpu_is_busy(sg_cpu); |
1654 | + /* Limits may have changed, don't skip frequency update */ |
1655 | + busy = !sg_policy->need_freq_update && sugov_cpu_is_busy(sg_cpu); |
1656 | |
1657 | util = sugov_get_util(sg_cpu); |
1658 | max = sg_cpu->max; |
1659 | @@ -798,6 +803,7 @@ static int sugov_start(struct cpufreq_policy *policy) |
1660 | sg_policy->last_freq_update_time = 0; |
1661 | sg_policy->next_freq = 0; |
1662 | sg_policy->work_in_progress = false; |
1663 | + sg_policy->limits_changed = false; |
1664 | sg_policy->need_freq_update = false; |
1665 | sg_policy->cached_raw_freq = 0; |
1666 | |
1667 | @@ -849,7 +855,7 @@ static void sugov_limits(struct cpufreq_policy *policy) |
1668 | mutex_unlock(&sg_policy->work_lock); |
1669 | } |
1670 | |
1671 | - sg_policy->need_freq_update = true; |
1672 | + sg_policy->limits_changed = true; |
1673 | } |
1674 | |
1675 | static struct cpufreq_governor schedutil_gov = { |
1676 | diff --git a/mm/kmemleak.c b/mm/kmemleak.c |
1677 | index 6c94b6865ac2..5eeabece0c17 100644 |
1678 | --- a/mm/kmemleak.c |
1679 | +++ b/mm/kmemleak.c |
1680 | @@ -126,7 +126,7 @@ |
1681 | /* GFP bitmask for kmemleak internal allocations */ |
1682 | #define gfp_kmemleak_mask(gfp) (((gfp) & (GFP_KERNEL | GFP_ATOMIC)) | \ |
1683 | __GFP_NORETRY | __GFP_NOMEMALLOC | \ |
1684 | - __GFP_NOWARN | __GFP_NOFAIL) |
1685 | + __GFP_NOWARN) |
1686 | |
1687 | /* scanning area inside a memory block */ |
1688 | struct kmemleak_scan_area { |
1689 | diff --git a/mm/memcontrol.c b/mm/memcontrol.c |
1690 | index 7e7cc0cd89fe..ecde75f2189b 100644 |
1691 | --- a/mm/memcontrol.c |
1692 | +++ b/mm/memcontrol.c |
1693 | @@ -1037,26 +1037,45 @@ void mem_cgroup_iter_break(struct mem_cgroup *root, |
1694 | css_put(&prev->css); |
1695 | } |
1696 | |
1697 | -static void invalidate_reclaim_iterators(struct mem_cgroup *dead_memcg) |
1698 | +static void __invalidate_reclaim_iterators(struct mem_cgroup *from, |
1699 | + struct mem_cgroup *dead_memcg) |
1700 | { |
1701 | - struct mem_cgroup *memcg = dead_memcg; |
1702 | struct mem_cgroup_reclaim_iter *iter; |
1703 | struct mem_cgroup_per_node *mz; |
1704 | int nid; |
1705 | int i; |
1706 | |
1707 | - for (; memcg; memcg = parent_mem_cgroup(memcg)) { |
1708 | - for_each_node(nid) { |
1709 | - mz = mem_cgroup_nodeinfo(memcg, nid); |
1710 | - for (i = 0; i <= DEF_PRIORITY; i++) { |
1711 | - iter = &mz->iter[i]; |
1712 | - cmpxchg(&iter->position, |
1713 | - dead_memcg, NULL); |
1714 | - } |
1715 | + for_each_node(nid) { |
1716 | + mz = mem_cgroup_nodeinfo(from, nid); |
1717 | + for (i = 0; i <= DEF_PRIORITY; i++) { |
1718 | + iter = &mz->iter[i]; |
1719 | + cmpxchg(&iter->position, |
1720 | + dead_memcg, NULL); |
1721 | } |
1722 | } |
1723 | } |
1724 | |
1725 | +static void invalidate_reclaim_iterators(struct mem_cgroup *dead_memcg) |
1726 | +{ |
1727 | + struct mem_cgroup *memcg = dead_memcg; |
1728 | + struct mem_cgroup *last; |
1729 | + |
1730 | + do { |
1731 | + __invalidate_reclaim_iterators(memcg, dead_memcg); |
1732 | + last = memcg; |
1733 | + } while ((memcg = parent_mem_cgroup(memcg))); |
1734 | + |
1735 | + /* |
1736 | + * When cgruop1 non-hierarchy mode is used, |
1737 | + * parent_mem_cgroup() does not walk all the way up to the |
1738 | + * cgroup root (root_mem_cgroup). So we have to handle |
1739 | + * dead_memcg from cgroup root separately. |
1740 | + */ |
1741 | + if (last != root_mem_cgroup) |
1742 | + __invalidate_reclaim_iterators(root_mem_cgroup, |
1743 | + dead_memcg); |
1744 | +} |
1745 | + |
1746 | /** |
1747 | * mem_cgroup_scan_tasks - iterate over tasks of a memory cgroup hierarchy |
1748 | * @memcg: hierarchy root |
1749 | diff --git a/mm/mempolicy.c b/mm/mempolicy.c |
1750 | index 62f945ea3e36..70298b635b59 100644 |
1751 | --- a/mm/mempolicy.c |
1752 | +++ b/mm/mempolicy.c |
1753 | @@ -403,7 +403,7 @@ static const struct mempolicy_operations mpol_ops[MPOL_MAX] = { |
1754 | }, |
1755 | }; |
1756 | |
1757 | -static void migrate_page_add(struct page *page, struct list_head *pagelist, |
1758 | +static int migrate_page_add(struct page *page, struct list_head *pagelist, |
1759 | unsigned long flags); |
1760 | |
1761 | struct queue_pages { |
1762 | @@ -429,11 +429,14 @@ static inline bool queue_pages_required(struct page *page, |
1763 | } |
1764 | |
1765 | /* |
1766 | - * queue_pages_pmd() has three possible return values: |
1767 | - * 1 - pages are placed on the right node or queued successfully. |
1768 | - * 0 - THP was split. |
1769 | - * -EIO - is migration entry or MPOL_MF_STRICT was specified and an existing |
1770 | - * page was already on a node that does not follow the policy. |
1771 | + * queue_pages_pmd() has four possible return values: |
1772 | + * 0 - pages are placed on the right node or queued successfully. |
1773 | + * 1 - there is unmovable page, and MPOL_MF_MOVE* & MPOL_MF_STRICT were |
1774 | + * specified. |
1775 | + * 2 - THP was split. |
1776 | + * -EIO - is migration entry or only MPOL_MF_STRICT was specified and an |
1777 | + * existing page was already on a node that does not follow the |
1778 | + * policy. |
1779 | */ |
1780 | static int queue_pages_pmd(pmd_t *pmd, spinlock_t *ptl, unsigned long addr, |
1781 | unsigned long end, struct mm_walk *walk) |
1782 | @@ -451,23 +454,20 @@ static int queue_pages_pmd(pmd_t *pmd, spinlock_t *ptl, unsigned long addr, |
1783 | if (is_huge_zero_page(page)) { |
1784 | spin_unlock(ptl); |
1785 | __split_huge_pmd(walk->vma, pmd, addr, false, NULL); |
1786 | + ret = 2; |
1787 | goto out; |
1788 | } |
1789 | - if (!queue_pages_required(page, qp)) { |
1790 | - ret = 1; |
1791 | + if (!queue_pages_required(page, qp)) |
1792 | goto unlock; |
1793 | - } |
1794 | |
1795 | - ret = 1; |
1796 | flags = qp->flags; |
1797 | /* go to thp migration */ |
1798 | if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) { |
1799 | - if (!vma_migratable(walk->vma)) { |
1800 | - ret = -EIO; |
1801 | + if (!vma_migratable(walk->vma) || |
1802 | + migrate_page_add(page, qp->pagelist, flags)) { |
1803 | + ret = 1; |
1804 | goto unlock; |
1805 | } |
1806 | - |
1807 | - migrate_page_add(page, qp->pagelist, flags); |
1808 | } else |
1809 | ret = -EIO; |
1810 | unlock: |
1811 | @@ -479,6 +479,13 @@ out: |
1812 | /* |
1813 | * Scan through pages checking if pages follow certain conditions, |
1814 | * and move them to the pagelist if they do. |
1815 | + * |
1816 | + * queue_pages_pte_range() has three possible return values: |
1817 | + * 0 - pages are placed on the right node or queued successfully. |
1818 | + * 1 - there is unmovable page, and MPOL_MF_MOVE* & MPOL_MF_STRICT were |
1819 | + * specified. |
1820 | + * -EIO - only MPOL_MF_STRICT was specified and an existing page was already |
1821 | + * on a node that does not follow the policy. |
1822 | */ |
1823 | static int queue_pages_pte_range(pmd_t *pmd, unsigned long addr, |
1824 | unsigned long end, struct mm_walk *walk) |
1825 | @@ -488,17 +495,17 @@ static int queue_pages_pte_range(pmd_t *pmd, unsigned long addr, |
1826 | struct queue_pages *qp = walk->private; |
1827 | unsigned long flags = qp->flags; |
1828 | int ret; |
1829 | + bool has_unmovable = false; |
1830 | pte_t *pte; |
1831 | spinlock_t *ptl; |
1832 | |
1833 | ptl = pmd_trans_huge_lock(pmd, vma); |
1834 | if (ptl) { |
1835 | ret = queue_pages_pmd(pmd, ptl, addr, end, walk); |
1836 | - if (ret > 0) |
1837 | - return 0; |
1838 | - else if (ret < 0) |
1839 | + if (ret != 2) |
1840 | return ret; |
1841 | } |
1842 | + /* THP was split, fall through to pte walk */ |
1843 | |
1844 | if (pmd_trans_unstable(pmd)) |
1845 | return 0; |
1846 | @@ -519,14 +526,28 @@ static int queue_pages_pte_range(pmd_t *pmd, unsigned long addr, |
1847 | if (!queue_pages_required(page, qp)) |
1848 | continue; |
1849 | if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) { |
1850 | - if (!vma_migratable(vma)) |
1851 | + /* MPOL_MF_STRICT must be specified if we get here */ |
1852 | + if (!vma_migratable(vma)) { |
1853 | + has_unmovable = true; |
1854 | break; |
1855 | - migrate_page_add(page, qp->pagelist, flags); |
1856 | + } |
1857 | + |
1858 | + /* |
1859 | + * Do not abort immediately since there may be |
1860 | + * temporary off LRU pages in the range. Still |
1861 | + * need migrate other LRU pages. |
1862 | + */ |
1863 | + if (migrate_page_add(page, qp->pagelist, flags)) |
1864 | + has_unmovable = true; |
1865 | } else |
1866 | break; |
1867 | } |
1868 | pte_unmap_unlock(pte - 1, ptl); |
1869 | cond_resched(); |
1870 | + |
1871 | + if (has_unmovable) |
1872 | + return 1; |
1873 | + |
1874 | return addr != end ? -EIO : 0; |
1875 | } |
1876 | |
1877 | @@ -639,7 +660,13 @@ static int queue_pages_test_walk(unsigned long start, unsigned long end, |
1878 | * |
1879 | * If pages found in a given range are on a set of nodes (determined by |
1880 | * @nodes and @flags,) it's isolated and queued to the pagelist which is |
1881 | - * passed via @private.) |
1882 | + * passed via @private. |
1883 | + * |
1884 | + * queue_pages_range() has three possible return values: |
1885 | + * 1 - there is unmovable page, but MPOL_MF_MOVE* & MPOL_MF_STRICT were |
1886 | + * specified. |
1887 | + * 0 - queue pages successfully or no misplaced page. |
1888 | + * -EIO - there is misplaced page and only MPOL_MF_STRICT was specified. |
1889 | */ |
1890 | static int |
1891 | queue_pages_range(struct mm_struct *mm, unsigned long start, unsigned long end, |
1892 | @@ -926,7 +953,7 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask, |
1893 | /* |
1894 | * page migration, thp tail pages can be passed. |
1895 | */ |
1896 | -static void migrate_page_add(struct page *page, struct list_head *pagelist, |
1897 | +static int migrate_page_add(struct page *page, struct list_head *pagelist, |
1898 | unsigned long flags) |
1899 | { |
1900 | struct page *head = compound_head(page); |
1901 | @@ -939,8 +966,19 @@ static void migrate_page_add(struct page *page, struct list_head *pagelist, |
1902 | mod_node_page_state(page_pgdat(head), |
1903 | NR_ISOLATED_ANON + page_is_file_cache(head), |
1904 | hpage_nr_pages(head)); |
1905 | + } else if (flags & MPOL_MF_STRICT) { |
1906 | + /* |
1907 | + * Non-movable page may reach here. And, there may be |
1908 | + * temporary off LRU pages or non-LRU movable pages. |
1909 | + * Treat them as unmovable pages since they can't be |
1910 | + * isolated, so they can't be moved at the moment. It |
1911 | + * should return -EIO for this case too. |
1912 | + */ |
1913 | + return -EIO; |
1914 | } |
1915 | } |
1916 | + |
1917 | + return 0; |
1918 | } |
1919 | |
1920 | /* page allocation callback for NUMA node migration */ |
1921 | @@ -1143,9 +1181,10 @@ static struct page *new_page(struct page *page, unsigned long start) |
1922 | } |
1923 | #else |
1924 | |
1925 | -static void migrate_page_add(struct page *page, struct list_head *pagelist, |
1926 | +static int migrate_page_add(struct page *page, struct list_head *pagelist, |
1927 | unsigned long flags) |
1928 | { |
1929 | + return -EIO; |
1930 | } |
1931 | |
1932 | int do_migrate_pages(struct mm_struct *mm, const nodemask_t *from, |
1933 | @@ -1168,6 +1207,7 @@ static long do_mbind(unsigned long start, unsigned long len, |
1934 | struct mempolicy *new; |
1935 | unsigned long end; |
1936 | int err; |
1937 | + int ret; |
1938 | LIST_HEAD(pagelist); |
1939 | |
1940 | if (flags & ~(unsigned long)MPOL_MF_VALID) |
1941 | @@ -1229,10 +1269,15 @@ static long do_mbind(unsigned long start, unsigned long len, |
1942 | if (err) |
1943 | goto mpol_out; |
1944 | |
1945 | - err = queue_pages_range(mm, start, end, nmask, |
1946 | + ret = queue_pages_range(mm, start, end, nmask, |
1947 | flags | MPOL_MF_INVERT, &pagelist); |
1948 | - if (!err) |
1949 | - err = mbind_range(mm, start, end, new); |
1950 | + |
1951 | + if (ret < 0) { |
1952 | + err = -EIO; |
1953 | + goto up_out; |
1954 | + } |
1955 | + |
1956 | + err = mbind_range(mm, start, end, new); |
1957 | |
1958 | if (!err) { |
1959 | int nr_failed = 0; |
1960 | @@ -1245,13 +1290,14 @@ static long do_mbind(unsigned long start, unsigned long len, |
1961 | putback_movable_pages(&pagelist); |
1962 | } |
1963 | |
1964 | - if (nr_failed && (flags & MPOL_MF_STRICT)) |
1965 | + if ((ret > 0) || (nr_failed && (flags & MPOL_MF_STRICT))) |
1966 | err = -EIO; |
1967 | } else |
1968 | putback_movable_pages(&pagelist); |
1969 | |
1970 | +up_out: |
1971 | up_write(&mm->mmap_sem); |
1972 | - mpol_out: |
1973 | +mpol_out: |
1974 | mpol_put(new); |
1975 | return err; |
1976 | } |
1977 | diff --git a/mm/rmap.c b/mm/rmap.c |
1978 | index f048c2651954..1bd94ea62f7f 100644 |
1979 | --- a/mm/rmap.c |
1980 | +++ b/mm/rmap.c |
1981 | @@ -1467,7 +1467,15 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma, |
1982 | /* |
1983 | * No need to invalidate here it will synchronize on |
1984 | * against the special swap migration pte. |
1985 | + * |
1986 | + * The assignment to subpage above was computed from a |
1987 | + * swap PTE which results in an invalid pointer. |
1988 | + * Since only PAGE_SIZE pages can currently be |
1989 | + * migrated, just set it to page. This will need to be |
1990 | + * changed when hugepage migrations to device private |
1991 | + * memory are supported. |
1992 | */ |
1993 | + subpage = page; |
1994 | goto discard; |
1995 | } |
1996 | |
1997 | diff --git a/mm/usercopy.c b/mm/usercopy.c |
1998 | index 14faadcedd06..51411f9c4068 100644 |
1999 | --- a/mm/usercopy.c |
2000 | +++ b/mm/usercopy.c |
2001 | @@ -151,7 +151,7 @@ static inline void check_bogus_address(const unsigned long ptr, unsigned long n, |
2002 | bool to_user) |
2003 | { |
2004 | /* Reject if object wraps past end of memory. */ |
2005 | - if (ptr + n < ptr) |
2006 | + if (ptr + (n - 1) < ptr) |
2007 | usercopy_abort("wrapped address", NULL, to_user, 0, ptr + n); |
2008 | |
2009 | /* Reject if NULL or ZERO-allocation. */ |
2010 | diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c |
2011 | index 0bb4d712b80c..995b3842ba7c 100644 |
2012 | --- a/net/bridge/netfilter/ebtables.c |
2013 | +++ b/net/bridge/netfilter/ebtables.c |
2014 | @@ -1779,20 +1779,28 @@ static int compat_calc_entry(const struct ebt_entry *e, |
2015 | return 0; |
2016 | } |
2017 | |
2018 | +static int ebt_compat_init_offsets(unsigned int number) |
2019 | +{ |
2020 | + if (number > INT_MAX) |
2021 | + return -EINVAL; |
2022 | + |
2023 | + /* also count the base chain policies */ |
2024 | + number += NF_BR_NUMHOOKS; |
2025 | + |
2026 | + return xt_compat_init_offsets(NFPROTO_BRIDGE, number); |
2027 | +} |
2028 | |
2029 | static int compat_table_info(const struct ebt_table_info *info, |
2030 | struct compat_ebt_replace *newinfo) |
2031 | { |
2032 | unsigned int size = info->entries_size; |
2033 | const void *entries = info->entries; |
2034 | + int ret; |
2035 | |
2036 | newinfo->entries_size = size; |
2037 | - if (info->nentries) { |
2038 | - int ret = xt_compat_init_offsets(NFPROTO_BRIDGE, |
2039 | - info->nentries); |
2040 | - if (ret) |
2041 | - return ret; |
2042 | - } |
2043 | + ret = ebt_compat_init_offsets(info->nentries); |
2044 | + if (ret) |
2045 | + return ret; |
2046 | |
2047 | return EBT_ENTRY_ITERATE(entries, size, compat_calc_entry, info, |
2048 | entries, newinfo); |
2049 | @@ -2241,11 +2249,9 @@ static int compat_do_replace(struct net *net, void __user *user, |
2050 | |
2051 | xt_compat_lock(NFPROTO_BRIDGE); |
2052 | |
2053 | - if (tmp.nentries) { |
2054 | - ret = xt_compat_init_offsets(NFPROTO_BRIDGE, tmp.nentries); |
2055 | - if (ret < 0) |
2056 | - goto out_unlock; |
2057 | - } |
2058 | + ret = ebt_compat_init_offsets(tmp.nentries); |
2059 | + if (ret < 0) |
2060 | + goto out_unlock; |
2061 | |
2062 | ret = compat_copy_entries(entries_tmp, tmp.entries_size, &state); |
2063 | if (ret < 0) |
2064 | diff --git a/net/dsa/switch.c b/net/dsa/switch.c |
2065 | index 142b294d3446..b0b9413fa5bf 100644 |
2066 | --- a/net/dsa/switch.c |
2067 | +++ b/net/dsa/switch.c |
2068 | @@ -127,6 +127,9 @@ static void dsa_switch_mdb_add_bitmap(struct dsa_switch *ds, |
2069 | { |
2070 | int port; |
2071 | |
2072 | + if (!ds->ops->port_mdb_add) |
2073 | + return; |
2074 | + |
2075 | for_each_set_bit(port, bitmap, ds->num_ports) |
2076 | ds->ops->port_mdb_add(ds, port, mdb); |
2077 | } |
2078 | diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c |
2079 | index 27eff89fad01..c6073d17c324 100644 |
2080 | --- a/net/netfilter/nf_conntrack_core.c |
2081 | +++ b/net/netfilter/nf_conntrack_core.c |
2082 | @@ -431,13 +431,12 @@ EXPORT_SYMBOL_GPL(nf_ct_invert_tuple); |
2083 | * table location, we assume id gets exposed to userspace. |
2084 | * |
2085 | * Following nf_conn items do not change throughout lifetime |
2086 | - * of the nf_conn after it has been committed to main hash table: |
2087 | + * of the nf_conn: |
2088 | * |
2089 | * 1. nf_conn address |
2090 | - * 2. nf_conn->ext address |
2091 | - * 3. nf_conn->master address (normally NULL) |
2092 | - * 4. tuple |
2093 | - * 5. the associated net namespace |
2094 | + * 2. nf_conn->master address (normally NULL) |
2095 | + * 3. the associated net namespace |
2096 | + * 4. the original direction tuple |
2097 | */ |
2098 | u32 nf_ct_get_id(const struct nf_conn *ct) |
2099 | { |
2100 | @@ -447,9 +446,10 @@ u32 nf_ct_get_id(const struct nf_conn *ct) |
2101 | net_get_random_once(&ct_id_seed, sizeof(ct_id_seed)); |
2102 | |
2103 | a = (unsigned long)ct; |
2104 | - b = (unsigned long)ct->master ^ net_hash_mix(nf_ct_net(ct)); |
2105 | - c = (unsigned long)ct->ext; |
2106 | - d = (unsigned long)siphash(&ct->tuplehash, sizeof(ct->tuplehash), |
2107 | + b = (unsigned long)ct->master; |
2108 | + c = (unsigned long)nf_ct_net(ct); |
2109 | + d = (unsigned long)siphash(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple, |
2110 | + sizeof(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple), |
2111 | &ct_id_seed); |
2112 | #ifdef CONFIG_64BIT |
2113 | return siphash_4u64((u64)a, (u64)b, (u64)c, (u64)d, &ct_id_seed); |
2114 | diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c |
2115 | index 93b5a4200585..7204e7bbebb0 100644 |
2116 | --- a/net/packet/af_packet.c |
2117 | +++ b/net/packet/af_packet.c |
2118 | @@ -2616,6 +2616,13 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg) |
2119 | |
2120 | mutex_lock(&po->pg_vec_lock); |
2121 | |
2122 | + /* packet_sendmsg() check on tx_ring.pg_vec was lockless, |
2123 | + * we need to confirm it under protection of pg_vec_lock. |
2124 | + */ |
2125 | + if (unlikely(!po->tx_ring.pg_vec)) { |
2126 | + err = -EBUSY; |
2127 | + goto out; |
2128 | + } |
2129 | if (likely(saddr == NULL)) { |
2130 | dev = packet_cached_dev_get(po); |
2131 | proto = po->num; |
2132 | diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c |
2133 | index 3131b4154c74..28adac31f0ff 100644 |
2134 | --- a/net/sctp/sm_sideeffect.c |
2135 | +++ b/net/sctp/sm_sideeffect.c |
2136 | @@ -561,7 +561,7 @@ static void sctp_do_8_2_transport_strike(struct sctp_cmd_seq *commands, |
2137 | */ |
2138 | if (net->sctp.pf_enable && |
2139 | (transport->state == SCTP_ACTIVE) && |
2140 | - (asoc->pf_retrans < transport->pathmaxrxt) && |
2141 | + (transport->error_count < transport->pathmaxrxt) && |
2142 | (transport->error_count > asoc->pf_retrans)) { |
2143 | |
2144 | sctp_assoc_control_transport(asoc, transport, |
2145 | diff --git a/net/sctp/stream.c b/net/sctp/stream.c |
2146 | index 0da57938a6c5..87061a4bb44b 100644 |
2147 | --- a/net/sctp/stream.c |
2148 | +++ b/net/sctp/stream.c |
2149 | @@ -416,6 +416,7 @@ int sctp_send_reset_streams(struct sctp_association *asoc, |
2150 | nstr_list[i] = htons(str_list[i]); |
2151 | |
2152 | if (out && !sctp_stream_outq_is_empty(stream, str_nums, nstr_list)) { |
2153 | + kfree(nstr_list); |
2154 | retval = -EAGAIN; |
2155 | goto out; |
2156 | } |
2157 | diff --git a/net/tipc/addr.c b/net/tipc/addr.c |
2158 | index b88d48d00913..0f1eaed1bd1b 100644 |
2159 | --- a/net/tipc/addr.c |
2160 | +++ b/net/tipc/addr.c |
2161 | @@ -75,6 +75,7 @@ void tipc_set_node_addr(struct net *net, u32 addr) |
2162 | tipc_set_node_id(net, node_id); |
2163 | } |
2164 | tn->trial_addr = addr; |
2165 | + tn->addr_trial_end = jiffies; |
2166 | pr_info("32-bit node address hash set to %x\n", addr); |
2167 | } |
2168 | |
2169 | diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include |
2170 | index dad5583451af..3b2861f47709 100644 |
2171 | --- a/scripts/Kconfig.include |
2172 | +++ b/scripts/Kconfig.include |
2173 | @@ -20,7 +20,7 @@ success = $(if-success,$(1),y,n) |
2174 | |
2175 | # $(cc-option,<flag>) |
2176 | # Return y if the compiler supports <flag>, n otherwise |
2177 | -cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null) |
2178 | +cc-option = $(success,$(CC) -Werror $(CLANG_FLAGS) $(1) -E -x c /dev/null -o /dev/null) |
2179 | |
2180 | # $(ld-option,<flag>) |
2181 | # Return y if the linker supports <flag>, n otherwise |
2182 | diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost |
2183 | index 7d4af0d0accb..51884c7b8069 100644 |
2184 | --- a/scripts/Makefile.modpost |
2185 | +++ b/scripts/Makefile.modpost |
2186 | @@ -75,7 +75,7 @@ modpost = scripts/mod/modpost \ |
2187 | $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,) \ |
2188 | $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \ |
2189 | $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \ |
2190 | - $(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \ |
2191 | + $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \ |
2192 | $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ |
2193 | $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \ |
2194 | $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \ |
2195 | diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c |
2196 | index 579984ecdec3..bb2bd33b00ec 100644 |
2197 | --- a/sound/pci/hda/hda_generic.c |
2198 | +++ b/sound/pci/hda/hda_generic.c |
2199 | @@ -6033,6 +6033,24 @@ void snd_hda_gen_free(struct hda_codec *codec) |
2200 | } |
2201 | EXPORT_SYMBOL_GPL(snd_hda_gen_free); |
2202 | |
2203 | +/** |
2204 | + * snd_hda_gen_reboot_notify - Make codec enter D3 before rebooting |
2205 | + * @codec: the HDA codec |
2206 | + * |
2207 | + * This can be put as patch_ops reboot_notify function. |
2208 | + */ |
2209 | +void snd_hda_gen_reboot_notify(struct hda_codec *codec) |
2210 | +{ |
2211 | + /* Make the codec enter D3 to avoid spurious noises from the internal |
2212 | + * speaker during (and after) reboot |
2213 | + */ |
2214 | + snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3); |
2215 | + snd_hda_codec_write(codec, codec->core.afg, 0, |
2216 | + AC_VERB_SET_POWER_STATE, AC_PWRST_D3); |
2217 | + msleep(10); |
2218 | +} |
2219 | +EXPORT_SYMBOL_GPL(snd_hda_gen_reboot_notify); |
2220 | + |
2221 | #ifdef CONFIG_PM |
2222 | /** |
2223 | * snd_hda_gen_check_power_status - check the loopback power save state |
2224 | @@ -6060,6 +6078,7 @@ static const struct hda_codec_ops generic_patch_ops = { |
2225 | .init = snd_hda_gen_init, |
2226 | .free = snd_hda_gen_free, |
2227 | .unsol_event = snd_hda_jack_unsol_event, |
2228 | + .reboot_notify = snd_hda_gen_reboot_notify, |
2229 | #ifdef CONFIG_PM |
2230 | .check_power_status = snd_hda_gen_check_power_status, |
2231 | #endif |
2232 | @@ -6082,7 +6101,7 @@ static int snd_hda_parse_generic_codec(struct hda_codec *codec) |
2233 | |
2234 | err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0); |
2235 | if (err < 0) |
2236 | - return err; |
2237 | + goto error; |
2238 | |
2239 | err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg); |
2240 | if (err < 0) |
2241 | diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h |
2242 | index 10123664fa61..ce9c293717b9 100644 |
2243 | --- a/sound/pci/hda/hda_generic.h |
2244 | +++ b/sound/pci/hda/hda_generic.h |
2245 | @@ -336,6 +336,7 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec, |
2246 | struct auto_pin_cfg *cfg); |
2247 | int snd_hda_gen_build_controls(struct hda_codec *codec); |
2248 | int snd_hda_gen_build_pcms(struct hda_codec *codec); |
2249 | +void snd_hda_gen_reboot_notify(struct hda_codec *codec); |
2250 | |
2251 | /* standard jack event callbacks */ |
2252 | void snd_hda_gen_hp_automute(struct hda_codec *codec, |
2253 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c |
2254 | index 81cea34aff1c..7a3e34b120b3 100644 |
2255 | --- a/sound/pci/hda/hda_intel.c |
2256 | +++ b/sound/pci/hda/hda_intel.c |
2257 | @@ -2655,6 +2655,9 @@ static const struct pci_device_id azx_ids[] = { |
2258 | /* AMD, X370 & co */ |
2259 | { PCI_DEVICE(0x1022, 0x1457), |
2260 | .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, |
2261 | + /* AMD, X570 & co */ |
2262 | + { PCI_DEVICE(0x1022, 0x1487), |
2263 | + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, |
2264 | /* AMD Stoney */ |
2265 | { PCI_DEVICE(0x1022, 0x157a), |
2266 | .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB | |
2267 | diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c |
2268 | index b70fbfa80546..6f17b256fcd0 100644 |
2269 | --- a/sound/pci/hda/patch_conexant.c |
2270 | +++ b/sound/pci/hda/patch_conexant.c |
2271 | @@ -176,23 +176,10 @@ static void cx_auto_reboot_notify(struct hda_codec *codec) |
2272 | { |
2273 | struct conexant_spec *spec = codec->spec; |
2274 | |
2275 | - switch (codec->core.vendor_id) { |
2276 | - case 0x14f12008: /* CX8200 */ |
2277 | - case 0x14f150f2: /* CX20722 */ |
2278 | - case 0x14f150f4: /* CX20724 */ |
2279 | - break; |
2280 | - default: |
2281 | - return; |
2282 | - } |
2283 | - |
2284 | /* Turn the problematic codec into D3 to avoid spurious noises |
2285 | from the internal speaker during (and after) reboot */ |
2286 | cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, false); |
2287 | - |
2288 | - snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3); |
2289 | - snd_hda_codec_write(codec, codec->core.afg, 0, |
2290 | - AC_VERB_SET_POWER_STATE, AC_PWRST_D3); |
2291 | - msleep(10); |
2292 | + snd_hda_gen_reboot_notify(codec); |
2293 | } |
2294 | |
2295 | static void cx_auto_free(struct hda_codec *codec) |
2296 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c |
2297 | index dc1989686f09..9b5caf099bfb 100644 |
2298 | --- a/sound/pci/hda/patch_realtek.c |
2299 | +++ b/sound/pci/hda/patch_realtek.c |
2300 | @@ -868,15 +868,6 @@ static void alc_reboot_notify(struct hda_codec *codec) |
2301 | alc_shutup(codec); |
2302 | } |
2303 | |
2304 | -/* power down codec to D3 at reboot/shutdown; set as reboot_notify ops */ |
2305 | -static void alc_d3_at_reboot(struct hda_codec *codec) |
2306 | -{ |
2307 | - snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3); |
2308 | - snd_hda_codec_write(codec, codec->core.afg, 0, |
2309 | - AC_VERB_SET_POWER_STATE, AC_PWRST_D3); |
2310 | - msleep(10); |
2311 | -} |
2312 | - |
2313 | #define alc_free snd_hda_gen_free |
2314 | |
2315 | #ifdef CONFIG_PM |
2316 | @@ -5111,7 +5102,7 @@ static void alc_fixup_tpt440_dock(struct hda_codec *codec, |
2317 | struct alc_spec *spec = codec->spec; |
2318 | |
2319 | if (action == HDA_FIXUP_ACT_PRE_PROBE) { |
2320 | - spec->reboot_notify = alc_d3_at_reboot; /* reduce noise */ |
2321 | + spec->reboot_notify = snd_hda_gen_reboot_notify; /* reduce noise */ |
2322 | spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP; |
2323 | codec->power_save_node = 0; /* avoid click noises */ |
2324 | snd_hda_apply_pincfgs(codec, pincfgs); |
2325 | @@ -6851,6 +6842,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
2326 | SND_PCI_QUIRK(0x103c, 0x82bf, "HP G3 mini", ALC221_FIXUP_HP_MIC_NO_PRESENCE), |
2327 | SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE), |
2328 | SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), |
2329 | + SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), |
2330 | SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC), |
2331 | SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300), |
2332 | SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
2333 | diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c |
2334 | index 7e1c6c2dc99e..4b3e1c48ca2f 100644 |
2335 | --- a/sound/usb/mixer.c |
2336 | +++ b/sound/usb/mixer.c |
2337 | @@ -83,6 +83,7 @@ struct mixer_build { |
2338 | unsigned char *buffer; |
2339 | unsigned int buflen; |
2340 | DECLARE_BITMAP(unitbitmap, MAX_ID_ELEMS); |
2341 | + DECLARE_BITMAP(termbitmap, MAX_ID_ELEMS); |
2342 | struct usb_audio_term oterm; |
2343 | const struct usbmix_name_map *map; |
2344 | const struct usbmix_selector_map *selector_map; |
2345 | @@ -759,6 +760,8 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state, |
2346 | return -EINVAL; |
2347 | if (!desc->bNrInPins) |
2348 | return -EINVAL; |
2349 | + if (desc->bLength < sizeof(*desc) + desc->bNrInPins) |
2350 | + return -EINVAL; |
2351 | |
2352 | switch (state->mixer->protocol) { |
2353 | case UAC_VERSION_1: |
2354 | @@ -788,16 +791,25 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state, |
2355 | * parse the source unit recursively until it reaches to a terminal |
2356 | * or a branched unit. |
2357 | */ |
2358 | -static int check_input_term(struct mixer_build *state, int id, |
2359 | +static int __check_input_term(struct mixer_build *state, int id, |
2360 | struct usb_audio_term *term) |
2361 | { |
2362 | int protocol = state->mixer->protocol; |
2363 | int err; |
2364 | void *p1; |
2365 | + unsigned char *hdr; |
2366 | |
2367 | memset(term, 0, sizeof(*term)); |
2368 | - while ((p1 = find_audio_control_unit(state, id)) != NULL) { |
2369 | - unsigned char *hdr = p1; |
2370 | + for (;;) { |
2371 | + /* a loop in the terminal chain? */ |
2372 | + if (test_and_set_bit(id, state->termbitmap)) |
2373 | + return -EINVAL; |
2374 | + |
2375 | + p1 = find_audio_control_unit(state, id); |
2376 | + if (!p1) |
2377 | + break; |
2378 | + |
2379 | + hdr = p1; |
2380 | term->id = id; |
2381 | |
2382 | if (protocol == UAC_VERSION_1 || protocol == UAC_VERSION_2) { |
2383 | @@ -815,7 +827,7 @@ static int check_input_term(struct mixer_build *state, int id, |
2384 | |
2385 | /* call recursively to verify that the |
2386 | * referenced clock entity is valid */ |
2387 | - err = check_input_term(state, d->bCSourceID, term); |
2388 | + err = __check_input_term(state, d->bCSourceID, term); |
2389 | if (err < 0) |
2390 | return err; |
2391 | |
2392 | @@ -849,7 +861,7 @@ static int check_input_term(struct mixer_build *state, int id, |
2393 | case UAC2_CLOCK_SELECTOR: { |
2394 | struct uac_selector_unit_descriptor *d = p1; |
2395 | /* call recursively to retrieve the channel info */ |
2396 | - err = check_input_term(state, d->baSourceID[0], term); |
2397 | + err = __check_input_term(state, d->baSourceID[0], term); |
2398 | if (err < 0) |
2399 | return err; |
2400 | term->type = UAC3_SELECTOR_UNIT << 16; /* virtual type */ |
2401 | @@ -912,7 +924,7 @@ static int check_input_term(struct mixer_build *state, int id, |
2402 | |
2403 | /* call recursively to verify that the |
2404 | * referenced clock entity is valid */ |
2405 | - err = check_input_term(state, d->bCSourceID, term); |
2406 | + err = __check_input_term(state, d->bCSourceID, term); |
2407 | if (err < 0) |
2408 | return err; |
2409 | |
2410 | @@ -963,7 +975,7 @@ static int check_input_term(struct mixer_build *state, int id, |
2411 | case UAC3_CLOCK_SELECTOR: { |
2412 | struct uac_selector_unit_descriptor *d = p1; |
2413 | /* call recursively to retrieve the channel info */ |
2414 | - err = check_input_term(state, d->baSourceID[0], term); |
2415 | + err = __check_input_term(state, d->baSourceID[0], term); |
2416 | if (err < 0) |
2417 | return err; |
2418 | term->type = UAC3_SELECTOR_UNIT << 16; /* virtual type */ |
2419 | @@ -979,7 +991,7 @@ static int check_input_term(struct mixer_build *state, int id, |
2420 | return -EINVAL; |
2421 | |
2422 | /* call recursively to retrieve the channel info */ |
2423 | - err = check_input_term(state, d->baSourceID[0], term); |
2424 | + err = __check_input_term(state, d->baSourceID[0], term); |
2425 | if (err < 0) |
2426 | return err; |
2427 | |
2428 | @@ -997,6 +1009,15 @@ static int check_input_term(struct mixer_build *state, int id, |
2429 | return -ENODEV; |
2430 | } |
2431 | |
2432 | + |
2433 | +static int check_input_term(struct mixer_build *state, int id, |
2434 | + struct usb_audio_term *term) |
2435 | +{ |
2436 | + memset(term, 0, sizeof(*term)); |
2437 | + memset(state->termbitmap, 0, sizeof(state->termbitmap)); |
2438 | + return __check_input_term(state, id, term); |
2439 | +} |
2440 | + |
2441 | /* |
2442 | * Feature Unit |
2443 | */ |
2444 | diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c |
2445 | index a94bd6850a0b..54c34c107cab 100644 |
2446 | --- a/tools/perf/util/header.c |
2447 | +++ b/tools/perf/util/header.c |
2448 | @@ -3285,6 +3285,13 @@ int perf_session__read_header(struct perf_session *session) |
2449 | data->file.path); |
2450 | } |
2451 | |
2452 | + if (f_header.attr_size == 0) { |
2453 | + pr_err("ERROR: The %s file's attr size field is 0 which is unexpected.\n" |
2454 | + "Was the 'perf record' command properly terminated?\n", |
2455 | + data->file.path); |
2456 | + return -EINVAL; |
2457 | + } |
2458 | + |
2459 | nr_attrs = f_header.attrs.size / f_header.attr_size; |
2460 | lseek(fd, f_header.attrs.offset, SEEK_SET); |
2461 | |
2462 | @@ -3365,7 +3372,7 @@ int perf_event__synthesize_attr(struct perf_tool *tool, |
2463 | size += sizeof(struct perf_event_header); |
2464 | size += ids * sizeof(u64); |
2465 | |
2466 | - ev = malloc(size); |
2467 | + ev = zalloc(size); |
2468 | |
2469 | if (ev == NULL) |
2470 | return -ENOMEM; |
2471 | diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c |
2472 | index 02bac8abd206..d982650deb33 100644 |
2473 | --- a/virt/kvm/arm/arm.c |
2474 | +++ b/virt/kvm/arm/arm.c |
2475 | @@ -338,6 +338,17 @@ int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) |
2476 | void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu) |
2477 | { |
2478 | kvm_timer_schedule(vcpu); |
2479 | + /* |
2480 | + * If we're about to block (most likely because we've just hit a |
2481 | + * WFI), we need to sync back the state of the GIC CPU interface |
2482 | + * so that we have the lastest PMR and group enables. This ensures |
2483 | + * that kvm_arch_vcpu_runnable has up-to-date data to decide |
2484 | + * whether we have pending interrupts. |
2485 | + */ |
2486 | + preempt_disable(); |
2487 | + kvm_vgic_vmcr_sync(vcpu); |
2488 | + preempt_enable(); |
2489 | + |
2490 | kvm_vgic_v4_enable_doorbell(vcpu); |
2491 | } |
2492 | |
2493 | diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c |
2494 | index 69b892abd7dc..57281c1594d0 100644 |
2495 | --- a/virt/kvm/arm/vgic/vgic-v2.c |
2496 | +++ b/virt/kvm/arm/vgic/vgic-v2.c |
2497 | @@ -495,10 +495,17 @@ void vgic_v2_load(struct kvm_vcpu *vcpu) |
2498 | kvm_vgic_global_state.vctrl_base + GICH_APR); |
2499 | } |
2500 | |
2501 | -void vgic_v2_put(struct kvm_vcpu *vcpu) |
2502 | +void vgic_v2_vmcr_sync(struct kvm_vcpu *vcpu) |
2503 | { |
2504 | struct vgic_v2_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v2; |
2505 | |
2506 | cpu_if->vgic_vmcr = readl_relaxed(kvm_vgic_global_state.vctrl_base + GICH_VMCR); |
2507 | +} |
2508 | + |
2509 | +void vgic_v2_put(struct kvm_vcpu *vcpu) |
2510 | +{ |
2511 | + struct vgic_v2_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v2; |
2512 | + |
2513 | + vgic_v2_vmcr_sync(vcpu); |
2514 | cpu_if->vgic_apr = readl_relaxed(kvm_vgic_global_state.vctrl_base + GICH_APR); |
2515 | } |
2516 | diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c |
2517 | index 3f2350a4d4ab..5c55995a1a16 100644 |
2518 | --- a/virt/kvm/arm/vgic/vgic-v3.c |
2519 | +++ b/virt/kvm/arm/vgic/vgic-v3.c |
2520 | @@ -674,12 +674,17 @@ void vgic_v3_load(struct kvm_vcpu *vcpu) |
2521 | __vgic_v3_activate_traps(vcpu); |
2522 | } |
2523 | |
2524 | -void vgic_v3_put(struct kvm_vcpu *vcpu) |
2525 | +void vgic_v3_vmcr_sync(struct kvm_vcpu *vcpu) |
2526 | { |
2527 | struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; |
2528 | |
2529 | if (likely(cpu_if->vgic_sre)) |
2530 | cpu_if->vgic_vmcr = kvm_call_hyp(__vgic_v3_read_vmcr); |
2531 | +} |
2532 | + |
2533 | +void vgic_v3_put(struct kvm_vcpu *vcpu) |
2534 | +{ |
2535 | + vgic_v3_vmcr_sync(vcpu); |
2536 | |
2537 | kvm_call_hyp(__vgic_v3_save_aprs, vcpu); |
2538 | |
2539 | diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c |
2540 | index c5165e3b80cb..250cd72c95a5 100644 |
2541 | --- a/virt/kvm/arm/vgic/vgic.c |
2542 | +++ b/virt/kvm/arm/vgic/vgic.c |
2543 | @@ -902,6 +902,17 @@ void kvm_vgic_put(struct kvm_vcpu *vcpu) |
2544 | vgic_v3_put(vcpu); |
2545 | } |
2546 | |
2547 | +void kvm_vgic_vmcr_sync(struct kvm_vcpu *vcpu) |
2548 | +{ |
2549 | + if (unlikely(!irqchip_in_kernel(vcpu->kvm))) |
2550 | + return; |
2551 | + |
2552 | + if (kvm_vgic_global_state.type == VGIC_V2) |
2553 | + vgic_v2_vmcr_sync(vcpu); |
2554 | + else |
2555 | + vgic_v3_vmcr_sync(vcpu); |
2556 | +} |
2557 | + |
2558 | int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu) |
2559 | { |
2560 | struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; |
2561 | diff --git a/virt/kvm/arm/vgic/vgic.h b/virt/kvm/arm/vgic/vgic.h |
2562 | index a90024718ca4..d5e454279925 100644 |
2563 | --- a/virt/kvm/arm/vgic/vgic.h |
2564 | +++ b/virt/kvm/arm/vgic/vgic.h |
2565 | @@ -204,6 +204,7 @@ int vgic_register_dist_iodev(struct kvm *kvm, gpa_t dist_base_address, |
2566 | void vgic_v2_init_lrs(void); |
2567 | void vgic_v2_load(struct kvm_vcpu *vcpu); |
2568 | void vgic_v2_put(struct kvm_vcpu *vcpu); |
2569 | +void vgic_v2_vmcr_sync(struct kvm_vcpu *vcpu); |
2570 | |
2571 | void vgic_v2_save_state(struct kvm_vcpu *vcpu); |
2572 | void vgic_v2_restore_state(struct kvm_vcpu *vcpu); |
2573 | @@ -234,6 +235,7 @@ bool vgic_v3_check_base(struct kvm *kvm); |
2574 | |
2575 | void vgic_v3_load(struct kvm_vcpu *vcpu); |
2576 | void vgic_v3_put(struct kvm_vcpu *vcpu); |
2577 | +void vgic_v3_vmcr_sync(struct kvm_vcpu *vcpu); |
2578 | |
2579 | bool vgic_has_its(struct kvm *kvm); |
2580 | int kvm_vgic_register_its_device(void); |