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