Contents of /trunk/kernel-alx-legacy/patches-4.9/0136-4.9.37-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(show annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 38337 byte(s)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 38337 byte(s)
-added kerenl-alx-legacy pkg
1 | diff --git a/Makefile b/Makefile |
2 | index 4263dca12f07..342e19adbf7f 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 36 |
9 | +SUBLEVEL = 37 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S |
14 | index d376e4b48f88..04c067bafe24 100644 |
15 | --- a/arch/x86/lib/copy_user_64.S |
16 | +++ b/arch/x86/lib/copy_user_64.S |
17 | @@ -84,7 +84,7 @@ ENTRY(copy_user_generic_unrolled) |
18 | movl %edx,%ecx |
19 | andl $63,%edx |
20 | shrl $6,%ecx |
21 | - jz 17f |
22 | + jz .L_copy_short_string |
23 | 1: movq (%rsi),%r8 |
24 | 2: movq 1*8(%rsi),%r9 |
25 | 3: movq 2*8(%rsi),%r10 |
26 | @@ -105,7 +105,8 @@ ENTRY(copy_user_generic_unrolled) |
27 | leaq 64(%rdi),%rdi |
28 | decl %ecx |
29 | jnz 1b |
30 | -17: movl %edx,%ecx |
31 | +.L_copy_short_string: |
32 | + movl %edx,%ecx |
33 | andl $7,%edx |
34 | shrl $3,%ecx |
35 | jz 20f |
36 | @@ -221,6 +222,8 @@ EXPORT_SYMBOL(copy_user_generic_string) |
37 | */ |
38 | ENTRY(copy_user_enhanced_fast_string) |
39 | ASM_STAC |
40 | + cmpl $64,%edx |
41 | + jb .L_copy_short_string /* less then 64 bytes, avoid the costly 'rep' */ |
42 | movl %edx,%ecx |
43 | 1: rep |
44 | movsb |
45 | diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c |
46 | index 0c2fae8d929d..73eb7fd4aec4 100644 |
47 | --- a/arch/x86/tools/relocs.c |
48 | +++ b/arch/x86/tools/relocs.c |
49 | @@ -992,11 +992,12 @@ static void emit_relocs(int as_text, int use_real_mode) |
50 | die("Segment relocations found but --realmode not specified\n"); |
51 | |
52 | /* Order the relocations for more efficient processing */ |
53 | - sort_relocs(&relocs16); |
54 | sort_relocs(&relocs32); |
55 | #if ELF_BITS == 64 |
56 | sort_relocs(&relocs32neg); |
57 | sort_relocs(&relocs64); |
58 | +#else |
59 | + sort_relocs(&relocs16); |
60 | #endif |
61 | |
62 | /* Print the relocations */ |
63 | diff --git a/crypto/drbg.c b/crypto/drbg.c |
64 | index 123d211efa12..8cac3d31a5f8 100644 |
65 | --- a/crypto/drbg.c |
66 | +++ b/crypto/drbg.c |
67 | @@ -1691,6 +1691,7 @@ static int drbg_init_sym_kernel(struct drbg_state *drbg) |
68 | return PTR_ERR(sk_tfm); |
69 | } |
70 | drbg->ctr_handle = sk_tfm; |
71 | + init_completion(&drbg->ctr_completion); |
72 | |
73 | req = skcipher_request_alloc(sk_tfm, GFP_KERNEL); |
74 | if (!req) { |
75 | diff --git a/drivers/base/platform.c b/drivers/base/platform.c |
76 | index c4af00385502..5eba47815bb6 100644 |
77 | --- a/drivers/base/platform.c |
78 | +++ b/drivers/base/platform.c |
79 | @@ -856,7 +856,7 @@ static ssize_t driver_override_store(struct device *dev, |
80 | const char *buf, size_t count) |
81 | { |
82 | struct platform_device *pdev = to_platform_device(dev); |
83 | - char *driver_override, *old = pdev->driver_override, *cp; |
84 | + char *driver_override, *old, *cp; |
85 | |
86 | if (count > PATH_MAX) |
87 | return -EINVAL; |
88 | @@ -869,12 +869,15 @@ static ssize_t driver_override_store(struct device *dev, |
89 | if (cp) |
90 | *cp = '\0'; |
91 | |
92 | + device_lock(dev); |
93 | + old = pdev->driver_override; |
94 | if (strlen(driver_override)) { |
95 | pdev->driver_override = driver_override; |
96 | } else { |
97 | kfree(driver_override); |
98 | pdev->driver_override = NULL; |
99 | } |
100 | + device_unlock(dev); |
101 | |
102 | kfree(old); |
103 | |
104 | @@ -885,8 +888,12 @@ static ssize_t driver_override_show(struct device *dev, |
105 | struct device_attribute *attr, char *buf) |
106 | { |
107 | struct platform_device *pdev = to_platform_device(dev); |
108 | + ssize_t len; |
109 | |
110 | - return sprintf(buf, "%s\n", pdev->driver_override); |
111 | + device_lock(dev); |
112 | + len = sprintf(buf, "%s\n", pdev->driver_override); |
113 | + device_unlock(dev); |
114 | + return len; |
115 | } |
116 | static DEVICE_ATTR_RW(driver_override); |
117 | |
118 | diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c |
119 | index a76ab4af9fb2..47005840c42c 100644 |
120 | --- a/drivers/char/tpm/tpm-sysfs.c |
121 | +++ b/drivers/char/tpm/tpm-sysfs.c |
122 | @@ -35,9 +35,10 @@ static ssize_t pubek_show(struct device *dev, struct device_attribute *attr, |
123 | ssize_t err; |
124 | int i, rc; |
125 | char *str = buf; |
126 | - |
127 | struct tpm_chip *chip = to_tpm_chip(dev); |
128 | |
129 | + memset(&tpm_cmd, 0, sizeof(tpm_cmd)); |
130 | + |
131 | tpm_cmd.header.in = tpm_readpubek_header; |
132 | err = tpm_transmit_cmd(chip, &tpm_cmd, READ_PUBEK_RESULT_SIZE, 0, |
133 | "attempting to read the PUBEK"); |
134 | diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c |
135 | index 1483daebe057..6f66b7347cd0 100644 |
136 | --- a/drivers/gpu/drm/virtio/virtgpu_object.c |
137 | +++ b/drivers/gpu/drm/virtio/virtgpu_object.c |
138 | @@ -81,8 +81,10 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, |
139 | return -ENOMEM; |
140 | size = roundup(size, PAGE_SIZE); |
141 | ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, size); |
142 | - if (ret != 0) |
143 | + if (ret != 0) { |
144 | + kfree(bo); |
145 | return ret; |
146 | + } |
147 | bo->dumb = false; |
148 | virtio_gpu_init_ttm_placement(bo, pinned); |
149 | |
150 | diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c |
151 | index cb3f515a2285..01e3a37b0aef 100644 |
152 | --- a/drivers/infiniband/core/uverbs_cmd.c |
153 | +++ b/drivers/infiniband/core/uverbs_cmd.c |
154 | @@ -2342,6 +2342,10 @@ ssize_t ib_uverbs_modify_qp(struct ib_uverbs_file *file, |
155 | if (copy_from_user(&cmd, buf, sizeof cmd)) |
156 | return -EFAULT; |
157 | |
158 | + if (cmd.port_num < rdma_start_port(ib_dev) || |
159 | + cmd.port_num > rdma_end_port(ib_dev)) |
160 | + return -EINVAL; |
161 | + |
162 | INIT_UDATA(&udata, buf + sizeof cmd, NULL, in_len - sizeof cmd, |
163 | out_len); |
164 | |
165 | @@ -2882,6 +2886,10 @@ ssize_t ib_uverbs_create_ah(struct ib_uverbs_file *file, |
166 | if (copy_from_user(&cmd, buf, sizeof cmd)) |
167 | return -EFAULT; |
168 | |
169 | + if (cmd.attr.port_num < rdma_start_port(ib_dev) || |
170 | + cmd.attr.port_num > rdma_end_port(ib_dev)) |
171 | + return -EINVAL; |
172 | + |
173 | uobj = kmalloc(sizeof *uobj, GFP_KERNEL); |
174 | if (!uobj) |
175 | return -ENOMEM; |
176 | diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c |
177 | index c68239e60487..98b067b712b3 100644 |
178 | --- a/drivers/media/media-entity.c |
179 | +++ b/drivers/media/media-entity.c |
180 | @@ -468,7 +468,7 @@ __must_check int __media_entity_pipeline_start(struct media_entity *entity, |
181 | |
182 | while ((entity_err = media_entity_graph_walk_next(graph))) { |
183 | /* don't let the stream_count go negative */ |
184 | - if (entity->stream_count > 0) { |
185 | + if (entity_err->stream_count > 0) { |
186 | entity_err->stream_count--; |
187 | if (entity_err->stream_count == 0) |
188 | entity_err->pipe = NULL; |
189 | diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c |
190 | index 6063cf439d3d..410bcdaa9e87 100644 |
191 | --- a/drivers/net/wireless/ath/ath10k/pci.c |
192 | +++ b/drivers/net/wireless/ath/ath10k/pci.c |
193 | @@ -3133,7 +3133,7 @@ int ath10k_pci_setup_resource(struct ath10k *ar) |
194 | setup_timer(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry, |
195 | (unsigned long)ar); |
196 | |
197 | - if (QCA_REV_6174(ar)) |
198 | + if (QCA_REV_6174(ar) || QCA_REV_9377(ar)) |
199 | ath10k_pci_override_ce_config(ar); |
200 | |
201 | ret = ath10k_pci_alloc_pipes(ar); |
202 | diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c |
203 | index d3bad5779376..0fd7d7ed07ce 100644 |
204 | --- a/drivers/net/wireless/mac80211_hwsim.c |
205 | +++ b/drivers/net/wireless/mac80211_hwsim.c |
206 | @@ -2662,7 +2662,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, |
207 | |
208 | tasklet_hrtimer_init(&data->beacon_timer, |
209 | mac80211_hwsim_beacon, |
210 | - CLOCK_MONOTONIC_RAW, HRTIMER_MODE_ABS); |
211 | + CLOCK_MONOTONIC, HRTIMER_MODE_ABS); |
212 | |
213 | spin_lock_bh(&hwsim_radio_lock); |
214 | list_add_tail(&data->list, &hwsim_radios); |
215 | diff --git a/drivers/pinctrl/freescale/pinctrl-mxs.c b/drivers/pinctrl/freescale/pinctrl-mxs.c |
216 | index 41b5b07d5a2b..6852010a6d70 100644 |
217 | --- a/drivers/pinctrl/freescale/pinctrl-mxs.c |
218 | +++ b/drivers/pinctrl/freescale/pinctrl-mxs.c |
219 | @@ -194,6 +194,16 @@ static int mxs_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, |
220 | return 0; |
221 | } |
222 | |
223 | +static void mxs_pinctrl_rmwl(u32 value, u32 mask, u8 shift, void __iomem *reg) |
224 | +{ |
225 | + u32 tmp; |
226 | + |
227 | + tmp = readl(reg); |
228 | + tmp &= ~(mask << shift); |
229 | + tmp |= value << shift; |
230 | + writel(tmp, reg); |
231 | +} |
232 | + |
233 | static int mxs_pinctrl_set_mux(struct pinctrl_dev *pctldev, unsigned selector, |
234 | unsigned group) |
235 | { |
236 | @@ -211,8 +221,7 @@ static int mxs_pinctrl_set_mux(struct pinctrl_dev *pctldev, unsigned selector, |
237 | reg += bank * 0x20 + pin / 16 * 0x10; |
238 | shift = pin % 16 * 2; |
239 | |
240 | - writel(0x3 << shift, reg + CLR); |
241 | - writel(g->muxsel[i] << shift, reg + SET); |
242 | + mxs_pinctrl_rmwl(g->muxsel[i], 0x3, shift, reg); |
243 | } |
244 | |
245 | return 0; |
246 | @@ -279,8 +288,7 @@ static int mxs_pinconf_group_set(struct pinctrl_dev *pctldev, |
247 | /* mA */ |
248 | if (config & MA_PRESENT) { |
249 | shift = pin % 8 * 4; |
250 | - writel(0x3 << shift, reg + CLR); |
251 | - writel(ma << shift, reg + SET); |
252 | + mxs_pinctrl_rmwl(ma, 0x3, shift, reg); |
253 | } |
254 | |
255 | /* vol */ |
256 | diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c |
257 | index c43b1e9a06af..0d34d8a4ab14 100644 |
258 | --- a/drivers/pinctrl/intel/pinctrl-cherryview.c |
259 | +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c |
260 | @@ -13,6 +13,7 @@ |
261 | * published by the Free Software Foundation. |
262 | */ |
263 | |
264 | +#include <linux/dmi.h> |
265 | #include <linux/kernel.h> |
266 | #include <linux/module.h> |
267 | #include <linux/init.h> |
268 | @@ -1524,10 +1525,32 @@ static void chv_gpio_irq_handler(struct irq_desc *desc) |
269 | chained_irq_exit(chip, desc); |
270 | } |
271 | |
272 | +/* |
273 | + * Certain machines seem to hardcode Linux IRQ numbers in their ACPI |
274 | + * tables. Since we leave GPIOs that are not capable of generating |
275 | + * interrupts out of the irqdomain the numbering will be different and |
276 | + * cause devices using the hardcoded IRQ numbers fail. In order not to |
277 | + * break such machines we will only mask pins from irqdomain if the machine |
278 | + * is not listed below. |
279 | + */ |
280 | +static const struct dmi_system_id chv_no_valid_mask[] = { |
281 | + { |
282 | + /* See https://bugzilla.kernel.org/show_bug.cgi?id=194945 */ |
283 | + .ident = "Acer Chromebook (CYAN)", |
284 | + .matches = { |
285 | + DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"), |
286 | + DMI_MATCH(DMI_PRODUCT_NAME, "Edgar"), |
287 | + DMI_MATCH(DMI_BIOS_DATE, "05/21/2016"), |
288 | + }, |
289 | + }, |
290 | + {} |
291 | +}; |
292 | + |
293 | static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) |
294 | { |
295 | const struct chv_gpio_pinrange *range; |
296 | struct gpio_chip *chip = &pctrl->chip; |
297 | + bool need_valid_mask = !dmi_check_system(chv_no_valid_mask); |
298 | int ret, i, offset; |
299 | |
300 | *chip = chv_gpio_chip; |
301 | @@ -1536,7 +1559,7 @@ static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) |
302 | chip->label = dev_name(pctrl->dev); |
303 | chip->parent = pctrl->dev; |
304 | chip->base = -1; |
305 | - chip->irq_need_valid_mask = true; |
306 | + chip->irq_need_valid_mask = need_valid_mask; |
307 | |
308 | ret = devm_gpiochip_add_data(pctrl->dev, chip, pctrl); |
309 | if (ret) { |
310 | @@ -1567,7 +1590,7 @@ static int chv_gpio_probe(struct chv_pinctrl *pctrl, int irq) |
311 | intsel &= CHV_PADCTRL0_INTSEL_MASK; |
312 | intsel >>= CHV_PADCTRL0_INTSEL_SHIFT; |
313 | |
314 | - if (intsel >= pctrl->community->nirqs) |
315 | + if (need_valid_mask && intsel >= pctrl->community->nirqs) |
316 | clear_bit(i, chip->irq_valid_mask); |
317 | } |
318 | |
319 | diff --git a/drivers/pinctrl/meson/pinctrl-meson8b.c b/drivers/pinctrl/meson/pinctrl-meson8b.c |
320 | index 76f077f18193..f87ef5a0ee6c 100644 |
321 | --- a/drivers/pinctrl/meson/pinctrl-meson8b.c |
322 | +++ b/drivers/pinctrl/meson/pinctrl-meson8b.c |
323 | @@ -739,8 +739,8 @@ static const char * const sdxc_c_groups[] = { |
324 | static const char * const nand_groups[] = { |
325 | "nand_io", "nand_io_ce0", "nand_io_ce1", |
326 | "nand_io_rb0", "nand_ale", "nand_cle", |
327 | - "nand_wen_clk", "nand_ren_clk", "nand_dqs0", |
328 | - "nand_dqs1" |
329 | + "nand_wen_clk", "nand_ren_clk", "nand_dqs_0", |
330 | + "nand_dqs_1" |
331 | }; |
332 | |
333 | static const char * const nor_groups[] = { |
334 | diff --git a/drivers/pinctrl/qcom/pinctrl-ipq4019.c b/drivers/pinctrl/qcom/pinctrl-ipq4019.c |
335 | index b68ae424cee2..743d1f458205 100644 |
336 | --- a/drivers/pinctrl/qcom/pinctrl-ipq4019.c |
337 | +++ b/drivers/pinctrl/qcom/pinctrl-ipq4019.c |
338 | @@ -405,6 +405,36 @@ static const struct msm_pingroup ipq4019_groups[] = { |
339 | PINGROUP(67, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
340 | PINGROUP(68, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
341 | PINGROUP(69, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
342 | + PINGROUP(70, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
343 | + PINGROUP(71, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
344 | + PINGROUP(72, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
345 | + PINGROUP(73, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
346 | + PINGROUP(74, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
347 | + PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
348 | + PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
349 | + PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
350 | + PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
351 | + PINGROUP(79, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
352 | + PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
353 | + PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
354 | + PINGROUP(82, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
355 | + PINGROUP(83, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
356 | + PINGROUP(84, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
357 | + PINGROUP(85, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
358 | + PINGROUP(86, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
359 | + PINGROUP(87, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
360 | + PINGROUP(88, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
361 | + PINGROUP(89, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
362 | + PINGROUP(90, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
363 | + PINGROUP(91, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
364 | + PINGROUP(92, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
365 | + PINGROUP(93, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
366 | + PINGROUP(94, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
367 | + PINGROUP(95, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
368 | + PINGROUP(96, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
369 | + PINGROUP(97, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
370 | + PINGROUP(98, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
371 | + PINGROUP(99, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), |
372 | }; |
373 | |
374 | static const struct msm_pinctrl_soc_data ipq4019_pinctrl = { |
375 | diff --git a/drivers/pinctrl/sh-pfc/core.c b/drivers/pinctrl/sh-pfc/core.c |
376 | index cf80ce1dd7ce..4a5a0feb931b 100644 |
377 | --- a/drivers/pinctrl/sh-pfc/core.c |
378 | +++ b/drivers/pinctrl/sh-pfc/core.c |
379 | @@ -586,6 +586,9 @@ static int sh_pfc_probe(struct platform_device *pdev) |
380 | ret = info->ops->init(pfc); |
381 | if (ret < 0) |
382 | return ret; |
383 | + |
384 | + /* .init() may have overridden pfc->info */ |
385 | + info = pfc->info; |
386 | } |
387 | |
388 | /* Enable dummy states for those platforms without pinctrl support */ |
389 | diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c |
390 | index 7ca37c3019ab..baa98d7fe947 100644 |
391 | --- a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c |
392 | +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c |
393 | @@ -203,7 +203,7 @@ enum { |
394 | |
395 | /* IPSR6 */ |
396 | FN_AUDIO_CLKB, FN_STP_OPWM_0_B, FN_MSIOF1_SCK_B, |
397 | - FN_SCIF_CLK, FN_BPFCLK_E, |
398 | + FN_SCIF_CLK, FN_DVC_MUTE, FN_BPFCLK_E, |
399 | FN_AUDIO_CLKC, FN_SCIFB0_SCK_C, FN_MSIOF1_SYNC_B, FN_RX2, |
400 | FN_SCIFA2_RXD, FN_FMIN_E, |
401 | FN_AUDIO_CLKOUT, FN_MSIOF1_SS1_B, FN_TX2, FN_SCIFA2_TXD, |
402 | @@ -573,7 +573,7 @@ enum { |
403 | |
404 | /* IPSR6 */ |
405 | AUDIO_CLKB_MARK, STP_OPWM_0_B_MARK, MSIOF1_SCK_B_MARK, |
406 | - SCIF_CLK_MARK, BPFCLK_E_MARK, |
407 | + SCIF_CLK_MARK, DVC_MUTE_MARK, BPFCLK_E_MARK, |
408 | AUDIO_CLKC_MARK, SCIFB0_SCK_C_MARK, MSIOF1_SYNC_B_MARK, RX2_MARK, |
409 | SCIFA2_RXD_MARK, FMIN_E_MARK, |
410 | AUDIO_CLKOUT_MARK, MSIOF1_SS1_B_MARK, TX2_MARK, SCIFA2_TXD_MARK, |
411 | @@ -1010,14 +1010,17 @@ static const u16 pinmux_data[] = { |
412 | PINMUX_IPSR_MSEL(IP4_12_10, SCL2, SEL_IIC2_0), |
413 | PINMUX_IPSR_MSEL(IP4_12_10, GPS_CLK_B, SEL_GPS_1), |
414 | PINMUX_IPSR_MSEL(IP4_12_10, GLO_Q0_D, SEL_GPS_3), |
415 | + PINMUX_IPSR_MSEL(IP4_12_10, HSCK1_E, SEL_HSCIF1_4), |
416 | PINMUX_IPSR_GPSR(IP4_15_13, SSI_WS2), |
417 | PINMUX_IPSR_MSEL(IP4_15_13, SDA2, SEL_IIC2_0), |
418 | PINMUX_IPSR_MSEL(IP4_15_13, GPS_SIGN_B, SEL_GPS_1), |
419 | PINMUX_IPSR_MSEL(IP4_15_13, RX2_E, SEL_SCIF2_4), |
420 | PINMUX_IPSR_MSEL(IP4_15_13, GLO_Q1_D, SEL_GPS_3), |
421 | + PINMUX_IPSR_MSEL(IP4_15_13, HCTS1_N_E, SEL_HSCIF1_4), |
422 | PINMUX_IPSR_GPSR(IP4_18_16, SSI_SDATA2), |
423 | PINMUX_IPSR_MSEL(IP4_18_16, GPS_MAG_B, SEL_GPS_1), |
424 | PINMUX_IPSR_MSEL(IP4_18_16, TX2_E, SEL_SCIF2_4), |
425 | + PINMUX_IPSR_MSEL(IP4_18_16, HRTS1_N_E, SEL_HSCIF1_4), |
426 | PINMUX_IPSR_GPSR(IP4_19, SSI_SCK34), |
427 | PINMUX_IPSR_GPSR(IP4_20, SSI_WS34), |
428 | PINMUX_IPSR_GPSR(IP4_21, SSI_SDATA3), |
429 | @@ -1090,6 +1093,7 @@ static const u16 pinmux_data[] = { |
430 | PINMUX_IPSR_MSEL(IP6_2_0, STP_OPWM_0_B, SEL_SSP_1), |
431 | PINMUX_IPSR_MSEL(IP6_2_0, MSIOF1_SCK_B, SEL_SOF1_1), |
432 | PINMUX_IPSR_MSEL(IP6_2_0, SCIF_CLK, SEL_SCIF_0), |
433 | + PINMUX_IPSR_GPSR(IP6_2_0, DVC_MUTE), |
434 | PINMUX_IPSR_MSEL(IP6_2_0, BPFCLK_E, SEL_FM_4), |
435 | PINMUX_IPSR_GPSR(IP6_5_3, AUDIO_CLKC), |
436 | PINMUX_IPSR_MSEL(IP6_5_3, SCIFB0_SCK_C, SEL_SCIFB_2), |
437 | @@ -1099,7 +1103,7 @@ static const u16 pinmux_data[] = { |
438 | PINMUX_IPSR_MSEL(IP6_5_3, FMIN_E, SEL_FM_4), |
439 | PINMUX_IPSR_GPSR(IP6_7_6, AUDIO_CLKOUT), |
440 | PINMUX_IPSR_MSEL(IP6_7_6, MSIOF1_SS1_B, SEL_SOF1_1), |
441 | - PINMUX_IPSR_MSEL(IP6_5_3, TX2, SEL_SCIF2_0), |
442 | + PINMUX_IPSR_MSEL(IP6_7_6, TX2, SEL_SCIF2_0), |
443 | PINMUX_IPSR_MSEL(IP6_7_6, SCIFA2_TXD, SEL_SCIFA2_0), |
444 | PINMUX_IPSR_GPSR(IP6_9_8, IRQ0), |
445 | PINMUX_IPSR_MSEL(IP6_9_8, SCIFB1_RXD_D, SEL_SCIFB1_3), |
446 | @@ -5810,7 +5814,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
447 | 0, 0, |
448 | /* IP6_2_0 [3] */ |
449 | FN_AUDIO_CLKB, FN_STP_OPWM_0_B, FN_MSIOF1_SCK_B, |
450 | - FN_SCIF_CLK, 0, FN_BPFCLK_E, |
451 | + FN_SCIF_CLK, FN_DVC_MUTE, FN_BPFCLK_E, |
452 | 0, 0, } |
453 | }, |
454 | { PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32, |
455 | diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7794.c b/drivers/pinctrl/sh-pfc/pfc-r8a7794.c |
456 | index ed734f560c84..ef093ac0cf2f 100644 |
457 | --- a/drivers/pinctrl/sh-pfc/pfc-r8a7794.c |
458 | +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7794.c |
459 | @@ -281,8 +281,8 @@ enum { |
460 | FN_AVB_AVTP_CAPTURE, FN_ETH_CRS_DV_B, FN_SSI_WS1, FN_SCIF1_TXD_B, |
461 | FN_IIC1_SDA_C, FN_VI1_DATA0, FN_CAN0_TX_D, FN_AVB_AVTP_MATCH, |
462 | FN_ETH_RX_ER_B, FN_SSI_SDATA1, FN_HSCIF1_HRX_B, FN_SDATA, FN_VI1_DATA1, |
463 | - FN_ATAG0_N, FN_ETH_RXD0_B, FN_SSI_SCK2, FN_HSCIF1_HTX_B, FN_VI1_DATA2, |
464 | - FN_MDATA, FN_ATAWR0_N, FN_ETH_RXD1_B, |
465 | + FN_ATAWR0_N, FN_ETH_RXD0_B, FN_SSI_SCK2, FN_HSCIF1_HTX_B, FN_VI1_DATA2, |
466 | + FN_MDATA, FN_ATAG0_N, FN_ETH_RXD1_B, |
467 | |
468 | /* IPSR13 */ |
469 | FN_SSI_WS2, FN_HSCIF1_HCTS_N_B, FN_SCIFA0_RXD_D, FN_VI1_DATA3, FN_SCKZ, |
470 | @@ -575,8 +575,8 @@ enum { |
471 | ETH_CRS_DV_B_MARK, SSI_WS1_MARK, SCIF1_TXD_B_MARK, IIC1_SDA_C_MARK, |
472 | VI1_DATA0_MARK, CAN0_TX_D_MARK, AVB_AVTP_MATCH_MARK, ETH_RX_ER_B_MARK, |
473 | SSI_SDATA1_MARK, HSCIF1_HRX_B_MARK, VI1_DATA1_MARK, SDATA_MARK, |
474 | - ATAG0_N_MARK, ETH_RXD0_B_MARK, SSI_SCK2_MARK, HSCIF1_HTX_B_MARK, |
475 | - VI1_DATA2_MARK, MDATA_MARK, ATAWR0_N_MARK, ETH_RXD1_B_MARK, |
476 | + ATAWR0_N_MARK, ETH_RXD0_B_MARK, SSI_SCK2_MARK, HSCIF1_HTX_B_MARK, |
477 | + VI1_DATA2_MARK, MDATA_MARK, ATAG0_N_MARK, ETH_RXD1_B_MARK, |
478 | |
479 | /* IPSR13 */ |
480 | SSI_WS2_MARK, HSCIF1_HCTS_N_B_MARK, SCIFA0_RXD_D_MARK, VI1_DATA3_MARK, |
481 | @@ -1413,13 +1413,13 @@ static const u16 pinmux_data[] = { |
482 | PINMUX_IPSR_MSEL(IP12_26_24, HSCIF1_HRX_B, SEL_HSCIF1_1), |
483 | PINMUX_IPSR_GPSR(IP12_26_24, VI1_DATA1), |
484 | PINMUX_IPSR_MSEL(IP12_26_24, SDATA, SEL_FSN_0), |
485 | - PINMUX_IPSR_GPSR(IP12_26_24, ATAG0_N), |
486 | + PINMUX_IPSR_GPSR(IP12_26_24, ATAWR0_N), |
487 | PINMUX_IPSR_MSEL(IP12_26_24, ETH_RXD0_B, SEL_ETH_1), |
488 | PINMUX_IPSR_MSEL(IP12_29_27, SSI_SCK2, SEL_SSI2_0), |
489 | PINMUX_IPSR_MSEL(IP12_29_27, HSCIF1_HTX_B, SEL_HSCIF1_1), |
490 | PINMUX_IPSR_GPSR(IP12_29_27, VI1_DATA2), |
491 | PINMUX_IPSR_MSEL(IP12_29_27, MDATA, SEL_FSN_0), |
492 | - PINMUX_IPSR_GPSR(IP12_29_27, ATAWR0_N), |
493 | + PINMUX_IPSR_GPSR(IP12_29_27, ATAG0_N), |
494 | PINMUX_IPSR_MSEL(IP12_29_27, ETH_RXD1_B, SEL_ETH_1), |
495 | |
496 | /* IPSR13 */ |
497 | @@ -4938,10 +4938,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = { |
498 | 0, 0, 0, 0, |
499 | /* IP12_29_27 [3] */ |
500 | FN_SSI_SCK2, FN_HSCIF1_HTX_B, FN_VI1_DATA2, FN_MDATA, |
501 | - FN_ATAWR0_N, FN_ETH_RXD1_B, 0, 0, |
502 | + FN_ATAG0_N, FN_ETH_RXD1_B, 0, 0, |
503 | /* IP12_26_24 [3] */ |
504 | FN_SSI_SDATA1, FN_HSCIF1_HRX_B, FN_VI1_DATA1, FN_SDATA, |
505 | - FN_ATAG0_N, FN_ETH_RXD0_B, 0, 0, |
506 | + FN_ATAWR0_N, FN_ETH_RXD0_B, 0, 0, |
507 | /* IP12_23_21 [3] */ |
508 | FN_SSI_WS1, FN_SCIF1_TXD_B, FN_IIC1_SDA_C, FN_VI1_DATA0, |
509 | FN_CAN0_TX_D, FN_AVB_AVTP_MATCH, FN_ETH_RX_ER_B, 0, |
510 | diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7795.c b/drivers/pinctrl/sh-pfc/pfc-r8a7795.c |
511 | index 84cee66b1e08..0acb0a756650 100644 |
512 | --- a/drivers/pinctrl/sh-pfc/pfc-r8a7795.c |
513 | +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7795.c |
514 | @@ -2056,7 +2056,7 @@ static const unsigned int hscif2_clk_b_pins[] = { |
515 | RCAR_GP_PIN(6, 21), |
516 | }; |
517 | static const unsigned int hscif2_clk_b_mux[] = { |
518 | - HSCK1_B_MARK, |
519 | + HSCK2_B_MARK, |
520 | }; |
521 | static const unsigned int hscif2_ctrl_b_pins[] = { |
522 | /* RTS, CTS */ |
523 | @@ -2129,7 +2129,7 @@ static const unsigned int hscif4_ctrl_pins[] = { |
524 | RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 14), |
525 | }; |
526 | static const unsigned int hscif4_ctrl_mux[] = { |
527 | - HRTS4_N_MARK, HCTS3_N_MARK, |
528 | + HRTS4_N_MARK, HCTS4_N_MARK, |
529 | }; |
530 | |
531 | static const unsigned int hscif4_data_b_pins[] = { |
532 | diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c |
533 | index efc43711ff5c..a36fd4b7e996 100644 |
534 | --- a/drivers/pinctrl/stm32/pinctrl-stm32.c |
535 | +++ b/drivers/pinctrl/stm32/pinctrl-stm32.c |
536 | @@ -798,7 +798,7 @@ static int stm32_pconf_parse_conf(struct pinctrl_dev *pctldev, |
537 | break; |
538 | case PIN_CONFIG_OUTPUT: |
539 | __stm32_gpio_set(bank, offset, arg); |
540 | - ret = stm32_pmx_gpio_set_direction(pctldev, NULL, pin, false); |
541 | + ret = stm32_pmx_gpio_set_direction(pctldev, range, pin, false); |
542 | break; |
543 | default: |
544 | ret = -EINVAL; |
545 | diff --git a/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c b/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c |
546 | index 90b973e15982..a7c81e988656 100644 |
547 | --- a/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c |
548 | +++ b/drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c |
549 | @@ -394,7 +394,7 @@ static const struct sunxi_desc_pin sun8i_a83t_pins[] = { |
550 | SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 18), |
551 | SUNXI_FUNCTION(0x0, "gpio_in"), |
552 | SUNXI_FUNCTION(0x1, "gpio_out"), |
553 | - SUNXI_FUNCTION(0x3, "owa")), /* DOUT */ |
554 | + SUNXI_FUNCTION(0x3, "spdif")), /* DOUT */ |
555 | SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 19), |
556 | SUNXI_FUNCTION(0x0, "gpio_in"), |
557 | SUNXI_FUNCTION(0x1, "gpio_out")), |
558 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c |
559 | index 96b21b0dac1e..3116edfcdc18 100644 |
560 | --- a/drivers/usb/core/quirks.c |
561 | +++ b/drivers/usb/core/quirks.c |
562 | @@ -223,6 +223,10 @@ static const struct usb_device_id usb_quirk_list[] = { |
563 | /* Blackmagic Design UltraStudio SDI */ |
564 | { USB_DEVICE(0x1edb, 0xbd4f), .driver_info = USB_QUIRK_NO_LPM }, |
565 | |
566 | + /* Hauppauge HVR-950q */ |
567 | + { USB_DEVICE(0x2040, 0x7200), .driver_info = |
568 | + USB_QUIRK_CONFIG_INTF_STRINGS }, |
569 | + |
570 | /* INTEL VALUE SSD */ |
571 | { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME }, |
572 | |
573 | diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c |
574 | index 592151461017..eaf1c3b06f02 100644 |
575 | --- a/drivers/usb/core/usb.c |
576 | +++ b/drivers/usb/core/usb.c |
577 | @@ -279,6 +279,8 @@ static void usb_release_dev(struct device *dev) |
578 | |
579 | usb_destroy_configuration(udev); |
580 | usb_release_bos_descriptor(udev); |
581 | + if (udev->parent) |
582 | + of_node_put(dev->of_node); |
583 | usb_put_hcd(hcd); |
584 | kfree(udev->product); |
585 | kfree(udev->manufacturer); |
586 | diff --git a/drivers/usb/dwc3/dwc3-st.c b/drivers/usb/dwc3/dwc3-st.c |
587 | index aaaf256f71dd..4cf5381ff991 100644 |
588 | --- a/drivers/usb/dwc3/dwc3-st.c |
589 | +++ b/drivers/usb/dwc3/dwc3-st.c |
590 | @@ -231,7 +231,7 @@ static int st_dwc3_probe(struct platform_device *pdev) |
591 | |
592 | dwc3_data->syscfg_reg_off = res->start; |
593 | |
594 | - dev_vdbg(&pdev->dev, "glue-logic addr 0x%p, syscfg-reg offset 0x%x\n", |
595 | + dev_vdbg(&pdev->dev, "glue-logic addr 0x%pK, syscfg-reg offset 0x%x\n", |
596 | dwc3_data->glue_base, dwc3_data->syscfg_reg_off); |
597 | |
598 | dwc3_data->rstc_pwrdn = |
599 | diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
600 | index a7e28095026d..f92c680e3937 100644 |
601 | --- a/drivers/usb/dwc3/gadget.c |
602 | +++ b/drivers/usb/dwc3/gadget.c |
603 | @@ -1069,9 +1069,9 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) |
604 | return -ESHUTDOWN; |
605 | } |
606 | |
607 | - if (WARN(req->dep != dep, "request %p belongs to '%s'\n", |
608 | + if (WARN(req->dep != dep, "request %pK belongs to '%s'\n", |
609 | &req->request, req->dep->name)) { |
610 | - dwc3_trace(trace_dwc3_gadget, "request %p belongs to '%s'", |
611 | + dwc3_trace(trace_dwc3_gadget, "request %pK belongs to '%s'", |
612 | &req->request, req->dep->name); |
613 | return -EINVAL; |
614 | } |
615 | @@ -1212,7 +1212,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, |
616 | dwc3_stop_active_transfer(dwc, dep->number, true); |
617 | goto out1; |
618 | } |
619 | - dev_err(dwc->dev, "request %p was not queued to %s\n", |
620 | + dev_err(dwc->dev, "request %pK was not queued to %s\n", |
621 | request, ep->name); |
622 | ret = -EINVAL; |
623 | goto out0; |
624 | diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c |
625 | index 1d41637a53e5..ff544f20872c 100644 |
626 | --- a/drivers/usb/host/xhci-hub.c |
627 | +++ b/drivers/usb/host/xhci-hub.c |
628 | @@ -1348,6 +1348,9 @@ int xhci_bus_suspend(struct usb_hcd *hcd) |
629 | t2 |= PORT_WKOC_E | PORT_WKCONN_E; |
630 | t2 &= ~PORT_WKDISC_E; |
631 | } |
632 | + if ((xhci->quirks & XHCI_U2_DISABLE_WAKE) && |
633 | + (hcd->speed < HCD_USB3)) |
634 | + t2 &= ~PORT_WAKE_BITS; |
635 | } else |
636 | t2 &= ~PORT_WAKE_BITS; |
637 | |
638 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c |
639 | index 69864ba38698..672751ed2ba1 100644 |
640 | --- a/drivers/usb/host/xhci-pci.c |
641 | +++ b/drivers/usb/host/xhci-pci.c |
642 | @@ -54,6 +54,11 @@ |
643 | #define PCI_DEVICE_ID_INTEL_APL_XHCI 0x5aa8 |
644 | #define PCI_DEVICE_ID_INTEL_DNV_XHCI 0x19d0 |
645 | |
646 | +#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9 |
647 | +#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba |
648 | +#define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb |
649 | +#define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc |
650 | + |
651 | static const char hcd_name[] = "xhci_hcd"; |
652 | |
653 | static struct hc_driver __read_mostly xhci_pci_hc_driver; |
654 | @@ -135,6 +140,13 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) |
655 | if (pdev->vendor == PCI_VENDOR_ID_AMD) |
656 | xhci->quirks |= XHCI_TRUST_TX_LENGTH; |
657 | |
658 | + if ((pdev->vendor == PCI_VENDOR_ID_AMD) && |
659 | + ((pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4) || |
660 | + (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_3) || |
661 | + (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_2) || |
662 | + (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_1))) |
663 | + xhci->quirks |= XHCI_U2_DISABLE_WAKE; |
664 | + |
665 | if (pdev->vendor == PCI_VENDOR_ID_INTEL) { |
666 | xhci->quirks |= XHCI_LPM_SUPPORT; |
667 | xhci->quirks |= XHCI_INTEL_HOST; |
668 | diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h |
669 | index 328fe06752ec..8336e07dc5f9 100644 |
670 | --- a/drivers/usb/host/xhci.h |
671 | +++ b/drivers/usb/host/xhci.h |
672 | @@ -1660,6 +1660,7 @@ struct xhci_hcd { |
673 | /* For controller with a broken Port Disable implementation */ |
674 | #define XHCI_BROKEN_PORT_PED (1 << 25) |
675 | #define XHCI_LIMIT_ENDPOINT_INTERVAL_7 (1 << 26) |
676 | +#define XHCI_U2_DISABLE_WAKE (1 << 27) |
677 | |
678 | unsigned int num_active_eps; |
679 | unsigned int limit_active_eps; |
680 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c |
681 | index 8bb48751028c..84b444f69c9b 100644 |
682 | --- a/drivers/usb/serial/cp210x.c |
683 | +++ b/drivers/usb/serial/cp210x.c |
684 | @@ -135,6 +135,7 @@ static const struct usb_device_id id_table[] = { |
685 | { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */ |
686 | { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */ |
687 | { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */ |
688 | + { USB_DEVICE(0x10C4, 0x8A5E) }, /* CEL EM3588 ZigBee USB Stick Long Range */ |
689 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ |
690 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ |
691 | { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ |
692 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
693 | index 3bf61acfc26b..ebe51f11105d 100644 |
694 | --- a/drivers/usb/serial/option.c |
695 | +++ b/drivers/usb/serial/option.c |
696 | @@ -1877,6 +1877,10 @@ static const struct usb_device_id option_ids[] = { |
697 | .driver_info = (kernel_ulong_t)&four_g_w100_blacklist |
698 | }, |
699 | { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, SPEEDUP_PRODUCT_SU9800, 0xff) }, |
700 | + { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, 0x9801, 0xff), |
701 | + .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, |
702 | + { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, 0x9803, 0xff), |
703 | + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, |
704 | { USB_DEVICE(LONGCHEER_VENDOR_ID, ZOOM_PRODUCT_4597) }, |
705 | { USB_DEVICE(LONGCHEER_VENDOR_ID, IBALL_3_5G_CONNECT) }, |
706 | { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) }, |
707 | diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c |
708 | index fd509ed6cf70..652b4334b26d 100644 |
709 | --- a/drivers/usb/serial/qcserial.c |
710 | +++ b/drivers/usb/serial/qcserial.c |
711 | @@ -158,6 +158,7 @@ static const struct usb_device_id id_table[] = { |
712 | {DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */ |
713 | {DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */ |
714 | {DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */ |
715 | + {DEVICE_SWI(0x1199, 0x9063)}, /* Sierra Wireless EM7305 */ |
716 | {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx */ |
717 | {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx */ |
718 | {DEVICE_SWI(0x1199, 0x9078)}, /* Sierra Wireless EM74xx */ |
719 | diff --git a/drivers/usb/usbip/stub_main.c b/drivers/usb/usbip/stub_main.c |
720 | index 44ab43fc4fcc..af10f7b131a4 100644 |
721 | --- a/drivers/usb/usbip/stub_main.c |
722 | +++ b/drivers/usb/usbip/stub_main.c |
723 | @@ -262,7 +262,11 @@ void stub_device_cleanup_urbs(struct stub_device *sdev) |
724 | kmem_cache_free(stub_priv_cache, priv); |
725 | |
726 | kfree(urb->transfer_buffer); |
727 | + urb->transfer_buffer = NULL; |
728 | + |
729 | kfree(urb->setup_packet); |
730 | + urb->setup_packet = NULL; |
731 | + |
732 | usb_free_urb(urb); |
733 | } |
734 | } |
735 | diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c |
736 | index 6b1e8c3f0e4b..be50cef645d8 100644 |
737 | --- a/drivers/usb/usbip/stub_tx.c |
738 | +++ b/drivers/usb/usbip/stub_tx.c |
739 | @@ -28,7 +28,11 @@ static void stub_free_priv_and_urb(struct stub_priv *priv) |
740 | struct urb *urb = priv->urb; |
741 | |
742 | kfree(urb->setup_packet); |
743 | + urb->setup_packet = NULL; |
744 | + |
745 | kfree(urb->transfer_buffer); |
746 | + urb->transfer_buffer = NULL; |
747 | + |
748 | list_del(&priv->list); |
749 | kmem_cache_free(stub_priv_cache, priv); |
750 | usb_free_urb(urb); |
751 | diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c |
752 | index 1afa11191000..aca0d884de73 100644 |
753 | --- a/fs/ceph/dir.c |
754 | +++ b/fs/ceph/dir.c |
755 | @@ -315,7 +315,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) |
756 | struct ceph_mds_client *mdsc = fsc->mdsc; |
757 | int i; |
758 | int err; |
759 | - u32 ftype; |
760 | + unsigned frag = -1; |
761 | struct ceph_mds_reply_info_parsed *rinfo; |
762 | |
763 | dout("readdir %p file %p pos %llx\n", inode, file, ctx->pos); |
764 | @@ -362,7 +362,6 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) |
765 | /* do we have the correct frag content buffered? */ |
766 | if (need_send_readdir(fi, ctx->pos)) { |
767 | struct ceph_mds_request *req; |
768 | - unsigned frag; |
769 | int op = ceph_snap(inode) == CEPH_SNAPDIR ? |
770 | CEPH_MDS_OP_LSSNAP : CEPH_MDS_OP_READDIR; |
771 | |
772 | @@ -373,8 +372,11 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) |
773 | } |
774 | |
775 | if (is_hash_order(ctx->pos)) { |
776 | - frag = ceph_choose_frag(ci, fpos_hash(ctx->pos), |
777 | - NULL, NULL); |
778 | + /* fragtree isn't always accurate. choose frag |
779 | + * based on previous reply when possible. */ |
780 | + if (frag == (unsigned)-1) |
781 | + frag = ceph_choose_frag(ci, fpos_hash(ctx->pos), |
782 | + NULL, NULL); |
783 | } else { |
784 | frag = fpos_frag(ctx->pos); |
785 | } |
786 | @@ -497,6 +499,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) |
787 | struct ceph_mds_reply_dir_entry *rde = rinfo->dir_entries + i; |
788 | struct ceph_vino vino; |
789 | ino_t ino; |
790 | + u32 ftype; |
791 | |
792 | BUG_ON(rde->offset < ctx->pos); |
793 | |
794 | @@ -519,15 +522,17 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) |
795 | ctx->pos++; |
796 | } |
797 | |
798 | + ceph_mdsc_put_request(fi->last_readdir); |
799 | + fi->last_readdir = NULL; |
800 | + |
801 | if (fi->next_offset > 2) { |
802 | - ceph_mdsc_put_request(fi->last_readdir); |
803 | - fi->last_readdir = NULL; |
804 | + frag = fi->frag; |
805 | goto more; |
806 | } |
807 | |
808 | /* more frags? */ |
809 | if (!ceph_frag_is_rightmost(fi->frag)) { |
810 | - unsigned frag = ceph_frag_next(fi->frag); |
811 | + frag = ceph_frag_next(fi->frag); |
812 | if (is_hash_order(ctx->pos)) { |
813 | loff_t new_pos = ceph_make_fpos(ceph_frag_value(frag), |
814 | fi->next_offset, true); |
815 | diff --git a/fs/fcntl.c b/fs/fcntl.c |
816 | index 350a2c8cfd28..1493ceb0477d 100644 |
817 | --- a/fs/fcntl.c |
818 | +++ b/fs/fcntl.c |
819 | @@ -741,16 +741,10 @@ static int __init fcntl_init(void) |
820 | * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY |
821 | * is defined as O_NONBLOCK on some platforms and not on others. |
822 | */ |
823 | - BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32( |
824 | - O_RDONLY | O_WRONLY | O_RDWR | |
825 | - O_CREAT | O_EXCL | O_NOCTTY | |
826 | - O_TRUNC | O_APPEND | /* O_NONBLOCK | */ |
827 | - __O_SYNC | O_DSYNC | FASYNC | |
828 | - O_DIRECT | O_LARGEFILE | O_DIRECTORY | |
829 | - O_NOFOLLOW | O_NOATIME | O_CLOEXEC | |
830 | - __FMODE_EXEC | O_PATH | __O_TMPFILE | |
831 | - __FMODE_NONOTIFY |
832 | - )); |
833 | + BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ != |
834 | + HWEIGHT32( |
835 | + (VALID_OPEN_FLAGS & ~(O_NONBLOCK | O_NDELAY)) | |
836 | + __FMODE_EXEC | __FMODE_NONOTIFY)); |
837 | |
838 | fasync_cache = kmem_cache_create("fasync_cache", |
839 | sizeof(struct fasync_struct), 0, SLAB_PANIC, NULL); |
840 | diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c |
841 | index 6528724ad6e5..7bff6f46f5da 100644 |
842 | --- a/fs/gfs2/glock.c |
843 | +++ b/fs/gfs2/glock.c |
844 | @@ -80,9 +80,9 @@ static struct rhashtable_params ht_parms = { |
845 | |
846 | static struct rhashtable gl_hash_table; |
847 | |
848 | -void gfs2_glock_free(struct gfs2_glock *gl) |
849 | +static void gfs2_glock_dealloc(struct rcu_head *rcu) |
850 | { |
851 | - struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; |
852 | + struct gfs2_glock *gl = container_of(rcu, struct gfs2_glock, gl_rcu); |
853 | |
854 | if (gl->gl_ops->go_flags & GLOF_ASPACE) { |
855 | kmem_cache_free(gfs2_glock_aspace_cachep, gl); |
856 | @@ -90,6 +90,13 @@ void gfs2_glock_free(struct gfs2_glock *gl) |
857 | kfree(gl->gl_lksb.sb_lvbptr); |
858 | kmem_cache_free(gfs2_glock_cachep, gl); |
859 | } |
860 | +} |
861 | + |
862 | +void gfs2_glock_free(struct gfs2_glock *gl) |
863 | +{ |
864 | + struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; |
865 | + |
866 | + call_rcu(&gl->gl_rcu, gfs2_glock_dealloc); |
867 | if (atomic_dec_and_test(&sdp->sd_glock_disposal)) |
868 | wake_up(&sdp->sd_glock_wait); |
869 | } |
870 | diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h |
871 | index 51519c2836b5..a04bf9533d9e 100644 |
872 | --- a/fs/gfs2/incore.h |
873 | +++ b/fs/gfs2/incore.h |
874 | @@ -370,6 +370,7 @@ struct gfs2_glock { |
875 | loff_t end; |
876 | } gl_vm; |
877 | }; |
878 | + struct rcu_head gl_rcu; |
879 | struct rhash_head gl_node; |
880 | }; |
881 | |
882 | diff --git a/fs/open.c b/fs/open.c |
883 | index d3ed8171e8e0..a6c6244f4993 100644 |
884 | --- a/fs/open.c |
885 | +++ b/fs/open.c |
886 | @@ -902,6 +902,12 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o |
887 | int lookup_flags = 0; |
888 | int acc_mode = ACC_MODE(flags); |
889 | |
890 | + /* |
891 | + * Clear out all open flags we don't know about so that we don't report |
892 | + * them in fcntl(F_GETFD) or similar interfaces. |
893 | + */ |
894 | + flags &= VALID_OPEN_FLAGS; |
895 | + |
896 | if (flags & (O_CREAT | __O_TMPFILE)) |
897 | op->mode = (mode & S_IALLUGO) | S_IFREG; |
898 | else |
899 | diff --git a/include/linux/fcntl.h b/include/linux/fcntl.h |
900 | index 76ce329e656d..1b48d9c9a561 100644 |
901 | --- a/include/linux/fcntl.h |
902 | +++ b/include/linux/fcntl.h |
903 | @@ -3,6 +3,12 @@ |
904 | |
905 | #include <uapi/linux/fcntl.h> |
906 | |
907 | +/* list of all valid flags for the open/openat flags argument: */ |
908 | +#define VALID_OPEN_FLAGS \ |
909 | + (O_RDONLY | O_WRONLY | O_RDWR | O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | \ |
910 | + O_APPEND | O_NDELAY | O_NONBLOCK | O_NDELAY | __O_SYNC | O_DSYNC | \ |
911 | + FASYNC | O_DIRECT | O_LARGEFILE | O_DIRECTORY | O_NOFOLLOW | \ |
912 | + O_NOATIME | O_CLOEXEC | O_PATH | __O_TMPFILE) |
913 | |
914 | #ifndef force_o_largefile |
915 | #define force_o_largefile() (BITS_PER_LONG != 32) |
916 | diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h |
917 | index 66fc13705ab7..492034126876 100644 |
918 | --- a/include/linux/usb/hcd.h |
919 | +++ b/include/linux/usb/hcd.h |
920 | @@ -561,9 +561,9 @@ extern void usb_ep0_reinit(struct usb_device *); |
921 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) |
922 | |
923 | #define EndpointRequest \ |
924 | - ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) |
925 | + ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) |
926 | #define EndpointOutRequest \ |
927 | - ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) |
928 | + ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) |
929 | |
930 | /* class requests from the USB 2.0 hub spec, table 11-15 */ |
931 | /* GetBusState and SetHubDescriptor are optional, omitted */ |
932 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c |
933 | index c1095cdc0fe2..265e0d0216e3 100644 |
934 | --- a/kernel/sysctl.c |
935 | +++ b/kernel/sysctl.c |
936 | @@ -2146,9 +2146,12 @@ static int do_proc_douintvec_conv(bool *negp, unsigned long *lvalp, |
937 | if (write) { |
938 | if (*negp) |
939 | return -EINVAL; |
940 | + if (*lvalp > UINT_MAX) |
941 | + return -EINVAL; |
942 | *valp = *lvalp; |
943 | } else { |
944 | unsigned int val = *valp; |
945 | + *negp = false; |
946 | *lvalp = (unsigned long)val; |
947 | } |
948 | return 0; |
949 | diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c |
950 | index 8d2b4d8fd714..5ff45cae4ac4 100644 |
951 | --- a/kernel/trace/trace_kprobe.c |
952 | +++ b/kernel/trace/trace_kprobe.c |
953 | @@ -667,30 +667,25 @@ static int create_trace_kprobe(int argc, char **argv) |
954 | pr_info("Probe point is not specified.\n"); |
955 | return -EINVAL; |
956 | } |
957 | - if (isdigit(argv[1][0])) { |
958 | - if (is_return) { |
959 | - pr_info("Return probe point must be a symbol.\n"); |
960 | - return -EINVAL; |
961 | - } |
962 | - /* an address specified */ |
963 | - ret = kstrtoul(&argv[1][0], 0, (unsigned long *)&addr); |
964 | - if (ret) { |
965 | - pr_info("Failed to parse address.\n"); |
966 | - return ret; |
967 | - } |
968 | - } else { |
969 | + |
970 | + /* try to parse an address. if that fails, try to read the |
971 | + * input as a symbol. */ |
972 | + if (kstrtoul(argv[1], 0, (unsigned long *)&addr)) { |
973 | /* a symbol specified */ |
974 | symbol = argv[1]; |
975 | /* TODO: support .init module functions */ |
976 | ret = traceprobe_split_symbol_offset(symbol, &offset); |
977 | if (ret) { |
978 | - pr_info("Failed to parse symbol.\n"); |
979 | + pr_info("Failed to parse either an address or a symbol.\n"); |
980 | return ret; |
981 | } |
982 | if (offset && is_return) { |
983 | pr_info("Return probe must be used without offset.\n"); |
984 | return -EINVAL; |
985 | } |
986 | + } else if (is_return) { |
987 | + pr_info("Return probe point must be a symbol.\n"); |
988 | + return -EINVAL; |
989 | } |
990 | argc -= 2; argv += 2; |
991 | |
992 | diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c |
993 | index 56c458dd16a2..8d9330aba77e 100644 |
994 | --- a/security/keys/encrypted-keys/encrypted.c |
995 | +++ b/security/keys/encrypted-keys/encrypted.c |
996 | @@ -437,7 +437,7 @@ static struct skcipher_request *init_skcipher_req(const u8 *key, |
997 | static struct key *request_master_key(struct encrypted_key_payload *epayload, |
998 | const u8 **master_key, size_t *master_keylen) |
999 | { |
1000 | - struct key *mkey = NULL; |
1001 | + struct key *mkey = ERR_PTR(-EINVAL); |
1002 | |
1003 | if (!strncmp(epayload->master_desc, KEY_TRUSTED_PREFIX, |
1004 | KEY_TRUSTED_PREFIX_LEN)) { |
1005 | diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c |
1006 | index 9c365a7f758d..7899a2cdeb42 100644 |
1007 | --- a/sound/soc/codecs/rt286.c |
1008 | +++ b/sound/soc/codecs/rt286.c |
1009 | @@ -1108,6 +1108,13 @@ static const struct dmi_system_id force_combo_jack_table[] = { |
1010 | DMI_MATCH(DMI_PRODUCT_NAME, "Kabylake Client platform") |
1011 | } |
1012 | }, |
1013 | + { |
1014 | + .ident = "Thinkpad Helix 2nd", |
1015 | + .matches = { |
1016 | + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), |
1017 | + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Helix 2nd") |
1018 | + } |
1019 | + }, |
1020 | |
1021 | { } |
1022 | }; |