Contents of /trunk/kernel-magellan/patches-5.3/0101-5.3.2-all-fixes.patch
Parent Directory | Revision Log
Revision 3448 -
(show annotations)
(download)
Fri Oct 4 07:57:10 2019 UTC (4 years, 7 months ago) by niro
File size: 25912 byte(s)
Fri Oct 4 07:57:10 2019 UTC (4 years, 7 months ago) by niro
File size: 25912 byte(s)
-linux-5.3.2
1 | 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: |