Contents of /trunk/kernel-magellan/patches-4.16/0100-4.16.1-all-fixes.patch
Parent Directory | Revision Log
Revision 3102 -
(show annotations)
(download)
Mon Apr 23 10:15:11 2018 UTC (6 years, 5 months ago) by niro
File size: 42980 byte(s)
Mon Apr 23 10:15:11 2018 UTC (6 years, 5 months ago) by niro
File size: 42980 byte(s)
-added patches up to linux-4.16.3
1 | diff --git a/Documentation/devicetree/bindings/serial/8250.txt b/Documentation/devicetree/bindings/serial/8250.txt |
2 | index dad3b2ec66d4..aeb6db4e35c3 100644 |
3 | --- a/Documentation/devicetree/bindings/serial/8250.txt |
4 | +++ b/Documentation/devicetree/bindings/serial/8250.txt |
5 | @@ -24,6 +24,7 @@ Required properties: |
6 | - "ti,da830-uart" |
7 | - "aspeed,ast2400-vuart" |
8 | - "aspeed,ast2500-vuart" |
9 | + - "nuvoton,npcm750-uart" |
10 | - "serial" if the port type is unknown. |
11 | - reg : offset and length of the register set for the device. |
12 | - interrupts : should contain uart interrupt. |
13 | diff --git a/Makefile b/Makefile |
14 | index 363dd096e46e..1773c718074e 100644 |
15 | --- a/Makefile |
16 | +++ b/Makefile |
17 | @@ -1,7 +1,7 @@ |
18 | # SPDX-License-Identifier: GPL-2.0 |
19 | VERSION = 4 |
20 | PATCHLEVEL = 16 |
21 | -SUBLEVEL = 0 |
22 | +SUBLEVEL = 1 |
23 | EXTRAVERSION = |
24 | NAME = Fearless Coyote |
25 | |
26 | diff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile |
27 | index 30ef8e291271..c9919c2b7ad1 100644 |
28 | --- a/arch/arm/crypto/Makefile |
29 | +++ b/arch/arm/crypto/Makefile |
30 | @@ -54,6 +54,7 @@ crct10dif-arm-ce-y := crct10dif-ce-core.o crct10dif-ce-glue.o |
31 | crc32-arm-ce-y:= crc32-ce-core.o crc32-ce-glue.o |
32 | chacha20-neon-y := chacha20-neon-core.o chacha20-neon-glue.o |
33 | |
34 | +ifdef REGENERATE_ARM_CRYPTO |
35 | quiet_cmd_perl = PERL $@ |
36 | cmd_perl = $(PERL) $(<) > $(@) |
37 | |
38 | @@ -62,5 +63,6 @@ $(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl |
39 | |
40 | $(src)/sha512-core.S_shipped: $(src)/sha512-armv4.pl |
41 | $(call cmd,perl) |
42 | +endif |
43 | |
44 | .PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S |
45 | diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile |
46 | index cee9b8d9830b..dfe651bdf993 100644 |
47 | --- a/arch/arm64/crypto/Makefile |
48 | +++ b/arch/arm64/crypto/Makefile |
49 | @@ -67,6 +67,7 @@ CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS |
50 | $(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE |
51 | $(call if_changed_rule,cc_o_c) |
52 | |
53 | +ifdef REGENERATE_ARM64_CRYPTO |
54 | quiet_cmd_perlasm = PERLASM $@ |
55 | cmd_perlasm = $(PERL) $(<) void $(@) |
56 | |
57 | @@ -75,5 +76,6 @@ $(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl |
58 | |
59 | $(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl |
60 | $(call cmd,perlasm) |
61 | +endif |
62 | |
63 | .PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S |
64 | diff --git a/arch/x86/crypto/cast5_avx_glue.c b/arch/x86/crypto/cast5_avx_glue.c |
65 | index dbea6020ffe7..575292a33bdf 100644 |
66 | --- a/arch/x86/crypto/cast5_avx_glue.c |
67 | +++ b/arch/x86/crypto/cast5_avx_glue.c |
68 | @@ -66,8 +66,6 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk, |
69 | void (*fn)(struct cast5_ctx *ctx, u8 *dst, const u8 *src); |
70 | int err; |
71 | |
72 | - fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way; |
73 | - |
74 | err = blkcipher_walk_virt(desc, walk); |
75 | desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; |
76 | |
77 | @@ -79,6 +77,7 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk, |
78 | |
79 | /* Process multi-block batch */ |
80 | if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) { |
81 | + fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way; |
82 | do { |
83 | fn(ctx, wdst, wsrc); |
84 | |
85 | diff --git a/block/bio.c b/block/bio.c |
86 | index e1708db48258..53e0f0a1ed94 100644 |
87 | --- a/block/bio.c |
88 | +++ b/block/bio.c |
89 | @@ -43,9 +43,9 @@ |
90 | * break badly! cannot be bigger than what you can fit into an |
91 | * unsigned short |
92 | */ |
93 | -#define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) } |
94 | +#define BV(x, n) { .nr_vecs = x, .name = "biovec-"#n } |
95 | static struct biovec_slab bvec_slabs[BVEC_POOL_NR] __read_mostly = { |
96 | - BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES), |
97 | + BV(1, 1), BV(4, 4), BV(16, 16), BV(64, 64), BV(128, 128), BV(BIO_MAX_PAGES, max), |
98 | }; |
99 | #undef BV |
100 | |
101 | diff --git a/crypto/ahash.c b/crypto/ahash.c |
102 | index 266fc1d64f61..c03cc177870b 100644 |
103 | --- a/crypto/ahash.c |
104 | +++ b/crypto/ahash.c |
105 | @@ -92,13 +92,14 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err) |
106 | |
107 | if (nbytes && walk->offset & alignmask && !err) { |
108 | walk->offset = ALIGN(walk->offset, alignmask + 1); |
109 | - walk->data += walk->offset; |
110 | - |
111 | nbytes = min(nbytes, |
112 | ((unsigned int)(PAGE_SIZE)) - walk->offset); |
113 | walk->entrylen -= nbytes; |
114 | |
115 | - return nbytes; |
116 | + if (nbytes) { |
117 | + walk->data += walk->offset; |
118 | + return nbytes; |
119 | + } |
120 | } |
121 | |
122 | if (walk->flags & CRYPTO_ALG_ASYNC) |
123 | diff --git a/crypto/lrw.c b/crypto/lrw.c |
124 | index cbbd7c50ad19..1d813a6d3fec 100644 |
125 | --- a/crypto/lrw.c |
126 | +++ b/crypto/lrw.c |
127 | @@ -313,7 +313,7 @@ static void exit_crypt(struct skcipher_request *req) |
128 | rctx->left = 0; |
129 | |
130 | if (rctx->ext) |
131 | - kfree(rctx->ext); |
132 | + kzfree(rctx->ext); |
133 | } |
134 | |
135 | static int do_encrypt(struct skcipher_request *req, int err) |
136 | diff --git a/crypto/testmgr.h b/crypto/testmgr.h |
137 | index 6044f6906bd6..69fb51e7b6f1 100644 |
138 | --- a/crypto/testmgr.h |
139 | +++ b/crypto/testmgr.h |
140 | @@ -548,7 +548,7 @@ static const struct akcipher_testvec rsa_tv_template[] = { |
141 | static const struct akcipher_testvec pkcs1pad_rsa_tv_template[] = { |
142 | { |
143 | .key = |
144 | - "\x30\x82\x03\x1f\x02\x01\x10\x02\x82\x01\x01\x00\xd7\x1e\x77\x82" |
145 | + "\x30\x82\x03\x1f\x02\x01\x00\x02\x82\x01\x01\x00\xd7\x1e\x77\x82" |
146 | "\x8c\x92\x31\xe7\x69\x02\xa2\xd5\x5c\x78\xde\xa2\x0c\x8f\xfe\x28" |
147 | "\x59\x31\xdf\x40\x9c\x60\x61\x06\xb9\x2f\x62\x40\x80\x76\xcb\x67" |
148 | "\x4a\xb5\x59\x56\x69\x17\x07\xfa\xf9\x4c\xbd\x6c\x37\x7a\x46\x7d" |
149 | @@ -597,8 +597,8 @@ static const struct akcipher_testvec pkcs1pad_rsa_tv_template[] = { |
150 | "\xfe\xf8\x27\x1b\xd6\x55\x60\x5e\x48\xb7\x6d\x9a\xa8\x37\xf9\x7a" |
151 | "\xde\x1b\xcd\x5d\x1a\x30\xd4\xe9\x9e\x5b\x3c\x15\xf8\x9c\x1f\xda" |
152 | "\xd1\x86\x48\x55\xce\x83\xee\x8e\x51\xc7\xde\x32\x12\x47\x7d\x46" |
153 | - "\xb8\x35\xdf\x41\x02\x01\x30\x02\x01\x30\x02\x01\x30\x02\x01\x30" |
154 | - "\x02\x01\x30", |
155 | + "\xb8\x35\xdf\x41\x02\x01\x00\x02\x01\x00\x02\x01\x00\x02\x01\x00" |
156 | + "\x02\x01\x00", |
157 | .key_len = 804, |
158 | /* |
159 | * m is SHA256 hash of following message: |
160 | diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c |
161 | index 52ec5174bcb1..e7cb0c6ade81 100644 |
162 | --- a/drivers/base/arch_topology.c |
163 | +++ b/drivers/base/arch_topology.c |
164 | @@ -169,11 +169,11 @@ bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu) |
165 | } |
166 | |
167 | #ifdef CONFIG_CPU_FREQ |
168 | -static cpumask_var_t cpus_to_visit __initdata; |
169 | -static void __init parsing_done_workfn(struct work_struct *work); |
170 | -static __initdata DECLARE_WORK(parsing_done_work, parsing_done_workfn); |
171 | +static cpumask_var_t cpus_to_visit; |
172 | +static void parsing_done_workfn(struct work_struct *work); |
173 | +static DECLARE_WORK(parsing_done_work, parsing_done_workfn); |
174 | |
175 | -static int __init |
176 | +static int |
177 | init_cpu_capacity_callback(struct notifier_block *nb, |
178 | unsigned long val, |
179 | void *data) |
180 | @@ -209,7 +209,7 @@ init_cpu_capacity_callback(struct notifier_block *nb, |
181 | return 0; |
182 | } |
183 | |
184 | -static struct notifier_block init_cpu_capacity_notifier __initdata = { |
185 | +static struct notifier_block init_cpu_capacity_notifier = { |
186 | .notifier_call = init_cpu_capacity_callback, |
187 | }; |
188 | |
189 | @@ -242,7 +242,7 @@ static int __init register_cpufreq_notifier(void) |
190 | } |
191 | core_initcall(register_cpufreq_notifier); |
192 | |
193 | -static void __init parsing_done_workfn(struct work_struct *work) |
194 | +static void parsing_done_workfn(struct work_struct *work) |
195 | { |
196 | cpufreq_unregister_notifier(&init_cpu_capacity_notifier, |
197 | CPUFREQ_POLICY_NOTIFIER); |
198 | diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c |
199 | index 40b9fb247010..47a4127a6067 100644 |
200 | --- a/drivers/bluetooth/hci_bcm.c |
201 | +++ b/drivers/bluetooth/hci_bcm.c |
202 | @@ -1080,6 +1080,7 @@ static const struct hci_uart_proto bcm_proto = { |
203 | #ifdef CONFIG_ACPI |
204 | static const struct acpi_device_id bcm_acpi_match[] = { |
205 | { "BCM2E1A", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
206 | + { "BCM2E38", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
207 | { "BCM2E39", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
208 | { "BCM2E3A", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
209 | { "BCM2E3D", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
210 | @@ -1092,12 +1093,17 @@ static const struct acpi_device_id bcm_acpi_match[] = { |
211 | { "BCM2E67", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
212 | { "BCM2E71", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
213 | { "BCM2E72", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
214 | + { "BCM2E74", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
215 | { "BCM2E7B", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
216 | { "BCM2E7C", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
217 | { "BCM2E7E", (kernel_ulong_t)&acpi_bcm_int_first_gpios }, |
218 | + { "BCM2E83", (kernel_ulong_t)&acpi_bcm_int_first_gpios }, |
219 | + { "BCM2E84", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
220 | + { "BCM2E90", (kernel_ulong_t)&acpi_bcm_int_last_gpios }, |
221 | { "BCM2E95", (kernel_ulong_t)&acpi_bcm_int_first_gpios }, |
222 | { "BCM2E96", (kernel_ulong_t)&acpi_bcm_int_first_gpios }, |
223 | { "BCM2EA4", (kernel_ulong_t)&acpi_bcm_int_first_gpios }, |
224 | + { "BCM2EAA", (kernel_ulong_t)&acpi_bcm_int_first_gpios }, |
225 | { }, |
226 | }; |
227 | MODULE_DEVICE_TABLE(acpi, bcm_acpi_match); |
228 | diff --git a/drivers/char/mem.c b/drivers/char/mem.c |
229 | index 052011bcf100..ffeb60d3434c 100644 |
230 | --- a/drivers/char/mem.c |
231 | +++ b/drivers/char/mem.c |
232 | @@ -137,7 +137,7 @@ static ssize_t read_mem(struct file *file, char __user *buf, |
233 | |
234 | while (count > 0) { |
235 | unsigned long remaining; |
236 | - int allowed; |
237 | + int allowed, probe; |
238 | |
239 | sz = size_inside_page(p, count); |
240 | |
241 | @@ -160,9 +160,9 @@ static ssize_t read_mem(struct file *file, char __user *buf, |
242 | if (!ptr) |
243 | goto failed; |
244 | |
245 | - err = probe_kernel_read(bounce, ptr, sz); |
246 | + probe = probe_kernel_read(bounce, ptr, sz); |
247 | unxlate_dev_mem_ptr(p, ptr); |
248 | - if (err) |
249 | + if (probe) |
250 | goto failed; |
251 | |
252 | remaining = copy_to_user(buf, bounce, sz); |
253 | diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c |
254 | index e843cf410373..361e750f9cba 100644 |
255 | --- a/drivers/crypto/caam/ctrl.c |
256 | +++ b/drivers/crypto/caam/ctrl.c |
257 | @@ -815,9 +815,6 @@ static int caam_probe(struct platform_device *pdev) |
258 | return 0; |
259 | |
260 | caam_remove: |
261 | -#ifdef CONFIG_DEBUG_FS |
262 | - debugfs_remove_recursive(ctrlpriv->dfs_root); |
263 | -#endif |
264 | caam_remove(pdev); |
265 | return ret; |
266 | |
267 | diff --git a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c |
268 | index 60fc0fa26fd3..26687f318de6 100644 |
269 | --- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c |
270 | +++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c |
271 | @@ -46,7 +46,7 @@ static int ccp_aes_cmac_complete(struct crypto_async_request *async_req, |
272 | } |
273 | |
274 | /* Update result area if supplied */ |
275 | - if (req->result) |
276 | + if (req->result && rctx->final) |
277 | memcpy(req->result, rctx->iv, digest_size); |
278 | |
279 | e_free: |
280 | diff --git a/drivers/crypto/ccp/ccp-crypto-rsa.c b/drivers/crypto/ccp/ccp-crypto-rsa.c |
281 | index e6db8672d89c..05850dfd7940 100644 |
282 | --- a/drivers/crypto/ccp/ccp-crypto-rsa.c |
283 | +++ b/drivers/crypto/ccp/ccp-crypto-rsa.c |
284 | @@ -60,10 +60,9 @@ static int ccp_rsa_complete(struct crypto_async_request *async_req, int ret) |
285 | |
286 | static unsigned int ccp_rsa_maxsize(struct crypto_akcipher *tfm) |
287 | { |
288 | - if (ccp_version() > CCP_VERSION(3, 0)) |
289 | - return CCP5_RSA_MAXMOD; |
290 | - else |
291 | - return CCP_RSA_MAXMOD; |
292 | + struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm); |
293 | + |
294 | + return ctx->u.rsa.n_len; |
295 | } |
296 | |
297 | static int ccp_rsa_crypt(struct akcipher_request *req, bool encrypt) |
298 | diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c b/drivers/crypto/ccp/ccp-crypto-sha.c |
299 | index 8b9b16d433f7..871c9628a2ee 100644 |
300 | --- a/drivers/crypto/ccp/ccp-crypto-sha.c |
301 | +++ b/drivers/crypto/ccp/ccp-crypto-sha.c |
302 | @@ -47,7 +47,7 @@ static int ccp_sha_complete(struct crypto_async_request *async_req, int ret) |
303 | } |
304 | |
305 | /* Update result area if supplied */ |
306 | - if (req->result) |
307 | + if (req->result && rctx->final) |
308 | memcpy(req->result, rctx->ctx, digest_size); |
309 | |
310 | e_free: |
311 | diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c |
312 | index 225e74a7f724..0dd3a7ac1dd1 100644 |
313 | --- a/drivers/crypto/inside-secure/safexcel.c |
314 | +++ b/drivers/crypto/inside-secure/safexcel.c |
315 | @@ -894,7 +894,7 @@ static int safexcel_probe(struct platform_device *pdev) |
316 | return PTR_ERR(priv->base); |
317 | } |
318 | |
319 | - priv->clk = of_clk_get(dev->of_node, 0); |
320 | + priv->clk = devm_clk_get(&pdev->dev, NULL); |
321 | if (!IS_ERR(priv->clk)) { |
322 | ret = clk_prepare_enable(priv->clk); |
323 | if (ret) { |
324 | diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c |
325 | index 6882fa2f8bad..c805d0122c0b 100644 |
326 | --- a/drivers/crypto/talitos.c |
327 | +++ b/drivers/crypto/talitos.c |
328 | @@ -832,8 +832,6 @@ struct talitos_ctx { |
329 | unsigned int keylen; |
330 | unsigned int enckeylen; |
331 | unsigned int authkeylen; |
332 | - dma_addr_t dma_buf; |
333 | - dma_addr_t dma_hw_context; |
334 | }; |
335 | |
336 | #define HASH_MAX_BLOCK_SIZE SHA512_BLOCK_SIZE |
337 | @@ -1130,10 +1128,10 @@ static int sg_to_link_tbl_offset(struct scatterlist *sg, int sg_count, |
338 | return count; |
339 | } |
340 | |
341 | -static int talitos_sg_map(struct device *dev, struct scatterlist *src, |
342 | - unsigned int len, struct talitos_edesc *edesc, |
343 | - struct talitos_ptr *ptr, |
344 | - int sg_count, unsigned int offset, int tbl_off) |
345 | +static int talitos_sg_map_ext(struct device *dev, struct scatterlist *src, |
346 | + unsigned int len, struct talitos_edesc *edesc, |
347 | + struct talitos_ptr *ptr, int sg_count, |
348 | + unsigned int offset, int tbl_off, int elen) |
349 | { |
350 | struct talitos_private *priv = dev_get_drvdata(dev); |
351 | bool is_sec1 = has_ftr_sec1(priv); |
352 | @@ -1142,6 +1140,7 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src, |
353 | to_talitos_ptr(ptr, 0, 0, is_sec1); |
354 | return 1; |
355 | } |
356 | + to_talitos_ptr_ext_set(ptr, elen, is_sec1); |
357 | if (sg_count == 1) { |
358 | to_talitos_ptr(ptr, sg_dma_address(src) + offset, len, is_sec1); |
359 | return sg_count; |
360 | @@ -1150,7 +1149,7 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src, |
361 | to_talitos_ptr(ptr, edesc->dma_link_tbl + offset, len, is_sec1); |
362 | return sg_count; |
363 | } |
364 | - sg_count = sg_to_link_tbl_offset(src, sg_count, offset, len, |
365 | + sg_count = sg_to_link_tbl_offset(src, sg_count, offset, len + elen, |
366 | &edesc->link_tbl[tbl_off]); |
367 | if (sg_count == 1) { |
368 | /* Only one segment now, so no link tbl needed*/ |
369 | @@ -1164,6 +1163,15 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src, |
370 | return sg_count; |
371 | } |
372 | |
373 | +static int talitos_sg_map(struct device *dev, struct scatterlist *src, |
374 | + unsigned int len, struct talitos_edesc *edesc, |
375 | + struct talitos_ptr *ptr, int sg_count, |
376 | + unsigned int offset, int tbl_off) |
377 | +{ |
378 | + return talitos_sg_map_ext(dev, src, len, edesc, ptr, sg_count, offset, |
379 | + tbl_off, 0); |
380 | +} |
381 | + |
382 | /* |
383 | * fill in and submit ipsec_esp descriptor |
384 | */ |
385 | @@ -1181,7 +1189,7 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, |
386 | unsigned int ivsize = crypto_aead_ivsize(aead); |
387 | int tbl_off = 0; |
388 | int sg_count, ret; |
389 | - int sg_link_tbl_len; |
390 | + int elen = 0; |
391 | bool sync_needed = false; |
392 | struct talitos_private *priv = dev_get_drvdata(dev); |
393 | bool is_sec1 = has_ftr_sec1(priv); |
394 | @@ -1223,17 +1231,11 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, |
395 | * extent is bytes of HMAC postpended to ciphertext, |
396 | * typically 12 for ipsec |
397 | */ |
398 | - sg_link_tbl_len = cryptlen; |
399 | - |
400 | - if (is_ipsec_esp) { |
401 | - to_talitos_ptr_ext_set(&desc->ptr[4], authsize, is_sec1); |
402 | - |
403 | - if (desc->hdr & DESC_HDR_MODE1_MDEU_CICV) |
404 | - sg_link_tbl_len += authsize; |
405 | - } |
406 | + if (is_ipsec_esp && (desc->hdr & DESC_HDR_MODE1_MDEU_CICV)) |
407 | + elen = authsize; |
408 | |
409 | - ret = talitos_sg_map(dev, areq->src, sg_link_tbl_len, edesc, |
410 | - &desc->ptr[4], sg_count, areq->assoclen, tbl_off); |
411 | + ret = talitos_sg_map_ext(dev, areq->src, cryptlen, edesc, &desc->ptr[4], |
412 | + sg_count, areq->assoclen, tbl_off, elen); |
413 | |
414 | if (ret > 1) { |
415 | tbl_off += ret; |
416 | @@ -1690,9 +1692,30 @@ static void common_nonsnoop_hash_unmap(struct device *dev, |
417 | struct ahash_request *areq) |
418 | { |
419 | struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq); |
420 | + struct talitos_private *priv = dev_get_drvdata(dev); |
421 | + bool is_sec1 = has_ftr_sec1(priv); |
422 | + struct talitos_desc *desc = &edesc->desc; |
423 | + struct talitos_desc *desc2 = desc + 1; |
424 | + |
425 | + unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE); |
426 | + if (desc->next_desc && |
427 | + desc->ptr[5].ptr != desc2->ptr[5].ptr) |
428 | + unmap_single_talitos_ptr(dev, &desc2->ptr[5], DMA_FROM_DEVICE); |
429 | |
430 | talitos_sg_unmap(dev, edesc, req_ctx->psrc, NULL, 0, 0); |
431 | |
432 | + /* When using hashctx-in, must unmap it. */ |
433 | + if (from_talitos_ptr_len(&edesc->desc.ptr[1], is_sec1)) |
434 | + unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1], |
435 | + DMA_TO_DEVICE); |
436 | + else if (desc->next_desc) |
437 | + unmap_single_talitos_ptr(dev, &desc2->ptr[1], |
438 | + DMA_TO_DEVICE); |
439 | + |
440 | + if (is_sec1 && req_ctx->nbuf) |
441 | + unmap_single_talitos_ptr(dev, &desc->ptr[3], |
442 | + DMA_TO_DEVICE); |
443 | + |
444 | if (edesc->dma_len) |
445 | dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len, |
446 | DMA_BIDIRECTIONAL); |
447 | @@ -1766,8 +1789,10 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, |
448 | |
449 | /* hash context in */ |
450 | if (!req_ctx->first || req_ctx->swinit) { |
451 | - to_talitos_ptr(&desc->ptr[1], ctx->dma_hw_context, |
452 | - req_ctx->hw_context_size, is_sec1); |
453 | + map_single_talitos_ptr(dev, &desc->ptr[1], |
454 | + req_ctx->hw_context_size, |
455 | + (char *)req_ctx->hw_context, |
456 | + DMA_TO_DEVICE); |
457 | req_ctx->swinit = 0; |
458 | } |
459 | /* Indicate next op is not the first. */ |
460 | @@ -1793,10 +1818,9 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, |
461 | * data in |
462 | */ |
463 | if (is_sec1 && req_ctx->nbuf) { |
464 | - dma_addr_t dma_buf = ctx->dma_buf + req_ctx->buf_idx * |
465 | - HASH_MAX_BLOCK_SIZE; |
466 | - |
467 | - to_talitos_ptr(&desc->ptr[3], dma_buf, req_ctx->nbuf, is_sec1); |
468 | + map_single_talitos_ptr(dev, &desc->ptr[3], req_ctx->nbuf, |
469 | + req_ctx->buf[req_ctx->buf_idx], |
470 | + DMA_TO_DEVICE); |
471 | } else { |
472 | sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc, |
473 | &desc->ptr[3], sg_count, offset, 0); |
474 | @@ -1812,8 +1836,9 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, |
475 | crypto_ahash_digestsize(tfm), |
476 | areq->result, DMA_FROM_DEVICE); |
477 | else |
478 | - to_talitos_ptr(&desc->ptr[5], ctx->dma_hw_context, |
479 | - req_ctx->hw_context_size, is_sec1); |
480 | + map_single_talitos_ptr(dev, &desc->ptr[5], |
481 | + req_ctx->hw_context_size, |
482 | + req_ctx->hw_context, DMA_FROM_DEVICE); |
483 | |
484 | /* last DWORD empty */ |
485 | |
486 | @@ -1832,9 +1857,14 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, |
487 | desc->hdr |= DESC_HDR_MODE0_MDEU_CONT; |
488 | desc->hdr &= ~DESC_HDR_DONE_NOTIFY; |
489 | |
490 | - to_talitos_ptr(&desc2->ptr[1], ctx->dma_hw_context, |
491 | - req_ctx->hw_context_size, is_sec1); |
492 | - |
493 | + if (desc->ptr[1].ptr) |
494 | + copy_talitos_ptr(&desc2->ptr[1], &desc->ptr[1], |
495 | + is_sec1); |
496 | + else |
497 | + map_single_talitos_ptr(dev, &desc2->ptr[1], |
498 | + req_ctx->hw_context_size, |
499 | + req_ctx->hw_context, |
500 | + DMA_TO_DEVICE); |
501 | copy_talitos_ptr(&desc2->ptr[2], &desc->ptr[2], is_sec1); |
502 | sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc, |
503 | &desc2->ptr[3], sg_count, offset, 0); |
504 | @@ -1842,8 +1872,10 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc, |
505 | sync_needed = true; |
506 | copy_talitos_ptr(&desc2->ptr[5], &desc->ptr[5], is_sec1); |
507 | if (req_ctx->last) |
508 | - to_talitos_ptr(&desc->ptr[5], ctx->dma_hw_context, |
509 | - req_ctx->hw_context_size, is_sec1); |
510 | + map_single_talitos_ptr(dev, &desc->ptr[5], |
511 | + req_ctx->hw_context_size, |
512 | + req_ctx->hw_context, |
513 | + DMA_FROM_DEVICE); |
514 | |
515 | next_desc = dma_map_single(dev, &desc2->hdr1, TALITOS_DESC_SIZE, |
516 | DMA_BIDIRECTIONAL); |
517 | @@ -1881,12 +1913,8 @@ static struct talitos_edesc *ahash_edesc_alloc(struct ahash_request *areq, |
518 | static int ahash_init(struct ahash_request *areq) |
519 | { |
520 | struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); |
521 | - struct talitos_ctx *ctx = crypto_ahash_ctx(tfm); |
522 | - struct device *dev = ctx->dev; |
523 | struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq); |
524 | unsigned int size; |
525 | - struct talitos_private *priv = dev_get_drvdata(dev); |
526 | - bool is_sec1 = has_ftr_sec1(priv); |
527 | |
528 | /* Initialize the context */ |
529 | req_ctx->buf_idx = 0; |
530 | @@ -1898,18 +1926,6 @@ static int ahash_init(struct ahash_request *areq) |
531 | : TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512; |
532 | req_ctx->hw_context_size = size; |
533 | |
534 | - if (ctx->dma_hw_context) |
535 | - dma_unmap_single(dev, ctx->dma_hw_context, size, |
536 | - DMA_BIDIRECTIONAL); |
537 | - ctx->dma_hw_context = dma_map_single(dev, req_ctx->hw_context, size, |
538 | - DMA_BIDIRECTIONAL); |
539 | - if (ctx->dma_buf) |
540 | - dma_unmap_single(dev, ctx->dma_buf, sizeof(req_ctx->buf), |
541 | - DMA_TO_DEVICE); |
542 | - if (is_sec1) |
543 | - ctx->dma_buf = dma_map_single(dev, req_ctx->buf, |
544 | - sizeof(req_ctx->buf), |
545 | - DMA_TO_DEVICE); |
546 | return 0; |
547 | } |
548 | |
549 | @@ -1920,9 +1936,6 @@ static int ahash_init(struct ahash_request *areq) |
550 | static int ahash_init_sha224_swinit(struct ahash_request *areq) |
551 | { |
552 | struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq); |
553 | - struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); |
554 | - struct talitos_ctx *ctx = crypto_ahash_ctx(tfm); |
555 | - struct device *dev = ctx->dev; |
556 | |
557 | ahash_init(areq); |
558 | req_ctx->swinit = 1;/* prevent h/w initting context with sha256 values*/ |
559 | @@ -1940,9 +1953,6 @@ static int ahash_init_sha224_swinit(struct ahash_request *areq) |
560 | req_ctx->hw_context[8] = 0; |
561 | req_ctx->hw_context[9] = 0; |
562 | |
563 | - dma_sync_single_for_device(dev, ctx->dma_hw_context, |
564 | - req_ctx->hw_context_size, DMA_TO_DEVICE); |
565 | - |
566 | return 0; |
567 | } |
568 | |
569 | @@ -2046,13 +2056,6 @@ static int ahash_process_req(struct ahash_request *areq, unsigned int nbytes) |
570 | /* request SEC to INIT hash. */ |
571 | if (req_ctx->first && !req_ctx->swinit) |
572 | edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_INIT; |
573 | - if (is_sec1) { |
574 | - dma_addr_t dma_buf = ctx->dma_buf + req_ctx->buf_idx * |
575 | - HASH_MAX_BLOCK_SIZE; |
576 | - |
577 | - dma_sync_single_for_device(dev, dma_buf, |
578 | - req_ctx->nbuf, DMA_TO_DEVICE); |
579 | - } |
580 | |
581 | /* When the tfm context has a keylen, it's an HMAC. |
582 | * A first or last (ie. not middle) descriptor must request HMAC. |
583 | @@ -2106,12 +2109,7 @@ static int ahash_export(struct ahash_request *areq, void *out) |
584 | { |
585 | struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq); |
586 | struct talitos_export_state *export = out; |
587 | - struct crypto_ahash *ahash = crypto_ahash_reqtfm(areq); |
588 | - struct talitos_ctx *ctx = crypto_ahash_ctx(ahash); |
589 | - struct device *dev = ctx->dev; |
590 | |
591 | - dma_sync_single_for_cpu(dev, ctx->dma_hw_context, |
592 | - req_ctx->hw_context_size, DMA_FROM_DEVICE); |
593 | memcpy(export->hw_context, req_ctx->hw_context, |
594 | req_ctx->hw_context_size); |
595 | memcpy(export->buf, req_ctx->buf[req_ctx->buf_idx], req_ctx->nbuf); |
596 | @@ -2130,31 +2128,14 @@ static int ahash_import(struct ahash_request *areq, const void *in) |
597 | struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); |
598 | const struct talitos_export_state *export = in; |
599 | unsigned int size; |
600 | - struct talitos_ctx *ctx = crypto_ahash_ctx(tfm); |
601 | - struct device *dev = ctx->dev; |
602 | - struct talitos_private *priv = dev_get_drvdata(dev); |
603 | - bool is_sec1 = has_ftr_sec1(priv); |
604 | |
605 | memset(req_ctx, 0, sizeof(*req_ctx)); |
606 | size = (crypto_ahash_digestsize(tfm) <= SHA256_DIGEST_SIZE) |
607 | ? TALITOS_MDEU_CONTEXT_SIZE_MD5_SHA1_SHA256 |
608 | : TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512; |
609 | req_ctx->hw_context_size = size; |
610 | - if (ctx->dma_hw_context) |
611 | - dma_unmap_single(dev, ctx->dma_hw_context, size, |
612 | - DMA_BIDIRECTIONAL); |
613 | - |
614 | memcpy(req_ctx->hw_context, export->hw_context, size); |
615 | - ctx->dma_hw_context = dma_map_single(dev, req_ctx->hw_context, size, |
616 | - DMA_BIDIRECTIONAL); |
617 | - if (ctx->dma_buf) |
618 | - dma_unmap_single(dev, ctx->dma_buf, sizeof(req_ctx->buf), |
619 | - DMA_TO_DEVICE); |
620 | memcpy(req_ctx->buf[0], export->buf, export->nbuf); |
621 | - if (is_sec1) |
622 | - ctx->dma_buf = dma_map_single(dev, req_ctx->buf, |
623 | - sizeof(req_ctx->buf), |
624 | - DMA_TO_DEVICE); |
625 | req_ctx->swinit = export->swinit; |
626 | req_ctx->first = export->first; |
627 | req_ctx->last = export->last; |
628 | @@ -3064,27 +3045,6 @@ static void talitos_cra_exit(struct crypto_tfm *tfm) |
629 | dma_unmap_single(dev, ctx->dma_key, ctx->keylen, DMA_TO_DEVICE); |
630 | } |
631 | |
632 | -static void talitos_cra_exit_ahash(struct crypto_tfm *tfm) |
633 | -{ |
634 | - struct talitos_ctx *ctx = crypto_tfm_ctx(tfm); |
635 | - struct device *dev = ctx->dev; |
636 | - unsigned int size; |
637 | - |
638 | - talitos_cra_exit(tfm); |
639 | - |
640 | - size = (crypto_ahash_digestsize(__crypto_ahash_cast(tfm)) <= |
641 | - SHA256_DIGEST_SIZE) |
642 | - ? TALITOS_MDEU_CONTEXT_SIZE_MD5_SHA1_SHA256 |
643 | - : TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512; |
644 | - |
645 | - if (ctx->dma_hw_context) |
646 | - dma_unmap_single(dev, ctx->dma_hw_context, size, |
647 | - DMA_BIDIRECTIONAL); |
648 | - if (ctx->dma_buf) |
649 | - dma_unmap_single(dev, ctx->dma_buf, HASH_MAX_BLOCK_SIZE * 2, |
650 | - DMA_TO_DEVICE); |
651 | -} |
652 | - |
653 | /* |
654 | * given the alg's descriptor header template, determine whether descriptor |
655 | * type and primary/secondary execution units required match the hw |
656 | @@ -3183,7 +3143,7 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev, |
657 | case CRYPTO_ALG_TYPE_AHASH: |
658 | alg = &t_alg->algt.alg.hash.halg.base; |
659 | alg->cra_init = talitos_cra_init_ahash; |
660 | - alg->cra_exit = talitos_cra_exit_ahash; |
661 | + alg->cra_exit = talitos_cra_exit; |
662 | alg->cra_type = &crypto_ahash_type; |
663 | t_alg->algt.alg.hash.init = ahash_init; |
664 | t_alg->algt.alg.hash.update = ahash_update; |
665 | diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c |
666 | index dbe57da8c1a1..4a3bc168a4a7 100644 |
667 | --- a/drivers/input/mouse/alps.c |
668 | +++ b/drivers/input/mouse/alps.c |
669 | @@ -2544,13 +2544,31 @@ static int alps_update_btn_info_ss4_v2(unsigned char otp[][4], |
670 | } |
671 | |
672 | static int alps_update_dual_info_ss4_v2(unsigned char otp[][4], |
673 | - struct alps_data *priv) |
674 | + struct alps_data *priv, |
675 | + struct psmouse *psmouse) |
676 | { |
677 | bool is_dual = false; |
678 | + int reg_val = 0; |
679 | + struct ps2dev *ps2dev = &psmouse->ps2dev; |
680 | |
681 | - if (IS_SS4PLUS_DEV(priv->dev_id)) |
682 | + if (IS_SS4PLUS_DEV(priv->dev_id)) { |
683 | is_dual = (otp[0][0] >> 4) & 0x01; |
684 | |
685 | + if (!is_dual) { |
686 | + /* For support TrackStick of Thinkpad L/E series */ |
687 | + if (alps_exit_command_mode(psmouse) == 0 && |
688 | + alps_enter_command_mode(psmouse) == 0) { |
689 | + reg_val = alps_command_mode_read_reg(psmouse, |
690 | + 0xD7); |
691 | + } |
692 | + alps_exit_command_mode(psmouse); |
693 | + ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE); |
694 | + |
695 | + if (reg_val == 0x0C || reg_val == 0x1D) |
696 | + is_dual = true; |
697 | + } |
698 | + } |
699 | + |
700 | if (is_dual) |
701 | priv->flags |= ALPS_DUALPOINT | |
702 | ALPS_DUALPOINT_WITH_PRESSURE; |
703 | @@ -2573,7 +2591,7 @@ static int alps_set_defaults_ss4_v2(struct psmouse *psmouse, |
704 | |
705 | alps_update_btn_info_ss4_v2(otp, priv); |
706 | |
707 | - alps_update_dual_info_ss4_v2(otp, priv); |
708 | + alps_update_dual_info_ss4_v2(otp, priv, psmouse); |
709 | |
710 | return 0; |
711 | } |
712 | diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h |
713 | index 6cbbdc6e9687..b353d494ad40 100644 |
714 | --- a/drivers/input/serio/i8042-x86ia64io.h |
715 | +++ b/drivers/input/serio/i8042-x86ia64io.h |
716 | @@ -530,6 +530,20 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { |
717 | { } |
718 | }; |
719 | |
720 | +static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = { |
721 | + { |
722 | + /* |
723 | + * Sony Vaio VGN-CS series require MUX or the touch sensor |
724 | + * buttons will disturb touchpad operation |
725 | + */ |
726 | + .matches = { |
727 | + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), |
728 | + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"), |
729 | + }, |
730 | + }, |
731 | + { } |
732 | +}; |
733 | + |
734 | /* |
735 | * On some Asus laptops, just running self tests cause problems. |
736 | */ |
737 | @@ -620,6 +634,13 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { |
738 | DMI_MATCH(DMI_PRODUCT_NAME, "20046"), |
739 | }, |
740 | }, |
741 | + { |
742 | + /* Lenovo ThinkPad L460 */ |
743 | + .matches = { |
744 | + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), |
745 | + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"), |
746 | + }, |
747 | + }, |
748 | { |
749 | /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */ |
750 | .matches = { |
751 | @@ -1163,6 +1184,9 @@ static int __init i8042_platform_init(void) |
752 | if (dmi_check_system(i8042_dmi_nomux_table)) |
753 | i8042_nomux = true; |
754 | |
755 | + if (dmi_check_system(i8042_dmi_forcemux_table)) |
756 | + i8042_nomux = false; |
757 | + |
758 | if (dmi_check_system(i8042_dmi_notimeout_table)) |
759 | i8042_notimeout = true; |
760 | |
761 | diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c |
762 | index 127f8a0c098b..0c2e628e8723 100644 |
763 | --- a/drivers/media/usb/usbtv/usbtv-core.c |
764 | +++ b/drivers/media/usb/usbtv/usbtv-core.c |
765 | @@ -112,6 +112,8 @@ static int usbtv_probe(struct usb_interface *intf, |
766 | return 0; |
767 | |
768 | usbtv_audio_fail: |
769 | + /* we must not free at this point */ |
770 | + usb_get_dev(usbtv->udev); |
771 | usbtv_video_free(usbtv); |
772 | |
773 | usbtv_video_fail: |
774 | diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c |
775 | index 758dc73602d5..7bb013644aeb 100644 |
776 | --- a/drivers/misc/mei/main.c |
777 | +++ b/drivers/misc/mei/main.c |
778 | @@ -507,7 +507,6 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data) |
779 | break; |
780 | |
781 | default: |
782 | - dev_err(dev->dev, ": unsupported ioctl %d.\n", cmd); |
783 | rets = -ENOIOCTLCMD; |
784 | } |
785 | |
786 | diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c |
787 | index 489492b608cf..380916bff9e0 100644 |
788 | --- a/drivers/parport/parport_pc.c |
789 | +++ b/drivers/parport/parport_pc.c |
790 | @@ -2646,6 +2646,7 @@ enum parport_pc_pci_cards { |
791 | netmos_9901, |
792 | netmos_9865, |
793 | quatech_sppxp100, |
794 | + wch_ch382l, |
795 | }; |
796 | |
797 | |
798 | @@ -2708,6 +2709,7 @@ static struct parport_pc_pci { |
799 | /* netmos_9901 */ { 1, { { 0, -1 }, } }, |
800 | /* netmos_9865 */ { 1, { { 0, -1 }, } }, |
801 | /* quatech_sppxp100 */ { 1, { { 0, 1 }, } }, |
802 | + /* wch_ch382l */ { 1, { { 2, -1 }, } }, |
803 | }; |
804 | |
805 | static const struct pci_device_id parport_pc_pci_tbl[] = { |
806 | @@ -2797,6 +2799,8 @@ static const struct pci_device_id parport_pc_pci_tbl[] = { |
807 | /* Quatech SPPXP-100 Parallel port PCI ExpressCard */ |
808 | { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100, |
809 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 }, |
810 | + /* WCH CH382L PCI-E single parallel port card */ |
811 | + { 0x1c00, 0x3050, 0x1c00, 0x3050, 0, 0, wch_ch382l }, |
812 | { 0, } /* terminate list */ |
813 | }; |
814 | MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl); |
815 | diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c |
816 | index fdfcdea25867..16590dfaafa4 100644 |
817 | --- a/drivers/siox/siox-core.c |
818 | +++ b/drivers/siox/siox-core.c |
819 | @@ -594,7 +594,7 @@ static ssize_t device_add_store(struct device *dev, |
820 | size_t inbytes = 0, outbytes = 0; |
821 | u8 statustype = 0; |
822 | |
823 | - ret = sscanf(buf, "%20s %zu %zu %hhu", type, &inbytes, |
824 | + ret = sscanf(buf, "%19s %zu %zu %hhu", type, &inbytes, |
825 | &outbytes, &statustype); |
826 | if (ret != 3 && ret != 4) |
827 | return -EINVAL; |
828 | diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c |
829 | index 5d610af6799f..9753042b7e1f 100644 |
830 | --- a/drivers/staging/comedi/drivers/ni_mio_common.c |
831 | +++ b/drivers/staging/comedi/drivers/ni_mio_common.c |
832 | @@ -1275,6 +1275,8 @@ static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status) |
833 | ack |= NISTC_INTA_ACK_AI_START; |
834 | if (a_status & NISTC_AI_STATUS1_STOP) |
835 | ack |= NISTC_INTA_ACK_AI_STOP; |
836 | + if (a_status & NISTC_AI_STATUS1_OVER) |
837 | + ack |= NISTC_INTA_ACK_AI_ERR; |
838 | if (ack) |
839 | ni_stc_writew(dev, ack, NISTC_INTA_ACK_REG); |
840 | } |
841 | diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c |
842 | index 160b8906d9b9..9835b1c1cbe1 100644 |
843 | --- a/drivers/tty/serial/8250/8250_of.c |
844 | +++ b/drivers/tty/serial/8250/8250_of.c |
845 | @@ -316,6 +316,7 @@ static const struct of_device_id of_platform_serial_table[] = { |
846 | { .compatible = "mrvl,mmp-uart", |
847 | .data = (void *)PORT_XSCALE, }, |
848 | { .compatible = "ti,da830-uart", .data = (void *)PORT_DA830, }, |
849 | + { .compatible = "nuvoton,npcm750-uart", .data = (void *)PORT_NPCM, }, |
850 | { /* end of list */ }, |
851 | }; |
852 | MODULE_DEVICE_TABLE(of, of_platform_serial_table); |
853 | diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c |
854 | index 1328c7e70108..804c1af6fd33 100644 |
855 | --- a/drivers/tty/serial/8250/8250_port.c |
856 | +++ b/drivers/tty/serial/8250/8250_port.c |
857 | @@ -47,6 +47,10 @@ |
858 | #define UART_EXAR_SLEEP 0x8b /* Sleep mode */ |
859 | #define UART_EXAR_DVID 0x8d /* Device identification */ |
860 | |
861 | +/* Nuvoton NPCM timeout register */ |
862 | +#define UART_NPCM_TOR 7 |
863 | +#define UART_NPCM_TOIE BIT(7) /* Timeout Interrupt Enable */ |
864 | + |
865 | /* |
866 | * Debugging. |
867 | */ |
868 | @@ -293,6 +297,15 @@ static const struct serial8250_config uart_config[] = { |
869 | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT, |
870 | .flags = UART_CAP_FIFO, |
871 | }, |
872 | + [PORT_NPCM] = { |
873 | + .name = "Nuvoton 16550", |
874 | + .fifo_size = 16, |
875 | + .tx_loadsz = 16, |
876 | + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 | |
877 | + UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT, |
878 | + .rxtrig_bytes = {1, 4, 8, 14}, |
879 | + .flags = UART_CAP_FIFO, |
880 | + }, |
881 | }; |
882 | |
883 | /* Uart divisor latch read */ |
884 | @@ -2140,6 +2153,15 @@ int serial8250_do_startup(struct uart_port *port) |
885 | UART_DA830_PWREMU_MGMT_FREE); |
886 | } |
887 | |
888 | + if (port->type == PORT_NPCM) { |
889 | + /* |
890 | + * Nuvoton calls the scratch register 'UART_TOR' (timeout |
891 | + * register). Enable it, and set TIOC (timeout interrupt |
892 | + * comparator) to be 0x20 for correct operation. |
893 | + */ |
894 | + serial_port_out(port, UART_NPCM_TOR, UART_NPCM_TOIE | 0x20); |
895 | + } |
896 | + |
897 | #ifdef CONFIG_SERIAL_8250_RSA |
898 | /* |
899 | * If this is an RSA port, see if we can kick it up to the |
900 | @@ -2462,6 +2484,15 @@ static unsigned int xr17v35x_get_divisor(struct uart_8250_port *up, |
901 | return quot_16 >> 4; |
902 | } |
903 | |
904 | +/* Nuvoton NPCM UARTs have a custom divisor calculation */ |
905 | +static unsigned int npcm_get_divisor(struct uart_8250_port *up, |
906 | + unsigned int baud) |
907 | +{ |
908 | + struct uart_port *port = &up->port; |
909 | + |
910 | + return DIV_ROUND_CLOSEST(port->uartclk, 16 * baud + 2) - 2; |
911 | +} |
912 | + |
913 | static unsigned int serial8250_get_divisor(struct uart_8250_port *up, |
914 | unsigned int baud, |
915 | unsigned int *frac) |
916 | @@ -2482,6 +2513,8 @@ static unsigned int serial8250_get_divisor(struct uart_8250_port *up, |
917 | quot = 0x8002; |
918 | else if (up->port.type == PORT_XR17V35X) |
919 | quot = xr17v35x_get_divisor(up, baud, frac); |
920 | + else if (up->port.type == PORT_NPCM) |
921 | + quot = npcm_get_divisor(up, baud); |
922 | else |
923 | quot = uart_get_divisor(port, baud); |
924 | |
925 | diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c |
926 | index b4e57c5a8bba..f97251f39c26 100644 |
927 | --- a/drivers/tty/vt/vt.c |
928 | +++ b/drivers/tty/vt/vt.c |
929 | @@ -1354,6 +1354,11 @@ static void csi_m(struct vc_data *vc) |
930 | case 3: |
931 | vc->vc_italic = 1; |
932 | break; |
933 | + case 21: |
934 | + /* |
935 | + * No console drivers support double underline, so |
936 | + * convert it to a single underline. |
937 | + */ |
938 | case 4: |
939 | vc->vc_underline = 1; |
940 | break; |
941 | @@ -1389,7 +1394,6 @@ static void csi_m(struct vc_data *vc) |
942 | vc->vc_disp_ctrl = 1; |
943 | vc->vc_toggle_meta = 1; |
944 | break; |
945 | - case 21: |
946 | case 22: |
947 | vc->vc_intensity = 1; |
948 | break; |
949 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c |
950 | index 06d502b3e913..de1e759dd512 100644 |
951 | --- a/drivers/usb/serial/cp210x.c |
952 | +++ b/drivers/usb/serial/cp210x.c |
953 | @@ -155,6 +155,7 @@ static const struct usb_device_id id_table[] = { |
954 | { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */ |
955 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ |
956 | { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ |
957 | + { USB_DEVICE(0x155A, 0x1006) }, /* ELDAT Easywave RX09 */ |
958 | { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ |
959 | { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */ |
960 | { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ |
961 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c |
962 | index f58c4ff6b387..87202ad5a50d 100644 |
963 | --- a/drivers/usb/serial/ftdi_sio.c |
964 | +++ b/drivers/usb/serial/ftdi_sio.c |
965 | @@ -769,6 +769,7 @@ static const struct usb_device_id id_table_combined[] = { |
966 | .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, |
967 | { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, |
968 | { USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) }, |
969 | + { USB_DEVICE(FTDI_VID, RTSYSTEMS_USB_VX8_PID) }, |
970 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) }, |
971 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) }, |
972 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) }, |
973 | @@ -931,6 +932,7 @@ static const struct usb_device_id id_table_combined[] = { |
974 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) }, |
975 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) }, |
976 | { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) }, |
977 | + { USB_DEVICE(FTDI_VID, FTDI_FHE_PID) }, |
978 | { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) }, |
979 | { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID), |
980 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
981 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h |
982 | index 8b4ecd2bd297..975d02666c5a 100644 |
983 | --- a/drivers/usb/serial/ftdi_sio_ids.h |
984 | +++ b/drivers/usb/serial/ftdi_sio_ids.h |
985 | @@ -923,6 +923,9 @@ |
986 | /* |
987 | * RT Systems programming cables for various ham radios |
988 | */ |
989 | +/* This device uses the VID of FTDI */ |
990 | +#define RTSYSTEMS_USB_VX8_PID 0x9e50 /* USB-VX8 USB to 7 pin modular plug for Yaesu VX-8 radio */ |
991 | + |
992 | #define RTSYSTEMS_VID 0x2100 /* Vendor ID */ |
993 | #define RTSYSTEMS_USB_S03_PID 0x9001 /* RTS-03 USB to Serial Adapter */ |
994 | #define RTSYSTEMS_USB_59_PID 0x9e50 /* USB-59 USB to 8 pin plug */ |
995 | @@ -1441,6 +1444,12 @@ |
996 | */ |
997 | #define FTDI_CINTERION_MC55I_PID 0xA951 |
998 | |
999 | +/* |
1000 | + * Product: FirmwareHubEmulator |
1001 | + * Manufacturer: Harman Becker Automotive Systems |
1002 | + */ |
1003 | +#define FTDI_FHE_PID 0xA9A0 |
1004 | + |
1005 | /* |
1006 | * Product: Comet Caller ID decoder |
1007 | * Manufacturer: Crucible Technologies |
1008 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c |
1009 | index f53470112670..c7b75dd58fad 100644 |
1010 | --- a/fs/btrfs/inode.c |
1011 | +++ b/fs/btrfs/inode.c |
1012 | @@ -1262,6 +1262,8 @@ static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info, |
1013 | list_del(&sums->list); |
1014 | kfree(sums); |
1015 | } |
1016 | + if (ret < 0) |
1017 | + return ret; |
1018 | return 1; |
1019 | } |
1020 | |
1021 | @@ -1394,10 +1396,23 @@ static noinline int run_delalloc_nocow(struct inode *inode, |
1022 | goto out_check; |
1023 | if (btrfs_extent_readonly(fs_info, disk_bytenr)) |
1024 | goto out_check; |
1025 | - if (btrfs_cross_ref_exist(root, ino, |
1026 | - found_key.offset - |
1027 | - extent_offset, disk_bytenr)) |
1028 | + ret = btrfs_cross_ref_exist(root, ino, |
1029 | + found_key.offset - |
1030 | + extent_offset, disk_bytenr); |
1031 | + if (ret) { |
1032 | + /* |
1033 | + * ret could be -EIO if the above fails to read |
1034 | + * metadata. |
1035 | + */ |
1036 | + if (ret < 0) { |
1037 | + if (cow_start != (u64)-1) |
1038 | + cur_offset = cow_start; |
1039 | + goto error; |
1040 | + } |
1041 | + |
1042 | + WARN_ON_ONCE(nolock); |
1043 | goto out_check; |
1044 | + } |
1045 | disk_bytenr += extent_offset; |
1046 | disk_bytenr += cur_offset - found_key.offset; |
1047 | num_bytes = min(end + 1, extent_end) - cur_offset; |
1048 | @@ -1415,10 +1430,22 @@ static noinline int run_delalloc_nocow(struct inode *inode, |
1049 | * this ensure that csum for a given extent are |
1050 | * either valid or do not exist. |
1051 | */ |
1052 | - if (csum_exist_in_range(fs_info, disk_bytenr, |
1053 | - num_bytes)) { |
1054 | + ret = csum_exist_in_range(fs_info, disk_bytenr, |
1055 | + num_bytes); |
1056 | + if (ret) { |
1057 | if (!nolock) |
1058 | btrfs_end_write_no_snapshotting(root); |
1059 | + |
1060 | + /* |
1061 | + * ret could be -EIO if the above fails to read |
1062 | + * metadata. |
1063 | + */ |
1064 | + if (ret < 0) { |
1065 | + if (cow_start != (u64)-1) |
1066 | + cur_offset = cow_start; |
1067 | + goto error; |
1068 | + } |
1069 | + WARN_ON_ONCE(nolock); |
1070 | goto out_check; |
1071 | } |
1072 | if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) { |
1073 | diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h |
1074 | index 5f11fbdc27f8..1ee46f492267 100644 |
1075 | --- a/include/linux/bitmap.h |
1076 | +++ b/include/linux/bitmap.h |
1077 | @@ -302,12 +302,20 @@ static inline void bitmap_complement(unsigned long *dst, const unsigned long *sr |
1078 | __bitmap_complement(dst, src, nbits); |
1079 | } |
1080 | |
1081 | +#ifdef __LITTLE_ENDIAN |
1082 | +#define BITMAP_MEM_ALIGNMENT 8 |
1083 | +#else |
1084 | +#define BITMAP_MEM_ALIGNMENT (8 * sizeof(unsigned long)) |
1085 | +#endif |
1086 | +#define BITMAP_MEM_MASK (BITMAP_MEM_ALIGNMENT - 1) |
1087 | + |
1088 | static inline int bitmap_equal(const unsigned long *src1, |
1089 | const unsigned long *src2, unsigned int nbits) |
1090 | { |
1091 | if (small_const_nbits(nbits)) |
1092 | return !((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits)); |
1093 | - if (__builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8)) |
1094 | + if (__builtin_constant_p(nbits & BITMAP_MEM_MASK) && |
1095 | + IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT)) |
1096 | return !memcmp(src1, src2, nbits / 8); |
1097 | return __bitmap_equal(src1, src2, nbits); |
1098 | } |
1099 | @@ -358,8 +366,10 @@ static __always_inline void bitmap_set(unsigned long *map, unsigned int start, |
1100 | { |
1101 | if (__builtin_constant_p(nbits) && nbits == 1) |
1102 | __set_bit(start, map); |
1103 | - else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) && |
1104 | - __builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8)) |
1105 | + else if (__builtin_constant_p(start & BITMAP_MEM_MASK) && |
1106 | + IS_ALIGNED(start, BITMAP_MEM_ALIGNMENT) && |
1107 | + __builtin_constant_p(nbits & BITMAP_MEM_MASK) && |
1108 | + IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT)) |
1109 | memset((char *)map + start / 8, 0xff, nbits / 8); |
1110 | else |
1111 | __bitmap_set(map, start, nbits); |
1112 | @@ -370,8 +380,10 @@ static __always_inline void bitmap_clear(unsigned long *map, unsigned int start, |
1113 | { |
1114 | if (__builtin_constant_p(nbits) && nbits == 1) |
1115 | __clear_bit(start, map); |
1116 | - else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) && |
1117 | - __builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8)) |
1118 | + else if (__builtin_constant_p(start & BITMAP_MEM_MASK) && |
1119 | + IS_ALIGNED(start, BITMAP_MEM_ALIGNMENT) && |
1120 | + __builtin_constant_p(nbits & BITMAP_MEM_MASK) && |
1121 | + IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT)) |
1122 | memset((char *)map + start / 8, 0, nbits / 8); |
1123 | else |
1124 | __bitmap_clear(map, start, nbits); |
1125 | diff --git a/include/linux/compat.h b/include/linux/compat.h |
1126 | index 16c3027074a2..6970e7922c69 100644 |
1127 | --- a/include/linux/compat.h |
1128 | +++ b/include/linux/compat.h |
1129 | @@ -222,6 +222,8 @@ typedef struct compat_siginfo { |
1130 | #ifdef __ARCH_SI_TRAPNO |
1131 | int _trapno; /* TRAP # which caused the signal */ |
1132 | #endif |
1133 | +#define __COMPAT_ADDR_BND_PKEY_PAD (__alignof__(compat_uptr_t) < sizeof(short) ? \ |
1134 | + sizeof(short) : __alignof__(compat_uptr_t)) |
1135 | union { |
1136 | /* |
1137 | * used when si_code=BUS_MCEERR_AR or |
1138 | @@ -230,13 +232,13 @@ typedef struct compat_siginfo { |
1139 | short int _addr_lsb; /* Valid LSB of the reported address. */ |
1140 | /* used when si_code=SEGV_BNDERR */ |
1141 | struct { |
1142 | - compat_uptr_t _dummy_bnd; |
1143 | + char _dummy_bnd[__COMPAT_ADDR_BND_PKEY_PAD]; |
1144 | compat_uptr_t _lower; |
1145 | compat_uptr_t _upper; |
1146 | } _addr_bnd; |
1147 | /* used when si_code=SEGV_PKUERR */ |
1148 | struct { |
1149 | - compat_uptr_t _dummy_pkey; |
1150 | + char _dummy_pkey[__COMPAT_ADDR_BND_PKEY_PAD]; |
1151 | u32 _pkey; |
1152 | } _addr_pkey; |
1153 | }; |
1154 | diff --git a/include/uapi/asm-generic/siginfo.h b/include/uapi/asm-generic/siginfo.h |
1155 | index 99c902e460c2..65d405770b95 100644 |
1156 | --- a/include/uapi/asm-generic/siginfo.h |
1157 | +++ b/include/uapi/asm-generic/siginfo.h |
1158 | @@ -94,6 +94,9 @@ typedef struct siginfo { |
1159 | unsigned int _flags; /* see ia64 si_flags */ |
1160 | unsigned long _isr; /* isr */ |
1161 | #endif |
1162 | + |
1163 | +#define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? \ |
1164 | + sizeof(short) : __alignof__(void *)) |
1165 | union { |
1166 | /* |
1167 | * used when si_code=BUS_MCEERR_AR or |
1168 | @@ -102,13 +105,13 @@ typedef struct siginfo { |
1169 | short _addr_lsb; /* LSB of the reported address */ |
1170 | /* used when si_code=SEGV_BNDERR */ |
1171 | struct { |
1172 | - void *_dummy_bnd; |
1173 | + char _dummy_bnd[__ADDR_BND_PKEY_PAD]; |
1174 | void __user *_lower; |
1175 | void __user *_upper; |
1176 | } _addr_bnd; |
1177 | /* used when si_code=SEGV_PKUERR */ |
1178 | struct { |
1179 | - void *_dummy_pkey; |
1180 | + char _dummy_pkey[__ADDR_BND_PKEY_PAD]; |
1181 | __u32 _pkey; |
1182 | } _addr_pkey; |
1183 | }; |
1184 | diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h |
1185 | index 1c8413f93e3d..dce5f9dae121 100644 |
1186 | --- a/include/uapi/linux/serial_core.h |
1187 | +++ b/include/uapi/linux/serial_core.h |
1188 | @@ -76,6 +76,9 @@ |
1189 | #define PORT_SUNZILOG 38 |
1190 | #define PORT_SUNSAB 39 |
1191 | |
1192 | +/* Nuvoton UART */ |
1193 | +#define PORT_NPCM 40 |
1194 | + |
1195 | /* Intel EG20 */ |
1196 | #define PORT_PCH_8LINE 44 |
1197 | #define PORT_PCH_2LINE 45 |