Compare commits
51 Commits
develop-5.10
...
v4.16.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 216f33936e | |||
| 87d1acd833 | |||
| d0fd3e03df | |||
| 9f13ba19dd | |||
| 961757a423 | |||
| d210545346 | |||
| e7392359da | |||
| 3e13d6548c | |||
| 218031d350 | |||
| 066eacb902 | |||
| 22714d6e24 | |||
| 0f56180a8f | |||
| e8fc61bc77 | |||
| 141ce92477 | |||
| 6f9d3212c7 | |||
| 22034921c6 | |||
| 505e1b27d9 | |||
| 1255b1f0df | |||
| ee8dfbe42b | |||
| 11454943b2 | |||
| e4423fc2f5 | |||
| 4f85cbc5b6 | |||
| 4f92c1eca3 | |||
| 5bd122146e | |||
| 04191afee3 | |||
| 7430768b91 | |||
| c8a297b692 | |||
| 73575c06c7 | |||
| 1ecf69351f | |||
| 8727321063 | |||
| 399ba73ff3 | |||
| c33af576bb | |||
| 84e2b81c9b | |||
| c01d47c2c7 | |||
| ea75f4729c | |||
| c7cb9698e1 | |||
| 60da13207f | |||
| 1637d9655c | |||
| 3819c95fec | |||
| 0e2503ef90 | |||
| e573342971 | |||
| c48f60c1a9 | |||
| 190c7b3d16 | |||
| 8b862cf0bf | |||
| 6e86812c68 | |||
| 8a966cd9f3 | |||
| 3833927b1f | |||
| a2c10adb04 | |||
| 351f73bc42 | |||
| 78ac009f86 | |||
| 17ce0c97d1 |
@@ -24,6 +24,7 @@ Required properties:
|
||||
- "ti,da830-uart"
|
||||
- "aspeed,ast2400-vuart"
|
||||
- "aspeed,ast2500-vuart"
|
||||
- "nuvoton,npcm750-uart"
|
||||
- "serial" if the port type is unknown.
|
||||
- reg : offset and length of the register set for the device.
|
||||
- interrupts : should contain uart interrupt.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 16
|
||||
SUBLEVEL = 0
|
||||
SUBLEVEL = 2
|
||||
EXTRAVERSION =
|
||||
NAME = Fearless Coyote
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ crct10dif-arm-ce-y := crct10dif-ce-core.o crct10dif-ce-glue.o
|
||||
crc32-arm-ce-y:= crc32-ce-core.o crc32-ce-glue.o
|
||||
chacha20-neon-y := chacha20-neon-core.o chacha20-neon-glue.o
|
||||
|
||||
ifdef REGENERATE_ARM_CRYPTO
|
||||
quiet_cmd_perl = PERL $@
|
||||
cmd_perl = $(PERL) $(<) > $(@)
|
||||
|
||||
@@ -62,5 +63,6 @@ $(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl
|
||||
|
||||
$(src)/sha512-core.S_shipped: $(src)/sha512-armv4.pl
|
||||
$(call cmd,perl)
|
||||
endif
|
||||
|
||||
.PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S
|
||||
|
||||
@@ -67,6 +67,7 @@ CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
|
||||
$(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
|
||||
ifdef REGENERATE_ARM64_CRYPTO
|
||||
quiet_cmd_perlasm = PERLASM $@
|
||||
cmd_perlasm = $(PERL) $(<) void $(@)
|
||||
|
||||
@@ -75,5 +76,6 @@ $(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl
|
||||
|
||||
$(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl
|
||||
$(call cmd,perlasm)
|
||||
endif
|
||||
|
||||
.PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S
|
||||
|
||||
@@ -66,8 +66,6 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk,
|
||||
void (*fn)(struct cast5_ctx *ctx, u8 *dst, const u8 *src);
|
||||
int err;
|
||||
|
||||
fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way;
|
||||
|
||||
err = blkcipher_walk_virt(desc, walk);
|
||||
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
|
||||
|
||||
@@ -79,6 +77,7 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk,
|
||||
|
||||
/* Process multi-block batch */
|
||||
if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) {
|
||||
fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way;
|
||||
do {
|
||||
fn(ctx, wdst, wsrc);
|
||||
|
||||
|
||||
+2
-2
@@ -43,9 +43,9 @@
|
||||
* break badly! cannot be bigger than what you can fit into an
|
||||
* unsigned short
|
||||
*/
|
||||
#define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) }
|
||||
#define BV(x, n) { .nr_vecs = x, .name = "biovec-"#n }
|
||||
static struct biovec_slab bvec_slabs[BVEC_POOL_NR] __read_mostly = {
|
||||
BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
|
||||
BV(1, 1), BV(4, 4), BV(16, 16), BV(64, 64), BV(128, 128), BV(BIO_MAX_PAGES, max),
|
||||
};
|
||||
#undef BV
|
||||
|
||||
|
||||
+4
-3
@@ -92,13 +92,14 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err)
|
||||
|
||||
if (nbytes && walk->offset & alignmask && !err) {
|
||||
walk->offset = ALIGN(walk->offset, alignmask + 1);
|
||||
walk->data += walk->offset;
|
||||
|
||||
nbytes = min(nbytes,
|
||||
((unsigned int)(PAGE_SIZE)) - walk->offset);
|
||||
walk->entrylen -= nbytes;
|
||||
|
||||
return nbytes;
|
||||
if (nbytes) {
|
||||
walk->data += walk->offset;
|
||||
return nbytes;
|
||||
}
|
||||
}
|
||||
|
||||
if (walk->flags & CRYPTO_ALG_ASYNC)
|
||||
|
||||
+1
-1
@@ -313,7 +313,7 @@ static void exit_crypt(struct skcipher_request *req)
|
||||
rctx->left = 0;
|
||||
|
||||
if (rctx->ext)
|
||||
kfree(rctx->ext);
|
||||
kzfree(rctx->ext);
|
||||
}
|
||||
|
||||
static int do_encrypt(struct skcipher_request *req, int err)
|
||||
|
||||
+3
-3
@@ -548,7 +548,7 @@ static const struct akcipher_testvec rsa_tv_template[] = {
|
||||
static const struct akcipher_testvec pkcs1pad_rsa_tv_template[] = {
|
||||
{
|
||||
.key =
|
||||
"\x30\x82\x03\x1f\x02\x01\x10\x02\x82\x01\x01\x00\xd7\x1e\x77\x82"
|
||||
"\x30\x82\x03\x1f\x02\x01\x00\x02\x82\x01\x01\x00\xd7\x1e\x77\x82"
|
||||
"\x8c\x92\x31\xe7\x69\x02\xa2\xd5\x5c\x78\xde\xa2\x0c\x8f\xfe\x28"
|
||||
"\x59\x31\xdf\x40\x9c\x60\x61\x06\xb9\x2f\x62\x40\x80\x76\xcb\x67"
|
||||
"\x4a\xb5\x59\x56\x69\x17\x07\xfa\xf9\x4c\xbd\x6c\x37\x7a\x46\x7d"
|
||||
@@ -597,8 +597,8 @@ static const struct akcipher_testvec pkcs1pad_rsa_tv_template[] = {
|
||||
"\xfe\xf8\x27\x1b\xd6\x55\x60\x5e\x48\xb7\x6d\x9a\xa8\x37\xf9\x7a"
|
||||
"\xde\x1b\xcd\x5d\x1a\x30\xd4\xe9\x9e\x5b\x3c\x15\xf8\x9c\x1f\xda"
|
||||
"\xd1\x86\x48\x55\xce\x83\xee\x8e\x51\xc7\xde\x32\x12\x47\x7d\x46"
|
||||
"\xb8\x35\xdf\x41\x02\x01\x30\x02\x01\x30\x02\x01\x30\x02\x01\x30"
|
||||
"\x02\x01\x30",
|
||||
"\xb8\x35\xdf\x41\x02\x01\x00\x02\x01\x00\x02\x01\x00\x02\x01\x00"
|
||||
"\x02\x01\x00",
|
||||
.key_len = 804,
|
||||
/*
|
||||
* m is SHA256 hash of following message:
|
||||
|
||||
@@ -169,11 +169,11 @@ bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
static cpumask_var_t cpus_to_visit __initdata;
|
||||
static void __init parsing_done_workfn(struct work_struct *work);
|
||||
static __initdata DECLARE_WORK(parsing_done_work, parsing_done_workfn);
|
||||
static cpumask_var_t cpus_to_visit;
|
||||
static void parsing_done_workfn(struct work_struct *work);
|
||||
static DECLARE_WORK(parsing_done_work, parsing_done_workfn);
|
||||
|
||||
static int __init
|
||||
static int
|
||||
init_cpu_capacity_callback(struct notifier_block *nb,
|
||||
unsigned long val,
|
||||
void *data)
|
||||
@@ -209,7 +209,7 @@ init_cpu_capacity_callback(struct notifier_block *nb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct notifier_block init_cpu_capacity_notifier __initdata = {
|
||||
static struct notifier_block init_cpu_capacity_notifier = {
|
||||
.notifier_call = init_cpu_capacity_callback,
|
||||
};
|
||||
|
||||
@@ -242,7 +242,7 @@ static int __init register_cpufreq_notifier(void)
|
||||
}
|
||||
core_initcall(register_cpufreq_notifier);
|
||||
|
||||
static void __init parsing_done_workfn(struct work_struct *work)
|
||||
static void parsing_done_workfn(struct work_struct *work)
|
||||
{
|
||||
cpufreq_unregister_notifier(&init_cpu_capacity_notifier,
|
||||
CPUFREQ_POLICY_NOTIFIER);
|
||||
|
||||
@@ -1080,6 +1080,7 @@ static const struct hci_uart_proto bcm_proto = {
|
||||
#ifdef CONFIG_ACPI
|
||||
static const struct acpi_device_id bcm_acpi_match[] = {
|
||||
{ "BCM2E1A", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E38", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E39", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E3A", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E3D", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
@@ -1092,12 +1093,17 @@ static const struct acpi_device_id bcm_acpi_match[] = {
|
||||
{ "BCM2E67", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E71", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E72", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E74", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E7B", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E7C", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E7E", (kernel_ulong_t)&acpi_bcm_int_first_gpios },
|
||||
{ "BCM2E83", (kernel_ulong_t)&acpi_bcm_int_first_gpios },
|
||||
{ "BCM2E84", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E90", (kernel_ulong_t)&acpi_bcm_int_last_gpios },
|
||||
{ "BCM2E95", (kernel_ulong_t)&acpi_bcm_int_first_gpios },
|
||||
{ "BCM2E96", (kernel_ulong_t)&acpi_bcm_int_first_gpios },
|
||||
{ "BCM2EA4", (kernel_ulong_t)&acpi_bcm_int_first_gpios },
|
||||
{ "BCM2EAA", (kernel_ulong_t)&acpi_bcm_int_first_gpios },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, bcm_acpi_match);
|
||||
|
||||
+3
-3
@@ -137,7 +137,7 @@ static ssize_t read_mem(struct file *file, char __user *buf,
|
||||
|
||||
while (count > 0) {
|
||||
unsigned long remaining;
|
||||
int allowed;
|
||||
int allowed, probe;
|
||||
|
||||
sz = size_inside_page(p, count);
|
||||
|
||||
@@ -160,9 +160,9 @@ static ssize_t read_mem(struct file *file, char __user *buf,
|
||||
if (!ptr)
|
||||
goto failed;
|
||||
|
||||
err = probe_kernel_read(bounce, ptr, sz);
|
||||
probe = probe_kernel_read(bounce, ptr, sz);
|
||||
unxlate_dev_mem_ptr(p, ptr);
|
||||
if (err)
|
||||
if (probe)
|
||||
goto failed;
|
||||
|
||||
remaining = copy_to_user(buf, bounce, sz);
|
||||
|
||||
@@ -815,9 +815,6 @@ static int caam_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
caam_remove:
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
debugfs_remove_recursive(ctrlpriv->dfs_root);
|
||||
#endif
|
||||
caam_remove(pdev);
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static int ccp_aes_cmac_complete(struct crypto_async_request *async_req,
|
||||
}
|
||||
|
||||
/* Update result area if supplied */
|
||||
if (req->result)
|
||||
if (req->result && rctx->final)
|
||||
memcpy(req->result, rctx->iv, digest_size);
|
||||
|
||||
e_free:
|
||||
|
||||
@@ -60,10 +60,9 @@ static int ccp_rsa_complete(struct crypto_async_request *async_req, int ret)
|
||||
|
||||
static unsigned int ccp_rsa_maxsize(struct crypto_akcipher *tfm)
|
||||
{
|
||||
if (ccp_version() > CCP_VERSION(3, 0))
|
||||
return CCP5_RSA_MAXMOD;
|
||||
else
|
||||
return CCP_RSA_MAXMOD;
|
||||
struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm);
|
||||
|
||||
return ctx->u.rsa.n_len;
|
||||
}
|
||||
|
||||
static int ccp_rsa_crypt(struct akcipher_request *req, bool encrypt)
|
||||
|
||||
@@ -47,7 +47,7 @@ static int ccp_sha_complete(struct crypto_async_request *async_req, int ret)
|
||||
}
|
||||
|
||||
/* Update result area if supplied */
|
||||
if (req->result)
|
||||
if (req->result && rctx->final)
|
||||
memcpy(req->result, rctx->ctx, digest_size);
|
||||
|
||||
e_free:
|
||||
|
||||
@@ -894,7 +894,7 @@ static int safexcel_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(priv->base);
|
||||
}
|
||||
|
||||
priv->clk = of_clk_get(dev->of_node, 0);
|
||||
priv->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
if (!IS_ERR(priv->clk)) {
|
||||
ret = clk_prepare_enable(priv->clk);
|
||||
if (ret) {
|
||||
|
||||
+64
-104
@@ -832,8 +832,6 @@ struct talitos_ctx {
|
||||
unsigned int keylen;
|
||||
unsigned int enckeylen;
|
||||
unsigned int authkeylen;
|
||||
dma_addr_t dma_buf;
|
||||
dma_addr_t dma_hw_context;
|
||||
};
|
||||
|
||||
#define HASH_MAX_BLOCK_SIZE SHA512_BLOCK_SIZE
|
||||
@@ -1130,10 +1128,10 @@ next:
|
||||
return count;
|
||||
}
|
||||
|
||||
static int talitos_sg_map(struct device *dev, struct scatterlist *src,
|
||||
unsigned int len, struct talitos_edesc *edesc,
|
||||
struct talitos_ptr *ptr,
|
||||
int sg_count, unsigned int offset, int tbl_off)
|
||||
static int talitos_sg_map_ext(struct device *dev, struct scatterlist *src,
|
||||
unsigned int len, struct talitos_edesc *edesc,
|
||||
struct talitos_ptr *ptr, int sg_count,
|
||||
unsigned int offset, int tbl_off, int elen)
|
||||
{
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
bool is_sec1 = has_ftr_sec1(priv);
|
||||
@@ -1142,6 +1140,7 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src,
|
||||
to_talitos_ptr(ptr, 0, 0, is_sec1);
|
||||
return 1;
|
||||
}
|
||||
to_talitos_ptr_ext_set(ptr, elen, is_sec1);
|
||||
if (sg_count == 1) {
|
||||
to_talitos_ptr(ptr, sg_dma_address(src) + offset, len, is_sec1);
|
||||
return sg_count;
|
||||
@@ -1150,7 +1149,7 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src,
|
||||
to_talitos_ptr(ptr, edesc->dma_link_tbl + offset, len, is_sec1);
|
||||
return sg_count;
|
||||
}
|
||||
sg_count = sg_to_link_tbl_offset(src, sg_count, offset, len,
|
||||
sg_count = sg_to_link_tbl_offset(src, sg_count, offset, len + elen,
|
||||
&edesc->link_tbl[tbl_off]);
|
||||
if (sg_count == 1) {
|
||||
/* Only one segment now, so no link tbl needed*/
|
||||
@@ -1164,6 +1163,15 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src,
|
||||
return sg_count;
|
||||
}
|
||||
|
||||
static int talitos_sg_map(struct device *dev, struct scatterlist *src,
|
||||
unsigned int len, struct talitos_edesc *edesc,
|
||||
struct talitos_ptr *ptr, int sg_count,
|
||||
unsigned int offset, int tbl_off)
|
||||
{
|
||||
return talitos_sg_map_ext(dev, src, len, edesc, ptr, sg_count, offset,
|
||||
tbl_off, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* fill in and submit ipsec_esp descriptor
|
||||
*/
|
||||
@@ -1181,7 +1189,7 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
|
||||
unsigned int ivsize = crypto_aead_ivsize(aead);
|
||||
int tbl_off = 0;
|
||||
int sg_count, ret;
|
||||
int sg_link_tbl_len;
|
||||
int elen = 0;
|
||||
bool sync_needed = false;
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
bool is_sec1 = has_ftr_sec1(priv);
|
||||
@@ -1223,17 +1231,11 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq,
|
||||
* extent is bytes of HMAC postpended to ciphertext,
|
||||
* typically 12 for ipsec
|
||||
*/
|
||||
sg_link_tbl_len = cryptlen;
|
||||
if (is_ipsec_esp && (desc->hdr & DESC_HDR_MODE1_MDEU_CICV))
|
||||
elen = authsize;
|
||||
|
||||
if (is_ipsec_esp) {
|
||||
to_talitos_ptr_ext_set(&desc->ptr[4], authsize, is_sec1);
|
||||
|
||||
if (desc->hdr & DESC_HDR_MODE1_MDEU_CICV)
|
||||
sg_link_tbl_len += authsize;
|
||||
}
|
||||
|
||||
ret = talitos_sg_map(dev, areq->src, sg_link_tbl_len, edesc,
|
||||
&desc->ptr[4], sg_count, areq->assoclen, tbl_off);
|
||||
ret = talitos_sg_map_ext(dev, areq->src, cryptlen, edesc, &desc->ptr[4],
|
||||
sg_count, areq->assoclen, tbl_off, elen);
|
||||
|
||||
if (ret > 1) {
|
||||
tbl_off += ret;
|
||||
@@ -1690,9 +1692,30 @@ static void common_nonsnoop_hash_unmap(struct device *dev,
|
||||
struct ahash_request *areq)
|
||||
{
|
||||
struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq);
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
bool is_sec1 = has_ftr_sec1(priv);
|
||||
struct talitos_desc *desc = &edesc->desc;
|
||||
struct talitos_desc *desc2 = desc + 1;
|
||||
|
||||
unmap_single_talitos_ptr(dev, &edesc->desc.ptr[5], DMA_FROM_DEVICE);
|
||||
if (desc->next_desc &&
|
||||
desc->ptr[5].ptr != desc2->ptr[5].ptr)
|
||||
unmap_single_talitos_ptr(dev, &desc2->ptr[5], DMA_FROM_DEVICE);
|
||||
|
||||
talitos_sg_unmap(dev, edesc, req_ctx->psrc, NULL, 0, 0);
|
||||
|
||||
/* When using hashctx-in, must unmap it. */
|
||||
if (from_talitos_ptr_len(&edesc->desc.ptr[1], is_sec1))
|
||||
unmap_single_talitos_ptr(dev, &edesc->desc.ptr[1],
|
||||
DMA_TO_DEVICE);
|
||||
else if (desc->next_desc)
|
||||
unmap_single_talitos_ptr(dev, &desc2->ptr[1],
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (is_sec1 && req_ctx->nbuf)
|
||||
unmap_single_talitos_ptr(dev, &desc->ptr[3],
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (edesc->dma_len)
|
||||
dma_unmap_single(dev, edesc->dma_link_tbl, edesc->dma_len,
|
||||
DMA_BIDIRECTIONAL);
|
||||
@@ -1766,8 +1789,10 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc,
|
||||
|
||||
/* hash context in */
|
||||
if (!req_ctx->first || req_ctx->swinit) {
|
||||
to_talitos_ptr(&desc->ptr[1], ctx->dma_hw_context,
|
||||
req_ctx->hw_context_size, is_sec1);
|
||||
map_single_talitos_ptr(dev, &desc->ptr[1],
|
||||
req_ctx->hw_context_size,
|
||||
(char *)req_ctx->hw_context,
|
||||
DMA_TO_DEVICE);
|
||||
req_ctx->swinit = 0;
|
||||
}
|
||||
/* Indicate next op is not the first. */
|
||||
@@ -1793,10 +1818,9 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc,
|
||||
* data in
|
||||
*/
|
||||
if (is_sec1 && req_ctx->nbuf) {
|
||||
dma_addr_t dma_buf = ctx->dma_buf + req_ctx->buf_idx *
|
||||
HASH_MAX_BLOCK_SIZE;
|
||||
|
||||
to_talitos_ptr(&desc->ptr[3], dma_buf, req_ctx->nbuf, is_sec1);
|
||||
map_single_talitos_ptr(dev, &desc->ptr[3], req_ctx->nbuf,
|
||||
req_ctx->buf[req_ctx->buf_idx],
|
||||
DMA_TO_DEVICE);
|
||||
} else {
|
||||
sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc,
|
||||
&desc->ptr[3], sg_count, offset, 0);
|
||||
@@ -1812,8 +1836,9 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc,
|
||||
crypto_ahash_digestsize(tfm),
|
||||
areq->result, DMA_FROM_DEVICE);
|
||||
else
|
||||
to_talitos_ptr(&desc->ptr[5], ctx->dma_hw_context,
|
||||
req_ctx->hw_context_size, is_sec1);
|
||||
map_single_talitos_ptr(dev, &desc->ptr[5],
|
||||
req_ctx->hw_context_size,
|
||||
req_ctx->hw_context, DMA_FROM_DEVICE);
|
||||
|
||||
/* last DWORD empty */
|
||||
|
||||
@@ -1832,9 +1857,14 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc,
|
||||
desc->hdr |= DESC_HDR_MODE0_MDEU_CONT;
|
||||
desc->hdr &= ~DESC_HDR_DONE_NOTIFY;
|
||||
|
||||
to_talitos_ptr(&desc2->ptr[1], ctx->dma_hw_context,
|
||||
req_ctx->hw_context_size, is_sec1);
|
||||
|
||||
if (desc->ptr[1].ptr)
|
||||
copy_talitos_ptr(&desc2->ptr[1], &desc->ptr[1],
|
||||
is_sec1);
|
||||
else
|
||||
map_single_talitos_ptr(dev, &desc2->ptr[1],
|
||||
req_ctx->hw_context_size,
|
||||
req_ctx->hw_context,
|
||||
DMA_TO_DEVICE);
|
||||
copy_talitos_ptr(&desc2->ptr[2], &desc->ptr[2], is_sec1);
|
||||
sg_count = talitos_sg_map(dev, req_ctx->psrc, length, edesc,
|
||||
&desc2->ptr[3], sg_count, offset, 0);
|
||||
@@ -1842,8 +1872,10 @@ static int common_nonsnoop_hash(struct talitos_edesc *edesc,
|
||||
sync_needed = true;
|
||||
copy_talitos_ptr(&desc2->ptr[5], &desc->ptr[5], is_sec1);
|
||||
if (req_ctx->last)
|
||||
to_talitos_ptr(&desc->ptr[5], ctx->dma_hw_context,
|
||||
req_ctx->hw_context_size, is_sec1);
|
||||
map_single_talitos_ptr(dev, &desc->ptr[5],
|
||||
req_ctx->hw_context_size,
|
||||
req_ctx->hw_context,
|
||||
DMA_FROM_DEVICE);
|
||||
|
||||
next_desc = dma_map_single(dev, &desc2->hdr1, TALITOS_DESC_SIZE,
|
||||
DMA_BIDIRECTIONAL);
|
||||
@@ -1881,12 +1913,8 @@ static struct talitos_edesc *ahash_edesc_alloc(struct ahash_request *areq,
|
||||
static int ahash_init(struct ahash_request *areq)
|
||||
{
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
|
||||
struct talitos_ctx *ctx = crypto_ahash_ctx(tfm);
|
||||
struct device *dev = ctx->dev;
|
||||
struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq);
|
||||
unsigned int size;
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
bool is_sec1 = has_ftr_sec1(priv);
|
||||
|
||||
/* Initialize the context */
|
||||
req_ctx->buf_idx = 0;
|
||||
@@ -1898,18 +1926,6 @@ static int ahash_init(struct ahash_request *areq)
|
||||
: TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512;
|
||||
req_ctx->hw_context_size = size;
|
||||
|
||||
if (ctx->dma_hw_context)
|
||||
dma_unmap_single(dev, ctx->dma_hw_context, size,
|
||||
DMA_BIDIRECTIONAL);
|
||||
ctx->dma_hw_context = dma_map_single(dev, req_ctx->hw_context, size,
|
||||
DMA_BIDIRECTIONAL);
|
||||
if (ctx->dma_buf)
|
||||
dma_unmap_single(dev, ctx->dma_buf, sizeof(req_ctx->buf),
|
||||
DMA_TO_DEVICE);
|
||||
if (is_sec1)
|
||||
ctx->dma_buf = dma_map_single(dev, req_ctx->buf,
|
||||
sizeof(req_ctx->buf),
|
||||
DMA_TO_DEVICE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1920,9 +1936,6 @@ static int ahash_init(struct ahash_request *areq)
|
||||
static int ahash_init_sha224_swinit(struct ahash_request *areq)
|
||||
{
|
||||
struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq);
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
|
||||
struct talitos_ctx *ctx = crypto_ahash_ctx(tfm);
|
||||
struct device *dev = ctx->dev;
|
||||
|
||||
ahash_init(areq);
|
||||
req_ctx->swinit = 1;/* prevent h/w initting context with sha256 values*/
|
||||
@@ -1940,9 +1953,6 @@ static int ahash_init_sha224_swinit(struct ahash_request *areq)
|
||||
req_ctx->hw_context[8] = 0;
|
||||
req_ctx->hw_context[9] = 0;
|
||||
|
||||
dma_sync_single_for_device(dev, ctx->dma_hw_context,
|
||||
req_ctx->hw_context_size, DMA_TO_DEVICE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2046,13 +2056,6 @@ static int ahash_process_req(struct ahash_request *areq, unsigned int nbytes)
|
||||
/* request SEC to INIT hash. */
|
||||
if (req_ctx->first && !req_ctx->swinit)
|
||||
edesc->desc.hdr |= DESC_HDR_MODE0_MDEU_INIT;
|
||||
if (is_sec1) {
|
||||
dma_addr_t dma_buf = ctx->dma_buf + req_ctx->buf_idx *
|
||||
HASH_MAX_BLOCK_SIZE;
|
||||
|
||||
dma_sync_single_for_device(dev, dma_buf,
|
||||
req_ctx->nbuf, DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
/* When the tfm context has a keylen, it's an HMAC.
|
||||
* A first or last (ie. not middle) descriptor must request HMAC.
|
||||
@@ -2106,12 +2109,7 @@ static int ahash_export(struct ahash_request *areq, void *out)
|
||||
{
|
||||
struct talitos_ahash_req_ctx *req_ctx = ahash_request_ctx(areq);
|
||||
struct talitos_export_state *export = out;
|
||||
struct crypto_ahash *ahash = crypto_ahash_reqtfm(areq);
|
||||
struct talitos_ctx *ctx = crypto_ahash_ctx(ahash);
|
||||
struct device *dev = ctx->dev;
|
||||
|
||||
dma_sync_single_for_cpu(dev, ctx->dma_hw_context,
|
||||
req_ctx->hw_context_size, DMA_FROM_DEVICE);
|
||||
memcpy(export->hw_context, req_ctx->hw_context,
|
||||
req_ctx->hw_context_size);
|
||||
memcpy(export->buf, req_ctx->buf[req_ctx->buf_idx], req_ctx->nbuf);
|
||||
@@ -2130,31 +2128,14 @@ static int ahash_import(struct ahash_request *areq, const void *in)
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq);
|
||||
const struct talitos_export_state *export = in;
|
||||
unsigned int size;
|
||||
struct talitos_ctx *ctx = crypto_ahash_ctx(tfm);
|
||||
struct device *dev = ctx->dev;
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
bool is_sec1 = has_ftr_sec1(priv);
|
||||
|
||||
memset(req_ctx, 0, sizeof(*req_ctx));
|
||||
size = (crypto_ahash_digestsize(tfm) <= SHA256_DIGEST_SIZE)
|
||||
? TALITOS_MDEU_CONTEXT_SIZE_MD5_SHA1_SHA256
|
||||
: TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512;
|
||||
req_ctx->hw_context_size = size;
|
||||
if (ctx->dma_hw_context)
|
||||
dma_unmap_single(dev, ctx->dma_hw_context, size,
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
memcpy(req_ctx->hw_context, export->hw_context, size);
|
||||
ctx->dma_hw_context = dma_map_single(dev, req_ctx->hw_context, size,
|
||||
DMA_BIDIRECTIONAL);
|
||||
if (ctx->dma_buf)
|
||||
dma_unmap_single(dev, ctx->dma_buf, sizeof(req_ctx->buf),
|
||||
DMA_TO_DEVICE);
|
||||
memcpy(req_ctx->buf[0], export->buf, export->nbuf);
|
||||
if (is_sec1)
|
||||
ctx->dma_buf = dma_map_single(dev, req_ctx->buf,
|
||||
sizeof(req_ctx->buf),
|
||||
DMA_TO_DEVICE);
|
||||
req_ctx->swinit = export->swinit;
|
||||
req_ctx->first = export->first;
|
||||
req_ctx->last = export->last;
|
||||
@@ -3064,27 +3045,6 @@ static void talitos_cra_exit(struct crypto_tfm *tfm)
|
||||
dma_unmap_single(dev, ctx->dma_key, ctx->keylen, DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
static void talitos_cra_exit_ahash(struct crypto_tfm *tfm)
|
||||
{
|
||||
struct talitos_ctx *ctx = crypto_tfm_ctx(tfm);
|
||||
struct device *dev = ctx->dev;
|
||||
unsigned int size;
|
||||
|
||||
talitos_cra_exit(tfm);
|
||||
|
||||
size = (crypto_ahash_digestsize(__crypto_ahash_cast(tfm)) <=
|
||||
SHA256_DIGEST_SIZE)
|
||||
? TALITOS_MDEU_CONTEXT_SIZE_MD5_SHA1_SHA256
|
||||
: TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512;
|
||||
|
||||
if (ctx->dma_hw_context)
|
||||
dma_unmap_single(dev, ctx->dma_hw_context, size,
|
||||
DMA_BIDIRECTIONAL);
|
||||
if (ctx->dma_buf)
|
||||
dma_unmap_single(dev, ctx->dma_buf, HASH_MAX_BLOCK_SIZE * 2,
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
/*
|
||||
* given the alg's descriptor header template, determine whether descriptor
|
||||
* type and primary/secondary execution units required match the hw
|
||||
@@ -3183,7 +3143,7 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
|
||||
case CRYPTO_ALG_TYPE_AHASH:
|
||||
alg = &t_alg->algt.alg.hash.halg.base;
|
||||
alg->cra_init = talitos_cra_init_ahash;
|
||||
alg->cra_exit = talitos_cra_exit_ahash;
|
||||
alg->cra_exit = talitos_cra_exit;
|
||||
alg->cra_type = &crypto_ahash_type;
|
||||
t_alg->algt.alg.hash.init = ahash_init;
|
||||
t_alg->algt.alg.hash.update = ahash_update;
|
||||
|
||||
@@ -2544,13 +2544,31 @@ static int alps_update_btn_info_ss4_v2(unsigned char otp[][4],
|
||||
}
|
||||
|
||||
static int alps_update_dual_info_ss4_v2(unsigned char otp[][4],
|
||||
struct alps_data *priv)
|
||||
struct alps_data *priv,
|
||||
struct psmouse *psmouse)
|
||||
{
|
||||
bool is_dual = false;
|
||||
int reg_val = 0;
|
||||
struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
|
||||
if (IS_SS4PLUS_DEV(priv->dev_id))
|
||||
if (IS_SS4PLUS_DEV(priv->dev_id)) {
|
||||
is_dual = (otp[0][0] >> 4) & 0x01;
|
||||
|
||||
if (!is_dual) {
|
||||
/* For support TrackStick of Thinkpad L/E series */
|
||||
if (alps_exit_command_mode(psmouse) == 0 &&
|
||||
alps_enter_command_mode(psmouse) == 0) {
|
||||
reg_val = alps_command_mode_read_reg(psmouse,
|
||||
0xD7);
|
||||
}
|
||||
alps_exit_command_mode(psmouse);
|
||||
ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE);
|
||||
|
||||
if (reg_val == 0x0C || reg_val == 0x1D)
|
||||
is_dual = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_dual)
|
||||
priv->flags |= ALPS_DUALPOINT |
|
||||
ALPS_DUALPOINT_WITH_PRESSURE;
|
||||
@@ -2573,7 +2591,7 @@ static int alps_set_defaults_ss4_v2(struct psmouse *psmouse,
|
||||
|
||||
alps_update_btn_info_ss4_v2(otp, priv);
|
||||
|
||||
alps_update_dual_info_ss4_v2(otp, priv);
|
||||
alps_update_dual_info_ss4_v2(otp, priv, psmouse);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -530,6 +530,20 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = {
|
||||
{
|
||||
/*
|
||||
* Sony Vaio VGN-CS series require MUX or the touch sensor
|
||||
* buttons will disturb touchpad operation
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
* On some Asus laptops, just running self tests cause problems.
|
||||
*/
|
||||
@@ -620,6 +634,13 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "20046"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Lenovo ThinkPad L460 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Clevo P650RS, 650RP6, Sager NP8152-S, and others */
|
||||
.matches = {
|
||||
@@ -1163,6 +1184,9 @@ static int __init i8042_platform_init(void)
|
||||
if (dmi_check_system(i8042_dmi_nomux_table))
|
||||
i8042_nomux = true;
|
||||
|
||||
if (dmi_check_system(i8042_dmi_forcemux_table))
|
||||
i8042_nomux = false;
|
||||
|
||||
if (dmi_check_system(i8042_dmi_notimeout_table))
|
||||
i8042_notimeout = true;
|
||||
|
||||
|
||||
@@ -112,6 +112,8 @@ static int usbtv_probe(struct usb_interface *intf,
|
||||
return 0;
|
||||
|
||||
usbtv_audio_fail:
|
||||
/* we must not free at this point */
|
||||
usb_get_dev(usbtv->udev);
|
||||
usbtv_video_free(usbtv);
|
||||
|
||||
usbtv_video_fail:
|
||||
|
||||
@@ -507,7 +507,6 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data)
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(dev->dev, ": unsupported ioctl %d.\n", cmd);
|
||||
rets = -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
|
||||
@@ -5087,7 +5087,7 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
INIT_WORK(&hw->restart_work, sky2_restart);
|
||||
|
||||
pci_set_drvdata(pdev, hw);
|
||||
pdev->d3_delay = 150;
|
||||
pdev->d3_delay = 200;
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -71,10 +71,11 @@
|
||||
/* CPP address to retrieve the data from */
|
||||
#define NSP_BUFFER 0x10
|
||||
#define NSP_BUFFER_CPP GENMASK_ULL(63, 40)
|
||||
#define NSP_BUFFER_PCIE GENMASK_ULL(39, 38)
|
||||
#define NSP_BUFFER_ADDRESS GENMASK_ULL(37, 0)
|
||||
#define NSP_BUFFER_ADDRESS GENMASK_ULL(39, 0)
|
||||
|
||||
#define NSP_DFLT_BUFFER 0x18
|
||||
#define NSP_DFLT_BUFFER_CPP GENMASK_ULL(63, 40)
|
||||
#define NSP_DFLT_BUFFER_ADDRESS GENMASK_ULL(39, 0)
|
||||
|
||||
#define NSP_DFLT_BUFFER_CONFIG 0x20
|
||||
#define NSP_DFLT_BUFFER_SIZE_MB GENMASK_ULL(7, 0)
|
||||
@@ -427,8 +428,8 @@ __nfp_nsp_command_buf(struct nfp_nsp *nsp, u16 code, u32 option,
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
cpp_id = FIELD_GET(NSP_BUFFER_CPP, reg) << 8;
|
||||
cpp_buf = FIELD_GET(NSP_BUFFER_ADDRESS, reg);
|
||||
cpp_id = FIELD_GET(NSP_DFLT_BUFFER_CPP, reg) << 8;
|
||||
cpp_buf = FIELD_GET(NSP_DFLT_BUFFER_ADDRESS, reg);
|
||||
|
||||
if (in_buf && in_size) {
|
||||
err = nfp_cpp_write(cpp, cpp_id, cpp_buf, in_buf, in_size);
|
||||
|
||||
@@ -464,7 +464,6 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
|
||||
po->chan.mtu = dst_mtu(&rt->dst);
|
||||
if (!po->chan.mtu)
|
||||
po->chan.mtu = PPP_MRU;
|
||||
ip_rt_put(rt);
|
||||
po->chan.mtu -= PPTP_HEADER_OVERHEAD;
|
||||
|
||||
po->chan.hdrlen = 2 + sizeof(struct pptp_gre_header);
|
||||
|
||||
@@ -2646,6 +2646,7 @@ enum parport_pc_pci_cards {
|
||||
netmos_9901,
|
||||
netmos_9865,
|
||||
quatech_sppxp100,
|
||||
wch_ch382l,
|
||||
};
|
||||
|
||||
|
||||
@@ -2708,6 +2709,7 @@ static struct parport_pc_pci {
|
||||
/* netmos_9901 */ { 1, { { 0, -1 }, } },
|
||||
/* netmos_9865 */ { 1, { { 0, -1 }, } },
|
||||
/* quatech_sppxp100 */ { 1, { { 0, 1 }, } },
|
||||
/* wch_ch382l */ { 1, { { 2, -1 }, } },
|
||||
};
|
||||
|
||||
static const struct pci_device_id parport_pc_pci_tbl[] = {
|
||||
@@ -2797,6 +2799,8 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {
|
||||
/* Quatech SPPXP-100 Parallel port PCI ExpressCard */
|
||||
{ PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 },
|
||||
/* WCH CH382L PCI-E single parallel port card */
|
||||
{ 0x1c00, 0x3050, 0x1c00, 0x3050, 0, 0, wch_ch382l },
|
||||
{ 0, } /* terminate list */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl);
|
||||
|
||||
@@ -72,7 +72,8 @@ config DISPLAY7SEG
|
||||
|
||||
config ORACLE_DAX
|
||||
tristate "Oracle Data Analytics Accelerator"
|
||||
default m if SPARC64
|
||||
depends on SPARC64
|
||||
default m
|
||||
help
|
||||
Driver for Oracle Data Analytics Accelerator, which is
|
||||
a coprocessor that performs database operations in hardware.
|
||||
|
||||
@@ -594,7 +594,7 @@ static ssize_t device_add_store(struct device *dev,
|
||||
size_t inbytes = 0, outbytes = 0;
|
||||
u8 statustype = 0;
|
||||
|
||||
ret = sscanf(buf, "%20s %zu %zu %hhu", type, &inbytes,
|
||||
ret = sscanf(buf, "%19s %zu %zu %hhu", type, &inbytes,
|
||||
&outbytes, &statustype);
|
||||
if (ret != 3 && ret != 4)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -1275,6 +1275,8 @@ static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status)
|
||||
ack |= NISTC_INTA_ACK_AI_START;
|
||||
if (a_status & NISTC_AI_STATUS1_STOP)
|
||||
ack |= NISTC_INTA_ACK_AI_STOP;
|
||||
if (a_status & NISTC_AI_STATUS1_OVER)
|
||||
ack |= NISTC_INTA_ACK_AI_ERR;
|
||||
if (ack)
|
||||
ni_stc_writew(dev, ack, NISTC_INTA_ACK_REG);
|
||||
}
|
||||
|
||||
@@ -316,6 +316,7 @@ static const struct of_device_id of_platform_serial_table[] = {
|
||||
{ .compatible = "mrvl,mmp-uart",
|
||||
.data = (void *)PORT_XSCALE, },
|
||||
{ .compatible = "ti,da830-uart", .data = (void *)PORT_DA830, },
|
||||
{ .compatible = "nuvoton,npcm750-uart", .data = (void *)PORT_NPCM, },
|
||||
{ /* end of list */ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_platform_serial_table);
|
||||
|
||||
@@ -47,6 +47,10 @@
|
||||
#define UART_EXAR_SLEEP 0x8b /* Sleep mode */
|
||||
#define UART_EXAR_DVID 0x8d /* Device identification */
|
||||
|
||||
/* Nuvoton NPCM timeout register */
|
||||
#define UART_NPCM_TOR 7
|
||||
#define UART_NPCM_TOIE BIT(7) /* Timeout Interrupt Enable */
|
||||
|
||||
/*
|
||||
* Debugging.
|
||||
*/
|
||||
@@ -293,6 +297,15 @@ static const struct serial8250_config uart_config[] = {
|
||||
UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT,
|
||||
.flags = UART_CAP_FIFO,
|
||||
},
|
||||
[PORT_NPCM] = {
|
||||
.name = "Nuvoton 16550",
|
||||
.fifo_size = 16,
|
||||
.tx_loadsz = 16,
|
||||
.fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
|
||||
UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT,
|
||||
.rxtrig_bytes = {1, 4, 8, 14},
|
||||
.flags = UART_CAP_FIFO,
|
||||
},
|
||||
};
|
||||
|
||||
/* Uart divisor latch read */
|
||||
@@ -2140,6 +2153,15 @@ int serial8250_do_startup(struct uart_port *port)
|
||||
UART_DA830_PWREMU_MGMT_FREE);
|
||||
}
|
||||
|
||||
if (port->type == PORT_NPCM) {
|
||||
/*
|
||||
* Nuvoton calls the scratch register 'UART_TOR' (timeout
|
||||
* register). Enable it, and set TIOC (timeout interrupt
|
||||
* comparator) to be 0x20 for correct operation.
|
||||
*/
|
||||
serial_port_out(port, UART_NPCM_TOR, UART_NPCM_TOIE | 0x20);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SERIAL_8250_RSA
|
||||
/*
|
||||
* If this is an RSA port, see if we can kick it up to the
|
||||
@@ -2462,6 +2484,15 @@ static unsigned int xr17v35x_get_divisor(struct uart_8250_port *up,
|
||||
return quot_16 >> 4;
|
||||
}
|
||||
|
||||
/* Nuvoton NPCM UARTs have a custom divisor calculation */
|
||||
static unsigned int npcm_get_divisor(struct uart_8250_port *up,
|
||||
unsigned int baud)
|
||||
{
|
||||
struct uart_port *port = &up->port;
|
||||
|
||||
return DIV_ROUND_CLOSEST(port->uartclk, 16 * baud + 2) - 2;
|
||||
}
|
||||
|
||||
static unsigned int serial8250_get_divisor(struct uart_8250_port *up,
|
||||
unsigned int baud,
|
||||
unsigned int *frac)
|
||||
@@ -2482,6 +2513,8 @@ static unsigned int serial8250_get_divisor(struct uart_8250_port *up,
|
||||
quot = 0x8002;
|
||||
else if (up->port.type == PORT_XR17V35X)
|
||||
quot = xr17v35x_get_divisor(up, baud, frac);
|
||||
else if (up->port.type == PORT_NPCM)
|
||||
quot = npcm_get_divisor(up, baud);
|
||||
else
|
||||
quot = uart_get_divisor(port, baud);
|
||||
|
||||
|
||||
+5
-1
@@ -1354,6 +1354,11 @@ static void csi_m(struct vc_data *vc)
|
||||
case 3:
|
||||
vc->vc_italic = 1;
|
||||
break;
|
||||
case 21:
|
||||
/*
|
||||
* No console drivers support double underline, so
|
||||
* convert it to a single underline.
|
||||
*/
|
||||
case 4:
|
||||
vc->vc_underline = 1;
|
||||
break;
|
||||
@@ -1389,7 +1394,6 @@ static void csi_m(struct vc_data *vc)
|
||||
vc->vc_disp_ctrl = 1;
|
||||
vc->vc_toggle_meta = 1;
|
||||
break;
|
||||
case 21:
|
||||
case 22:
|
||||
vc->vc_intensity = 1;
|
||||
break;
|
||||
|
||||
@@ -155,6 +155,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{ USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
|
||||
{ USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
|
||||
{ USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
|
||||
{ USB_DEVICE(0x155A, 0x1006) }, /* ELDAT Easywave RX09 */
|
||||
{ USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
|
||||
{ USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */
|
||||
{ USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
|
||||
|
||||
@@ -769,6 +769,7 @@ static const struct usb_device_id id_table_combined[] = {
|
||||
.driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
|
||||
{ USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
|
||||
{ USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, RTSYSTEMS_USB_VX8_PID) },
|
||||
{ USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) },
|
||||
{ USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) },
|
||||
{ USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
|
||||
@@ -931,6 +932,7 @@ static const struct usb_device_id id_table_combined[] = {
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_FHE_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
|
||||
{ USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
|
||||
@@ -923,6 +923,9 @@
|
||||
/*
|
||||
* RT Systems programming cables for various ham radios
|
||||
*/
|
||||
/* This device uses the VID of FTDI */
|
||||
#define RTSYSTEMS_USB_VX8_PID 0x9e50 /* USB-VX8 USB to 7 pin modular plug for Yaesu VX-8 radio */
|
||||
|
||||
#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
|
||||
#define RTSYSTEMS_USB_S03_PID 0x9001 /* RTS-03 USB to Serial Adapter */
|
||||
#define RTSYSTEMS_USB_59_PID 0x9e50 /* USB-59 USB to 8 pin plug */
|
||||
@@ -1441,6 +1444,12 @@
|
||||
*/
|
||||
#define FTDI_CINTERION_MC55I_PID 0xA951
|
||||
|
||||
/*
|
||||
* Product: FirmwareHubEmulator
|
||||
* Manufacturer: Harman Becker Automotive Systems
|
||||
*/
|
||||
#define FTDI_FHE_PID 0xA9A0
|
||||
|
||||
/*
|
||||
* Product: Comet Caller ID decoder
|
||||
* Manufacturer: Crucible Technologies
|
||||
|
||||
+32
-5
@@ -1262,6 +1262,8 @@ static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info,
|
||||
list_del(&sums->list);
|
||||
kfree(sums);
|
||||
}
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1394,10 +1396,23 @@ next_slot:
|
||||
goto out_check;
|
||||
if (btrfs_extent_readonly(fs_info, disk_bytenr))
|
||||
goto out_check;
|
||||
if (btrfs_cross_ref_exist(root, ino,
|
||||
found_key.offset -
|
||||
extent_offset, disk_bytenr))
|
||||
ret = btrfs_cross_ref_exist(root, ino,
|
||||
found_key.offset -
|
||||
extent_offset, disk_bytenr);
|
||||
if (ret) {
|
||||
/*
|
||||
* ret could be -EIO if the above fails to read
|
||||
* metadata.
|
||||
*/
|
||||
if (ret < 0) {
|
||||
if (cow_start != (u64)-1)
|
||||
cur_offset = cow_start;
|
||||
goto error;
|
||||
}
|
||||
|
||||
WARN_ON_ONCE(nolock);
|
||||
goto out_check;
|
||||
}
|
||||
disk_bytenr += extent_offset;
|
||||
disk_bytenr += cur_offset - found_key.offset;
|
||||
num_bytes = min(end + 1, extent_end) - cur_offset;
|
||||
@@ -1415,10 +1430,22 @@ next_slot:
|
||||
* this ensure that csum for a given extent are
|
||||
* either valid or do not exist.
|
||||
*/
|
||||
if (csum_exist_in_range(fs_info, disk_bytenr,
|
||||
num_bytes)) {
|
||||
ret = csum_exist_in_range(fs_info, disk_bytenr,
|
||||
num_bytes);
|
||||
if (ret) {
|
||||
if (!nolock)
|
||||
btrfs_end_write_no_snapshotting(root);
|
||||
|
||||
/*
|
||||
* ret could be -EIO if the above fails to read
|
||||
* metadata.
|
||||
*/
|
||||
if (ret < 0) {
|
||||
if (cow_start != (u64)-1)
|
||||
cur_offset = cow_start;
|
||||
goto error;
|
||||
}
|
||||
WARN_ON_ONCE(nolock);
|
||||
goto out_check;
|
||||
}
|
||||
if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) {
|
||||
|
||||
+17
-5
@@ -302,12 +302,20 @@ static inline void bitmap_complement(unsigned long *dst, const unsigned long *sr
|
||||
__bitmap_complement(dst, src, nbits);
|
||||
}
|
||||
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
#define BITMAP_MEM_ALIGNMENT 8
|
||||
#else
|
||||
#define BITMAP_MEM_ALIGNMENT (8 * sizeof(unsigned long))
|
||||
#endif
|
||||
#define BITMAP_MEM_MASK (BITMAP_MEM_ALIGNMENT - 1)
|
||||
|
||||
static inline int bitmap_equal(const unsigned long *src1,
|
||||
const unsigned long *src2, unsigned int nbits)
|
||||
{
|
||||
if (small_const_nbits(nbits))
|
||||
return !((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits));
|
||||
if (__builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8))
|
||||
if (__builtin_constant_p(nbits & BITMAP_MEM_MASK) &&
|
||||
IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT))
|
||||
return !memcmp(src1, src2, nbits / 8);
|
||||
return __bitmap_equal(src1, src2, nbits);
|
||||
}
|
||||
@@ -358,8 +366,10 @@ static __always_inline void bitmap_set(unsigned long *map, unsigned int start,
|
||||
{
|
||||
if (__builtin_constant_p(nbits) && nbits == 1)
|
||||
__set_bit(start, map);
|
||||
else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) &&
|
||||
__builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8))
|
||||
else if (__builtin_constant_p(start & BITMAP_MEM_MASK) &&
|
||||
IS_ALIGNED(start, BITMAP_MEM_ALIGNMENT) &&
|
||||
__builtin_constant_p(nbits & BITMAP_MEM_MASK) &&
|
||||
IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT))
|
||||
memset((char *)map + start / 8, 0xff, nbits / 8);
|
||||
else
|
||||
__bitmap_set(map, start, nbits);
|
||||
@@ -370,8 +380,10 @@ static __always_inline void bitmap_clear(unsigned long *map, unsigned int start,
|
||||
{
|
||||
if (__builtin_constant_p(nbits) && nbits == 1)
|
||||
__clear_bit(start, map);
|
||||
else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) &&
|
||||
__builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8))
|
||||
else if (__builtin_constant_p(start & BITMAP_MEM_MASK) &&
|
||||
IS_ALIGNED(start, BITMAP_MEM_ALIGNMENT) &&
|
||||
__builtin_constant_p(nbits & BITMAP_MEM_MASK) &&
|
||||
IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT))
|
||||
memset((char *)map + start / 8, 0, nbits / 8);
|
||||
else
|
||||
__bitmap_clear(map, start, nbits);
|
||||
|
||||
@@ -222,6 +222,8 @@ typedef struct compat_siginfo {
|
||||
#ifdef __ARCH_SI_TRAPNO
|
||||
int _trapno; /* TRAP # which caused the signal */
|
||||
#endif
|
||||
#define __COMPAT_ADDR_BND_PKEY_PAD (__alignof__(compat_uptr_t) < sizeof(short) ? \
|
||||
sizeof(short) : __alignof__(compat_uptr_t))
|
||||
union {
|
||||
/*
|
||||
* used when si_code=BUS_MCEERR_AR or
|
||||
@@ -230,13 +232,13 @@ typedef struct compat_siginfo {
|
||||
short int _addr_lsb; /* Valid LSB of the reported address. */
|
||||
/* used when si_code=SEGV_BNDERR */
|
||||
struct {
|
||||
compat_uptr_t _dummy_bnd;
|
||||
char _dummy_bnd[__COMPAT_ADDR_BND_PKEY_PAD];
|
||||
compat_uptr_t _lower;
|
||||
compat_uptr_t _upper;
|
||||
} _addr_bnd;
|
||||
/* used when si_code=SEGV_PKUERR */
|
||||
struct {
|
||||
compat_uptr_t _dummy_pkey;
|
||||
char _dummy_pkey[__COMPAT_ADDR_BND_PKEY_PAD];
|
||||
u32 _pkey;
|
||||
} _addr_pkey;
|
||||
};
|
||||
|
||||
@@ -94,6 +94,9 @@ typedef struct siginfo {
|
||||
unsigned int _flags; /* see ia64 si_flags */
|
||||
unsigned long _isr; /* isr */
|
||||
#endif
|
||||
|
||||
#define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? \
|
||||
sizeof(short) : __alignof__(void *))
|
||||
union {
|
||||
/*
|
||||
* used when si_code=BUS_MCEERR_AR or
|
||||
@@ -102,13 +105,13 @@ typedef struct siginfo {
|
||||
short _addr_lsb; /* LSB of the reported address */
|
||||
/* used when si_code=SEGV_BNDERR */
|
||||
struct {
|
||||
void *_dummy_bnd;
|
||||
char _dummy_bnd[__ADDR_BND_PKEY_PAD];
|
||||
void __user *_lower;
|
||||
void __user *_upper;
|
||||
} _addr_bnd;
|
||||
/* used when si_code=SEGV_PKUERR */
|
||||
struct {
|
||||
void *_dummy_pkey;
|
||||
char _dummy_pkey[__ADDR_BND_PKEY_PAD];
|
||||
__u32 _pkey;
|
||||
} _addr_pkey;
|
||||
};
|
||||
|
||||
@@ -76,6 +76,9 @@
|
||||
#define PORT_SUNZILOG 38
|
||||
#define PORT_SUNSAB 39
|
||||
|
||||
/* Nuvoton UART */
|
||||
#define PORT_NPCM 40
|
||||
|
||||
/* Intel EG20 */
|
||||
#define PORT_PCH_8LINE 44
|
||||
#define PORT_PCH_2LINE 45
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/phy.h>
|
||||
#include <net/arp.h>
|
||||
#include <net/switchdev.h>
|
||||
|
||||
@@ -665,8 +666,11 @@ static int vlan_ethtool_get_ts_info(struct net_device *dev,
|
||||
{
|
||||
const struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
|
||||
const struct ethtool_ops *ops = vlan->real_dev->ethtool_ops;
|
||||
struct phy_device *phydev = vlan->real_dev->phydev;
|
||||
|
||||
if (ops->get_ts_info) {
|
||||
if (phydev && phydev->drv && phydev->drv->ts_info) {
|
||||
return phydev->drv->ts_info(phydev, info);
|
||||
} else if (ops->get_ts_info) {
|
||||
return ops->get_ts_info(vlan->real_dev, info);
|
||||
} else {
|
||||
info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
|
||||
|
||||
+1
-1
@@ -1027,7 +1027,7 @@ bool dev_valid_name(const char *name)
|
||||
{
|
||||
if (*name == '\0')
|
||||
return false;
|
||||
if (strlen(name) >= IFNAMSIZ)
|
||||
if (strnlen(name, IFNAMSIZ) == IFNAMSIZ)
|
||||
return false;
|
||||
if (!strcmp(name, ".") || !strcmp(name, ".."))
|
||||
return false;
|
||||
|
||||
+7
-1
@@ -126,6 +126,7 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev,
|
||||
struct dsa_port *cpu_dp = dev->dsa_ptr;
|
||||
struct dsa_switch_tree *dst = cpu_dp->dst;
|
||||
struct dsa_switch *ds;
|
||||
struct dsa_port *slave_port;
|
||||
|
||||
if (device < 0 || device >= DSA_MAX_SWITCHES)
|
||||
return NULL;
|
||||
@@ -137,7 +138,12 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev,
|
||||
if (port < 0 || port >= ds->num_ports)
|
||||
return NULL;
|
||||
|
||||
return ds->ports[port].slave;
|
||||
slave_port = &ds->ports[port];
|
||||
|
||||
if (unlikely(slave_port->type != DSA_PORT_TYPE_USER))
|
||||
return NULL;
|
||||
|
||||
return slave_port->slave;
|
||||
}
|
||||
|
||||
/* port.c */
|
||||
|
||||
+1
-1
@@ -437,7 +437,7 @@ static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev)
|
||||
/*unsigned long now; */
|
||||
struct net *net = dev_net(dev);
|
||||
|
||||
rt = ip_route_output(net, sip, tip, 0, 0);
|
||||
rt = ip_route_output(net, sip, tip, 0, l3mdev_master_ifindex_rcu(dev));
|
||||
if (IS_ERR(rt))
|
||||
return 1;
|
||||
if (rt->dst.dev != dev) {
|
||||
|
||||
@@ -253,13 +253,14 @@ static struct net_device *__ip_tunnel_create(struct net *net,
|
||||
struct net_device *dev;
|
||||
char name[IFNAMSIZ];
|
||||
|
||||
if (parms->name[0])
|
||||
strlcpy(name, parms->name, IFNAMSIZ);
|
||||
else {
|
||||
if (strlen(ops->kind) > (IFNAMSIZ - 3)) {
|
||||
err = -E2BIG;
|
||||
err = -E2BIG;
|
||||
if (parms->name[0]) {
|
||||
if (!dev_valid_name(parms->name))
|
||||
goto failed;
|
||||
strlcpy(name, parms->name, IFNAMSIZ);
|
||||
} else {
|
||||
if (strlen(ops->kind) > (IFNAMSIZ - 3))
|
||||
goto failed;
|
||||
}
|
||||
strlcpy(name, ops->kind, IFNAMSIZ);
|
||||
strncat(name, "%d", 2);
|
||||
}
|
||||
|
||||
+5
-3
@@ -335,11 +335,13 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,
|
||||
if (t || !create)
|
||||
return t;
|
||||
|
||||
if (parms->name[0])
|
||||
if (parms->name[0]) {
|
||||
if (!dev_valid_name(parms->name))
|
||||
return NULL;
|
||||
strlcpy(name, parms->name, IFNAMSIZ);
|
||||
else
|
||||
} else {
|
||||
strcpy(name, "ip6gre%d");
|
||||
|
||||
}
|
||||
dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
|
||||
ip6gre_tunnel_setup);
|
||||
if (!dev)
|
||||
|
||||
@@ -375,6 +375,11 @@ static int ip6_forward_proxy_check(struct sk_buff *skb)
|
||||
static inline int ip6_forward_finish(struct net *net, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
|
||||
__IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
|
||||
__IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
|
||||
|
||||
return dst_output(net, sk, skb);
|
||||
}
|
||||
|
||||
@@ -569,8 +574,6 @@ int ip6_forward(struct sk_buff *skb)
|
||||
|
||||
hdr->hop_limit--;
|
||||
|
||||
__IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
|
||||
__IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
|
||||
return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD,
|
||||
net, NULL, skb, skb->dev, dst->dev,
|
||||
ip6_forward_finish);
|
||||
|
||||
@@ -297,13 +297,16 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct __ip6_tnl_parm *p)
|
||||
struct net_device *dev;
|
||||
struct ip6_tnl *t;
|
||||
char name[IFNAMSIZ];
|
||||
int err = -ENOMEM;
|
||||
int err = -E2BIG;
|
||||
|
||||
if (p->name[0])
|
||||
if (p->name[0]) {
|
||||
if (!dev_valid_name(p->name))
|
||||
goto failed;
|
||||
strlcpy(name, p->name, IFNAMSIZ);
|
||||
else
|
||||
} else {
|
||||
sprintf(name, "ip6tnl%%d");
|
||||
|
||||
}
|
||||
err = -ENOMEM;
|
||||
dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
|
||||
ip6_tnl_dev_setup);
|
||||
if (!dev)
|
||||
|
||||
+5
-2
@@ -212,10 +212,13 @@ static struct ip6_tnl *vti6_tnl_create(struct net *net, struct __ip6_tnl_parm *p
|
||||
char name[IFNAMSIZ];
|
||||
int err;
|
||||
|
||||
if (p->name[0])
|
||||
if (p->name[0]) {
|
||||
if (!dev_valid_name(p->name))
|
||||
goto failed;
|
||||
strlcpy(name, p->name, IFNAMSIZ);
|
||||
else
|
||||
} else {
|
||||
sprintf(name, "ip6_vti%%d");
|
||||
}
|
||||
|
||||
dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, vti6_dev_setup);
|
||||
if (!dev)
|
||||
|
||||
+5
-3
@@ -250,11 +250,13 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
|
||||
if (!create)
|
||||
goto failed;
|
||||
|
||||
if (parms->name[0])
|
||||
if (parms->name[0]) {
|
||||
if (!dev_valid_name(parms->name))
|
||||
goto failed;
|
||||
strlcpy(name, parms->name, IFNAMSIZ);
|
||||
else
|
||||
} else {
|
||||
strcpy(name, "sit%d");
|
||||
|
||||
}
|
||||
dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
|
||||
ipip6_tunnel_setup);
|
||||
if (!dev)
|
||||
|
||||
+8
-4
@@ -248,10 +248,14 @@ static int tcf_bpf_init_from_efd(struct nlattr **tb, struct tcf_bpf_cfg *cfg)
|
||||
|
||||
static void tcf_bpf_cfg_cleanup(const struct tcf_bpf_cfg *cfg)
|
||||
{
|
||||
if (cfg->is_ebpf)
|
||||
bpf_prog_put(cfg->filter);
|
||||
else
|
||||
bpf_prog_destroy(cfg->filter);
|
||||
struct bpf_prog *filter = cfg->filter;
|
||||
|
||||
if (filter) {
|
||||
if (cfg->is_ebpf)
|
||||
bpf_prog_put(filter);
|
||||
else
|
||||
bpf_prog_destroy(filter);
|
||||
}
|
||||
|
||||
kfree(cfg->bpf_ops);
|
||||
kfree(cfg->bpf_name);
|
||||
|
||||
@@ -489,6 +489,7 @@ static int u32_delete_key(struct tcf_proto *tp, struct tc_u_knode *key)
|
||||
RCU_INIT_POINTER(*kp, key->next);
|
||||
|
||||
tcf_unbind_filter(tp, &key->res);
|
||||
idr_remove(&ht->handle_idr, key->handle);
|
||||
tcf_exts_get_net(&key->exts);
|
||||
call_rcu(&key->rcu, u32_delete_key_freepf_rcu);
|
||||
return 0;
|
||||
|
||||
+3
-1
@@ -728,8 +728,10 @@ static int sctp_v6_addr_to_user(struct sctp_sock *sp, union sctp_addr *addr)
|
||||
sctp_v6_map_v4(addr);
|
||||
}
|
||||
|
||||
if (addr->sa.sa_family == AF_INET)
|
||||
if (addr->sa.sa_family == AF_INET) {
|
||||
memset(addr->v4.sin_zero, 0, sizeof(addr->v4.sin_zero));
|
||||
return sizeof(struct sockaddr_in);
|
||||
}
|
||||
return sizeof(struct sockaddr_in6);
|
||||
}
|
||||
|
||||
|
||||
+8
-5
@@ -354,11 +354,14 @@ static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
|
||||
if (!opt->pf->af_supported(addr->sa.sa_family, opt))
|
||||
return NULL;
|
||||
|
||||
/* V4 mapped address are really of AF_INET family */
|
||||
if (addr->sa.sa_family == AF_INET6 &&
|
||||
ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
|
||||
!opt->pf->af_supported(AF_INET, opt))
|
||||
return NULL;
|
||||
if (addr->sa.sa_family == AF_INET6) {
|
||||
if (len < SIN6_LEN_RFC2133)
|
||||
return NULL;
|
||||
/* V4 mapped address are really of AF_INET family */
|
||||
if (ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
|
||||
!opt->pf->af_supported(AF_INET, opt))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* If we get this far, af is valid. */
|
||||
af = sctp_get_af_specific(addr->sa.sa_family);
|
||||
|
||||
Reference in New Issue
Block a user