1 |
commit: 257adff21499e9d222d24ca4de3f19cc03122e47 |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Nov 6 13:41:36 2021 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Nov 6 13:41:36 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=257adff2 |
7 |
|
8 |
Linux patch 5.14.17 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1016_linux-5.14.17.patch | 682 +++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 686 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index 8bcce4c..55b967b 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -111,6 +111,10 @@ Patch: 1015_linux-5.14.16.patch |
21 |
From: http://www.kernel.org |
22 |
Desc: Linux 5.14.16 |
23 |
|
24 |
+Patch: 1016_linux-5.14.17.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 5.14.17 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1016_linux-5.14.17.patch b/1016_linux-5.14.17.patch |
33 |
new file mode 100644 |
34 |
index 0000000..d62c7fc |
35 |
--- /dev/null |
36 |
+++ b/1016_linux-5.14.17.patch |
37 |
@@ -0,0 +1,682 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index 02b6dab373ddb..b792b6c178691 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,7 +1,7 @@ |
43 |
+ # SPDX-License-Identifier: GPL-2.0 |
44 |
+ VERSION = 5 |
45 |
+ PATCHLEVEL = 14 |
46 |
+-SUBLEVEL = 16 |
47 |
++SUBLEVEL = 17 |
48 |
+ EXTRAVERSION = |
49 |
+ NAME = Opossums on Parade |
50 |
+ |
51 |
+diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c |
52 |
+index 939ca220bf78d..518e88780574e 100644 |
53 |
+--- a/drivers/amba/bus.c |
54 |
++++ b/drivers/amba/bus.c |
55 |
+@@ -379,9 +379,6 @@ static int amba_device_try_add(struct amba_device *dev, struct resource *parent) |
56 |
+ void __iomem *tmp; |
57 |
+ int i, ret; |
58 |
+ |
59 |
+- WARN_ON(dev->irq[0] == (unsigned int)-1); |
60 |
+- WARN_ON(dev->irq[1] == (unsigned int)-1); |
61 |
+- |
62 |
+ ret = request_resource(parent, &dev->res); |
63 |
+ if (ret) |
64 |
+ goto err_out; |
65 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h |
66 |
+index a1c5bd2859fc3..d90dc5efc3340 100644 |
67 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h |
68 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h |
69 |
+@@ -1073,8 +1073,6 @@ struct amdgpu_device { |
70 |
+ char product_name[32]; |
71 |
+ char serial[20]; |
72 |
+ |
73 |
+- struct amdgpu_autodump autodump; |
74 |
+- |
75 |
+ atomic_t throttling_logging_enabled; |
76 |
+ struct ratelimit_state throttling_logging_rs; |
77 |
+ uint32_t ras_hw_enabled; |
78 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
79 |
+index 83db7d8fa1508..a0f197eaaec0a 100644 |
80 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
81 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
82 |
+@@ -27,7 +27,6 @@ |
83 |
+ #include <linux/pci.h> |
84 |
+ #include <linux/uaccess.h> |
85 |
+ #include <linux/pm_runtime.h> |
86 |
+-#include <linux/poll.h> |
87 |
+ |
88 |
+ #include "amdgpu.h" |
89 |
+ #include "amdgpu_pm.h" |
90 |
+@@ -37,85 +36,7 @@ |
91 |
+ #include "amdgpu_securedisplay.h" |
92 |
+ #include "amdgpu_fw_attestation.h" |
93 |
+ |
94 |
+-int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev) |
95 |
+-{ |
96 |
+ #if defined(CONFIG_DEBUG_FS) |
97 |
+- unsigned long timeout = 600 * HZ; |
98 |
+- int ret; |
99 |
+- |
100 |
+- wake_up_interruptible(&adev->autodump.gpu_hang); |
101 |
+- |
102 |
+- ret = wait_for_completion_interruptible_timeout(&adev->autodump.dumping, timeout); |
103 |
+- if (ret == 0) { |
104 |
+- pr_err("autodump: timeout, move on to gpu recovery\n"); |
105 |
+- return -ETIMEDOUT; |
106 |
+- } |
107 |
+-#endif |
108 |
+- return 0; |
109 |
+-} |
110 |
+- |
111 |
+-#if defined(CONFIG_DEBUG_FS) |
112 |
+- |
113 |
+-static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file) |
114 |
+-{ |
115 |
+- struct amdgpu_device *adev = inode->i_private; |
116 |
+- int ret; |
117 |
+- |
118 |
+- file->private_data = adev; |
119 |
+- |
120 |
+- ret = down_read_killable(&adev->reset_sem); |
121 |
+- if (ret) |
122 |
+- return ret; |
123 |
+- |
124 |
+- if (adev->autodump.dumping.done) { |
125 |
+- reinit_completion(&adev->autodump.dumping); |
126 |
+- ret = 0; |
127 |
+- } else { |
128 |
+- ret = -EBUSY; |
129 |
+- } |
130 |
+- |
131 |
+- up_read(&adev->reset_sem); |
132 |
+- |
133 |
+- return ret; |
134 |
+-} |
135 |
+- |
136 |
+-static int amdgpu_debugfs_autodump_release(struct inode *inode, struct file *file) |
137 |
+-{ |
138 |
+- struct amdgpu_device *adev = file->private_data; |
139 |
+- |
140 |
+- complete_all(&adev->autodump.dumping); |
141 |
+- return 0; |
142 |
+-} |
143 |
+- |
144 |
+-static unsigned int amdgpu_debugfs_autodump_poll(struct file *file, struct poll_table_struct *poll_table) |
145 |
+-{ |
146 |
+- struct amdgpu_device *adev = file->private_data; |
147 |
+- |
148 |
+- poll_wait(file, &adev->autodump.gpu_hang, poll_table); |
149 |
+- |
150 |
+- if (amdgpu_in_reset(adev)) |
151 |
+- return POLLIN | POLLRDNORM | POLLWRNORM; |
152 |
+- |
153 |
+- return 0; |
154 |
+-} |
155 |
+- |
156 |
+-static const struct file_operations autodump_debug_fops = { |
157 |
+- .owner = THIS_MODULE, |
158 |
+- .open = amdgpu_debugfs_autodump_open, |
159 |
+- .poll = amdgpu_debugfs_autodump_poll, |
160 |
+- .release = amdgpu_debugfs_autodump_release, |
161 |
+-}; |
162 |
+- |
163 |
+-static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev) |
164 |
+-{ |
165 |
+- init_completion(&adev->autodump.dumping); |
166 |
+- complete_all(&adev->autodump.dumping); |
167 |
+- init_waitqueue_head(&adev->autodump.gpu_hang); |
168 |
+- |
169 |
+- debugfs_create_file("amdgpu_autodump", 0600, |
170 |
+- adev_to_drm(adev)->primary->debugfs_root, |
171 |
+- adev, &autodump_debug_fops); |
172 |
+-} |
173 |
+ |
174 |
+ /** |
175 |
+ * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes |
176 |
+@@ -1588,7 +1509,6 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev) |
177 |
+ } |
178 |
+ |
179 |
+ amdgpu_ras_debugfs_create_all(adev); |
180 |
+- amdgpu_debugfs_autodump_init(adev); |
181 |
+ amdgpu_rap_debugfs_init(adev); |
182 |
+ amdgpu_securedisplay_debugfs_init(adev); |
183 |
+ amdgpu_fw_attestation_debugfs_init(adev); |
184 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |
185 |
+index 141a8474e24f2..8b641f40fdf66 100644 |
186 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |
187 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |
188 |
+@@ -26,10 +26,6 @@ |
189 |
+ /* |
190 |
+ * Debugfs |
191 |
+ */ |
192 |
+-struct amdgpu_autodump { |
193 |
+- struct completion dumping; |
194 |
+- struct wait_queue_head gpu_hang; |
195 |
+-}; |
196 |
+ |
197 |
+ int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); |
198 |
+ int amdgpu_debugfs_init(struct amdgpu_device *adev); |
199 |
+@@ -37,4 +33,3 @@ void amdgpu_debugfs_fini(struct amdgpu_device *adev); |
200 |
+ void amdgpu_debugfs_fence_init(struct amdgpu_device *adev); |
201 |
+ void amdgpu_debugfs_firmware_init(struct amdgpu_device *adev); |
202 |
+ void amdgpu_debugfs_gem_init(struct amdgpu_device *adev); |
203 |
+-int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev); |
204 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
205 |
+index cd8cc7d31b49c..08e53ff747282 100644 |
206 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
207 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
208 |
+@@ -2380,10 +2380,6 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev) |
209 |
+ if (!adev->gmc.xgmi.pending_reset) |
210 |
+ amdgpu_amdkfd_device_init(adev); |
211 |
+ |
212 |
+- r = amdgpu_amdkfd_resume_iommu(adev); |
213 |
+- if (r) |
214 |
+- goto init_failed; |
215 |
+- |
216 |
+ amdgpu_fru_get_product_info(adev); |
217 |
+ |
218 |
+ init_failed: |
219 |
+@@ -4411,10 +4407,6 @@ int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev, |
220 |
+ if (reset_context->reset_req_dev == adev) |
221 |
+ job = reset_context->job; |
222 |
+ |
223 |
+- /* no need to dump if device is not in good state during probe period */ |
224 |
+- if (!adev->gmc.xgmi.pending_reset) |
225 |
+- amdgpu_debugfs_wait_dump(adev); |
226 |
+- |
227 |
+ if (amdgpu_sriov_vf(adev)) { |
228 |
+ /* stop the data exchange thread */ |
229 |
+ amdgpu_virt_fini_data_exchange(adev); |
230 |
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c |
231 |
+index 5ba8a4f353440..ef64fb8f1bbf5 100644 |
232 |
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c |
233 |
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c |
234 |
+@@ -875,6 +875,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, |
235 |
+ |
236 |
+ svm_migrate_init((struct amdgpu_device *)kfd->kgd); |
237 |
+ |
238 |
++ if(kgd2kfd_resume_iommu(kfd)) |
239 |
++ goto device_iommu_error; |
240 |
++ |
241 |
+ if (kfd_resume(kfd)) |
242 |
+ goto kfd_resume_error; |
243 |
+ |
244 |
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c |
245 |
+index 4c8edfdc3cac8..f3e2ef74078a2 100644 |
246 |
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c |
247 |
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c |
248 |
+@@ -247,6 +247,7 @@ static ssize_t dp_link_settings_write(struct file *f, const char __user *buf, |
249 |
+ { |
250 |
+ struct amdgpu_dm_connector *connector = file_inode(f)->i_private; |
251 |
+ struct dc_link *link = connector->dc_link; |
252 |
++ struct dc *dc = (struct dc *)link->dc; |
253 |
+ struct dc_link_settings prefer_link_settings; |
254 |
+ char *wr_buf = NULL; |
255 |
+ const uint32_t wr_buf_size = 40; |
256 |
+@@ -313,7 +314,7 @@ static ssize_t dp_link_settings_write(struct file *f, const char __user *buf, |
257 |
+ prefer_link_settings.lane_count = param[0]; |
258 |
+ prefer_link_settings.link_rate = param[1]; |
259 |
+ |
260 |
+- dp_retrain_link_dp_test(link, &prefer_link_settings, false); |
261 |
++ dc_link_set_preferred_training_settings(dc, &prefer_link_settings, NULL, link, true); |
262 |
+ |
263 |
+ kfree(wr_buf); |
264 |
+ return size; |
265 |
+diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c |
266 |
+index fc77592d88a96..4bf1fdd933441 100644 |
267 |
+--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c |
268 |
++++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c |
269 |
+@@ -2091,10 +2091,6 @@ static void __execlists_unhold(struct i915_request *rq) |
270 |
+ if (p->flags & I915_DEPENDENCY_WEAK) |
271 |
+ continue; |
272 |
+ |
273 |
+- /* Propagate any change in error status */ |
274 |
+- if (rq->fence.error) |
275 |
+- i915_request_set_error_once(w, rq->fence.error); |
276 |
+- |
277 |
+ if (w->engine != rq->engine) |
278 |
+ continue; |
279 |
+ |
280 |
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h |
281 |
+index 5aa5ddefd22d2..f0f073bf72a48 100644 |
282 |
+--- a/drivers/gpu/drm/i915/i915_reg.h |
283 |
++++ b/drivers/gpu/drm/i915/i915_reg.h |
284 |
+@@ -11021,12 +11021,6 @@ enum skl_power_gate { |
285 |
+ #define DC_STATE_DEBUG_MASK_CORES (1 << 0) |
286 |
+ #define DC_STATE_DEBUG_MASK_MEMORY_UP (1 << 1) |
287 |
+ |
288 |
+-#define BXT_P_CR_MC_BIOS_REQ_0_0_0 _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x7114) |
289 |
+-#define BXT_REQ_DATA_MASK 0x3F |
290 |
+-#define BXT_DRAM_CHANNEL_ACTIVE_SHIFT 12 |
291 |
+-#define BXT_DRAM_CHANNEL_ACTIVE_MASK (0xF << 12) |
292 |
+-#define BXT_MEMORY_FREQ_MULTIPLIER_HZ 133333333 |
293 |
+- |
294 |
+ #define BXT_D_CR_DRP0_DUNIT8 0x1000 |
295 |
+ #define BXT_D_CR_DRP0_DUNIT9 0x1200 |
296 |
+ #define BXT_D_CR_DRP0_DUNIT_START 8 |
297 |
+@@ -11057,9 +11051,7 @@ enum skl_power_gate { |
298 |
+ #define BXT_DRAM_TYPE_LPDDR4 (0x2 << 22) |
299 |
+ #define BXT_DRAM_TYPE_DDR4 (0x4 << 22) |
300 |
+ |
301 |
+-#define SKL_MEMORY_FREQ_MULTIPLIER_HZ 266666666 |
302 |
+ #define SKL_MC_BIOS_DATA_0_0_0_MCHBAR_PCU _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5E04) |
303 |
+-#define SKL_REQ_DATA_MASK (0xF << 0) |
304 |
+ |
305 |
+ #define SKL_MAD_INTER_CHANNEL_0_0_0_MCHBAR_MCMAIN _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5000) |
306 |
+ #define SKL_DRAM_DDR_TYPE_MASK (0x3 << 0) |
307 |
+diff --git a/drivers/gpu/drm/i915/intel_dram.c b/drivers/gpu/drm/i915/intel_dram.c |
308 |
+index 50fdea84ba706..300dfe239b8cc 100644 |
309 |
+--- a/drivers/gpu/drm/i915/intel_dram.c |
310 |
++++ b/drivers/gpu/drm/i915/intel_dram.c |
311 |
+@@ -244,7 +244,6 @@ static int |
312 |
+ skl_get_dram_info(struct drm_i915_private *i915) |
313 |
+ { |
314 |
+ struct dram_info *dram_info = &i915->dram_info; |
315 |
+- u32 mem_freq_khz, val; |
316 |
+ int ret; |
317 |
+ |
318 |
+ dram_info->type = skl_get_dram_type(i915); |
319 |
+@@ -255,17 +254,6 @@ skl_get_dram_info(struct drm_i915_private *i915) |
320 |
+ if (ret) |
321 |
+ return ret; |
322 |
+ |
323 |
+- val = intel_uncore_read(&i915->uncore, |
324 |
+- SKL_MC_BIOS_DATA_0_0_0_MCHBAR_PCU); |
325 |
+- mem_freq_khz = DIV_ROUND_UP((val & SKL_REQ_DATA_MASK) * |
326 |
+- SKL_MEMORY_FREQ_MULTIPLIER_HZ, 1000); |
327 |
+- |
328 |
+- if (dram_info->num_channels * mem_freq_khz == 0) { |
329 |
+- drm_info(&i915->drm, |
330 |
+- "Couldn't get system memory bandwidth\n"); |
331 |
+- return -EINVAL; |
332 |
+- } |
333 |
+- |
334 |
+ return 0; |
335 |
+ } |
336 |
+ |
337 |
+@@ -350,24 +338,10 @@ static void bxt_get_dimm_info(struct dram_dimm_info *dimm, u32 val) |
338 |
+ static int bxt_get_dram_info(struct drm_i915_private *i915) |
339 |
+ { |
340 |
+ struct dram_info *dram_info = &i915->dram_info; |
341 |
+- u32 dram_channels; |
342 |
+- u32 mem_freq_khz, val; |
343 |
+- u8 num_active_channels, valid_ranks = 0; |
344 |
++ u32 val; |
345 |
++ u8 valid_ranks = 0; |
346 |
+ int i; |
347 |
+ |
348 |
+- val = intel_uncore_read(&i915->uncore, BXT_P_CR_MC_BIOS_REQ_0_0_0); |
349 |
+- mem_freq_khz = DIV_ROUND_UP((val & BXT_REQ_DATA_MASK) * |
350 |
+- BXT_MEMORY_FREQ_MULTIPLIER_HZ, 1000); |
351 |
+- |
352 |
+- dram_channels = val & BXT_DRAM_CHANNEL_ACTIVE_MASK; |
353 |
+- num_active_channels = hweight32(dram_channels); |
354 |
+- |
355 |
+- if (mem_freq_khz * num_active_channels == 0) { |
356 |
+- drm_info(&i915->drm, |
357 |
+- "Couldn't get system memory bandwidth\n"); |
358 |
+- return -EINVAL; |
359 |
+- } |
360 |
+- |
361 |
+ /* |
362 |
+ * Now read each DUNIT8/9/10/11 to check the rank of each dimms. |
363 |
+ */ |
364 |
+diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c |
365 |
+index 2bf9467b917d1..71991f8638e6b 100644 |
366 |
+--- a/drivers/media/firewire/firedtv-avc.c |
367 |
++++ b/drivers/media/firewire/firedtv-avc.c |
368 |
+@@ -1165,7 +1165,11 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) |
369 |
+ read_pos += program_info_length; |
370 |
+ write_pos += program_info_length; |
371 |
+ } |
372 |
+- while (read_pos < length) { |
373 |
++ while (read_pos + 4 < length) { |
374 |
++ if (write_pos + 4 >= sizeof(c->operand) - 4) { |
375 |
++ ret = -EINVAL; |
376 |
++ goto out; |
377 |
++ } |
378 |
+ c->operand[write_pos++] = msg[read_pos++]; |
379 |
+ c->operand[write_pos++] = msg[read_pos++]; |
380 |
+ c->operand[write_pos++] = msg[read_pos++]; |
381 |
+@@ -1177,13 +1181,17 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) |
382 |
+ c->operand[write_pos++] = es_info_length >> 8; |
383 |
+ c->operand[write_pos++] = es_info_length & 0xff; |
384 |
+ if (es_info_length > 0) { |
385 |
++ if (read_pos >= length) { |
386 |
++ ret = -EINVAL; |
387 |
++ goto out; |
388 |
++ } |
389 |
+ pmt_cmd_id = msg[read_pos++]; |
390 |
+ if (pmt_cmd_id != 1 && pmt_cmd_id != 4) |
391 |
+ dev_err(fdtv->device, "invalid pmt_cmd_id %d at stream level\n", |
392 |
+ pmt_cmd_id); |
393 |
+ |
394 |
+- if (es_info_length > sizeof(c->operand) - 4 - |
395 |
+- write_pos) { |
396 |
++ if (es_info_length > sizeof(c->operand) - 4 - write_pos || |
397 |
++ es_info_length > length - read_pos) { |
398 |
+ ret = -EINVAL; |
399 |
+ goto out; |
400 |
+ } |
401 |
+diff --git a/drivers/media/firewire/firedtv-ci.c b/drivers/media/firewire/firedtv-ci.c |
402 |
+index 9363d005e2b61..e0d57e09dab0c 100644 |
403 |
+--- a/drivers/media/firewire/firedtv-ci.c |
404 |
++++ b/drivers/media/firewire/firedtv-ci.c |
405 |
+@@ -134,6 +134,8 @@ static int fdtv_ca_pmt(struct firedtv *fdtv, void *arg) |
406 |
+ } else { |
407 |
+ data_length = msg->msg[3]; |
408 |
+ } |
409 |
++ if (data_length > sizeof(msg->msg) - data_pos) |
410 |
++ return -EINVAL; |
411 |
+ |
412 |
+ return avc_ca_pmt(fdtv, &msg->msg[data_pos], data_length); |
413 |
+ } |
414 |
+diff --git a/drivers/net/ethernet/sfc/ethtool_common.c b/drivers/net/ethernet/sfc/ethtool_common.c |
415 |
+index bf1443539a1a4..bd552c7dffcb1 100644 |
416 |
+--- a/drivers/net/ethernet/sfc/ethtool_common.c |
417 |
++++ b/drivers/net/ethernet/sfc/ethtool_common.c |
418 |
+@@ -563,20 +563,14 @@ int efx_ethtool_get_link_ksettings(struct net_device *net_dev, |
419 |
+ { |
420 |
+ struct efx_nic *efx = netdev_priv(net_dev); |
421 |
+ struct efx_link_state *link_state = &efx->link_state; |
422 |
+- u32 supported; |
423 |
+ |
424 |
+ mutex_lock(&efx->mac_lock); |
425 |
+ efx_mcdi_phy_get_link_ksettings(efx, cmd); |
426 |
+ mutex_unlock(&efx->mac_lock); |
427 |
+ |
428 |
+ /* Both MACs support pause frames (bidirectional and respond-only) */ |
429 |
+- ethtool_convert_link_mode_to_legacy_u32(&supported, |
430 |
+- cmd->link_modes.supported); |
431 |
+- |
432 |
+- supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; |
433 |
+- |
434 |
+- ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, |
435 |
+- supported); |
436 |
++ ethtool_link_ksettings_add_link_mode(cmd, supported, Pause); |
437 |
++ ethtool_link_ksettings_add_link_mode(cmd, supported, Asym_Pause); |
438 |
+ |
439 |
+ if (LOOPBACK_INTERNAL(efx)) { |
440 |
+ cmd->base.speed = link_state->speed; |
441 |
+diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c |
442 |
+index 8bbe2a7bb1412..2b1b944d4b281 100644 |
443 |
+--- a/drivers/net/vrf.c |
444 |
++++ b/drivers/net/vrf.c |
445 |
+@@ -1367,8 +1367,6 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev, |
446 |
+ bool need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr); |
447 |
+ bool is_ndisc = ipv6_ndisc_frame(skb); |
448 |
+ |
449 |
+- nf_reset_ct(skb); |
450 |
+- |
451 |
+ /* loopback, multicast & non-ND link-local traffic; do not push through |
452 |
+ * packet taps again. Reset pkt_type for upper layers to process skb. |
453 |
+ * For strict packets with a source LLA, determine the dst using the |
454 |
+@@ -1431,8 +1429,6 @@ static struct sk_buff *vrf_ip_rcv(struct net_device *vrf_dev, |
455 |
+ skb->skb_iif = vrf_dev->ifindex; |
456 |
+ IPCB(skb)->flags |= IPSKB_L3SLAVE; |
457 |
+ |
458 |
+- nf_reset_ct(skb); |
459 |
+- |
460 |
+ if (ipv4_is_multicast(ip_hdr(skb)->daddr)) |
461 |
+ goto out; |
462 |
+ |
463 |
+diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c |
464 |
+index 67f4db662402b..c7592143f2eb9 100644 |
465 |
+--- a/drivers/net/wireless/ath/wcn36xx/main.c |
466 |
++++ b/drivers/net/wireless/ath/wcn36xx/main.c |
467 |
+@@ -604,15 +604,6 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, |
468 |
+ } |
469 |
+ } |
470 |
+ } |
471 |
+- /* FIXME: Only enable bmps support when encryption is enabled. |
472 |
+- * For any reasons, when connected to open/no-security BSS, |
473 |
+- * the wcn36xx controller in bmps mode does not forward |
474 |
+- * 'wake-up' beacons despite AP sends DTIM with station AID. |
475 |
+- * It could be due to a firmware issue or to the way driver |
476 |
+- * configure the station. |
477 |
+- */ |
478 |
+- if (vif->type == NL80211_IFTYPE_STATION) |
479 |
+- vif_priv->allow_bmps = true; |
480 |
+ break; |
481 |
+ case DISABLE_KEY: |
482 |
+ if (!(IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)) { |
483 |
+@@ -913,7 +904,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw, |
484 |
+ vif->addr, |
485 |
+ bss_conf->aid); |
486 |
+ vif_priv->sta_assoc = false; |
487 |
+- vif_priv->allow_bmps = false; |
488 |
+ wcn36xx_smd_set_link_st(wcn, |
489 |
+ bss_conf->bssid, |
490 |
+ vif->addr, |
491 |
+diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c b/drivers/net/wireless/ath/wcn36xx/pmc.c |
492 |
+index 2d0780fefd477..2936aaf532738 100644 |
493 |
+--- a/drivers/net/wireless/ath/wcn36xx/pmc.c |
494 |
++++ b/drivers/net/wireless/ath/wcn36xx/pmc.c |
495 |
+@@ -23,10 +23,7 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn, |
496 |
+ { |
497 |
+ int ret = 0; |
498 |
+ struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif); |
499 |
+- |
500 |
+- if (!vif_priv->allow_bmps) |
501 |
+- return -ENOTSUPP; |
502 |
+- |
503 |
++ /* TODO: Make sure the TX chain clean */ |
504 |
+ ret = wcn36xx_smd_enter_bmps(wcn, vif); |
505 |
+ if (!ret) { |
506 |
+ wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n"); |
507 |
+diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h |
508 |
+index 0feb235b5a426..7989aee004194 100644 |
509 |
+--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h |
510 |
++++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h |
511 |
+@@ -128,7 +128,6 @@ struct wcn36xx_vif { |
512 |
+ enum wcn36xx_hal_bss_type bss_type; |
513 |
+ |
514 |
+ /* Power management */ |
515 |
+- bool allow_bmps; |
516 |
+ enum wcn36xx_power_state pw_state; |
517 |
+ |
518 |
+ u8 bss_index; |
519 |
+diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c |
520 |
+index d26025cf5de35..71dd0989c78ab 100644 |
521 |
+--- a/drivers/scsi/scsi.c |
522 |
++++ b/drivers/scsi/scsi.c |
523 |
+@@ -553,8 +553,10 @@ EXPORT_SYMBOL(scsi_device_get); |
524 |
+ */ |
525 |
+ void scsi_device_put(struct scsi_device *sdev) |
526 |
+ { |
527 |
+- module_put(sdev->host->hostt->module); |
528 |
++ struct module *mod = sdev->host->hostt->module; |
529 |
++ |
530 |
+ put_device(&sdev->sdev_gendev); |
531 |
++ module_put(mod); |
532 |
+ } |
533 |
+ EXPORT_SYMBOL(scsi_device_put); |
534 |
+ |
535 |
+diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c |
536 |
+index c0d31119d6d7b..ed05c3565e831 100644 |
537 |
+--- a/drivers/scsi/scsi_sysfs.c |
538 |
++++ b/drivers/scsi/scsi_sysfs.c |
539 |
+@@ -448,9 +448,12 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work) |
540 |
+ struct scsi_vpd *vpd_pg80 = NULL, *vpd_pg83 = NULL; |
541 |
+ struct scsi_vpd *vpd_pg0 = NULL, *vpd_pg89 = NULL; |
542 |
+ unsigned long flags; |
543 |
++ struct module *mod; |
544 |
+ |
545 |
+ sdev = container_of(work, struct scsi_device, ew.work); |
546 |
+ |
547 |
++ mod = sdev->host->hostt->module; |
548 |
++ |
549 |
+ scsi_dh_release_device(sdev); |
550 |
+ |
551 |
+ parent = sdev->sdev_gendev.parent; |
552 |
+@@ -501,11 +504,17 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work) |
553 |
+ |
554 |
+ if (parent) |
555 |
+ put_device(parent); |
556 |
++ module_put(mod); |
557 |
+ } |
558 |
+ |
559 |
+ static void scsi_device_dev_release(struct device *dev) |
560 |
+ { |
561 |
+ struct scsi_device *sdp = to_scsi_device(dev); |
562 |
++ |
563 |
++ /* Set module pointer as NULL in case of module unloading */ |
564 |
++ if (!try_module_get(sdp->host->hostt->module)) |
565 |
++ sdp->host->hostt->module = NULL; |
566 |
++ |
567 |
+ execute_in_process_context(scsi_device_dev_release_usercontext, |
568 |
+ &sdp->ew); |
569 |
+ } |
570 |
+diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c |
571 |
+index 34a9ac1f2b9b1..8b7a01773aec2 100644 |
572 |
+--- a/drivers/soc/imx/gpcv2.c |
573 |
++++ b/drivers/soc/imx/gpcv2.c |
574 |
+@@ -244,6 +244,8 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd) |
575 |
+ goto out_regulator_disable; |
576 |
+ } |
577 |
+ |
578 |
++ reset_control_assert(domain->reset); |
579 |
++ |
580 |
+ if (domain->bits.pxx) { |
581 |
+ /* request the domain to power up */ |
582 |
+ regmap_update_bits(domain->regmap, GPC_PU_PGC_SW_PUP_REQ, |
583 |
+@@ -266,8 +268,6 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd) |
584 |
+ GPC_PGC_CTRL_PCR); |
585 |
+ } |
586 |
+ |
587 |
+- reset_control_assert(domain->reset); |
588 |
+- |
589 |
+ /* delay for reset to propagate */ |
590 |
+ udelay(5); |
591 |
+ |
592 |
+diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c |
593 |
+index 99ff2d23be05e..0f8b7c93310ea 100644 |
594 |
+--- a/drivers/usb/core/hcd.c |
595 |
++++ b/drivers/usb/core/hcd.c |
596 |
+@@ -2775,7 +2775,6 @@ int usb_add_hcd(struct usb_hcd *hcd, |
597 |
+ { |
598 |
+ int retval; |
599 |
+ struct usb_device *rhdev; |
600 |
+- struct usb_hcd *shared_hcd; |
601 |
+ |
602 |
+ if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) { |
603 |
+ hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev); |
604 |
+@@ -2936,26 +2935,13 @@ int usb_add_hcd(struct usb_hcd *hcd, |
605 |
+ goto err_hcd_driver_start; |
606 |
+ } |
607 |
+ |
608 |
+- /* starting here, usbcore will pay attention to the shared HCD roothub */ |
609 |
+- shared_hcd = hcd->shared_hcd; |
610 |
+- if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && HCD_DEFER_RH_REGISTER(shared_hcd)) { |
611 |
+- retval = register_root_hub(shared_hcd); |
612 |
+- if (retval != 0) |
613 |
+- goto err_register_root_hub; |
614 |
+- |
615 |
+- if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd)) |
616 |
+- usb_hcd_poll_rh_status(shared_hcd); |
617 |
+- } |
618 |
+- |
619 |
+ /* starting here, usbcore will pay attention to this root hub */ |
620 |
+- if (!HCD_DEFER_RH_REGISTER(hcd)) { |
621 |
+- retval = register_root_hub(hcd); |
622 |
+- if (retval != 0) |
623 |
+- goto err_register_root_hub; |
624 |
++ retval = register_root_hub(hcd); |
625 |
++ if (retval != 0) |
626 |
++ goto err_register_root_hub; |
627 |
+ |
628 |
+- if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) |
629 |
+- usb_hcd_poll_rh_status(hcd); |
630 |
+- } |
631 |
++ if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) |
632 |
++ usb_hcd_poll_rh_status(hcd); |
633 |
+ |
634 |
+ return retval; |
635 |
+ |
636 |
+@@ -2999,7 +2985,6 @@ EXPORT_SYMBOL_GPL(usb_add_hcd); |
637 |
+ void usb_remove_hcd(struct usb_hcd *hcd) |
638 |
+ { |
639 |
+ struct usb_device *rhdev = hcd->self.root_hub; |
640 |
+- bool rh_registered; |
641 |
+ |
642 |
+ dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); |
643 |
+ |
644 |
+@@ -3010,7 +2995,6 @@ void usb_remove_hcd(struct usb_hcd *hcd) |
645 |
+ |
646 |
+ dev_dbg(hcd->self.controller, "roothub graceful disconnect\n"); |
647 |
+ spin_lock_irq (&hcd_root_hub_lock); |
648 |
+- rh_registered = hcd->rh_registered; |
649 |
+ hcd->rh_registered = 0; |
650 |
+ spin_unlock_irq (&hcd_root_hub_lock); |
651 |
+ |
652 |
+@@ -3020,8 +3004,7 @@ void usb_remove_hcd(struct usb_hcd *hcd) |
653 |
+ cancel_work_sync(&hcd->died_work); |
654 |
+ |
655 |
+ mutex_lock(&usb_bus_idr_lock); |
656 |
+- if (rh_registered) |
657 |
+- usb_disconnect(&rhdev); /* Sets rhdev to NULL */ |
658 |
++ usb_disconnect(&rhdev); /* Sets rhdev to NULL */ |
659 |
+ mutex_unlock(&usb_bus_idr_lock); |
660 |
+ |
661 |
+ /* |
662 |
+diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c |
663 |
+index cb730683f898f..4e32b96ccc889 100644 |
664 |
+--- a/drivers/usb/host/xhci.c |
665 |
++++ b/drivers/usb/host/xhci.c |
666 |
+@@ -692,7 +692,6 @@ int xhci_run(struct usb_hcd *hcd) |
667 |
+ if (ret) |
668 |
+ xhci_free_command(xhci, command); |
669 |
+ } |
670 |
+- set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags); |
671 |
+ xhci_dbg_trace(xhci, trace_xhci_dbg_init, |
672 |
+ "Finished xhci_run for USB2 roothub"); |
673 |
+ |
674 |
+diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h |
675 |
+index 2c1fc9212cf28..548a028f2dabb 100644 |
676 |
+--- a/include/linux/usb/hcd.h |
677 |
++++ b/include/linux/usb/hcd.h |
678 |
+@@ -124,7 +124,6 @@ struct usb_hcd { |
679 |
+ #define HCD_FLAG_RH_RUNNING 5 /* root hub is running? */ |
680 |
+ #define HCD_FLAG_DEAD 6 /* controller has died? */ |
681 |
+ #define HCD_FLAG_INTF_AUTHORIZED 7 /* authorize interfaces? */ |
682 |
+-#define HCD_FLAG_DEFER_RH_REGISTER 8 /* Defer roothub registration */ |
683 |
+ |
684 |
+ /* The flags can be tested using these macros; they are likely to |
685 |
+ * be slightly faster than test_bit(). |
686 |
+@@ -135,7 +134,6 @@ struct usb_hcd { |
687 |
+ #define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) |
688 |
+ #define HCD_RH_RUNNING(hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING)) |
689 |
+ #define HCD_DEAD(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD)) |
690 |
+-#define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER)) |
691 |
+ |
692 |
+ /* |
693 |
+ * Specifies if interfaces are authorized by default |
694 |
+diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c |
695 |
+index c5794e83fd800..8f6823df944ff 100644 |
696 |
+--- a/sound/usb/mixer_maps.c |
697 |
++++ b/sound/usb/mixer_maps.c |
698 |
+@@ -528,6 +528,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = { |
699 |
+ .id = USB_ID(0x2573, 0x0008), |
700 |
+ .map = maya44_map, |
701 |
+ }, |
702 |
++ { |
703 |
++ .id = USB_ID(0x2708, 0x0002), /* Audient iD14 */ |
704 |
++ .ignore_ctl_error = 1, |
705 |
++ }, |
706 |
+ { |
707 |
+ /* KEF X300A */ |
708 |
+ .id = USB_ID(0x27ac, 0x1000), |
709 |
+@@ -538,6 +542,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = { |
710 |
+ .id = USB_ID(0x25c4, 0x0003), |
711 |
+ .map = scms_usb3318_map, |
712 |
+ }, |
713 |
++ { |
714 |
++ .id = USB_ID(0x30be, 0x0101), /* Schiit Hel */ |
715 |
++ .ignore_ctl_error = 1, |
716 |
++ }, |
717 |
+ { |
718 |
+ /* Bose Companion 5 */ |
719 |
+ .id = USB_ID(0x05a7, 0x1020), |