Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:5.15 commit in: /
Date: Sat, 06 Nov 2021 13:45:10
Message-Id: 1636206289.5cd274357420b76fb09796379f86ea8a576165eb.mpagano@gentoo
1 commit: 5cd274357420b76fb09796379f86ea8a576165eb
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sat Nov 6 13:44:49 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sat Nov 6 13:44:49 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=5cd27435
7
8 Linux patch 5.15.1
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1000_linux-5.15.1.patch | 512 ++++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 516 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 9bc9951..23b2f2d 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -43,6 +43,10 @@ EXPERIMENTAL
21 Individual Patch Descriptions:
22 --------------------------------------------------------------------------
23
24 +Patch: 1000_linux-5.15.1.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 5.15.1
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/1000_linux-5.15.1.patch b/1000_linux-5.15.1.patch
33 new file mode 100644
34 index 0000000..8174afc
35 --- /dev/null
36 +++ b/1000_linux-5.15.1.patch
37 @@ -0,0 +1,512 @@
38 +diff --git a/Makefile b/Makefile
39 +index ed6e7ec60eff6..ffcc7eadc44b8 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 5
45 + PATCHLEVEL = 15
46 +-SUBLEVEL = 0
47 ++SUBLEVEL = 1
48 + EXTRAVERSION =
49 + NAME = Trick or Treat
50 +
51 +diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
52 +index 962041148482c..6c0f7f4f7d1de 100644
53 +--- a/drivers/amba/bus.c
54 ++++ b/drivers/amba/bus.c
55 +@@ -377,9 +377,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 269437b013280..289c7dc053634 100644
67 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
68 ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
69 +@@ -1078,8 +1078,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 463b9c0283f7e..ec30d81586a79 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 af9bdf16eefd4..b8d9004fb1635 100644
206 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
207 ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
208 +@@ -2432,10 +2432,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 +@@ -4466,10 +4462,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 4a416231b24c8..a6afacc3b10cd 100644
232 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
233 ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
234 +@@ -924,6 +924,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 8080bba5b7a76..de9ec5ddb6c72 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 de5f9c86b9a44..cafb0608ffb46 100644
267 +--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
268 ++++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
269 +@@ -2140,10 +2140,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/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c
281 +index 2bf9467b917d1..71991f8638e6b 100644
282 +--- a/drivers/media/firewire/firedtv-avc.c
283 ++++ b/drivers/media/firewire/firedtv-avc.c
284 +@@ -1165,7 +1165,11 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length)
285 + read_pos += program_info_length;
286 + write_pos += program_info_length;
287 + }
288 +- while (read_pos < length) {
289 ++ while (read_pos + 4 < length) {
290 ++ if (write_pos + 4 >= sizeof(c->operand) - 4) {
291 ++ ret = -EINVAL;
292 ++ goto out;
293 ++ }
294 + c->operand[write_pos++] = msg[read_pos++];
295 + c->operand[write_pos++] = msg[read_pos++];
296 + c->operand[write_pos++] = msg[read_pos++];
297 +@@ -1177,13 +1181,17 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length)
298 + c->operand[write_pos++] = es_info_length >> 8;
299 + c->operand[write_pos++] = es_info_length & 0xff;
300 + if (es_info_length > 0) {
301 ++ if (read_pos >= length) {
302 ++ ret = -EINVAL;
303 ++ goto out;
304 ++ }
305 + pmt_cmd_id = msg[read_pos++];
306 + if (pmt_cmd_id != 1 && pmt_cmd_id != 4)
307 + dev_err(fdtv->device, "invalid pmt_cmd_id %d at stream level\n",
308 + pmt_cmd_id);
309 +
310 +- if (es_info_length > sizeof(c->operand) - 4 -
311 +- write_pos) {
312 ++ if (es_info_length > sizeof(c->operand) - 4 - write_pos ||
313 ++ es_info_length > length - read_pos) {
314 + ret = -EINVAL;
315 + goto out;
316 + }
317 +diff --git a/drivers/media/firewire/firedtv-ci.c b/drivers/media/firewire/firedtv-ci.c
318 +index 9363d005e2b61..e0d57e09dab0c 100644
319 +--- a/drivers/media/firewire/firedtv-ci.c
320 ++++ b/drivers/media/firewire/firedtv-ci.c
321 +@@ -134,6 +134,8 @@ static int fdtv_ca_pmt(struct firedtv *fdtv, void *arg)
322 + } else {
323 + data_length = msg->msg[3];
324 + }
325 ++ if (data_length > sizeof(msg->msg) - data_pos)
326 ++ return -EINVAL;
327 +
328 + return avc_ca_pmt(fdtv, &msg->msg[data_pos], data_length);
329 + }
330 +diff --git a/drivers/net/ethernet/sfc/ethtool_common.c b/drivers/net/ethernet/sfc/ethtool_common.c
331 +index bf1443539a1a4..bd552c7dffcb1 100644
332 +--- a/drivers/net/ethernet/sfc/ethtool_common.c
333 ++++ b/drivers/net/ethernet/sfc/ethtool_common.c
334 +@@ -563,20 +563,14 @@ int efx_ethtool_get_link_ksettings(struct net_device *net_dev,
335 + {
336 + struct efx_nic *efx = netdev_priv(net_dev);
337 + struct efx_link_state *link_state = &efx->link_state;
338 +- u32 supported;
339 +
340 + mutex_lock(&efx->mac_lock);
341 + efx_mcdi_phy_get_link_ksettings(efx, cmd);
342 + mutex_unlock(&efx->mac_lock);
343 +
344 + /* Both MACs support pause frames (bidirectional and respond-only) */
345 +- ethtool_convert_link_mode_to_legacy_u32(&supported,
346 +- cmd->link_modes.supported);
347 +-
348 +- supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
349 +-
350 +- ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
351 +- supported);
352 ++ ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
353 ++ ethtool_link_ksettings_add_link_mode(cmd, supported, Asym_Pause);
354 +
355 + if (LOOPBACK_INTERNAL(efx)) {
356 + cmd->base.speed = link_state->speed;
357 +diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
358 +index ec913ec991f3f..6e91bdb2e08d4 100644
359 +--- a/drivers/net/wireless/ath/wcn36xx/main.c
360 ++++ b/drivers/net/wireless/ath/wcn36xx/main.c
361 +@@ -604,15 +604,6 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
362 + }
363 + }
364 + }
365 +- /* FIXME: Only enable bmps support when encryption is enabled.
366 +- * For any reasons, when connected to open/no-security BSS,
367 +- * the wcn36xx controller in bmps mode does not forward
368 +- * 'wake-up' beacons despite AP sends DTIM with station AID.
369 +- * It could be due to a firmware issue or to the way driver
370 +- * configure the station.
371 +- */
372 +- if (vif->type == NL80211_IFTYPE_STATION)
373 +- vif_priv->allow_bmps = true;
374 + break;
375 + case DISABLE_KEY:
376 + if (!(IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)) {
377 +@@ -913,7 +904,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
378 + vif->addr,
379 + bss_conf->aid);
380 + vif_priv->sta_assoc = false;
381 +- vif_priv->allow_bmps = false;
382 + wcn36xx_smd_set_link_st(wcn,
383 + bss_conf->bssid,
384 + vif->addr,
385 +diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c b/drivers/net/wireless/ath/wcn36xx/pmc.c
386 +index 2d0780fefd477..2936aaf532738 100644
387 +--- a/drivers/net/wireless/ath/wcn36xx/pmc.c
388 ++++ b/drivers/net/wireless/ath/wcn36xx/pmc.c
389 +@@ -23,10 +23,7 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
390 + {
391 + int ret = 0;
392 + struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
393 +-
394 +- if (!vif_priv->allow_bmps)
395 +- return -ENOTSUPP;
396 +-
397 ++ /* TODO: Make sure the TX chain clean */
398 + ret = wcn36xx_smd_enter_bmps(wcn, vif);
399 + if (!ret) {
400 + wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n");
401 +diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
402 +index add6e527e8330..e9560f35e9bcf 100644
403 +--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
404 ++++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
405 +@@ -128,7 +128,6 @@ struct wcn36xx_vif {
406 + enum wcn36xx_hal_bss_type bss_type;
407 +
408 + /* Power management */
409 +- bool allow_bmps;
410 + enum wcn36xx_power_state pw_state;
411 +
412 + u8 bss_index;
413 +diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c
414 +index 34a9ac1f2b9b1..8b7a01773aec2 100644
415 +--- a/drivers/soc/imx/gpcv2.c
416 ++++ b/drivers/soc/imx/gpcv2.c
417 +@@ -244,6 +244,8 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd)
418 + goto out_regulator_disable;
419 + }
420 +
421 ++ reset_control_assert(domain->reset);
422 ++
423 + if (domain->bits.pxx) {
424 + /* request the domain to power up */
425 + regmap_update_bits(domain->regmap, GPC_PU_PGC_SW_PUP_REQ,
426 +@@ -266,8 +268,6 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd)
427 + GPC_PGC_CTRL_PCR);
428 + }
429 +
430 +- reset_control_assert(domain->reset);
431 +-
432 + /* delay for reset to propagate */
433 + udelay(5);
434 +
435 +diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
436 +index 7ee6e4cc0d89e..00d35fe1fef0b 100644
437 +--- a/drivers/usb/core/hcd.c
438 ++++ b/drivers/usb/core/hcd.c
439 +@@ -2795,7 +2795,6 @@ int usb_add_hcd(struct usb_hcd *hcd,
440 + {
441 + int retval;
442 + struct usb_device *rhdev;
443 +- struct usb_hcd *shared_hcd;
444 +
445 + if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) {
446 + hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev);
447 +@@ -2956,26 +2955,13 @@ int usb_add_hcd(struct usb_hcd *hcd,
448 + goto err_hcd_driver_start;
449 + }
450 +
451 +- /* starting here, usbcore will pay attention to the shared HCD roothub */
452 +- shared_hcd = hcd->shared_hcd;
453 +- if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && HCD_DEFER_RH_REGISTER(shared_hcd)) {
454 +- retval = register_root_hub(shared_hcd);
455 +- if (retval != 0)
456 +- goto err_register_root_hub;
457 +-
458 +- if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd))
459 +- usb_hcd_poll_rh_status(shared_hcd);
460 +- }
461 +-
462 + /* starting here, usbcore will pay attention to this root hub */
463 +- if (!HCD_DEFER_RH_REGISTER(hcd)) {
464 +- retval = register_root_hub(hcd);
465 +- if (retval != 0)
466 +- goto err_register_root_hub;
467 ++ retval = register_root_hub(hcd);
468 ++ if (retval != 0)
469 ++ goto err_register_root_hub;
470 +
471 +- if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
472 +- usb_hcd_poll_rh_status(hcd);
473 +- }
474 ++ if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
475 ++ usb_hcd_poll_rh_status(hcd);
476 +
477 + return retval;
478 +
479 +@@ -3013,7 +2999,6 @@ EXPORT_SYMBOL_GPL(usb_add_hcd);
480 + void usb_remove_hcd(struct usb_hcd *hcd)
481 + {
482 + struct usb_device *rhdev = hcd->self.root_hub;
483 +- bool rh_registered;
484 +
485 + dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
486 +
487 +@@ -3024,7 +3009,6 @@ void usb_remove_hcd(struct usb_hcd *hcd)
488 +
489 + dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
490 + spin_lock_irq (&hcd_root_hub_lock);
491 +- rh_registered = hcd->rh_registered;
492 + hcd->rh_registered = 0;
493 + spin_unlock_irq (&hcd_root_hub_lock);
494 +
495 +@@ -3034,8 +3018,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)
496 + cancel_work_sync(&hcd->died_work);
497 +
498 + mutex_lock(&usb_bus_idr_lock);
499 +- if (rh_registered)
500 +- usb_disconnect(&rhdev); /* Sets rhdev to NULL */
501 ++ usb_disconnect(&rhdev); /* Sets rhdev to NULL */
502 + mutex_unlock(&usb_bus_idr_lock);
503 +
504 + /*
505 +diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
506 +index 541fe4dcc43a2..902f410874e8e 100644
507 +--- a/drivers/usb/host/xhci.c
508 ++++ b/drivers/usb/host/xhci.c
509 +@@ -692,7 +692,6 @@ int xhci_run(struct usb_hcd *hcd)
510 + if (ret)
511 + xhci_free_command(xhci, command);
512 + }
513 +- set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags);
514 + xhci_dbg_trace(xhci, trace_xhci_dbg_init,
515 + "Finished xhci_run for USB2 roothub");
516 +
517 +diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
518 +index 2c1fc9212cf28..548a028f2dabb 100644
519 +--- a/include/linux/usb/hcd.h
520 ++++ b/include/linux/usb/hcd.h
521 +@@ -124,7 +124,6 @@ struct usb_hcd {
522 + #define HCD_FLAG_RH_RUNNING 5 /* root hub is running? */
523 + #define HCD_FLAG_DEAD 6 /* controller has died? */
524 + #define HCD_FLAG_INTF_AUTHORIZED 7 /* authorize interfaces? */
525 +-#define HCD_FLAG_DEFER_RH_REGISTER 8 /* Defer roothub registration */
526 +
527 + /* The flags can be tested using these macros; they are likely to
528 + * be slightly faster than test_bit().
529 +@@ -135,7 +134,6 @@ struct usb_hcd {
530 + #define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING))
531 + #define HCD_RH_RUNNING(hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING))
532 + #define HCD_DEAD(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD))
533 +-#define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER))
534 +
535 + /*
536 + * Specifies if interfaces are authorized by default
537 +diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
538 +index 8929d9abe8aa8..74e5bd2cc9329 100644
539 +--- a/sound/usb/quirks.c
540 ++++ b/sound/usb/quirks.c
541 +@@ -1887,6 +1887,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
542 + QUIRK_FLAG_SHARE_MEDIA_DEVICE | QUIRK_FLAG_ALIGN_TRANSFER),
543 + DEVICE_FLG(0x21b4, 0x0081, /* AudioQuest DragonFly */
544 + QUIRK_FLAG_GET_SAMPLE_RATE),
545 ++ DEVICE_FLG(0x2708, 0x0002, /* Audient iD14 */
546 ++ QUIRK_FLAG_IGNORE_CTL_ERROR),
547 + DEVICE_FLG(0x2912, 0x30c8, /* Audioengine D1 */
548 + QUIRK_FLAG_GET_SAMPLE_RATE),
549 + DEVICE_FLG(0x30be, 0x0101, /* Schiit Hel */