Annotation of /trunk/kernel-magellan/patches-5.3/0101-5.3.2-all-fixes.patch
Parent Directory | Revision Log
Revision 3448 -
(hide annotations)
(download)
Fri Oct 4 07:57:10 2019 UTC (4 years, 11 months ago) by niro
File size: 25912 byte(s)
Fri Oct 4 07:57:10 2019 UTC (4 years, 11 months ago) by niro
File size: 25912 byte(s)
-linux-5.3.2
1 | niro | 3448 | diff --git a/Makefile b/Makefile |
2 | index f32e8d2e09c3..13fa3a409ddd 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,7 +1,7 @@ | ||
6 | # SPDX-License-Identifier: GPL-2.0 | ||
7 | VERSION = 5 | ||
8 | PATCHLEVEL = 3 | ||
9 | -SUBLEVEL = 1 | ||
10 | +SUBLEVEL = 2 | ||
11 | EXTRAVERSION = | ||
12 | NAME = Bobtail Squid | ||
13 | |||
14 | diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h | ||
15 | index 57bd029c715e..d5a0807d21db 100644 | ||
16 | --- a/arch/powerpc/include/asm/opal.h | ||
17 | +++ b/arch/powerpc/include/asm/opal.h | ||
18 | @@ -272,7 +272,7 @@ int64_t opal_xive_get_vp_info(uint64_t vp, | ||
19 | int64_t opal_xive_set_vp_info(uint64_t vp, | ||
20 | uint64_t flags, | ||
21 | uint64_t report_cl_pair); | ||
22 | -int64_t opal_xive_allocate_irq(uint32_t chip_id); | ||
23 | +int64_t opal_xive_allocate_irq_raw(uint32_t chip_id); | ||
24 | int64_t opal_xive_free_irq(uint32_t girq); | ||
25 | int64_t opal_xive_sync(uint32_t type, uint32_t id); | ||
26 | int64_t opal_xive_dump(uint32_t type, uint32_t id); | ||
27 | diff --git a/arch/powerpc/platforms/powernv/opal-call.c b/arch/powerpc/platforms/powernv/opal-call.c | ||
28 | index 29ca523c1c79..dccdc9df5213 100644 | ||
29 | --- a/arch/powerpc/platforms/powernv/opal-call.c | ||
30 | +++ b/arch/powerpc/platforms/powernv/opal-call.c | ||
31 | @@ -257,7 +257,7 @@ OPAL_CALL(opal_xive_set_queue_info, OPAL_XIVE_SET_QUEUE_INFO); | ||
32 | OPAL_CALL(opal_xive_donate_page, OPAL_XIVE_DONATE_PAGE); | ||
33 | OPAL_CALL(opal_xive_alloc_vp_block, OPAL_XIVE_ALLOCATE_VP_BLOCK); | ||
34 | OPAL_CALL(opal_xive_free_vp_block, OPAL_XIVE_FREE_VP_BLOCK); | ||
35 | -OPAL_CALL(opal_xive_allocate_irq, OPAL_XIVE_ALLOCATE_IRQ); | ||
36 | +OPAL_CALL(opal_xive_allocate_irq_raw, OPAL_XIVE_ALLOCATE_IRQ); | ||
37 | OPAL_CALL(opal_xive_free_irq, OPAL_XIVE_FREE_IRQ); | ||
38 | OPAL_CALL(opal_xive_get_vp_info, OPAL_XIVE_GET_VP_INFO); | ||
39 | OPAL_CALL(opal_xive_set_vp_info, OPAL_XIVE_SET_VP_INFO); | ||
40 | diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c | ||
41 | index 2f26b74f6cfa..cf156aadefe9 100644 | ||
42 | --- a/arch/powerpc/sysdev/xive/native.c | ||
43 | +++ b/arch/powerpc/sysdev/xive/native.c | ||
44 | @@ -231,6 +231,17 @@ static bool xive_native_match(struct device_node *node) | ||
45 | return of_device_is_compatible(node, "ibm,opal-xive-vc"); | ||
46 | } | ||
47 | |||
48 | +static s64 opal_xive_allocate_irq(u32 chip_id) | ||
49 | +{ | ||
50 | + s64 irq = opal_xive_allocate_irq_raw(chip_id); | ||
51 | + | ||
52 | + /* | ||
53 | + * Old versions of skiboot can incorrectly return 0xffffffff to | ||
54 | + * indicate no space, fix it up here. | ||
55 | + */ | ||
56 | + return irq == 0xffffffff ? OPAL_RESOURCE : irq; | ||
57 | +} | ||
58 | + | ||
59 | #ifdef CONFIG_SMP | ||
60 | static int xive_native_get_ipi(unsigned int cpu, struct xive_cpu *xc) | ||
61 | { | ||
62 | diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c | ||
63 | index 6b8e75df994d..6f46bcb1d643 100644 | ||
64 | --- a/drivers/clk/imx/clk-imx8mm.c | ||
65 | +++ b/drivers/clk/imx/clk-imx8mm.c | ||
66 | @@ -55,8 +55,8 @@ static const struct imx_pll14xx_rate_table imx8mm_pll1416x_tbl[] = { | ||
67 | }; | ||
68 | |||
69 | static const struct imx_pll14xx_rate_table imx8mm_audiopll_tbl[] = { | ||
70 | - PLL_1443X_RATE(786432000U, 655, 5, 2, 23593), | ||
71 | - PLL_1443X_RATE(722534400U, 301, 5, 1, 3670), | ||
72 | + PLL_1443X_RATE(393216000U, 262, 2, 3, 9437), | ||
73 | + PLL_1443X_RATE(361267200U, 361, 3, 3, 17511), | ||
74 | }; | ||
75 | |||
76 | static const struct imx_pll14xx_rate_table imx8mm_videopll_tbl[] = { | ||
77 | diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c | ||
78 | index 80542289fae7..d8c2bd4391d0 100644 | ||
79 | --- a/drivers/clocksource/timer-of.c | ||
80 | +++ b/drivers/clocksource/timer-of.c | ||
81 | @@ -113,8 +113,10 @@ static __init int timer_of_clk_init(struct device_node *np, | ||
82 | of_clk->clk = of_clk->name ? of_clk_get_by_name(np, of_clk->name) : | ||
83 | of_clk_get(np, of_clk->index); | ||
84 | if (IS_ERR(of_clk->clk)) { | ||
85 | - pr_err("Failed to get clock for %pOF\n", np); | ||
86 | - return PTR_ERR(of_clk->clk); | ||
87 | + ret = PTR_ERR(of_clk->clk); | ||
88 | + if (ret != -EPROBE_DEFER) | ||
89 | + pr_err("Failed to get clock for %pOF\n", np); | ||
90 | + goto out; | ||
91 | } | ||
92 | |||
93 | ret = clk_prepare_enable(of_clk->clk); | ||
94 | diff --git a/drivers/clocksource/timer-probe.c b/drivers/clocksource/timer-probe.c | ||
95 | index dda1946e84dd..ee9574da53c0 100644 | ||
96 | --- a/drivers/clocksource/timer-probe.c | ||
97 | +++ b/drivers/clocksource/timer-probe.c | ||
98 | @@ -29,7 +29,9 @@ void __init timer_probe(void) | ||
99 | |||
100 | ret = init_func_ret(np); | ||
101 | if (ret) { | ||
102 | - pr_err("Failed to initialize '%pOF': %d\n", np, ret); | ||
103 | + if (ret != -EPROBE_DEFER) | ||
104 | + pr_err("Failed to initialize '%pOF': %d\n", np, | ||
105 | + ret); | ||
106 | continue; | ||
107 | } | ||
108 | |||
109 | diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c | ||
110 | index c9d686a0e805..4818ae427098 100644 | ||
111 | --- a/drivers/crypto/talitos.c | ||
112 | +++ b/drivers/crypto/talitos.c | ||
113 | @@ -3140,6 +3140,7 @@ static int talitos_remove(struct platform_device *ofdev) | ||
114 | break; | ||
115 | case CRYPTO_ALG_TYPE_AEAD: | ||
116 | crypto_unregister_aead(&t_alg->algt.alg.aead); | ||
117 | + break; | ||
118 | case CRYPTO_ALG_TYPE_AHASH: | ||
119 | crypto_unregister_ahash(&t_alg->algt.alg.hash); | ||
120 | break; | ||
121 | diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
122 | index 45be7a2132bb..beb2d268d1ef 100644 | ||
123 | --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
124 | +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
125 | @@ -4548,20 +4548,10 @@ static int dm_plane_atomic_check(struct drm_plane *plane, | ||
126 | static int dm_plane_atomic_async_check(struct drm_plane *plane, | ||
127 | struct drm_plane_state *new_plane_state) | ||
128 | { | ||
129 | - struct drm_plane_state *old_plane_state = | ||
130 | - drm_atomic_get_old_plane_state(new_plane_state->state, plane); | ||
131 | - | ||
132 | /* Only support async updates on cursor planes. */ | ||
133 | if (plane->type != DRM_PLANE_TYPE_CURSOR) | ||
134 | return -EINVAL; | ||
135 | |||
136 | - /* | ||
137 | - * DRM calls prepare_fb and cleanup_fb on new_plane_state for | ||
138 | - * async commits so don't allow fb changes. | ||
139 | - */ | ||
140 | - if (old_plane_state->fb != new_plane_state->fb) | ||
141 | - return -EINVAL; | ||
142 | - | ||
143 | return 0; | ||
144 | } | ||
145 | |||
146 | @@ -7284,6 +7274,26 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, | ||
147 | if (ret) | ||
148 | goto fail; | ||
149 | |||
150 | + if (state->legacy_cursor_update) { | ||
151 | + /* | ||
152 | + * This is a fast cursor update coming from the plane update | ||
153 | + * helper, check if it can be done asynchronously for better | ||
154 | + * performance. | ||
155 | + */ | ||
156 | + state->async_update = | ||
157 | + !drm_atomic_helper_async_check(dev, state); | ||
158 | + | ||
159 | + /* | ||
160 | + * Skip the remaining global validation if this is an async | ||
161 | + * update. Cursor updates can be done without affecting | ||
162 | + * state or bandwidth calcs and this avoids the performance | ||
163 | + * penalty of locking the private state object and | ||
164 | + * allocating a new dc_state. | ||
165 | + */ | ||
166 | + if (state->async_update) | ||
167 | + return 0; | ||
168 | + } | ||
169 | + | ||
170 | /* Check scaling and underscan changes*/ | ||
171 | /* TODO Removed scaling changes validation due to inability to commit | ||
172 | * new stream into context w\o causing full reset. Need to | ||
173 | @@ -7336,13 +7346,29 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, | ||
174 | ret = -EINVAL; | ||
175 | goto fail; | ||
176 | } | ||
177 | - } else if (state->legacy_cursor_update) { | ||
178 | + } else { | ||
179 | /* | ||
180 | - * This is a fast cursor update coming from the plane update | ||
181 | - * helper, check if it can be done asynchronously for better | ||
182 | - * performance. | ||
183 | + * The commit is a fast update. Fast updates shouldn't change | ||
184 | + * the DC context, affect global validation, and can have their | ||
185 | + * commit work done in parallel with other commits not touching | ||
186 | + * the same resource. If we have a new DC context as part of | ||
187 | + * the DM atomic state from validation we need to free it and | ||
188 | + * retain the existing one instead. | ||
189 | */ | ||
190 | - state->async_update = !drm_atomic_helper_async_check(dev, state); | ||
191 | + struct dm_atomic_state *new_dm_state, *old_dm_state; | ||
192 | + | ||
193 | + new_dm_state = dm_atomic_get_new_state(state); | ||
194 | + old_dm_state = dm_atomic_get_old_state(state); | ||
195 | + | ||
196 | + if (new_dm_state && old_dm_state) { | ||
197 | + if (new_dm_state->context) | ||
198 | + dc_release_state(new_dm_state->context); | ||
199 | + | ||
200 | + new_dm_state->context = old_dm_state->context; | ||
201 | + | ||
202 | + if (old_dm_state->context) | ||
203 | + dc_retain_state(old_dm_state->context); | ||
204 | + } | ||
205 | } | ||
206 | |||
207 | /* Must be success */ | ||
208 | diff --git a/drivers/gpu/drm/amd/display/dc/calcs/Makefile b/drivers/gpu/drm/amd/display/dc/calcs/Makefile | ||
209 | index 95f332ee3e7e..16614d73a5fc 100644 | ||
210 | --- a/drivers/gpu/drm/amd/display/dc/calcs/Makefile | ||
211 | +++ b/drivers/gpu/drm/amd/display/dc/calcs/Makefile | ||
212 | @@ -32,6 +32,10 @@ endif | ||
213 | |||
214 | calcs_ccflags := -mhard-float -msse $(cc_stack_align) | ||
215 | |||
216 | +ifdef CONFIG_CC_IS_CLANG | ||
217 | +calcs_ccflags += -msse2 | ||
218 | +endif | ||
219 | + | ||
220 | CFLAGS_dcn_calcs.o := $(calcs_ccflags) | ||
221 | CFLAGS_dcn_calc_auto.o := $(calcs_ccflags) | ||
222 | CFLAGS_dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare | ||
223 | diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/Makefile b/drivers/gpu/drm/amd/display/dc/dcn20/Makefile | ||
224 | index e9721a906592..f57a3b281408 100644 | ||
225 | --- a/drivers/gpu/drm/amd/display/dc/dcn20/Makefile | ||
226 | +++ b/drivers/gpu/drm/amd/display/dc/dcn20/Makefile | ||
227 | @@ -18,6 +18,10 @@ endif | ||
228 | |||
229 | CFLAGS_dcn20_resource.o := -mhard-float -msse $(cc_stack_align) | ||
230 | |||
231 | +ifdef CONFIG_CC_IS_CLANG | ||
232 | +CFLAGS_dcn20_resource.o += -msse2 | ||
233 | +endif | ||
234 | + | ||
235 | AMD_DAL_DCN20 = $(addprefix $(AMDDALPATH)/dc/dcn20/,$(DCN20)) | ||
236 | |||
237 | AMD_DISPLAY_FILES += $(AMD_DAL_DCN20) | ||
238 | diff --git a/drivers/gpu/drm/amd/display/dc/dml/Makefile b/drivers/gpu/drm/amd/display/dc/dml/Makefile | ||
239 | index 0bb7a20675c4..132ade1a234e 100644 | ||
240 | --- a/drivers/gpu/drm/amd/display/dc/dml/Makefile | ||
241 | +++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile | ||
242 | @@ -32,6 +32,10 @@ endif | ||
243 | |||
244 | dml_ccflags := -mhard-float -msse $(cc_stack_align) | ||
245 | |||
246 | +ifdef CONFIG_CC_IS_CLANG | ||
247 | +dml_ccflags += -msse2 | ||
248 | +endif | ||
249 | + | ||
250 | CFLAGS_display_mode_lib.o := $(dml_ccflags) | ||
251 | |||
252 | ifdef CONFIG_DRM_AMD_DC_DCN2_0 | ||
253 | diff --git a/drivers/gpu/drm/amd/display/dc/dsc/Makefile b/drivers/gpu/drm/amd/display/dc/dsc/Makefile | ||
254 | index e019cd9447e8..17db603f2d1f 100644 | ||
255 | --- a/drivers/gpu/drm/amd/display/dc/dsc/Makefile | ||
256 | +++ b/drivers/gpu/drm/amd/display/dc/dsc/Makefile | ||
257 | @@ -9,6 +9,10 @@ endif | ||
258 | |||
259 | dsc_ccflags := -mhard-float -msse $(cc_stack_align) | ||
260 | |||
261 | +ifdef CONFIG_CC_IS_CLANG | ||
262 | +dsc_ccflags += -msse2 | ||
263 | +endif | ||
264 | + | ||
265 | CFLAGS_rc_calc.o := $(dsc_ccflags) | ||
266 | CFLAGS_rc_calc_dpi.o := $(dsc_ccflags) | ||
267 | CFLAGS_codec_main_amd.o := $(dsc_ccflags) | ||
268 | diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h | ||
269 | index 0a00be19f7a0..e4d51ce20a6a 100644 | ||
270 | --- a/drivers/hid/hid-ids.h | ||
271 | +++ b/drivers/hid/hid-ids.h | ||
272 | @@ -568,6 +568,7 @@ | ||
273 | #define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A 0x0b4a | ||
274 | #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE 0x134a | ||
275 | #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A 0x094a | ||
276 | +#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941 0x0941 | ||
277 | #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641 0x0641 | ||
278 | |||
279 | #define USB_VENDOR_ID_HUION 0x256c | ||
280 | diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c | ||
281 | index 5008a3dc28f4..0dc7cdfc56f7 100644 | ||
282 | --- a/drivers/hid/hid-lg.c | ||
283 | +++ b/drivers/hid/hid-lg.c | ||
284 | @@ -818,7 +818,7 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id) | ||
285 | |||
286 | if (!buf) { | ||
287 | ret = -ENOMEM; | ||
288 | - goto err_free; | ||
289 | + goto err_stop; | ||
290 | } | ||
291 | |||
292 | ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(cbuf), | ||
293 | @@ -850,9 +850,12 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id) | ||
294 | ret = lg4ff_init(hdev); | ||
295 | |||
296 | if (ret) | ||
297 | - goto err_free; | ||
298 | + goto err_stop; | ||
299 | |||
300 | return 0; | ||
301 | + | ||
302 | +err_stop: | ||
303 | + hid_hw_stop(hdev); | ||
304 | err_free: | ||
305 | kfree(drv_data); | ||
306 | return ret; | ||
307 | @@ -863,8 +866,7 @@ static void lg_remove(struct hid_device *hdev) | ||
308 | struct lg_drv_data *drv_data = hid_get_drvdata(hdev); | ||
309 | if (drv_data->quirks & LG_FF4) | ||
310 | lg4ff_deinit(hdev); | ||
311 | - else | ||
312 | - hid_hw_stop(hdev); | ||
313 | + hid_hw_stop(hdev); | ||
314 | kfree(drv_data); | ||
315 | } | ||
316 | |||
317 | diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c | ||
318 | index cefba038520c..03f0220062ca 100644 | ||
319 | --- a/drivers/hid/hid-lg4ff.c | ||
320 | +++ b/drivers/hid/hid-lg4ff.c | ||
321 | @@ -1477,7 +1477,6 @@ int lg4ff_deinit(struct hid_device *hid) | ||
322 | } | ||
323 | } | ||
324 | #endif | ||
325 | - hid_hw_stop(hid); | ||
326 | drv_data->device_props = NULL; | ||
327 | |||
328 | kfree(entry); | ||
329 | diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c | ||
330 | index cc47f948c1d0..7badbaa18878 100644 | ||
331 | --- a/drivers/hid/hid-logitech-dj.c | ||
332 | +++ b/drivers/hid/hid-logitech-dj.c | ||
333 | @@ -1734,14 +1734,14 @@ static int logi_dj_probe(struct hid_device *hdev, | ||
334 | if (retval < 0) { | ||
335 | hid_err(hdev, "%s: logi_dj_recv_query_paired_devices error:%d\n", | ||
336 | __func__, retval); | ||
337 | - goto logi_dj_recv_query_paired_devices_failed; | ||
338 | + /* | ||
339 | + * This can happen with a KVM, let the probe succeed, | ||
340 | + * logi_dj_recv_queue_unknown_work will retry later. | ||
341 | + */ | ||
342 | } | ||
343 | } | ||
344 | |||
345 | - return retval; | ||
346 | - | ||
347 | -logi_dj_recv_query_paired_devices_failed: | ||
348 | - hid_hw_close(hdev); | ||
349 | + return 0; | ||
350 | |||
351 | llopen_failed: | ||
352 | switch_to_dj_mode_fail: | ||
353 | diff --git a/drivers/hid/hid-prodikeys.c b/drivers/hid/hid-prodikeys.c | ||
354 | index 21544ebff855..5a3b3d974d84 100644 | ||
355 | --- a/drivers/hid/hid-prodikeys.c | ||
356 | +++ b/drivers/hid/hid-prodikeys.c | ||
357 | @@ -551,10 +551,14 @@ static void pcmidi_setup_extra_keys( | ||
358 | |||
359 | static int pcmidi_set_operational(struct pcmidi_snd *pm) | ||
360 | { | ||
361 | + int rc; | ||
362 | + | ||
363 | if (pm->ifnum != 1) | ||
364 | return 0; /* only set up ONCE for interace 1 */ | ||
365 | |||
366 | - pcmidi_get_output_report(pm); | ||
367 | + rc = pcmidi_get_output_report(pm); | ||
368 | + if (rc < 0) | ||
369 | + return rc; | ||
370 | pcmidi_submit_output_report(pm, 0xc1); | ||
371 | return 0; | ||
372 | } | ||
373 | @@ -683,7 +687,11 @@ static int pcmidi_snd_initialise(struct pcmidi_snd *pm) | ||
374 | spin_lock_init(&pm->rawmidi_in_lock); | ||
375 | |||
376 | init_sustain_timers(pm); | ||
377 | - pcmidi_set_operational(pm); | ||
378 | + err = pcmidi_set_operational(pm); | ||
379 | + if (err < 0) { | ||
380 | + pk_error("failed to find output report\n"); | ||
381 | + goto fail_register; | ||
382 | + } | ||
383 | |||
384 | /* register it */ | ||
385 | err = snd_card_register(card); | ||
386 | diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c | ||
387 | index 166f41f3173b..c50bcd967d99 100644 | ||
388 | --- a/drivers/hid/hid-quirks.c | ||
389 | +++ b/drivers/hid/hid-quirks.c | ||
390 | @@ -92,6 +92,7 @@ static const struct hid_device_id hid_quirks[] = { | ||
391 | { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL }, | ||
392 | { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, | ||
393 | { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A), HID_QUIRK_ALWAYS_POLL }, | ||
394 | + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941), HID_QUIRK_ALWAYS_POLL }, | ||
395 | { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641), HID_QUIRK_ALWAYS_POLL }, | ||
396 | { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), HID_QUIRK_MULTI_INPUT }, | ||
397 | { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI), HID_QUIRK_MULTI_INPUT }, | ||
398 | diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c | ||
399 | index 49dd2d905c7f..73c0f7a95e2d 100644 | ||
400 | --- a/drivers/hid/hid-sony.c | ||
401 | +++ b/drivers/hid/hid-sony.c | ||
402 | @@ -2811,7 +2811,6 @@ err_stop: | ||
403 | sony_cancel_work_sync(sc); | ||
404 | sony_remove_dev_list(sc); | ||
405 | sony_release_device_id(sc); | ||
406 | - hid_hw_stop(hdev); | ||
407 | return ret; | ||
408 | } | ||
409 | |||
410 | @@ -2876,6 +2875,7 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) | ||
411 | */ | ||
412 | if (!(hdev->claimed & HID_CLAIMED_INPUT)) { | ||
413 | hid_err(hdev, "failed to claim input\n"); | ||
414 | + hid_hw_stop(hdev); | ||
415 | return -ENODEV; | ||
416 | } | ||
417 | |||
418 | diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c | ||
419 | index 006bd6f4f653..62ef47a730b0 100644 | ||
420 | --- a/drivers/hid/hidraw.c | ||
421 | +++ b/drivers/hid/hidraw.c | ||
422 | @@ -370,7 +370,7 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd, | ||
423 | |||
424 | mutex_lock(&minors_lock); | ||
425 | dev = hidraw_table[minor]; | ||
426 | - if (!dev) { | ||
427 | + if (!dev || !dev->exist) { | ||
428 | ret = -ENODEV; | ||
429 | goto out; | ||
430 | } | ||
431 | diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c | ||
432 | index f4da7bd552e9..7d29f596bc9e 100644 | ||
433 | --- a/drivers/mtd/chips/cfi_cmdset_0002.c | ||
434 | +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | ||
435 | @@ -1717,31 +1717,37 @@ static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip, | ||
436 | continue; | ||
437 | } | ||
438 | |||
439 | + /* | ||
440 | + * We check "time_after" and "!chip_good" before checking | ||
441 | + * "chip_good" to avoid the failure due to scheduling. | ||
442 | + */ | ||
443 | if (time_after(jiffies, timeo) && | ||
444 | - !chip_ready(map, chip, adr)) { | ||
445 | + !chip_good(map, chip, adr, datum)) { | ||
446 | xip_enable(map, chip, adr); | ||
447 | printk(KERN_WARNING "MTD %s(): software timeout\n", __func__); | ||
448 | xip_disable(map, chip, adr); | ||
449 | + ret = -EIO; | ||
450 | break; | ||
451 | } | ||
452 | |||
453 | - if (chip_ready(map, chip, adr)) | ||
454 | + if (chip_good(map, chip, adr, datum)) | ||
455 | break; | ||
456 | |||
457 | /* Latency issues. Drop the lock, wait a while and retry */ | ||
458 | UDELAY(map, chip, adr, 1); | ||
459 | } | ||
460 | + | ||
461 | /* Did we succeed? */ | ||
462 | - if (!chip_good(map, chip, adr, datum)) { | ||
463 | + if (ret) { | ||
464 | /* reset on all failures. */ | ||
465 | cfi_check_err_status(map, chip, adr); | ||
466 | map_write(map, CMD(0xF0), chip->start); | ||
467 | /* FIXME - should have reset delay before continuing */ | ||
468 | |||
469 | - if (++retry_cnt <= MAX_RETRIES) | ||
470 | + if (++retry_cnt <= MAX_RETRIES) { | ||
471 | + ret = 0; | ||
472 | goto retry; | ||
473 | - | ||
474 | - ret = -EIO; | ||
475 | + } | ||
476 | } | ||
477 | xip_enable(map, chip, adr); | ||
478 | op_done: | ||
479 | diff --git a/drivers/platform/x86/i2c-multi-instantiate.c b/drivers/platform/x86/i2c-multi-instantiate.c | ||
480 | index 197d8a192721..70efa3d29825 100644 | ||
481 | --- a/drivers/platform/x86/i2c-multi-instantiate.c | ||
482 | +++ b/drivers/platform/x86/i2c-multi-instantiate.c | ||
483 | @@ -92,7 +92,7 @@ static int i2c_multi_inst_probe(struct platform_device *pdev) | ||
484 | for (i = 0; i < multi->num_clients && inst_data[i].type; i++) { | ||
485 | memset(&board_info, 0, sizeof(board_info)); | ||
486 | strlcpy(board_info.type, inst_data[i].type, I2C_NAME_SIZE); | ||
487 | - snprintf(name, sizeof(name), "%s-%s.%d", match->id, | ||
488 | + snprintf(name, sizeof(name), "%s-%s.%d", dev_name(dev), | ||
489 | inst_data[i].type, i); | ||
490 | board_info.dev_name = name; | ||
491 | switch (inst_data[i].flags & IRQ_RESOURCE_TYPE) { | ||
492 | diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h | ||
493 | index 475d6f28ca67..7f7a4d9137e5 100644 | ||
494 | --- a/include/net/netfilter/nf_tables.h | ||
495 | +++ b/include/net/netfilter/nf_tables.h | ||
496 | @@ -1206,6 +1206,8 @@ void nft_trace_notify(struct nft_traceinfo *info); | ||
497 | #define MODULE_ALIAS_NFT_OBJ(type) \ | ||
498 | MODULE_ALIAS("nft-obj-" __stringify(type)) | ||
499 | |||
500 | +#if IS_ENABLED(CONFIG_NF_TABLES) | ||
501 | + | ||
502 | /* | ||
503 | * The gencursor defines two generations, the currently active and the | ||
504 | * next one. Objects contain a bitmask of 2 bits specifying the generations | ||
505 | @@ -1279,6 +1281,8 @@ static inline void nft_set_elem_change_active(const struct net *net, | ||
506 | ext->genmask ^= nft_genmask_next(net); | ||
507 | } | ||
508 | |||
509 | +#endif /* IS_ENABLED(CONFIG_NF_TABLES) */ | ||
510 | + | ||
511 | /* | ||
512 | * We use a free bit in the genmask field to indicate the element | ||
513 | * is busy, meaning it is currently being processed either by | ||
514 | diff --git a/mm/z3fold.c b/mm/z3fold.c | ||
515 | index 75b7962439ff..ed19d98c9dcd 100644 | ||
516 | --- a/mm/z3fold.c | ||
517 | +++ b/mm/z3fold.c | ||
518 | @@ -41,7 +41,6 @@ | ||
519 | #include <linux/workqueue.h> | ||
520 | #include <linux/slab.h> | ||
521 | #include <linux/spinlock.h> | ||
522 | -#include <linux/wait.h> | ||
523 | #include <linux/zpool.h> | ||
524 | #include <linux/magic.h> | ||
525 | |||
526 | @@ -146,8 +145,6 @@ struct z3fold_header { | ||
527 | * @release_wq: workqueue for safe page release | ||
528 | * @work: work_struct for safe page release | ||
529 | * @inode: inode for z3fold pseudo filesystem | ||
530 | - * @destroying: bool to stop migration once we start destruction | ||
531 | - * @isolated: int to count the number of pages currently in isolation | ||
532 | * | ||
533 | * This structure is allocated at pool creation time and maintains metadata | ||
534 | * pertaining to a particular z3fold pool. | ||
535 | @@ -166,11 +163,8 @@ struct z3fold_pool { | ||
536 | const struct zpool_ops *zpool_ops; | ||
537 | struct workqueue_struct *compact_wq; | ||
538 | struct workqueue_struct *release_wq; | ||
539 | - struct wait_queue_head isolate_wait; | ||
540 | struct work_struct work; | ||
541 | struct inode *inode; | ||
542 | - bool destroying; | ||
543 | - int isolated; | ||
544 | }; | ||
545 | |||
546 | /* | ||
547 | @@ -775,7 +769,6 @@ static struct z3fold_pool *z3fold_create_pool(const char *name, gfp_t gfp, | ||
548 | goto out_c; | ||
549 | spin_lock_init(&pool->lock); | ||
550 | spin_lock_init(&pool->stale_lock); | ||
551 | - init_waitqueue_head(&pool->isolate_wait); | ||
552 | pool->unbuddied = __alloc_percpu(sizeof(struct list_head)*NCHUNKS, 2); | ||
553 | if (!pool->unbuddied) | ||
554 | goto out_pool; | ||
555 | @@ -815,15 +808,6 @@ out: | ||
556 | return NULL; | ||
557 | } | ||
558 | |||
559 | -static bool pool_isolated_are_drained(struct z3fold_pool *pool) | ||
560 | -{ | ||
561 | - bool ret; | ||
562 | - | ||
563 | - spin_lock(&pool->lock); | ||
564 | - ret = pool->isolated == 0; | ||
565 | - spin_unlock(&pool->lock); | ||
566 | - return ret; | ||
567 | -} | ||
568 | /** | ||
569 | * z3fold_destroy_pool() - destroys an existing z3fold pool | ||
570 | * @pool: the z3fold pool to be destroyed | ||
571 | @@ -833,22 +817,6 @@ static bool pool_isolated_are_drained(struct z3fold_pool *pool) | ||
572 | static void z3fold_destroy_pool(struct z3fold_pool *pool) | ||
573 | { | ||
574 | kmem_cache_destroy(pool->c_handle); | ||
575 | - /* | ||
576 | - * We set pool-> destroying under lock to ensure that | ||
577 | - * z3fold_page_isolate() sees any changes to destroying. This way we | ||
578 | - * avoid the need for any memory barriers. | ||
579 | - */ | ||
580 | - | ||
581 | - spin_lock(&pool->lock); | ||
582 | - pool->destroying = true; | ||
583 | - spin_unlock(&pool->lock); | ||
584 | - | ||
585 | - /* | ||
586 | - * We need to ensure that no pages are being migrated while we destroy | ||
587 | - * these workqueues, as migration can queue work on either of the | ||
588 | - * workqueues. | ||
589 | - */ | ||
590 | - wait_event(pool->isolate_wait, !pool_isolated_are_drained(pool)); | ||
591 | |||
592 | /* | ||
593 | * We need to destroy pool->compact_wq before pool->release_wq, | ||
594 | @@ -1339,28 +1307,6 @@ static u64 z3fold_get_pool_size(struct z3fold_pool *pool) | ||
595 | return atomic64_read(&pool->pages_nr); | ||
596 | } | ||
597 | |||
598 | -/* | ||
599 | - * z3fold_dec_isolated() expects to be called while pool->lock is held. | ||
600 | - */ | ||
601 | -static void z3fold_dec_isolated(struct z3fold_pool *pool) | ||
602 | -{ | ||
603 | - assert_spin_locked(&pool->lock); | ||
604 | - VM_BUG_ON(pool->isolated <= 0); | ||
605 | - pool->isolated--; | ||
606 | - | ||
607 | - /* | ||
608 | - * If we have no more isolated pages, we have to see if | ||
609 | - * z3fold_destroy_pool() is waiting for a signal. | ||
610 | - */ | ||
611 | - if (pool->isolated == 0 && waitqueue_active(&pool->isolate_wait)) | ||
612 | - wake_up_all(&pool->isolate_wait); | ||
613 | -} | ||
614 | - | ||
615 | -static void z3fold_inc_isolated(struct z3fold_pool *pool) | ||
616 | -{ | ||
617 | - pool->isolated++; | ||
618 | -} | ||
619 | - | ||
620 | static bool z3fold_page_isolate(struct page *page, isolate_mode_t mode) | ||
621 | { | ||
622 | struct z3fold_header *zhdr; | ||
623 | @@ -1387,34 +1333,6 @@ static bool z3fold_page_isolate(struct page *page, isolate_mode_t mode) | ||
624 | spin_lock(&pool->lock); | ||
625 | if (!list_empty(&page->lru)) | ||
626 | list_del(&page->lru); | ||
627 | - /* | ||
628 | - * We need to check for destruction while holding pool->lock, as | ||
629 | - * otherwise destruction could see 0 isolated pages, and | ||
630 | - * proceed. | ||
631 | - */ | ||
632 | - if (unlikely(pool->destroying)) { | ||
633 | - spin_unlock(&pool->lock); | ||
634 | - /* | ||
635 | - * If this page isn't stale, somebody else holds a | ||
636 | - * reference to it. Let't drop our refcount so that they | ||
637 | - * can call the release logic. | ||
638 | - */ | ||
639 | - if (unlikely(kref_put(&zhdr->refcount, | ||
640 | - release_z3fold_page_locked))) { | ||
641 | - /* | ||
642 | - * If we get here we have kref problems, so we | ||
643 | - * should freak out. | ||
644 | - */ | ||
645 | - WARN(1, "Z3fold is experiencing kref problems\n"); | ||
646 | - z3fold_page_unlock(zhdr); | ||
647 | - return false; | ||
648 | - } | ||
649 | - z3fold_page_unlock(zhdr); | ||
650 | - return false; | ||
651 | - } | ||
652 | - | ||
653 | - | ||
654 | - z3fold_inc_isolated(pool); | ||
655 | spin_unlock(&pool->lock); | ||
656 | z3fold_page_unlock(zhdr); | ||
657 | return true; | ||
658 | @@ -1483,10 +1401,6 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa | ||
659 | |||
660 | queue_work_on(new_zhdr->cpu, pool->compact_wq, &new_zhdr->work); | ||
661 | |||
662 | - spin_lock(&pool->lock); | ||
663 | - z3fold_dec_isolated(pool); | ||
664 | - spin_unlock(&pool->lock); | ||
665 | - | ||
666 | page_mapcount_reset(page); | ||
667 | put_page(page); | ||
668 | return 0; | ||
669 | @@ -1506,14 +1420,10 @@ static void z3fold_page_putback(struct page *page) | ||
670 | INIT_LIST_HEAD(&page->lru); | ||
671 | if (kref_put(&zhdr->refcount, release_z3fold_page_locked)) { | ||
672 | atomic64_dec(&pool->pages_nr); | ||
673 | - spin_lock(&pool->lock); | ||
674 | - z3fold_dec_isolated(pool); | ||
675 | - spin_unlock(&pool->lock); | ||
676 | return; | ||
677 | } | ||
678 | spin_lock(&pool->lock); | ||
679 | list_add(&page->lru, &pool->lru); | ||
680 | - z3fold_dec_isolated(pool); | ||
681 | spin_unlock(&pool->lock); | ||
682 | z3fold_page_unlock(zhdr); | ||
683 | } | ||
684 | diff --git a/sound/firewire/dice/dice-alesis.c b/sound/firewire/dice/dice-alesis.c | ||
685 | index 218292bdace6..f5b325263b67 100644 | ||
686 | --- a/sound/firewire/dice/dice-alesis.c | ||
687 | +++ b/sound/firewire/dice/dice-alesis.c | ||
688 | @@ -15,7 +15,7 @@ alesis_io14_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = { | ||
689 | |||
690 | static const unsigned int | ||
691 | alesis_io26_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = { | ||
692 | - {10, 10, 8}, /* Tx0 = Analog + S/PDIF. */ | ||
693 | + {10, 10, 4}, /* Tx0 = Analog + S/PDIF. */ | ||
694 | {16, 8, 0}, /* Tx1 = ADAT1 + ADAT2. */ | ||
695 | }; | ||
696 | |||
697 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c | ||
698 | index 99fc0917339b..b0de3e3b33e5 100644 | ||
699 | --- a/sound/pci/hda/hda_intel.c | ||
700 | +++ b/sound/pci/hda/hda_intel.c | ||
701 | @@ -2517,8 +2517,7 @@ static const struct pci_device_id azx_ids[] = { | ||
702 | AZX_DCAPS_PM_RUNTIME }, | ||
703 | /* AMD Raven */ | ||
704 | { PCI_DEVICE(0x1022, 0x15e3), | ||
705 | - .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB | | ||
706 | - AZX_DCAPS_PM_RUNTIME }, | ||
707 | + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB }, | ||
708 | /* ATI HDMI */ | ||
709 | { PCI_DEVICE(0x1002, 0x0002), | ||
710 | .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, | ||
711 | diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c | ||
712 | index e283966bdbb1..bc9dd8e6fd86 100644 | ||
713 | --- a/sound/pci/hda/patch_analog.c | ||
714 | +++ b/sound/pci/hda/patch_analog.c | ||
715 | @@ -357,6 +357,7 @@ static const struct hda_fixup ad1986a_fixups[] = { | ||
716 | |||
717 | static const struct snd_pci_quirk ad1986a_fixup_tbl[] = { | ||
718 | SND_PCI_QUIRK(0x103c, 0x30af, "HP B2800", AD1986A_FIXUP_LAPTOP_IMIC), | ||
719 | + SND_PCI_QUIRK(0x1043, 0x1153, "ASUS M9V", AD1986A_FIXUP_LAPTOP_IMIC), | ||
720 | SND_PCI_QUIRK(0x1043, 0x1443, "ASUS Z99He", AD1986A_FIXUP_EAPD), | ||
721 | SND_PCI_QUIRK(0x1043, 0x1447, "ASUS A8JN", AD1986A_FIXUP_EAPD), | ||
722 | SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK), | ||
723 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c | ||
724 | index 78858918cbc1..b6f7b13768a1 100644 | ||
725 | --- a/sound/usb/quirks.c | ||
726 | +++ b/sound/usb/quirks.c | ||
727 | @@ -1655,6 +1655,8 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, | ||
728 | case 0x152a: /* Thesycon devices */ | ||
729 | case 0x25ce: /* Mytek devices */ | ||
730 | case 0x2ab6: /* T+A devices */ | ||
731 | + case 0x3842: /* EVGA */ | ||
732 | + case 0xc502: /* HiBy devices */ | ||
733 | if (fp->dsd_raw) | ||
734 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; | ||
735 | break; | ||
736 | diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile | ||
737 | index 88158239622b..20f67fcf378d 100644 | ||
738 | --- a/tools/objtool/Makefile | ||
739 | +++ b/tools/objtool/Makefile | ||
740 | @@ -35,7 +35,7 @@ INCLUDES := -I$(srctree)/tools/include \ | ||
741 | -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \ | ||
742 | -I$(srctree)/tools/objtool/arch/$(ARCH)/include | ||
743 | WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed | ||
744 | -CFLAGS += -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS) | ||
745 | +CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS) | ||
746 | LDFLAGS += $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS) | ||
747 | |||
748 | # Allow old libelf to be used: |