Contents of /trunk/kernel-alx/patches-5.4/0139-5.4.40-all-fixes.patch
Parent Directory | Revision Log
Revision 3520 -
(show annotations)
(download)
Mon May 11 14:36:45 2020 UTC (4 years, 4 months ago) by niro
File size: 51766 byte(s)
Mon May 11 14:36:45 2020 UTC (4 years, 4 months ago) by niro
File size: 51766 byte(s)
-linux-5.4.40
1 | diff --git a/Makefile b/Makefile |
2 | index ff2b90ddc9bc..6d4fca82529a 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,7 +1,7 @@ |
6 | # SPDX-License-Identifier: GPL-2.0 |
7 | VERSION = 5 |
8 | PATCHLEVEL = 4 |
9 | -SUBLEVEL = 39 |
10 | +SUBLEVEL = 40 |
11 | EXTRAVERSION = |
12 | NAME = Kleptomaniac Octopus |
13 | |
14 | diff --git a/arch/hexagon/include/asm/io.h b/arch/hexagon/include/asm/io.h |
15 | index ba1a444d55b3..68a68147504d 100644 |
16 | --- a/arch/hexagon/include/asm/io.h |
17 | +++ b/arch/hexagon/include/asm/io.h |
18 | @@ -171,16 +171,10 @@ static inline void writel(u32 data, volatile void __iomem *addr) |
19 | #define writew_relaxed __raw_writew |
20 | #define writel_relaxed __raw_writel |
21 | |
22 | -/* |
23 | - * Need an mtype somewhere in here, for cache type deals? |
24 | - * This is probably too long for an inline. |
25 | - */ |
26 | -void __iomem *ioremap_nocache(unsigned long phys_addr, unsigned long size); |
27 | +void __iomem *ioremap(unsigned long phys_addr, unsigned long size); |
28 | +#define ioremap_nocache ioremap |
29 | +#define ioremap_uc(X, Y) ioremap((X), (Y)) |
30 | |
31 | -static inline void __iomem *ioremap(unsigned long phys_addr, unsigned long size) |
32 | -{ |
33 | - return ioremap_nocache(phys_addr, size); |
34 | -} |
35 | |
36 | static inline void iounmap(volatile void __iomem *addr) |
37 | { |
38 | diff --git a/arch/hexagon/kernel/hexagon_ksyms.c b/arch/hexagon/kernel/hexagon_ksyms.c |
39 | index cf8974beb500..b3dbb472572e 100644 |
40 | --- a/arch/hexagon/kernel/hexagon_ksyms.c |
41 | +++ b/arch/hexagon/kernel/hexagon_ksyms.c |
42 | @@ -20,7 +20,7 @@ EXPORT_SYMBOL(__vmgetie); |
43 | EXPORT_SYMBOL(__vmsetie); |
44 | EXPORT_SYMBOL(__vmyield); |
45 | EXPORT_SYMBOL(empty_zero_page); |
46 | -EXPORT_SYMBOL(ioremap_nocache); |
47 | +EXPORT_SYMBOL(ioremap); |
48 | EXPORT_SYMBOL(memcpy); |
49 | EXPORT_SYMBOL(memset); |
50 | |
51 | diff --git a/arch/hexagon/mm/ioremap.c b/arch/hexagon/mm/ioremap.c |
52 | index 77d8e1e69e9b..b103d83b5fbb 100644 |
53 | --- a/arch/hexagon/mm/ioremap.c |
54 | +++ b/arch/hexagon/mm/ioremap.c |
55 | @@ -9,7 +9,7 @@ |
56 | #include <linux/vmalloc.h> |
57 | #include <linux/mm.h> |
58 | |
59 | -void __iomem *ioremap_nocache(unsigned long phys_addr, unsigned long size) |
60 | +void __iomem *ioremap(unsigned long phys_addr, unsigned long size) |
61 | { |
62 | unsigned long last_addr, addr; |
63 | unsigned long offset = phys_addr & ~PAGE_MASK; |
64 | diff --git a/arch/x86/kvm/vmx/ops.h b/arch/x86/kvm/vmx/ops.h |
65 | index 09b0937d56b1..19717d0a1100 100644 |
66 | --- a/arch/x86/kvm/vmx/ops.h |
67 | +++ b/arch/x86/kvm/vmx/ops.h |
68 | @@ -12,6 +12,7 @@ |
69 | |
70 | #define __ex(x) __kvm_handle_fault_on_reboot(x) |
71 | |
72 | +asmlinkage void vmread_error(unsigned long field, bool fault); |
73 | __attribute__((regparm(0))) void vmread_error_trampoline(unsigned long field, |
74 | bool fault); |
75 | void vmwrite_error(unsigned long field, unsigned long value); |
76 | diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c |
77 | index ce1d9048a36d..edad89e58c58 100644 |
78 | --- a/drivers/acpi/sleep.c |
79 | +++ b/drivers/acpi/sleep.c |
80 | @@ -979,10 +979,7 @@ static int acpi_s2idle_prepare_late(void) |
81 | |
82 | static void acpi_s2idle_sync(void) |
83 | { |
84 | - /* |
85 | - * The EC driver uses the system workqueue and an additional special |
86 | - * one, so those need to be flushed too. |
87 | - */ |
88 | + /* The EC driver uses special workqueues that need to be flushed. */ |
89 | acpi_ec_flush_work(); |
90 | acpi_os_wait_events_complete(); /* synchronize Notify handling */ |
91 | } |
92 | diff --git a/drivers/base/swnode.c b/drivers/base/swnode.c |
93 | index d5b4905e2adb..77cc138d138c 100644 |
94 | --- a/drivers/base/swnode.c |
95 | +++ b/drivers/base/swnode.c |
96 | @@ -679,6 +679,13 @@ static void software_node_release(struct kobject *kobj) |
97 | { |
98 | struct swnode *swnode = kobj_to_swnode(kobj); |
99 | |
100 | + if (swnode->parent) { |
101 | + ida_simple_remove(&swnode->parent->child_ids, swnode->id); |
102 | + list_del(&swnode->entry); |
103 | + } else { |
104 | + ida_simple_remove(&swnode_root_ids, swnode->id); |
105 | + } |
106 | + |
107 | if (swnode->allocated) { |
108 | property_entries_free(swnode->node->properties); |
109 | kfree(swnode->node); |
110 | @@ -844,13 +851,6 @@ void fwnode_remove_software_node(struct fwnode_handle *fwnode) |
111 | if (!swnode) |
112 | return; |
113 | |
114 | - if (swnode->parent) { |
115 | - ida_simple_remove(&swnode->parent->child_ids, swnode->id); |
116 | - list_del(&swnode->entry); |
117 | - } else { |
118 | - ida_simple_remove(&swnode_root_ids, swnode->id); |
119 | - } |
120 | - |
121 | kobject_put(&swnode->kobj); |
122 | } |
123 | EXPORT_SYMBOL_GPL(fwnode_remove_software_node); |
124 | diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c |
125 | index ff81b7cdab71..dce45f7a497d 100644 |
126 | --- a/drivers/devfreq/devfreq.c |
127 | +++ b/drivers/devfreq/devfreq.c |
128 | @@ -902,7 +902,9 @@ int devfreq_suspend_device(struct devfreq *devfreq) |
129 | } |
130 | |
131 | if (devfreq->suspend_freq) { |
132 | + mutex_lock(&devfreq->lock); |
133 | ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0); |
134 | + mutex_unlock(&devfreq->lock); |
135 | if (ret) |
136 | return ret; |
137 | } |
138 | @@ -930,7 +932,9 @@ int devfreq_resume_device(struct devfreq *devfreq) |
139 | return 0; |
140 | |
141 | if (devfreq->resume_freq) { |
142 | + mutex_lock(&devfreq->lock); |
143 | ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0); |
144 | + mutex_unlock(&devfreq->lock); |
145 | if (ret) |
146 | return ret; |
147 | } |
148 | diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |
149 | index 03930313c263..51263b8d94b1 100644 |
150 | --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |
151 | +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |
152 | @@ -90,7 +90,8 @@ void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev) |
153 | adev->pm.ac_power = true; |
154 | else |
155 | adev->pm.ac_power = false; |
156 | - if (adev->powerplay.pp_funcs->enable_bapm) |
157 | + if (adev->powerplay.pp_funcs && |
158 | + adev->powerplay.pp_funcs->enable_bapm) |
159 | amdgpu_dpm_enable_bapm(adev, adev->pm.ac_power); |
160 | mutex_unlock(&adev->pm.mutex); |
161 | } |
162 | diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c |
163 | index 3aedc724241e..5bf12a446e95 100644 |
164 | --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c |
165 | +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c |
166 | @@ -2768,15 +2768,6 @@ void core_link_enable_stream( |
167 | CONTROLLER_DP_TEST_PATTERN_VIDEOMODE, |
168 | COLOR_DEPTH_UNDEFINED); |
169 | |
170 | - /* This second call is needed to reconfigure the DIG |
171 | - * as a workaround for the incorrect value being applied |
172 | - * from transmitter control. |
173 | - */ |
174 | - if (!dc_is_virtual_signal(pipe_ctx->stream->signal)) |
175 | - stream->link->link_enc->funcs->setup( |
176 | - stream->link->link_enc, |
177 | - pipe_ctx->stream->signal); |
178 | - |
179 | #ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT |
180 | if (pipe_ctx->stream->timing.flags.DSC) { |
181 | if (dc_is_dp_signal(pipe_ctx->stream->signal) || |
182 | diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c |
183 | index 77c14671866c..719597c5d27d 100644 |
184 | --- a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c |
185 | +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c |
186 | @@ -984,6 +984,32 @@ static int init_thermal_controller( |
187 | struct pp_hwmgr *hwmgr, |
188 | const ATOM_PPLIB_POWERPLAYTABLE *powerplay_table) |
189 | { |
190 | + hwmgr->thermal_controller.ucType = |
191 | + powerplay_table->sThermalController.ucType; |
192 | + hwmgr->thermal_controller.ucI2cLine = |
193 | + powerplay_table->sThermalController.ucI2cLine; |
194 | + hwmgr->thermal_controller.ucI2cAddress = |
195 | + powerplay_table->sThermalController.ucI2cAddress; |
196 | + |
197 | + hwmgr->thermal_controller.fanInfo.bNoFan = |
198 | + (0 != (powerplay_table->sThermalController.ucFanParameters & |
199 | + ATOM_PP_FANPARAMETERS_NOFAN)); |
200 | + |
201 | + hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution = |
202 | + powerplay_table->sThermalController.ucFanParameters & |
203 | + ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK; |
204 | + |
205 | + hwmgr->thermal_controller.fanInfo.ulMinRPM |
206 | + = powerplay_table->sThermalController.ucFanMinRPM * 100UL; |
207 | + hwmgr->thermal_controller.fanInfo.ulMaxRPM |
208 | + = powerplay_table->sThermalController.ucFanMaxRPM * 100UL; |
209 | + |
210 | + set_hw_cap(hwmgr, |
211 | + ATOM_PP_THERMALCONTROLLER_NONE != hwmgr->thermal_controller.ucType, |
212 | + PHM_PlatformCaps_ThermalController); |
213 | + |
214 | + hwmgr->thermal_controller.use_hw_fan_control = 1; |
215 | + |
216 | return 0; |
217 | } |
218 | |
219 | diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c |
220 | index 22885dceaa17..1f26890a8da6 100644 |
221 | --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c |
222 | +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c |
223 | @@ -1635,8 +1635,7 @@ static ssize_t analogix_dpaux_transfer(struct drm_dp_aux *aux, |
224 | } |
225 | |
226 | struct analogix_dp_device * |
227 | -analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, |
228 | - struct analogix_dp_plat_data *plat_data) |
229 | +analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data) |
230 | { |
231 | struct platform_device *pdev = to_platform_device(dev); |
232 | struct analogix_dp_device *dp; |
233 | @@ -1739,22 +1738,30 @@ analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, |
234 | irq_flags, "analogix-dp", dp); |
235 | if (ret) { |
236 | dev_err(&pdev->dev, "failed to request irq\n"); |
237 | - goto err_disable_pm_runtime; |
238 | + return ERR_PTR(ret); |
239 | } |
240 | disable_irq(dp->irq); |
241 | |
242 | + return dp; |
243 | +} |
244 | +EXPORT_SYMBOL_GPL(analogix_dp_probe); |
245 | + |
246 | +int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev) |
247 | +{ |
248 | + int ret; |
249 | + |
250 | dp->drm_dev = drm_dev; |
251 | dp->encoder = dp->plat_data->encoder; |
252 | |
253 | dp->aux.name = "DP-AUX"; |
254 | dp->aux.transfer = analogix_dpaux_transfer; |
255 | - dp->aux.dev = &pdev->dev; |
256 | + dp->aux.dev = dp->dev; |
257 | |
258 | ret = drm_dp_aux_register(&dp->aux); |
259 | if (ret) |
260 | - return ERR_PTR(ret); |
261 | + return ret; |
262 | |
263 | - pm_runtime_enable(dev); |
264 | + pm_runtime_enable(dp->dev); |
265 | |
266 | ret = analogix_dp_create_bridge(drm_dev, dp); |
267 | if (ret) { |
268 | @@ -1762,13 +1769,12 @@ analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, |
269 | goto err_disable_pm_runtime; |
270 | } |
271 | |
272 | - return dp; |
273 | + return 0; |
274 | |
275 | err_disable_pm_runtime: |
276 | + pm_runtime_disable(dp->dev); |
277 | |
278 | - pm_runtime_disable(dev); |
279 | - |
280 | - return ERR_PTR(ret); |
281 | + return ret; |
282 | } |
283 | EXPORT_SYMBOL_GPL(analogix_dp_bind); |
284 | |
285 | @@ -1785,10 +1791,15 @@ void analogix_dp_unbind(struct analogix_dp_device *dp) |
286 | |
287 | drm_dp_aux_unregister(&dp->aux); |
288 | pm_runtime_disable(dp->dev); |
289 | - clk_disable_unprepare(dp->clock); |
290 | } |
291 | EXPORT_SYMBOL_GPL(analogix_dp_unbind); |
292 | |
293 | +void analogix_dp_remove(struct analogix_dp_device *dp) |
294 | +{ |
295 | + clk_disable_unprepare(dp->clock); |
296 | +} |
297 | +EXPORT_SYMBOL_GPL(analogix_dp_remove); |
298 | + |
299 | #ifdef CONFIG_PM |
300 | int analogix_dp_suspend(struct analogix_dp_device *dp) |
301 | { |
302 | diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c |
303 | index 3a0f0ba8c63a..e0cfae744afc 100644 |
304 | --- a/drivers/gpu/drm/exynos/exynos_dp.c |
305 | +++ b/drivers/gpu/drm/exynos/exynos_dp.c |
306 | @@ -158,15 +158,8 @@ static int exynos_dp_bind(struct device *dev, struct device *master, void *data) |
307 | struct drm_device *drm_dev = data; |
308 | int ret; |
309 | |
310 | - dp->dev = dev; |
311 | dp->drm_dev = drm_dev; |
312 | |
313 | - dp->plat_data.dev_type = EXYNOS_DP; |
314 | - dp->plat_data.power_on_start = exynos_dp_poweron; |
315 | - dp->plat_data.power_off = exynos_dp_poweroff; |
316 | - dp->plat_data.attach = exynos_dp_bridge_attach; |
317 | - dp->plat_data.get_modes = exynos_dp_get_modes; |
318 | - |
319 | if (!dp->plat_data.panel && !dp->ptn_bridge) { |
320 | ret = exynos_dp_dt_parse_panel(dp); |
321 | if (ret) |
322 | @@ -184,13 +177,11 @@ static int exynos_dp_bind(struct device *dev, struct device *master, void *data) |
323 | |
324 | dp->plat_data.encoder = encoder; |
325 | |
326 | - dp->adp = analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data); |
327 | - if (IS_ERR(dp->adp)) { |
328 | + ret = analogix_dp_bind(dp->adp, dp->drm_dev); |
329 | + if (ret) |
330 | dp->encoder.funcs->destroy(&dp->encoder); |
331 | - return PTR_ERR(dp->adp); |
332 | - } |
333 | |
334 | - return 0; |
335 | + return ret; |
336 | } |
337 | |
338 | static void exynos_dp_unbind(struct device *dev, struct device *master, |
339 | @@ -221,6 +212,7 @@ static int exynos_dp_probe(struct platform_device *pdev) |
340 | if (!dp) |
341 | return -ENOMEM; |
342 | |
343 | + dp->dev = dev; |
344 | /* |
345 | * We just use the drvdata until driver run into component |
346 | * add function, and then we would set drvdata to null, so |
347 | @@ -246,16 +238,29 @@ static int exynos_dp_probe(struct platform_device *pdev) |
348 | |
349 | /* The remote port can be either a panel or a bridge */ |
350 | dp->plat_data.panel = panel; |
351 | + dp->plat_data.dev_type = EXYNOS_DP; |
352 | + dp->plat_data.power_on_start = exynos_dp_poweron; |
353 | + dp->plat_data.power_off = exynos_dp_poweroff; |
354 | + dp->plat_data.attach = exynos_dp_bridge_attach; |
355 | + dp->plat_data.get_modes = exynos_dp_get_modes; |
356 | dp->plat_data.skip_connector = !!bridge; |
357 | + |
358 | dp->ptn_bridge = bridge; |
359 | |
360 | out: |
361 | + dp->adp = analogix_dp_probe(dev, &dp->plat_data); |
362 | + if (IS_ERR(dp->adp)) |
363 | + return PTR_ERR(dp->adp); |
364 | + |
365 | return component_add(&pdev->dev, &exynos_dp_ops); |
366 | } |
367 | |
368 | static int exynos_dp_remove(struct platform_device *pdev) |
369 | { |
370 | + struct exynos_dp_device *dp = platform_get_drvdata(pdev); |
371 | + |
372 | component_del(&pdev->dev, &exynos_dp_ops); |
373 | + analogix_dp_remove(dp->adp); |
374 | |
375 | return 0; |
376 | } |
377 | diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c |
378 | index 272503615378..ae31836aa4ee 100644 |
379 | --- a/drivers/gpu/drm/i915/display/intel_display.c |
380 | +++ b/drivers/gpu/drm/i915/display/intel_display.c |
381 | @@ -16860,8 +16860,11 @@ get_encoder_power_domains(struct drm_i915_private *dev_priv) |
382 | |
383 | static void intel_early_display_was(struct drm_i915_private *dev_priv) |
384 | { |
385 | - /* Display WA #1185 WaDisableDARBFClkGating:cnl,glk */ |
386 | - if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv)) |
387 | + /* |
388 | + * Display WA #1185 WaDisableDARBFClkGating:cnl,glk,icl,ehl,tgl |
389 | + * Also known as Wa_14010480278. |
390 | + */ |
391 | + if (IS_GEN_RANGE(dev_priv, 10, 12) || IS_GEMINILAKE(dev_priv)) |
392 | I915_WRITE(GEN9_CLKGATE_DIS_0, I915_READ(GEN9_CLKGATE_DIS_0) | |
393 | DARBF_GATING_DIS); |
394 | |
395 | diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c |
396 | index f38f5e113c6b..ce98c08aa8b4 100644 |
397 | --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c |
398 | +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c |
399 | @@ -325,15 +325,9 @@ static int rockchip_dp_bind(struct device *dev, struct device *master, |
400 | void *data) |
401 | { |
402 | struct rockchip_dp_device *dp = dev_get_drvdata(dev); |
403 | - const struct rockchip_dp_chip_data *dp_data; |
404 | struct drm_device *drm_dev = data; |
405 | int ret; |
406 | |
407 | - dp_data = of_device_get_match_data(dev); |
408 | - if (!dp_data) |
409 | - return -ENODEV; |
410 | - |
411 | - dp->data = dp_data; |
412 | dp->drm_dev = drm_dev; |
413 | |
414 | ret = rockchip_dp_drm_create_encoder(dp); |
415 | @@ -344,16 +338,9 @@ static int rockchip_dp_bind(struct device *dev, struct device *master, |
416 | |
417 | dp->plat_data.encoder = &dp->encoder; |
418 | |
419 | - dp->plat_data.dev_type = dp->data->chip_type; |
420 | - dp->plat_data.power_on_start = rockchip_dp_poweron_start; |
421 | - dp->plat_data.power_off = rockchip_dp_powerdown; |
422 | - dp->plat_data.get_modes = rockchip_dp_get_modes; |
423 | - |
424 | - dp->adp = analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data); |
425 | - if (IS_ERR(dp->adp)) { |
426 | - ret = PTR_ERR(dp->adp); |
427 | + ret = analogix_dp_bind(dp->adp, drm_dev); |
428 | + if (ret) |
429 | goto err_cleanup_encoder; |
430 | - } |
431 | |
432 | return 0; |
433 | err_cleanup_encoder: |
434 | @@ -368,8 +355,6 @@ static void rockchip_dp_unbind(struct device *dev, struct device *master, |
435 | |
436 | analogix_dp_unbind(dp->adp); |
437 | dp->encoder.funcs->destroy(&dp->encoder); |
438 | - |
439 | - dp->adp = ERR_PTR(-ENODEV); |
440 | } |
441 | |
442 | static const struct component_ops rockchip_dp_component_ops = { |
443 | @@ -380,10 +365,15 @@ static const struct component_ops rockchip_dp_component_ops = { |
444 | static int rockchip_dp_probe(struct platform_device *pdev) |
445 | { |
446 | struct device *dev = &pdev->dev; |
447 | + const struct rockchip_dp_chip_data *dp_data; |
448 | struct drm_panel *panel = NULL; |
449 | struct rockchip_dp_device *dp; |
450 | int ret; |
451 | |
452 | + dp_data = of_device_get_match_data(dev); |
453 | + if (!dp_data) |
454 | + return -ENODEV; |
455 | + |
456 | ret = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel, NULL); |
457 | if (ret < 0) |
458 | return ret; |
459 | @@ -394,7 +384,12 @@ static int rockchip_dp_probe(struct platform_device *pdev) |
460 | |
461 | dp->dev = dev; |
462 | dp->adp = ERR_PTR(-ENODEV); |
463 | + dp->data = dp_data; |
464 | dp->plat_data.panel = panel; |
465 | + dp->plat_data.dev_type = dp->data->chip_type; |
466 | + dp->plat_data.power_on_start = rockchip_dp_poweron_start; |
467 | + dp->plat_data.power_off = rockchip_dp_powerdown; |
468 | + dp->plat_data.get_modes = rockchip_dp_get_modes; |
469 | |
470 | ret = rockchip_dp_of_probe(dp); |
471 | if (ret < 0) |
472 | @@ -402,12 +397,19 @@ static int rockchip_dp_probe(struct platform_device *pdev) |
473 | |
474 | platform_set_drvdata(pdev, dp); |
475 | |
476 | + dp->adp = analogix_dp_probe(dev, &dp->plat_data); |
477 | + if (IS_ERR(dp->adp)) |
478 | + return PTR_ERR(dp->adp); |
479 | + |
480 | return component_add(dev, &rockchip_dp_component_ops); |
481 | } |
482 | |
483 | static int rockchip_dp_remove(struct platform_device *pdev) |
484 | { |
485 | + struct rockchip_dp_device *dp = platform_get_drvdata(pdev); |
486 | + |
487 | component_del(&pdev->dev, &rockchip_dp_component_ops); |
488 | + analogix_dp_remove(dp->adp); |
489 | |
490 | return 0; |
491 | } |
492 | diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c |
493 | index bfe4ff337581..b0f0781a6b9c 100644 |
494 | --- a/drivers/mfd/intel-lpss.c |
495 | +++ b/drivers/mfd/intel-lpss.c |
496 | @@ -384,7 +384,7 @@ int intel_lpss_probe(struct device *dev, |
497 | if (!lpss) |
498 | return -ENOMEM; |
499 | |
500 | - lpss->priv = devm_ioremap(dev, info->mem->start + LPSS_PRIV_OFFSET, |
501 | + lpss->priv = devm_ioremap_uc(dev, info->mem->start + LPSS_PRIV_OFFSET, |
502 | LPSS_PRIV_SIZE); |
503 | if (!lpss->priv) |
504 | return -ENOMEM; |
505 | diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c |
506 | index ad86a186ddc5..4dfdb5a58025 100644 |
507 | --- a/drivers/net/ethernet/broadcom/bcmsysport.c |
508 | +++ b/drivers/net/ethernet/broadcom/bcmsysport.c |
509 | @@ -666,7 +666,8 @@ static struct sk_buff *bcm_sysport_rx_refill(struct bcm_sysport_priv *priv, |
510 | dma_addr_t mapping; |
511 | |
512 | /* Allocate a new SKB for a new packet */ |
513 | - skb = netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH); |
514 | + skb = __netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH, |
515 | + GFP_ATOMIC | __GFP_NOWARN); |
516 | if (!skb) { |
517 | priv->mib.alloc_rx_buff_failed++; |
518 | netif_err(priv, rx_err, ndev, "SKB alloc failed\n"); |
519 | diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
520 | index ff09ee777b2b..6f01f4e03cef 100644 |
521 | --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
522 | +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
523 | @@ -1697,7 +1697,8 @@ static struct sk_buff *bcmgenet_rx_refill(struct bcmgenet_priv *priv, |
524 | dma_addr_t mapping; |
525 | |
526 | /* Allocate a new Rx skb */ |
527 | - skb = netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT); |
528 | + skb = __netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT, |
529 | + GFP_ATOMIC | __GFP_NOWARN); |
530 | if (!skb) { |
531 | priv->mib.alloc_rx_buff_failed++; |
532 | netif_err(priv, rx_err, priv->dev, |
533 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c |
534 | index fa32cd5b418e..70d41783329d 100644 |
535 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c |
536 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c |
537 | @@ -291,16 +291,19 @@ static int socfpga_gen5_set_phy_mode(struct socfpga_dwmac *dwmac) |
538 | phymode == PHY_INTERFACE_MODE_MII || |
539 | phymode == PHY_INTERFACE_MODE_GMII || |
540 | phymode == PHY_INTERFACE_MODE_SGMII) { |
541 | - ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2); |
542 | regmap_read(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG, |
543 | &module); |
544 | module |= (SYSMGR_FPGAGRP_MODULE_EMAC << (reg_shift / 2)); |
545 | regmap_write(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG, |
546 | module); |
547 | - } else { |
548 | - ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2)); |
549 | } |
550 | |
551 | + if (dwmac->f2h_ptp_ref_clk) |
552 | + ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2); |
553 | + else |
554 | + ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << |
555 | + (reg_shift / 2)); |
556 | + |
557 | regmap_write(sys_mgr_base_addr, reg_offset, ctrl); |
558 | |
559 | /* Deassert reset for the phy configuration to be sampled by |
560 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c |
561 | index 020159622559..e5d9007c8090 100644 |
562 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c |
563 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c |
564 | @@ -26,12 +26,16 @@ static void config_sub_second_increment(void __iomem *ioaddr, |
565 | unsigned long data; |
566 | u32 reg_value; |
567 | |
568 | - /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second |
569 | - * formula = (1/ptp_clock) * 1000000000 |
570 | - * where ptp_clock is 50MHz if fine method is used to update system |
571 | + /* For GMAC3.x, 4.x versions, in "fine adjustement mode" set sub-second |
572 | + * increment to twice the number of nanoseconds of a clock cycle. |
573 | + * The calculation of the default_addend value by the caller will set it |
574 | + * to mid-range = 2^31 when the remainder of this division is zero, |
575 | + * which will make the accumulator overflow once every 2 ptp_clock |
576 | + * cycles, adding twice the number of nanoseconds of a clock cycle : |
577 | + * 2000000000ULL / ptp_clock. |
578 | */ |
579 | if (value & PTP_TCR_TSCFUPDT) |
580 | - data = (1000000000ULL / 50000000); |
581 | + data = (2000000000ULL / ptp_clock); |
582 | else |
583 | data = (1000000000ULL / ptp_clock); |
584 | |
585 | diff --git a/drivers/net/wimax/i2400m/usb-fw.c b/drivers/net/wimax/i2400m/usb-fw.c |
586 | index 529ebca1e9e1..1f7709d24f35 100644 |
587 | --- a/drivers/net/wimax/i2400m/usb-fw.c |
588 | +++ b/drivers/net/wimax/i2400m/usb-fw.c |
589 | @@ -354,6 +354,7 @@ out: |
590 | usb_autopm_put_interface(i2400mu->usb_iface); |
591 | d_fnend(8, dev, "(i2400m %p ack %p size %zu) = %ld\n", |
592 | i2400m, ack, ack_size, (long) result); |
593 | + usb_put_urb(¬if_urb); |
594 | return result; |
595 | |
596 | error_exceeded: |
597 | diff --git a/drivers/platform/x86/gpd-pocket-fan.c b/drivers/platform/x86/gpd-pocket-fan.c |
598 | index b471b86c28fe..5b516e4c2bfb 100644 |
599 | --- a/drivers/platform/x86/gpd-pocket-fan.c |
600 | +++ b/drivers/platform/x86/gpd-pocket-fan.c |
601 | @@ -128,7 +128,7 @@ static int gpd_pocket_fan_probe(struct platform_device *pdev) |
602 | |
603 | for (i = 0; i < ARRAY_SIZE(temp_limits); i++) { |
604 | if (temp_limits[i] < 20000 || temp_limits[i] > 90000) { |
605 | - dev_err(&pdev->dev, "Invalid temp-limit %d (must be between 40000 and 70000)\n", |
606 | + dev_err(&pdev->dev, "Invalid temp-limit %d (must be between 20000 and 90000)\n", |
607 | temp_limits[i]); |
608 | temp_limits[0] = TEMP_LIMIT0_DEFAULT; |
609 | temp_limits[1] = TEMP_LIMIT1_DEFAULT; |
610 | diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c |
611 | index 783d00131a2a..6ba065d5c4d9 100644 |
612 | --- a/drivers/remoteproc/qcom_q6v5_mss.c |
613 | +++ b/drivers/remoteproc/qcom_q6v5_mss.c |
614 | @@ -1440,7 +1440,7 @@ static int q6v5_probe(struct platform_device *pdev) |
615 | ret = of_property_read_string_index(pdev->dev.of_node, "firmware-name", |
616 | 1, &qproc->hexagon_mdt_image); |
617 | if (ret < 0 && ret != -EINVAL) |
618 | - return ret; |
619 | + goto free_rproc; |
620 | |
621 | platform_set_drvdata(pdev, qproc); |
622 | |
623 | diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h |
624 | index 3ecc69c5b150..ce4acbf7fef9 100644 |
625 | --- a/drivers/usb/dwc3/core.h |
626 | +++ b/drivers/usb/dwc3/core.h |
627 | @@ -310,6 +310,10 @@ |
628 | #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) |
629 | #define DWC3_GTXFIFOSIZ_TXFSTADDR(n) ((n) & 0xffff0000) |
630 | |
631 | +/* Global RX Fifo Size Register */ |
632 | +#define DWC31_GRXFIFOSIZ_RXFDEP(n) ((n) & 0x7fff) /* DWC_usb31 only */ |
633 | +#define DWC3_GRXFIFOSIZ_RXFDEP(n) ((n) & 0xffff) |
634 | + |
635 | /* Global Event Size Registers */ |
636 | #define DWC3_GEVNTSIZ_INTMASK BIT(31) |
637 | #define DWC3_GEVNTSIZ_SIZE(n) ((n) & 0xffff) |
638 | diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
639 | index 379f978db13d..3d30dec42c81 100644 |
640 | --- a/drivers/usb/dwc3/gadget.c |
641 | +++ b/drivers/usb/dwc3/gadget.c |
642 | @@ -2220,7 +2220,6 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) |
643 | { |
644 | struct dwc3 *dwc = dep->dwc; |
645 | int mdwidth; |
646 | - int kbytes; |
647 | int size; |
648 | |
649 | mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); |
650 | @@ -2236,17 +2235,17 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) |
651 | /* FIFO Depth is in MDWDITH bytes. Multiply */ |
652 | size *= mdwidth; |
653 | |
654 | - kbytes = size / 1024; |
655 | - if (kbytes == 0) |
656 | - kbytes = 1; |
657 | - |
658 | /* |
659 | - * FIFO sizes account an extra MDWIDTH * (kbytes + 1) bytes for |
660 | - * internal overhead. We don't really know how these are used, |
661 | - * but documentation say it exists. |
662 | + * To meet performance requirement, a minimum TxFIFO size of 3x |
663 | + * MaxPacketSize is recommended for endpoints that support burst and a |
664 | + * minimum TxFIFO size of 2x MaxPacketSize for endpoints that don't |
665 | + * support burst. Use those numbers and we can calculate the max packet |
666 | + * limit as below. |
667 | */ |
668 | - size -= mdwidth * (kbytes + 1); |
669 | - size /= kbytes; |
670 | + if (dwc->maximum_speed >= USB_SPEED_SUPER) |
671 | + size /= 3; |
672 | + else |
673 | + size /= 2; |
674 | |
675 | usb_ep_set_maxpacket_limit(&dep->endpoint, size); |
676 | |
677 | @@ -2264,8 +2263,39 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) |
678 | static int dwc3_gadget_init_out_endpoint(struct dwc3_ep *dep) |
679 | { |
680 | struct dwc3 *dwc = dep->dwc; |
681 | + int mdwidth; |
682 | + int size; |
683 | + |
684 | + mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); |
685 | + |
686 | + /* MDWIDTH is represented in bits, convert to bytes */ |
687 | + mdwidth /= 8; |
688 | |
689 | - usb_ep_set_maxpacket_limit(&dep->endpoint, 1024); |
690 | + /* All OUT endpoints share a single RxFIFO space */ |
691 | + size = dwc3_readl(dwc->regs, DWC3_GRXFIFOSIZ(0)); |
692 | + if (dwc3_is_usb31(dwc)) |
693 | + size = DWC31_GRXFIFOSIZ_RXFDEP(size); |
694 | + else |
695 | + size = DWC3_GRXFIFOSIZ_RXFDEP(size); |
696 | + |
697 | + /* FIFO depth is in MDWDITH bytes */ |
698 | + size *= mdwidth; |
699 | + |
700 | + /* |
701 | + * To meet performance requirement, a minimum recommended RxFIFO size |
702 | + * is defined as follow: |
703 | + * RxFIFO size >= (3 x MaxPacketSize) + |
704 | + * (3 x 8 bytes setup packets size) + (16 bytes clock crossing margin) |
705 | + * |
706 | + * Then calculate the max packet limit as below. |
707 | + */ |
708 | + size -= (3 * 8) + 16; |
709 | + if (size < 0) |
710 | + size = 0; |
711 | + else |
712 | + size /= 3; |
713 | + |
714 | + usb_ep_set_maxpacket_limit(&dep->endpoint, size); |
715 | dep->endpoint.max_streams = 15; |
716 | dep->endpoint.ops = &dwc3_gadget_ep_ops; |
717 | list_add_tail(&dep->endpoint.ep_list, |
718 | diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c |
719 | index 88a5aa6624b4..6c089f655707 100644 |
720 | --- a/drivers/vhost/vsock.c |
721 | +++ b/drivers/vhost/vsock.c |
722 | @@ -500,6 +500,11 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) |
723 | mutex_unlock(&vq->mutex); |
724 | } |
725 | |
726 | + /* Some packets may have been queued before the device was started, |
727 | + * let's kick the send worker to send them. |
728 | + */ |
729 | + vhost_work_queue(&vsock->dev, &vsock->send_pkt_work); |
730 | + |
731 | mutex_unlock(&vsock->dev.mutex); |
732 | return 0; |
733 | |
734 | diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c |
735 | index bcda48c03882..721b2560caa7 100644 |
736 | --- a/fs/cifs/connect.c |
737 | +++ b/fs/cifs/connect.c |
738 | @@ -371,8 +371,10 @@ static int reconn_set_ipaddr(struct TCP_Server_Info *server) |
739 | return rc; |
740 | } |
741 | |
742 | + spin_lock(&cifs_tcp_ses_lock); |
743 | rc = cifs_convert_address((struct sockaddr *)&server->dstaddr, ipaddr, |
744 | strlen(ipaddr)); |
745 | + spin_unlock(&cifs_tcp_ses_lock); |
746 | kfree(ipaddr); |
747 | |
748 | return !rc ? -1 : 0; |
749 | @@ -3360,6 +3362,10 @@ cifs_find_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) |
750 | spin_lock(&cifs_tcp_ses_lock); |
751 | list_for_each(tmp, &ses->tcon_list) { |
752 | tcon = list_entry(tmp, struct cifs_tcon, tcon_list); |
753 | +#ifdef CONFIG_CIFS_DFS_UPCALL |
754 | + if (tcon->dfs_path) |
755 | + continue; |
756 | +#endif |
757 | if (!match_tcon(tcon, volume_info)) |
758 | continue; |
759 | ++tcon->tc_count; |
760 | diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix_dp.h |
761 | index 7aa2f93da49c..b0dcc07334a1 100644 |
762 | --- a/include/drm/bridge/analogix_dp.h |
763 | +++ b/include/drm/bridge/analogix_dp.h |
764 | @@ -42,9 +42,10 @@ int analogix_dp_resume(struct analogix_dp_device *dp); |
765 | int analogix_dp_suspend(struct analogix_dp_device *dp); |
766 | |
767 | struct analogix_dp_device * |
768 | -analogix_dp_bind(struct device *dev, struct drm_device *drm_dev, |
769 | - struct analogix_dp_plat_data *plat_data); |
770 | +analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data); |
771 | +int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev); |
772 | void analogix_dp_unbind(struct analogix_dp_device *dp); |
773 | +void analogix_dp_remove(struct analogix_dp_device *dp); |
774 | |
775 | int analogix_dp_start_crc(struct drm_connector *connector); |
776 | int analogix_dp_stop_crc(struct drm_connector *connector); |
777 | diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h |
778 | index 73c66a3a33ae..7f3486e32e5d 100644 |
779 | --- a/include/linux/ieee80211.h |
780 | +++ b/include/linux/ieee80211.h |
781 | @@ -619,6 +619,15 @@ static inline bool ieee80211_is_qos_nullfunc(__le16 fc) |
782 | cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC); |
783 | } |
784 | |
785 | +/** |
786 | + * ieee80211_is_any_nullfunc - check if frame is regular or QoS nullfunc frame |
787 | + * @fc: frame control bytes in little-endian byteorder |
788 | + */ |
789 | +static inline bool ieee80211_is_any_nullfunc(__le16 fc) |
790 | +{ |
791 | + return (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)); |
792 | +} |
793 | + |
794 | /** |
795 | * ieee80211_is_bufferable_mmpdu - check if frame is bufferable MMPDU |
796 | * @fc: frame control field in little-endian byteorder |
797 | diff --git a/include/linux/io.h b/include/linux/io.h |
798 | index accac822336a..a59834bc0a11 100644 |
799 | --- a/include/linux/io.h |
800 | +++ b/include/linux/io.h |
801 | @@ -64,6 +64,8 @@ static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr) |
802 | |
803 | void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, |
804 | resource_size_t size); |
805 | +void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset, |
806 | + resource_size_t size); |
807 | void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset, |
808 | resource_size_t size); |
809 | void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset, |
810 | diff --git a/include/net/udp.h b/include/net/udp.h |
811 | index 8f163d674f07..fabf507bce5d 100644 |
812 | --- a/include/net/udp.h |
813 | +++ b/include/net/udp.h |
814 | @@ -476,6 +476,13 @@ static inline struct sk_buff *udp_rcv_segment(struct sock *sk, |
815 | if (!inet_get_convert_csum(sk)) |
816 | features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; |
817 | |
818 | + /* UDP segmentation expects packets of type CHECKSUM_PARTIAL or |
819 | + * CHECKSUM_NONE in __udp_gso_segment. UDP GRO indeed builds partial |
820 | + * packets in udp_gro_complete_segment. As does UDP GSO, verified by |
821 | + * udp_send_skb. But when those packets are looped in dev_loopback_xmit |
822 | + * their ip_summed is set to CHECKSUM_UNNECESSARY. Reset in this |
823 | + * specific case, where PARTIAL is both correct and required. |
824 | + */ |
825 | if (skb->pkt_type == PACKET_LOOPBACK) |
826 | skb->ip_summed = CHECKSUM_PARTIAL; |
827 | |
828 | diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c |
829 | index 6495800fb92a..8107574e8af9 100644 |
830 | --- a/kernel/trace/trace_events_hist.c |
831 | +++ b/kernel/trace/trace_events_hist.c |
832 | @@ -2466,6 +2466,9 @@ static void __destroy_hist_field(struct hist_field *hist_field) |
833 | kfree(hist_field->name); |
834 | kfree(hist_field->type); |
835 | |
836 | + kfree(hist_field->system); |
837 | + kfree(hist_field->event_name); |
838 | + |
839 | kfree(hist_field); |
840 | } |
841 | |
842 | @@ -3528,6 +3531,7 @@ static struct hist_field *create_var(struct hist_trigger_data *hist_data, |
843 | goto out; |
844 | } |
845 | |
846 | + var->ref = 1; |
847 | var->flags = HIST_FIELD_FL_VAR; |
848 | var->var.idx = idx; |
849 | var->var.hist_data = var->hist_data = hist_data; |
850 | @@ -4157,6 +4161,9 @@ static void destroy_field_vars(struct hist_trigger_data *hist_data) |
851 | |
852 | for (i = 0; i < hist_data->n_field_vars; i++) |
853 | destroy_field_var(hist_data->field_vars[i]); |
854 | + |
855 | + for (i = 0; i < hist_data->n_save_vars; i++) |
856 | + destroy_field_var(hist_data->save_vars[i]); |
857 | } |
858 | |
859 | static void save_field_var(struct hist_trigger_data *hist_data, |
860 | diff --git a/lib/devres.c b/lib/devres.c |
861 | index 6a0e9bd6524a..17624d35e82d 100644 |
862 | --- a/lib/devres.c |
863 | +++ b/lib/devres.c |
864 | @@ -9,6 +9,7 @@ |
865 | enum devm_ioremap_type { |
866 | DEVM_IOREMAP = 0, |
867 | DEVM_IOREMAP_NC, |
868 | + DEVM_IOREMAP_UC, |
869 | DEVM_IOREMAP_WC, |
870 | }; |
871 | |
872 | @@ -39,6 +40,9 @@ static void __iomem *__devm_ioremap(struct device *dev, resource_size_t offset, |
873 | case DEVM_IOREMAP_NC: |
874 | addr = ioremap_nocache(offset, size); |
875 | break; |
876 | + case DEVM_IOREMAP_UC: |
877 | + addr = ioremap_uc(offset, size); |
878 | + break; |
879 | case DEVM_IOREMAP_WC: |
880 | addr = ioremap_wc(offset, size); |
881 | break; |
882 | @@ -68,6 +72,21 @@ void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, |
883 | } |
884 | EXPORT_SYMBOL(devm_ioremap); |
885 | |
886 | +/** |
887 | + * devm_ioremap_uc - Managed ioremap_uc() |
888 | + * @dev: Generic device to remap IO address for |
889 | + * @offset: Resource address to map |
890 | + * @size: Size of map |
891 | + * |
892 | + * Managed ioremap_uc(). Map is automatically unmapped on driver detach. |
893 | + */ |
894 | +void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset, |
895 | + resource_size_t size) |
896 | +{ |
897 | + return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_UC); |
898 | +} |
899 | +EXPORT_SYMBOL_GPL(devm_ioremap_uc); |
900 | + |
901 | /** |
902 | * devm_ioremap_nocache - Managed ioremap_nocache() |
903 | * @dev: Generic device to remap IO address for |
904 | diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h |
905 | index 2dceaca27489..891e1c3549c4 100644 |
906 | --- a/lib/mpi/longlong.h |
907 | +++ b/lib/mpi/longlong.h |
908 | @@ -722,22 +722,22 @@ do { \ |
909 | do { \ |
910 | if (__builtin_constant_p(bh) && (bh) == 0) \ |
911 | __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ |
912 | - : "=r" ((USItype)(sh)), \ |
913 | - "=&r" ((USItype)(sl)) \ |
914 | + : "=r" (sh), \ |
915 | + "=&r" (sl) \ |
916 | : "%r" ((USItype)(ah)), \ |
917 | "%r" ((USItype)(al)), \ |
918 | "rI" ((USItype)(bl))); \ |
919 | else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \ |
920 | __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ |
921 | - : "=r" ((USItype)(sh)), \ |
922 | - "=&r" ((USItype)(sl)) \ |
923 | + : "=r" (sh), \ |
924 | + "=&r" (sl) \ |
925 | : "%r" ((USItype)(ah)), \ |
926 | "%r" ((USItype)(al)), \ |
927 | "rI" ((USItype)(bl))); \ |
928 | else \ |
929 | __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ |
930 | - : "=r" ((USItype)(sh)), \ |
931 | - "=&r" ((USItype)(sl)) \ |
932 | + : "=r" (sh), \ |
933 | + "=&r" (sl) \ |
934 | : "%r" ((USItype)(ah)), \ |
935 | "r" ((USItype)(bh)), \ |
936 | "%r" ((USItype)(al)), \ |
937 | @@ -747,36 +747,36 @@ do { \ |
938 | do { \ |
939 | if (__builtin_constant_p(ah) && (ah) == 0) \ |
940 | __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ |
941 | - : "=r" ((USItype)(sh)), \ |
942 | - "=&r" ((USItype)(sl)) \ |
943 | + : "=r" (sh), \ |
944 | + "=&r" (sl) \ |
945 | : "r" ((USItype)(bh)), \ |
946 | "rI" ((USItype)(al)), \ |
947 | "r" ((USItype)(bl))); \ |
948 | else if (__builtin_constant_p(ah) && (ah) == ~(USItype) 0) \ |
949 | __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ |
950 | - : "=r" ((USItype)(sh)), \ |
951 | - "=&r" ((USItype)(sl)) \ |
952 | + : "=r" (sh), \ |
953 | + "=&r" (sl) \ |
954 | : "r" ((USItype)(bh)), \ |
955 | "rI" ((USItype)(al)), \ |
956 | "r" ((USItype)(bl))); \ |
957 | else if (__builtin_constant_p(bh) && (bh) == 0) \ |
958 | __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ |
959 | - : "=r" ((USItype)(sh)), \ |
960 | - "=&r" ((USItype)(sl)) \ |
961 | + : "=r" (sh), \ |
962 | + "=&r" (sl) \ |
963 | : "r" ((USItype)(ah)), \ |
964 | "rI" ((USItype)(al)), \ |
965 | "r" ((USItype)(bl))); \ |
966 | else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \ |
967 | __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ |
968 | - : "=r" ((USItype)(sh)), \ |
969 | - "=&r" ((USItype)(sl)) \ |
970 | + : "=r" (sh), \ |
971 | + "=&r" (sl) \ |
972 | : "r" ((USItype)(ah)), \ |
973 | "rI" ((USItype)(al)), \ |
974 | "r" ((USItype)(bl))); \ |
975 | else \ |
976 | __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ |
977 | - : "=r" ((USItype)(sh)), \ |
978 | - "=&r" ((USItype)(sl)) \ |
979 | + : "=r" (sh), \ |
980 | + "=&r" (sl) \ |
981 | : "r" ((USItype)(ah)), \ |
982 | "r" ((USItype)(bh)), \ |
983 | "rI" ((USItype)(al)), \ |
984 | @@ -787,7 +787,7 @@ do { \ |
985 | do { \ |
986 | USItype __m0 = (m0), __m1 = (m1); \ |
987 | __asm__ ("mulhwu %0,%1,%2" \ |
988 | - : "=r" ((USItype) ph) \ |
989 | + : "=r" (ph) \ |
990 | : "%r" (__m0), \ |
991 | "r" (__m1)); \ |
992 | (pl) = __m0 * __m1; \ |
993 | diff --git a/mm/mremap.c b/mm/mremap.c |
994 | index 1d98281f7204..245bf9c555b2 100644 |
995 | --- a/mm/mremap.c |
996 | +++ b/mm/mremap.c |
997 | @@ -606,6 +606,16 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, |
998 | LIST_HEAD(uf_unmap_early); |
999 | LIST_HEAD(uf_unmap); |
1000 | |
1001 | + /* |
1002 | + * There is a deliberate asymmetry here: we strip the pointer tag |
1003 | + * from the old address but leave the new address alone. This is |
1004 | + * for consistency with mmap(), where we prevent the creation of |
1005 | + * aliasing mappings in userspace by leaving the tag bits of the |
1006 | + * mapping address intact. A non-zero tag will cause the subsequent |
1007 | + * range checks to reject the address as invalid. |
1008 | + * |
1009 | + * See Documentation/arm64/tagged-address-abi.rst for more information. |
1010 | + */ |
1011 | addr = untagged_addr(addr); |
1012 | |
1013 | if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE)) |
1014 | diff --git a/net/core/netclassid_cgroup.c b/net/core/netclassid_cgroup.c |
1015 | index b4c87fe31be2..41b24cd31562 100644 |
1016 | --- a/net/core/netclassid_cgroup.c |
1017 | +++ b/net/core/netclassid_cgroup.c |
1018 | @@ -127,10 +127,8 @@ static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft, |
1019 | cs->classid = (u32)value; |
1020 | |
1021 | css_task_iter_start(css, 0, &it); |
1022 | - while ((p = css_task_iter_next(&it))) { |
1023 | + while ((p = css_task_iter_next(&it))) |
1024 | update_classid_task(p, cs->classid); |
1025 | - cond_resched(); |
1026 | - } |
1027 | css_task_iter_end(&it); |
1028 | |
1029 | return 0; |
1030 | diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c |
1031 | index c7d8044ff0fa..17a3a1c938be 100644 |
1032 | --- a/net/mac80211/mlme.c |
1033 | +++ b/net/mac80211/mlme.c |
1034 | @@ -2460,7 +2460,7 @@ void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata, |
1035 | if (!ieee80211_is_data(hdr->frame_control)) |
1036 | return; |
1037 | |
1038 | - if (ieee80211_is_nullfunc(hdr->frame_control) && |
1039 | + if (ieee80211_is_any_nullfunc(hdr->frame_control) && |
1040 | sdata->u.mgd.probe_send_count > 0) { |
1041 | if (ack) |
1042 | ieee80211_sta_reset_conn_monitor(sdata); |
1043 | diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c |
1044 | index 0ba98ad9bc85..69429c8df7b3 100644 |
1045 | --- a/net/mac80211/rx.c |
1046 | +++ b/net/mac80211/rx.c |
1047 | @@ -1450,8 +1450,7 @@ ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx) |
1048 | return RX_CONTINUE; |
1049 | |
1050 | if (ieee80211_is_ctl(hdr->frame_control) || |
1051 | - ieee80211_is_nullfunc(hdr->frame_control) || |
1052 | - ieee80211_is_qos_nullfunc(hdr->frame_control) || |
1053 | + ieee80211_is_any_nullfunc(hdr->frame_control) || |
1054 | is_multicast_ether_addr(hdr->addr1)) |
1055 | return RX_CONTINUE; |
1056 | |
1057 | @@ -1838,8 +1837,7 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) |
1058 | * Drop (qos-)data::nullfunc frames silently, since they |
1059 | * are used only to control station power saving mode. |
1060 | */ |
1061 | - if (ieee80211_is_nullfunc(hdr->frame_control) || |
1062 | - ieee80211_is_qos_nullfunc(hdr->frame_control)) { |
1063 | + if (ieee80211_is_any_nullfunc(hdr->frame_control)) { |
1064 | I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); |
1065 | |
1066 | /* |
1067 | @@ -2319,7 +2317,7 @@ static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc) |
1068 | |
1069 | /* Drop unencrypted frames if key is set. */ |
1070 | if (unlikely(!ieee80211_has_protected(fc) && |
1071 | - !ieee80211_is_nullfunc(fc) && |
1072 | + !ieee80211_is_any_nullfunc(fc) && |
1073 | ieee80211_is_data(fc) && rx->key)) |
1074 | return -EACCES; |
1075 | |
1076 | diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c |
1077 | index 21b1422b1b1c..b1669f024470 100644 |
1078 | --- a/net/mac80211/sta_info.c |
1079 | +++ b/net/mac80211/sta_info.c |
1080 | @@ -217,7 +217,8 @@ struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, |
1081 | struct sta_info *sta; |
1082 | int i = 0; |
1083 | |
1084 | - list_for_each_entry_rcu(sta, &local->sta_list, list) { |
1085 | + list_for_each_entry_rcu(sta, &local->sta_list, list, |
1086 | + lockdep_is_held(&local->sta_mtx)) { |
1087 | if (sdata != sta->sdata) |
1088 | continue; |
1089 | if (i < idx) { |
1090 | diff --git a/net/mac80211/status.c b/net/mac80211/status.c |
1091 | index 5a3d645fe1bc..c56831797655 100644 |
1092 | --- a/net/mac80211/status.c |
1093 | +++ b/net/mac80211/status.c |
1094 | @@ -643,8 +643,7 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local, |
1095 | rcu_read_lock(); |
1096 | sdata = ieee80211_sdata_from_skb(local, skb); |
1097 | if (sdata) { |
1098 | - if (ieee80211_is_nullfunc(hdr->frame_control) || |
1099 | - ieee80211_is_qos_nullfunc(hdr->frame_control)) |
1100 | + if (ieee80211_is_any_nullfunc(hdr->frame_control)) |
1101 | cfg80211_probe_status(sdata->dev, hdr->addr1, |
1102 | cookie, acked, |
1103 | info->status.ack_signal, |
1104 | @@ -1030,7 +1029,7 @@ static void __ieee80211_tx_status(struct ieee80211_hw *hw, |
1105 | I802_DEBUG_INC(local->dot11FailedCount); |
1106 | } |
1107 | |
1108 | - if ((ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) && |
1109 | + if (ieee80211_is_any_nullfunc(fc) && |
1110 | ieee80211_has_pm(fc) && |
1111 | ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS) && |
1112 | !(info->flags & IEEE80211_TX_CTL_INJECTED) && |
1113 | diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c |
1114 | index 41da41cb5c40..30201aeb426c 100644 |
1115 | --- a/net/mac80211/tx.c |
1116 | +++ b/net/mac80211/tx.c |
1117 | @@ -297,7 +297,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx) |
1118 | if (unlikely(test_bit(SCAN_SW_SCANNING, &tx->local->scanning)) && |
1119 | test_bit(SDATA_STATE_OFFCHANNEL, &tx->sdata->state) && |
1120 | !ieee80211_is_probe_req(hdr->frame_control) && |
1121 | - !ieee80211_is_nullfunc(hdr->frame_control)) |
1122 | + !ieee80211_is_any_nullfunc(hdr->frame_control)) |
1123 | /* |
1124 | * When software scanning only nullfunc frames (to notify |
1125 | * the sleep state to the AP) and probe requests (for the |
1126 | diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c |
1127 | index 48d63956a68c..d5eda966a706 100644 |
1128 | --- a/net/sctp/sm_make_chunk.c |
1129 | +++ b/net/sctp/sm_make_chunk.c |
1130 | @@ -858,7 +858,11 @@ struct sctp_chunk *sctp_make_shutdown(const struct sctp_association *asoc, |
1131 | struct sctp_chunk *retval; |
1132 | __u32 ctsn; |
1133 | |
1134 | - ctsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map); |
1135 | + if (chunk && chunk->asoc) |
1136 | + ctsn = sctp_tsnmap_get_ctsn(&chunk->asoc->peer.tsn_map); |
1137 | + else |
1138 | + ctsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map); |
1139 | + |
1140 | shut.cum_tsn_ack = htonl(ctsn); |
1141 | |
1142 | retval = sctp_make_control(asoc, SCTP_CID_SHUTDOWN, 0, |
1143 | diff --git a/scripts/config b/scripts/config |
1144 | index e0e39826dae9..eee5b7f3a092 100755 |
1145 | --- a/scripts/config |
1146 | +++ b/scripts/config |
1147 | @@ -7,6 +7,9 @@ myname=${0##*/} |
1148 | # If no prefix forced, use the default CONFIG_ |
1149 | CONFIG_="${CONFIG_-CONFIG_}" |
1150 | |
1151 | +# We use an uncommon delimiter for sed substitutions |
1152 | +SED_DELIM=$(echo -en "\001") |
1153 | + |
1154 | usage() { |
1155 | cat >&2 <<EOL |
1156 | Manipulate options in a .config file from the command line. |
1157 | @@ -83,7 +86,7 @@ txt_subst() { |
1158 | local infile="$3" |
1159 | local tmpfile="$infile.swp" |
1160 | |
1161 | - sed -e "s:$before:$after:" "$infile" >"$tmpfile" |
1162 | + sed -e "s$SED_DELIM$before$SED_DELIM$after$SED_DELIM" "$infile" >"$tmpfile" |
1163 | # replace original file with the edited one |
1164 | mv "$tmpfile" "$infile" |
1165 | } |
1166 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c |
1167 | index 1673479b4eef..612441508e80 100644 |
1168 | --- a/sound/pci/hda/hda_intel.c |
1169 | +++ b/sound/pci/hda/hda_intel.c |
1170 | @@ -2023,9 +2023,10 @@ static void pcm_mmap_prepare(struct snd_pcm_substream *substream, |
1171 | * some HD-audio PCI entries are exposed without any codecs, and such devices |
1172 | * should be ignored from the beginning. |
1173 | */ |
1174 | -static const struct snd_pci_quirk driver_blacklist[] = { |
1175 | - SND_PCI_QUIRK(0x1462, 0xcb59, "MSI TRX40 Creator", 0), |
1176 | - SND_PCI_QUIRK(0x1462, 0xcb60, "MSI TRX40", 0), |
1177 | +static const struct pci_device_id driver_blacklist[] = { |
1178 | + { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1043, 0x874f) }, /* ASUS ROG Zenith II / Strix */ |
1179 | + { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb59) }, /* MSI TRX40 Creator */ |
1180 | + { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb60) }, /* MSI TRX40 */ |
1181 | {} |
1182 | }; |
1183 | |
1184 | @@ -2064,7 +2065,7 @@ static int azx_probe(struct pci_dev *pci, |
1185 | bool schedule_probe; |
1186 | int err; |
1187 | |
1188 | - if (snd_pci_quirk_lookup(pci, driver_blacklist)) { |
1189 | + if (pci_match_id(driver_blacklist, pci)) { |
1190 | dev_info(&pci->dev, "Skipping the blacklisted device\n"); |
1191 | return -ENODEV; |
1192 | } |
1193 | diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c |
1194 | index 18c173e6a13b..78d5b4d31bb6 100644 |
1195 | --- a/sound/soc/codecs/hdac_hdmi.c |
1196 | +++ b/sound/soc/codecs/hdac_hdmi.c |
1197 | @@ -150,14 +150,14 @@ static struct hdac_hdmi_pcm * |
1198 | hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi, |
1199 | struct hdac_hdmi_cvt *cvt) |
1200 | { |
1201 | - struct hdac_hdmi_pcm *pcm = NULL; |
1202 | + struct hdac_hdmi_pcm *pcm; |
1203 | |
1204 | list_for_each_entry(pcm, &hdmi->pcm_list, head) { |
1205 | if (pcm->cvt == cvt) |
1206 | - break; |
1207 | + return pcm; |
1208 | } |
1209 | |
1210 | - return pcm; |
1211 | + return NULL; |
1212 | } |
1213 | |
1214 | static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm, |
1215 | diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c |
1216 | index e949b372cead..f5b59305c957 100644 |
1217 | --- a/sound/soc/codecs/sgtl5000.c |
1218 | +++ b/sound/soc/codecs/sgtl5000.c |
1219 | @@ -1645,6 +1645,40 @@ static int sgtl5000_i2c_probe(struct i2c_client *client, |
1220 | dev_err(&client->dev, |
1221 | "Error %d initializing CHIP_CLK_CTRL\n", ret); |
1222 | |
1223 | + /* Mute everything to avoid pop from the following power-up */ |
1224 | + ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_CTRL, |
1225 | + SGTL5000_CHIP_ANA_CTRL_DEFAULT); |
1226 | + if (ret) { |
1227 | + dev_err(&client->dev, |
1228 | + "Error %d muting outputs via CHIP_ANA_CTRL\n", ret); |
1229 | + goto disable_clk; |
1230 | + } |
1231 | + |
1232 | + /* |
1233 | + * If VAG is powered-on (e.g. from previous boot), it would be disabled |
1234 | + * by the write to ANA_POWER in later steps of the probe code. This |
1235 | + * may create a loud pop even with all outputs muted. The proper way |
1236 | + * to circumvent this is disabling the bit first and waiting the proper |
1237 | + * cool-down time. |
1238 | + */ |
1239 | + ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, &value); |
1240 | + if (ret) { |
1241 | + dev_err(&client->dev, "Failed to read ANA_POWER: %d\n", ret); |
1242 | + goto disable_clk; |
1243 | + } |
1244 | + if (value & SGTL5000_VAG_POWERUP) { |
1245 | + ret = regmap_update_bits(sgtl5000->regmap, |
1246 | + SGTL5000_CHIP_ANA_POWER, |
1247 | + SGTL5000_VAG_POWERUP, |
1248 | + 0); |
1249 | + if (ret) { |
1250 | + dev_err(&client->dev, "Error %d disabling VAG\n", ret); |
1251 | + goto disable_clk; |
1252 | + } |
1253 | + |
1254 | + msleep(SGTL5000_VAG_POWERDOWN_DELAY); |
1255 | + } |
1256 | + |
1257 | /* Follow section 2.2.1.1 of AN3663 */ |
1258 | ana_pwr = SGTL5000_ANA_POWER_DEFAULT; |
1259 | if (sgtl5000->num_supplies <= VDDD) { |
1260 | diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h |
1261 | index a4bf4bca95bf..56ec5863f250 100644 |
1262 | --- a/sound/soc/codecs/sgtl5000.h |
1263 | +++ b/sound/soc/codecs/sgtl5000.h |
1264 | @@ -233,6 +233,7 @@ |
1265 | /* |
1266 | * SGTL5000_CHIP_ANA_CTRL |
1267 | */ |
1268 | +#define SGTL5000_CHIP_ANA_CTRL_DEFAULT 0x0133 |
1269 | #define SGTL5000_LINE_OUT_MUTE 0x0100 |
1270 | #define SGTL5000_HP_SEL_MASK 0x0040 |
1271 | #define SGTL5000_HP_SEL_SHIFT 6 |
1272 | diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c |
1273 | index fc5d089868df..4a7d3413917f 100644 |
1274 | --- a/sound/soc/sh/rcar/ssi.c |
1275 | +++ b/sound/soc/sh/rcar/ssi.c |
1276 | @@ -594,10 +594,16 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod, |
1277 | * Capture: It might not receave data. Do nothing |
1278 | */ |
1279 | if (rsnd_io_is_play(io)) { |
1280 | - rsnd_mod_write(mod, SSICR, cr | EN); |
1281 | + rsnd_mod_write(mod, SSICR, cr | ssi->cr_en); |
1282 | rsnd_ssi_status_check(mod, DIRQ); |
1283 | } |
1284 | |
1285 | + /* In multi-SSI mode, stop is performed by setting ssi0129 in |
1286 | + * SSI_CONTROL to 0 (in rsnd_ssio_stop_gen2). Do nothing here. |
1287 | + */ |
1288 | + if (rsnd_ssi_multi_slaves_runtime(io)) |
1289 | + return 0; |
1290 | + |
1291 | /* |
1292 | * disable SSI, |
1293 | * and, wait idle state |
1294 | @@ -737,6 +743,9 @@ static void rsnd_ssi_parent_attach(struct rsnd_mod *mod, |
1295 | if (!rsnd_rdai_is_clk_master(rdai)) |
1296 | return; |
1297 | |
1298 | + if (rsnd_ssi_is_multi_slave(mod, io)) |
1299 | + return; |
1300 | + |
1301 | switch (rsnd_mod_id(mod)) { |
1302 | case 1: |
1303 | case 2: |
1304 | diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c |
1305 | index f35d88211887..9c7c3e7539c9 100644 |
1306 | --- a/sound/soc/sh/rcar/ssiu.c |
1307 | +++ b/sound/soc/sh/rcar/ssiu.c |
1308 | @@ -221,7 +221,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod, |
1309 | i; |
1310 | |
1311 | for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) { |
1312 | - shift = (i * 4) + 16; |
1313 | + shift = (i * 4) + 20; |
1314 | val = (val & ~(0xF << shift)) | |
1315 | rsnd_mod_id(pos) << shift; |
1316 | } |
1317 | diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c |
1318 | index 17556a47f727..65c91abb9462 100644 |
1319 | --- a/sound/soc/soc-topology.c |
1320 | +++ b/sound/soc/soc-topology.c |
1321 | @@ -893,7 +893,13 @@ static int soc_tplg_dmixer_create(struct soc_tplg *tplg, unsigned int count, |
1322 | } |
1323 | |
1324 | /* create any TLV data */ |
1325 | - soc_tplg_create_tlv(tplg, &kc, &mc->hdr); |
1326 | + err = soc_tplg_create_tlv(tplg, &kc, &mc->hdr); |
1327 | + if (err < 0) { |
1328 | + dev_err(tplg->dev, "ASoC: failed to create TLV %s\n", |
1329 | + mc->hdr.name); |
1330 | + kfree(sm); |
1331 | + continue; |
1332 | + } |
1333 | |
1334 | /* pass control to driver for optional further init */ |
1335 | err = soc_tplg_init_kcontrol(tplg, &kc, |
1336 | @@ -1117,6 +1123,7 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg *tplg, |
1337 | struct snd_soc_tplg_hdr *hdr) |
1338 | { |
1339 | struct snd_soc_tplg_ctl_hdr *control_hdr; |
1340 | + int ret; |
1341 | int i; |
1342 | |
1343 | if (tplg->pass != SOC_TPLG_PASS_MIXER) { |
1344 | @@ -1145,25 +1152,30 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg *tplg, |
1345 | case SND_SOC_TPLG_CTL_RANGE: |
1346 | case SND_SOC_TPLG_DAPM_CTL_VOLSW: |
1347 | case SND_SOC_TPLG_DAPM_CTL_PIN: |
1348 | - soc_tplg_dmixer_create(tplg, 1, |
1349 | - le32_to_cpu(hdr->payload_size)); |
1350 | + ret = soc_tplg_dmixer_create(tplg, 1, |
1351 | + le32_to_cpu(hdr->payload_size)); |
1352 | break; |
1353 | case SND_SOC_TPLG_CTL_ENUM: |
1354 | case SND_SOC_TPLG_CTL_ENUM_VALUE: |
1355 | case SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE: |
1356 | case SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT: |
1357 | case SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE: |
1358 | - soc_tplg_denum_create(tplg, 1, |
1359 | - le32_to_cpu(hdr->payload_size)); |
1360 | + ret = soc_tplg_denum_create(tplg, 1, |
1361 | + le32_to_cpu(hdr->payload_size)); |
1362 | break; |
1363 | case SND_SOC_TPLG_CTL_BYTES: |
1364 | - soc_tplg_dbytes_create(tplg, 1, |
1365 | - le32_to_cpu(hdr->payload_size)); |
1366 | + ret = soc_tplg_dbytes_create(tplg, 1, |
1367 | + le32_to_cpu(hdr->payload_size)); |
1368 | break; |
1369 | default: |
1370 | soc_bind_err(tplg, control_hdr, i); |
1371 | return -EINVAL; |
1372 | } |
1373 | + if (ret < 0) { |
1374 | + dev_err(tplg->dev, "ASoC: invalid control\n"); |
1375 | + return ret; |
1376 | + } |
1377 | + |
1378 | } |
1379 | |
1380 | return 0; |
1381 | @@ -1271,7 +1283,9 @@ static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg, |
1382 | routes[i]->dobj.index = tplg->index; |
1383 | list_add(&routes[i]->dobj.list, &tplg->comp->dobj_list); |
1384 | |
1385 | - soc_tplg_add_route(tplg, routes[i]); |
1386 | + ret = soc_tplg_add_route(tplg, routes[i]); |
1387 | + if (ret < 0) |
1388 | + break; |
1389 | |
1390 | /* add route, but keep going if some fail */ |
1391 | snd_soc_dapm_add_routes(dapm, routes[i], 1); |
1392 | @@ -1354,7 +1368,13 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dmixer_create( |
1393 | } |
1394 | |
1395 | /* create any TLV data */ |
1396 | - soc_tplg_create_tlv(tplg, &kc[i], &mc->hdr); |
1397 | + err = soc_tplg_create_tlv(tplg, &kc[i], &mc->hdr); |
1398 | + if (err < 0) { |
1399 | + dev_err(tplg->dev, "ASoC: failed to create TLV %s\n", |
1400 | + mc->hdr.name); |
1401 | + kfree(sm); |
1402 | + continue; |
1403 | + } |
1404 | |
1405 | /* pass control to driver for optional further init */ |
1406 | err = soc_tplg_init_kcontrol(tplg, &kc[i], |
1407 | @@ -2072,7 +2092,9 @@ static int soc_tplg_pcm_elems_load(struct soc_tplg *tplg, |
1408 | _pcm = pcm; |
1409 | } else { |
1410 | abi_match = false; |
1411 | - pcm_new_ver(tplg, pcm, &_pcm); |
1412 | + ret = pcm_new_ver(tplg, pcm, &_pcm); |
1413 | + if (ret < 0) |
1414 | + return ret; |
1415 | } |
1416 | |
1417 | /* create the FE DAIs and DAI links */ |
1418 | @@ -2409,7 +2431,7 @@ static int soc_tplg_dai_elems_load(struct soc_tplg *tplg, |
1419 | { |
1420 | struct snd_soc_tplg_dai *dai; |
1421 | int count; |
1422 | - int i; |
1423 | + int i, ret; |
1424 | |
1425 | count = le32_to_cpu(hdr->count); |
1426 | |
1427 | @@ -2424,7 +2446,12 @@ static int soc_tplg_dai_elems_load(struct soc_tplg *tplg, |
1428 | return -EINVAL; |
1429 | } |
1430 | |
1431 | - soc_tplg_dai_config(tplg, dai); |
1432 | + ret = soc_tplg_dai_config(tplg, dai); |
1433 | + if (ret < 0) { |
1434 | + dev_err(tplg->dev, "ASoC: failed to configure DAI\n"); |
1435 | + return ret; |
1436 | + } |
1437 | + |
1438 | tplg->pos += (sizeof(*dai) + le32_to_cpu(dai->priv.size)); |
1439 | } |
1440 | |
1441 | @@ -2532,7 +2559,7 @@ static int soc_valid_header(struct soc_tplg *tplg, |
1442 | } |
1443 | |
1444 | /* big endian firmware objects not supported atm */ |
1445 | - if (hdr->magic == SOC_TPLG_MAGIC_BIG_ENDIAN) { |
1446 | + if (le32_to_cpu(hdr->magic) == SOC_TPLG_MAGIC_BIG_ENDIAN) { |
1447 | dev_err(tplg->dev, |
1448 | "ASoC: pass %d big endian not supported header got %x at offset 0x%lx size 0x%zx.\n", |
1449 | tplg->pass, hdr->magic, |
1450 | diff --git a/tools/arch/arm64/include/uapi/asm/unistd.h b/tools/arch/arm64/include/uapi/asm/unistd.h |
1451 | index 4703d218663a..f83a70e07df8 100644 |
1452 | --- a/tools/arch/arm64/include/uapi/asm/unistd.h |
1453 | +++ b/tools/arch/arm64/include/uapi/asm/unistd.h |
1454 | @@ -19,5 +19,6 @@ |
1455 | #define __ARCH_WANT_NEW_STAT |
1456 | #define __ARCH_WANT_SET_GET_RLIMIT |
1457 | #define __ARCH_WANT_TIME32_SYSCALLS |
1458 | +#define __ARCH_WANT_SYS_CLONE3 |
1459 | |
1460 | #include <asm-generic/unistd.h> |
1461 | diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile |
1462 | index 122321d54922..d045707e7c9a 100644 |
1463 | --- a/tools/lib/bpf/Makefile |
1464 | +++ b/tools/lib/bpf/Makefile |
1465 | @@ -145,6 +145,7 @@ PC_FILE := $(addprefix $(OUTPUT),$(PC_FILE)) |
1466 | |
1467 | GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ |
1468 | cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ |
1469 | + sed 's/\[.*\]//' | \ |
1470 | awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ |
1471 | sort -u | wc -l) |
1472 | VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ |
1473 | @@ -217,6 +218,7 @@ check_abi: $(OUTPUT)libbpf.so |
1474 | "versioned in $(VERSION_SCRIPT)." >&2; \ |
1475 | readelf -s --wide $(BPF_IN_SHARED) | \ |
1476 | cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ |
1477 | + sed 's/\[.*\]//' | \ |
1478 | awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ |
1479 | sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ |
1480 | readelf -s --wide $(OUTPUT)libbpf.so | \ |
1481 | diff --git a/tools/testing/selftests/ipc/msgque.c b/tools/testing/selftests/ipc/msgque.c |
1482 | index 4c156aeab6b8..5ec4d9e18806 100644 |
1483 | --- a/tools/testing/selftests/ipc/msgque.c |
1484 | +++ b/tools/testing/selftests/ipc/msgque.c |
1485 | @@ -137,7 +137,7 @@ int dump_queue(struct msgque_data *msgque) |
1486 | for (kern_id = 0; kern_id < 256; kern_id++) { |
1487 | ret = msgctl(kern_id, MSG_STAT, &ds); |
1488 | if (ret < 0) { |
1489 | - if (errno == -EINVAL) |
1490 | + if (errno == EINVAL) |
1491 | continue; |
1492 | printf("Failed to get stats for IPC queue with id %d\n", |
1493 | kern_id); |