workqueue list corruption
Hello, On Tue, Apr 18, 2017 at 8:08 PM, Samuel Hollandwrote: > Representative backtraces follow (the warnings come in sets). I have > kernel .configs and extended netconsole output from several occurrences > available upon request. > > WARNING: CPU: 1 PID: 0 at lib/list_debug.c:33 __list_add+0x89/0xb0 > list_add corruption. prev->next should be next (99f135016a90), but > was d34affc03b10. (prev=d34affc03b10). > CPU: 1 PID: 0 Comm: swapper/1 Tainted: G O4.9.20+ #1 > Call Trace: > > dump_stack+0x67/0x92 > __warn+0xc6/0xe0 > warn_slowpath_fmt+0x5a/0x80 > __list_add+0x89/0xb0 > insert_work+0x3c/0xc0 > __queue_work+0x18a/0x600 > queue_work_on+0x33/0x70 We triggered a similar list corruption on 4.1.35 stable kernel, and without padata: [9021262.823059] [ cut here ] [9021262.827957] WARNING: CPU: 8 PID: 1366 at lib/list_debug.c:62 __list_del_entry+0x5a/0x98() [9021262.836275] list_del corruption. next->prev should be 8802f4644ca0, but was 88080c337ca0 [9021262.845285] Modules linked in: fuse sch_htb cls_basic act_mirred cls_u32 veth sch_ingress cpufreq_ondemand in tel_rapl iosf_mbi x86_pkg_temp_thermal coretemp kvm_intel kvm iTCO_wdt iTCO_vendor_support microcode wmi lpc_ich shpchp dcdbas acpi_pad hed mfd_core i2c_i801 sb_edac edac_core ioatd ma acpi_cpufreq lp parport tcp_diag inet_diag sch_fq_codel ipmi_si ipmi_devintf ipmi_msghandler ipv6 xfs libcrc32c crc32c_intel igb ptp pps_core i2c_algo_bit dca i2c_core [9021262.885919] CPU: 8 PID: 1366 Comm: kworker/8:0 Not tainted 4.1.35.el7.twitter.x86_64 #1 [9021262.894284] Hardware name: Dell Inc. PowerEdge C6220/04GD66, BIOS 2.2.3 11/07/2013 [9021262.902126] 8802c01f7cd8 81544a67 8802c01f7d28 [9021262.909644] 0009 8802c01f7d18 81069285 8802c01f7cf8 [9021262.917232] 812b247f 8802f4644c98 88080c337c98 8802f4644ca0 [9021262.924741] Call Trace: [9021262.927326] [] dump_stack+0x4d/0x63 [9021262.932749] [] warn_slowpath_common+0xa1/0xbb [9021262.938889] [] ? __list_del_entry+0x5a/0x98 [9021262.944990] [] warn_slowpath_fmt+0x46/0x48 [9021262.950802] [] __list_del_entry+0x5a/0x98 [9021262.956638] [] move_linked_works+0x35/0x65 [9021262.962632] [] pwq_activate_delayed_work+0x31/0x3f [9021262.969234] [] pwq_dec_nr_in_flight+0x45/0x8c [9021262.975411] [] process_one_work+0x284/0x2d1 [9021262.981408] [] worker_thread+0x1dd/0x2bb [9021262.987079] [] ? cancel_delayed_work+0x72/0x72 [9021262.993394] [] ? cancel_delayed_work+0x72/0x72 [9021262.999685] [] kthread+0xa5/0xad [9021263.004678] [] ? __kthread_parkme+0x61/0x61 [9021263.010655] [] ret_from_fork+0x42/0x70 [9021263.016305] [] ? __kthread_parkme+0x61/0x61 [9021263.022236] ---[ end trace 62dde64b253c2f87 ]--- Unfortunately I have no idea how this was triggered since it happened on one of thousands in the cluster. Is there anything I can help to debug this? Thanks!
Re: bad page state due to PF_ALG socket
On Thu, Dec 17, 2015 at 4:58 AM, Dmitry Vyukovwrote: > kasan: GPF could be caused by NULL-ptr deref or user memory access > general protection fault: [#1] SMP KASAN > Modules linked in: > CPU: 3 PID: 7168 Comm: a.out Tainted: GB 4.4.0-rc3+ #151 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 > task: 88003712ad00 ti: 8800331d8000 task.ti: 8800331d8000 > RIP: 0010:[] [] > skcipher_recvmsg+0x82/0x1f10 > RSP: 0018:8800331dfb80 EFLAGS: 00010203 > RAX: dc00 RBX: 88006b98f300 RCX: 00010040 > RDX: 0002 RSI: 8800331dfdc0 RDI: 0016 > RBP: 8800331dfc80 R08: 8800331dfdd0 R09: 000a > R10: 00010040 R11: 0246 R12: 0006 > R13: 8800331dfdc0 R14: 8800331dfdc0 R15: 00010040 > FS: 02630880(0063) GS:88006cf0() knlGS: > CS: 0010 DS: ES: CR0: 8005003b > CR2: 00c8200d73b0 CR3: 64c58000 CR4: 06e0 > Stack: > 88006aba6024 88006ab24520 88006ab24510 88006aba67e0 > 88006aba602c ed000d574cfc 88006ab24518 > 88006aba602d 1000 88006ab24500 88006aba6a48 > Call Trace: > [< inline >] sock_recvmsg_nosec net/socket.c:712 > [] sock_recvmsg+0xaa/0xe0 net/socket.c:720 > [] SYSC_recvfrom+0x1e4/0x370 net/socket.c:1707 > [] SyS_recvfrom+0x40/0x50 net/socket.c:1681 > [] entry_SYSCALL_64_fastpath+0x16/0x7a > arch/x86/entry/entry_64.S:185 I think it is probably fixed by: commit 130ed5d105dde141e7fe60d5440aa53e0a84f13b Author: tadeusz.st...@intel.com Date: Tue Dec 15 10:46:17 2015 -0800 net: fix uninitialized variable issue -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 12/60] crypto: remove the second argument of k[un]map_atomic()
Signed-off-by: Cong Wang amw...@redhat.com --- drivers/crypto/hifn_795x.c | 10 +- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c index fe765f4..76368f9 100644 --- a/drivers/crypto/hifn_795x.c +++ b/drivers/crypto/hifn_795x.c @@ -1731,9 +1731,9 @@ static int ablkcipher_get(void *saddr, unsigned int *srestp, unsigned int offset while (size) { copy = min3(srest, dst-length, size); - daddr = kmap_atomic(sg_page(dst), KM_IRQ0); + daddr = kmap_atomic(sg_page(dst)); memcpy(daddr + dst-offset + offset, saddr, copy); - kunmap_atomic(daddr, KM_IRQ0); + kunmap_atomic(daddr); nbytes -= copy; size -= copy; @@ -1793,17 +1793,17 @@ static void hifn_process_ready(struct ablkcipher_request *req, int error) continue; } - saddr = kmap_atomic(sg_page(t), KM_SOFTIRQ0); + saddr = kmap_atomic(sg_page(t)); err = ablkcipher_get(saddr, t-length, t-offset, dst, nbytes, nbytes); if (err 0) { - kunmap_atomic(saddr, KM_SOFTIRQ0); + kunmap_atomic(saddr); break; } idx += err; - kunmap_atomic(saddr, KM_SOFTIRQ0); + kunmap_atomic(saddr); } hifn_cipher_walk_exit(rctx-walk); -- 1.7.7.6 -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 08/60] x86: remove the second argument of k[un]map_atomic()
Acked-by: Avi Kivity a...@redhat.com Acked-by: Herbert Xu herb...@gondor.apana.org.au Signed-off-by: Cong Wang amw...@redhat.com --- arch/x86/crypto/aesni-intel_glue.c | 24 arch/x86/kernel/crash_dump_32.c|6 +++--- arch/x86/kvm/lapic.c |8 arch/x86/kvm/paging_tmpl.h |4 ++-- arch/x86/kvm/x86.c |8 arch/x86/lib/usercopy_32.c |4 ++-- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c index 545d0ce..152232d 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c @@ -1107,12 +1107,12 @@ static int __driver_rfc4106_encrypt(struct aead_request *req) one_entry_in_sg = 1; scatterwalk_start(src_sg_walk, req-src); scatterwalk_start(assoc_sg_walk, req-assoc); - src = scatterwalk_map(src_sg_walk, 0); - assoc = scatterwalk_map(assoc_sg_walk, 0); + src = scatterwalk_map(src_sg_walk); + assoc = scatterwalk_map(assoc_sg_walk); dst = src; if (unlikely(req-src != req-dst)) { scatterwalk_start(dst_sg_walk, req-dst); - dst = scatterwalk_map(dst_sg_walk, 0); + dst = scatterwalk_map(dst_sg_walk); } } else { @@ -1136,11 +1136,11 @@ static int __driver_rfc4106_encrypt(struct aead_request *req) * back to the packet. */ if (one_entry_in_sg) { if (unlikely(req-src != req-dst)) { - scatterwalk_unmap(dst, 0); + scatterwalk_unmap(dst); scatterwalk_done(dst_sg_walk, 0, 0); } - scatterwalk_unmap(src, 0); - scatterwalk_unmap(assoc, 0); + scatterwalk_unmap(src); + scatterwalk_unmap(assoc); scatterwalk_done(src_sg_walk, 0, 0); scatterwalk_done(assoc_sg_walk, 0, 0); } else { @@ -1189,12 +1189,12 @@ static int __driver_rfc4106_decrypt(struct aead_request *req) one_entry_in_sg = 1; scatterwalk_start(src_sg_walk, req-src); scatterwalk_start(assoc_sg_walk, req-assoc); - src = scatterwalk_map(src_sg_walk, 0); - assoc = scatterwalk_map(assoc_sg_walk, 0); + src = scatterwalk_map(src_sg_walk); + assoc = scatterwalk_map(assoc_sg_walk); dst = src; if (unlikely(req-src != req-dst)) { scatterwalk_start(dst_sg_walk, req-dst); - dst = scatterwalk_map(dst_sg_walk, 0); + dst = scatterwalk_map(dst_sg_walk); } } else { @@ -1219,11 +1219,11 @@ static int __driver_rfc4106_decrypt(struct aead_request *req) if (one_entry_in_sg) { if (unlikely(req-src != req-dst)) { - scatterwalk_unmap(dst, 0); + scatterwalk_unmap(dst); scatterwalk_done(dst_sg_walk, 0, 0); } - scatterwalk_unmap(src, 0); - scatterwalk_unmap(assoc, 0); + scatterwalk_unmap(src); + scatterwalk_unmap(assoc); scatterwalk_done(src_sg_walk, 0, 0); scatterwalk_done(assoc_sg_walk, 0, 0); } else { diff --git a/arch/x86/kernel/crash_dump_32.c b/arch/x86/kernel/crash_dump_32.c index 642f75a..11891ca 100644 --- a/arch/x86/kernel/crash_dump_32.c +++ b/arch/x86/kernel/crash_dump_32.c @@ -62,16 +62,16 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, if (!userbuf) { memcpy(buf, (vaddr + offset), csize); - kunmap_atomic(vaddr, KM_PTE0); + kunmap_atomic(vaddr); } else { if (!kdump_buf_page) { printk(KERN_WARNING Kdump: Kdump buffer page not allocated\n); - kunmap_atomic(vaddr, KM_PTE0); + kunmap_atomic(vaddr); return -EFAULT; } copy_page(kdump_buf_page, vaddr); - kunmap_atomic(vaddr, KM_PTE0); + kunmap_atomic(vaddr); if (copy_to_user(buf, (kdump_buf_page + offset), csize)) return -EFAULT; } diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index cfdc6e0..31bfc69 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -1283,9 +1283,9 @@ void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu) if (!irqchip_in_kernel(vcpu-kvm) || !vcpu-arch.apic-vapic_addr) return; - vapic = kmap_atomic(vcpu-arch.apic-vapic_page, KM_USER0); + vapic = kmap_atomic(vcpu
[PATCH 09/62] crypto: remove the second argument of k[un]map_atomic()
Signed-off-by: Cong Wang amw...@redhat.com --- crypto/ahash.c |4 ++-- crypto/async_tx/async_memcpy.c |8 crypto/blkcipher.c |8 crypto/ccm.c |4 ++-- crypto/scatterwalk.c |8 crypto/shash.c |8 include/crypto/scatterwalk.h | 28 +++- 7 files changed, 23 insertions(+), 45 deletions(-) diff --git a/crypto/ahash.c b/crypto/ahash.c index ac93c99..33bc9b6 100644 --- a/crypto/ahash.c +++ b/crypto/ahash.c @@ -46,7 +46,7 @@ static int hash_walk_next(struct crypto_hash_walk *walk) unsigned int nbytes = min(walk-entrylen, ((unsigned int)(PAGE_SIZE)) - offset); - walk-data = crypto_kmap(walk-pg, 0); + walk-data = kmap_atomic(walk-pg); walk-data += offset; if (offset alignmask) { @@ -93,7 +93,7 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err) return nbytes; } - crypto_kunmap(walk-data, 0); + kunmap_atomic(walk-data); crypto_yield(walk-flags); if (err) diff --git a/crypto/async_tx/async_memcpy.c b/crypto/async_tx/async_memcpy.c index 0d5a90c..361b5e8 100644 --- a/crypto/async_tx/async_memcpy.c +++ b/crypto/async_tx/async_memcpy.c @@ -79,13 +79,13 @@ async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset, /* wait for any prerequisite operations */ async_tx_quiesce(submit-depend_tx); - dest_buf = kmap_atomic(dest, KM_USER0) + dest_offset; - src_buf = kmap_atomic(src, KM_USER1) + src_offset; + dest_buf = kmap_atomic(dest) + dest_offset; + src_buf = kmap_atomic(src) + src_offset; memcpy(dest_buf, src_buf, len); - kunmap_atomic(src_buf, KM_USER1); - kunmap_atomic(dest_buf, KM_USER0); + kunmap_atomic(src_buf); + kunmap_atomic(dest_buf); async_tx_sync_epilog(submit); } diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c index 1e61d1a..4dd80c7 100644 --- a/crypto/blkcipher.c +++ b/crypto/blkcipher.c @@ -43,22 +43,22 @@ static int blkcipher_walk_first(struct blkcipher_desc *desc, static inline void blkcipher_map_src(struct blkcipher_walk *walk) { - walk-src.virt.addr = scatterwalk_map(walk-in, 0); + walk-src.virt.addr = scatterwalk_map(walk-in); } static inline void blkcipher_map_dst(struct blkcipher_walk *walk) { - walk-dst.virt.addr = scatterwalk_map(walk-out, 1); + walk-dst.virt.addr = scatterwalk_map(walk-out); } static inline void blkcipher_unmap_src(struct blkcipher_walk *walk) { - scatterwalk_unmap(walk-src.virt.addr, 0); + scatterwalk_unmap(walk-src.virt.addr); } static inline void blkcipher_unmap_dst(struct blkcipher_walk *walk) { - scatterwalk_unmap(walk-dst.virt.addr, 1); + scatterwalk_unmap(walk-dst.virt.addr); } /* Get a spot of the specified length that does not straddle a page. diff --git a/crypto/ccm.c b/crypto/ccm.c index c36d654..32fe1bb 100644 --- a/crypto/ccm.c +++ b/crypto/ccm.c @@ -216,12 +216,12 @@ static void get_data_to_compute(struct crypto_cipher *tfm, scatterwalk_start(walk, sg_next(walk.sg)); n = scatterwalk_clamp(walk, len); } - data_src = scatterwalk_map(walk, 0); + data_src = scatterwalk_map(walk); compute_mac(tfm, data_src, n, pctx); len -= n; - scatterwalk_unmap(data_src, 0); + scatterwalk_unmap(data_src); scatterwalk_advance(walk, n); scatterwalk_done(walk, 0, len); if (len) diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c index 41e529a..7281b8a 100644 --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c @@ -40,9 +40,9 @@ void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg) } EXPORT_SYMBOL_GPL(scatterwalk_start); -void *scatterwalk_map(struct scatter_walk *walk, int out) +void *scatterwalk_map(struct scatter_walk *walk) { - return crypto_kmap(scatterwalk_page(walk), out) + + return kmap_atomic(scatterwalk_page(walk)) + offset_in_page(walk-offset); } EXPORT_SYMBOL_GPL(scatterwalk_map); @@ -83,9 +83,9 @@ void scatterwalk_copychunks(void *buf, struct scatter_walk *walk, if (len_this_page nbytes) len_this_page = nbytes; - vaddr = scatterwalk_map(walk, out); + vaddr = scatterwalk_map(walk); memcpy_dir(buf, vaddr, len_this_page, out); - scatterwalk_unmap(vaddr, out); + scatterwalk_unmap(vaddr); scatterwalk_advance(walk, len_this_page); diff --git a/crypto/shash.c b/crypto/shash.c index 9100912..21fc12e 100644
[PATCH 08/62] x86: remove the second argument of k[un]map_atomic()
Signed-off-by: Cong Wang amw...@redhat.com --- arch/x86/crypto/aesni-intel_glue.c | 24 arch/x86/kernel/crash_dump_32.c|6 +++--- arch/x86/kvm/lapic.c |8 arch/x86/kvm/paging_tmpl.h |4 ++-- arch/x86/kvm/x86.c |8 arch/x86/lib/usercopy_32.c |4 ++-- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c index 545d0ce..152232d 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c @@ -1107,12 +1107,12 @@ static int __driver_rfc4106_encrypt(struct aead_request *req) one_entry_in_sg = 1; scatterwalk_start(src_sg_walk, req-src); scatterwalk_start(assoc_sg_walk, req-assoc); - src = scatterwalk_map(src_sg_walk, 0); - assoc = scatterwalk_map(assoc_sg_walk, 0); + src = scatterwalk_map(src_sg_walk); + assoc = scatterwalk_map(assoc_sg_walk); dst = src; if (unlikely(req-src != req-dst)) { scatterwalk_start(dst_sg_walk, req-dst); - dst = scatterwalk_map(dst_sg_walk, 0); + dst = scatterwalk_map(dst_sg_walk); } } else { @@ -1136,11 +1136,11 @@ static int __driver_rfc4106_encrypt(struct aead_request *req) * back to the packet. */ if (one_entry_in_sg) { if (unlikely(req-src != req-dst)) { - scatterwalk_unmap(dst, 0); + scatterwalk_unmap(dst); scatterwalk_done(dst_sg_walk, 0, 0); } - scatterwalk_unmap(src, 0); - scatterwalk_unmap(assoc, 0); + scatterwalk_unmap(src); + scatterwalk_unmap(assoc); scatterwalk_done(src_sg_walk, 0, 0); scatterwalk_done(assoc_sg_walk, 0, 0); } else { @@ -1189,12 +1189,12 @@ static int __driver_rfc4106_decrypt(struct aead_request *req) one_entry_in_sg = 1; scatterwalk_start(src_sg_walk, req-src); scatterwalk_start(assoc_sg_walk, req-assoc); - src = scatterwalk_map(src_sg_walk, 0); - assoc = scatterwalk_map(assoc_sg_walk, 0); + src = scatterwalk_map(src_sg_walk); + assoc = scatterwalk_map(assoc_sg_walk); dst = src; if (unlikely(req-src != req-dst)) { scatterwalk_start(dst_sg_walk, req-dst); - dst = scatterwalk_map(dst_sg_walk, 0); + dst = scatterwalk_map(dst_sg_walk); } } else { @@ -1219,11 +1219,11 @@ static int __driver_rfc4106_decrypt(struct aead_request *req) if (one_entry_in_sg) { if (unlikely(req-src != req-dst)) { - scatterwalk_unmap(dst, 0); + scatterwalk_unmap(dst); scatterwalk_done(dst_sg_walk, 0, 0); } - scatterwalk_unmap(src, 0); - scatterwalk_unmap(assoc, 0); + scatterwalk_unmap(src); + scatterwalk_unmap(assoc); scatterwalk_done(src_sg_walk, 0, 0); scatterwalk_done(assoc_sg_walk, 0, 0); } else { diff --git a/arch/x86/kernel/crash_dump_32.c b/arch/x86/kernel/crash_dump_32.c index 642f75a..11891ca 100644 --- a/arch/x86/kernel/crash_dump_32.c +++ b/arch/x86/kernel/crash_dump_32.c @@ -62,16 +62,16 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, if (!userbuf) { memcpy(buf, (vaddr + offset), csize); - kunmap_atomic(vaddr, KM_PTE0); + kunmap_atomic(vaddr); } else { if (!kdump_buf_page) { printk(KERN_WARNING Kdump: Kdump buffer page not allocated\n); - kunmap_atomic(vaddr, KM_PTE0); + kunmap_atomic(vaddr); return -EFAULT; } copy_page(kdump_buf_page, vaddr); - kunmap_atomic(vaddr, KM_PTE0); + kunmap_atomic(vaddr); if (copy_to_user(buf, (kdump_buf_page + offset), csize)) return -EFAULT; } diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 54abb40..e462e30 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -1282,9 +1282,9 @@ void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu) if (!irqchip_in_kernel(vcpu-kvm) || !vcpu-arch.apic-vapic_addr) return; - vapic = kmap_atomic(vcpu-arch.apic-vapic_page, KM_USER0); + vapic = kmap_atomic(vcpu-arch.apic-vapic_page); data = *(u32 *)(vapic + offset_in_page(vcpu-arch.apic
[PATCH 12/62] crypto: remove the second argument of k[un]map_atomic()
Signed-off-by: Cong Wang amw...@redhat.com --- drivers/crypto/hifn_795x.c | 10 +- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c index fe765f4..76368f9 100644 --- a/drivers/crypto/hifn_795x.c +++ b/drivers/crypto/hifn_795x.c @@ -1731,9 +1731,9 @@ static int ablkcipher_get(void *saddr, unsigned int *srestp, unsigned int offset while (size) { copy = min3(srest, dst-length, size); - daddr = kmap_atomic(sg_page(dst), KM_IRQ0); + daddr = kmap_atomic(sg_page(dst)); memcpy(daddr + dst-offset + offset, saddr, copy); - kunmap_atomic(daddr, KM_IRQ0); + kunmap_atomic(daddr); nbytes -= copy; size -= copy; @@ -1793,17 +1793,17 @@ static void hifn_process_ready(struct ablkcipher_request *req, int error) continue; } - saddr = kmap_atomic(sg_page(t), KM_SOFTIRQ0); + saddr = kmap_atomic(sg_page(t)); err = ablkcipher_get(saddr, t-length, t-offset, dst, nbytes, nbytes); if (err 0) { - kunmap_atomic(saddr, KM_SOFTIRQ0); + kunmap_atomic(saddr); break; } idx += err; - kunmap_atomic(saddr, KM_SOFTIRQ0); + kunmap_atomic(saddr); } hifn_cipher_walk_exit(rctx-walk); -- 1.7.4.4 -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html