In the common case of !PageHighMem we can do zero copy crypto
even if sg crosses a pages boundary.

Signed-off-by: Ilya Lesokhin <il...@mellanox.com>
---
 arch/x86/crypto/aesni-intel_glue.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/arch/x86/crypto/aesni-intel_glue.c 
b/arch/x86/crypto/aesni-intel_glue.c
index b1ab0cb..b494ad7 100644
--- a/arch/x86/crypto/aesni-intel_glue.c
+++ b/arch/x86/crypto/aesni-intel_glue.c
@@ -903,9 +903,11 @@ static int helper_rfc4106_encrypt(struct aead_request *req)
        *((__be32 *)(iv+12)) = counter;
 
        if (sg_is_last(req->src) &&
-           req->src->offset + req->src->length <= PAGE_SIZE &&
+           (!PageHighMem(sg_page(req->src)) ||
+           req->src->offset + req->src->length <= PAGE_SIZE) &&
            sg_is_last(req->dst) &&
-           req->dst->offset + req->dst->length <= PAGE_SIZE) {
+           (!PageHighMem(sg_page(req->dst)) ||
+           req->dst->offset + req->dst->length <= PAGE_SIZE)) {
                one_entry_in_sg = 1;
                scatterwalk_start(&src_sg_walk, req->src);
                assoc = scatterwalk_map(&src_sg_walk);
@@ -990,9 +992,11 @@ static int helper_rfc4106_decrypt(struct aead_request *req)
        *((__be32 *)(iv+12)) = counter;
 
        if (sg_is_last(req->src) &&
-           req->src->offset + req->src->length <= PAGE_SIZE &&
+           (!PageHighMem(sg_page(req->src)) ||
+           req->src->offset + req->src->length <= PAGE_SIZE) &&
            sg_is_last(req->dst) &&
-           req->dst->offset + req->dst->length <= PAGE_SIZE) {
+           (!PageHighMem(sg_page(req->dst)) ||
+           req->dst->offset + req->dst->length <= PAGE_SIZE)) {
                one_entry_in_sg = 1;
                scatterwalk_start(&src_sg_walk, req->src);
                assoc = scatterwalk_map(&src_sg_walk);
-- 
1.8.3.1

--
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

Reply via email to