From patchwork Tue Mar 22 16:04:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corentin Labbe X-Patchwork-Id: 8643871 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: X-Original-To: patchwork-linux-crypto@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id D6F5C9F3D1 for ; Tue, 22 Mar 2016 16:05:22 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E2E572037F for ; Tue, 22 Mar 2016 16:05:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0D46B20204 for ; Tue, 22 Mar 2016 16:05:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751365AbcCVQFT (ORCPT ); Tue, 22 Mar 2016 12:05:19 -0400 Received: from mail-wm0-f47.google.com ([74.125.82.47]:35778 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750860AbcCVQFS (ORCPT ); Tue, 22 Mar 2016 12:05:18 -0400 Received: by mail-wm0-f47.google.com with SMTP id l68so159951074wml.0; Tue, 22 Mar 2016 09:05:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=XfGzLyhUvBNpBuq6pav66+zKL/qCNKXh+EYC9hLUTeA=; b=0jmy6um5z0mkJ61gnauyMbt4ZJQ6XVPANzaazMmDgbB4sN7pstnb95PR3jVfOqKXkE lzHTR7oGMlSvsspoOeyy6uTGd1Snh6weV8PyO0fFPYdsu51AeA4I7z7reTrlxJIFFD5y zz256vuKADq0RkOrHZDWTWXH5foZvDz1o6J8iz7C/lZ9LvWHEOrO6O9LTCV3mWn0Ujfs BOJNL6bP58lKBu7DqO4WHsb0fR09mKP+dNhWVwCxTpezPLr5lbKsCvfPDhPVF+78b8y8 pyDI6FEbl3JeNKdQEh5VmZJgg4D23OluSFLvO0nvEUxz2ac03Ejv/l6/Yz8Ff01trZEq tQQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=XfGzLyhUvBNpBuq6pav66+zKL/qCNKXh+EYC9hLUTeA=; b=PI53AVo4oabYiNkQOJOb8FdsKoEVbIMAPUynOoGEEuGClsPfjt4QA0u7UIfYp1R2gT 9l/5kC0pRAqM7ITpWUGcFyg8cMjNsAz7dQyrORMyf1ubpQDLzdM44ogd2LRLxu8/OGGd rWEHiziy+DG9MVe6EyIp/hDldcQnfh8dT8R1DpvcD29TJCEff1ShK7GWRwpOP6pbj2Dt yX5LGl/S9FbLHThB2hteg1yqrvGB9umbF/og6kKtnSKGd0X7NF3SFVPwm0x1JuOXmlxn 9AYfNx8ZrTazwoAeyyKBTLxRKu4sk1z0s17ykw36ihnrxoaN8SPc6fBtBfBM0/Ue2d8i tFJg== X-Gm-Message-State: AD7BkJL9E+4q9WhLf6zWvCVezjPz+UXQD0q5t6QV6KyUFa2TcEtmNh5hhObZrN10QP0aEg== X-Received: by 10.28.211.130 with SMTP id k124mr21769111wmg.7.1458662716549; Tue, 22 Mar 2016 09:05:16 -0700 (PDT) Received: from Red.local (ANice-651-1-347-184.w86-205.abo.wanadoo.fr. [86.205.131.184]) by smtp.googlemail.com with ESMTPSA id k124sm17941216wmb.11.2016.03.22.09.05.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 Mar 2016 09:05:15 -0700 (PDT) From: LABBE Corentin To: herbert@gondor.apana.org.au, davem@davemloft.net, maxime.ripard@free-electrons.com, wens@csie.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, LABBE Corentin , stable Subject: [PATCH] crypto: sun4i-ss: use spin_lock_irq{save|restore} Date: Tue, 22 Mar 2016 17:04:54 +0100 Message-Id: <1458662694-25527-1-git-send-email-clabbe.montjoie@gmail.com> X-Mailer: git-send-email 2.7.3 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The current sun4i-ss driver is subject to data corruption when ciphering/deciphering. It occurs randomly on end of handled data. No root cause have been found and the only way to remove it is to replace all spin_lock_bh by they irq counterparts. Signed-off-by: LABBE Corentin Cc: stable --- drivers/crypto/sunxi-ss/sun4i-ss-cipher.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c index a19ee12..e72fea73 100644 --- a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c +++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c @@ -35,6 +35,7 @@ static int sun4i_ss_opti_poll(struct ablkcipher_request *areq) unsigned int todo; struct sg_mapping_iter mi, mo; unsigned int oi, oo; /* offset for in and out */ + unsigned long flags; if (areq->nbytes == 0) return 0; @@ -49,7 +50,7 @@ static int sun4i_ss_opti_poll(struct ablkcipher_request *areq) return -EINVAL; } - spin_lock_bh(&ss->slock); + spin_lock_irqsave(&ss->slock, flags); for (i = 0; i < op->keylen; i += 4) writel(*(op->key + i / 4), ss->base + SS_KEY0 + i); @@ -117,7 +118,7 @@ release_ss: sg_miter_stop(&mi); sg_miter_stop(&mo); writel(0, ss->base + SS_CTL); - spin_unlock_bh(&ss->slock); + spin_unlock_irqrestore(&ss->slock, flags); return err; } @@ -149,6 +150,7 @@ static int sun4i_ss_cipher_poll(struct ablkcipher_request *areq) unsigned int ob = 0; /* offset in buf */ unsigned int obo = 0; /* offset in bufo*/ unsigned int obl = 0; /* length of data in bufo */ + unsigned long flags; if (areq->nbytes == 0) return 0; @@ -181,7 +183,7 @@ static int sun4i_ss_cipher_poll(struct ablkcipher_request *areq) if (no_chunk == 1) return sun4i_ss_opti_poll(areq); - spin_lock_bh(&ss->slock); + spin_lock_irqsave(&ss->slock, flags); for (i = 0; i < op->keylen; i += 4) writel(*(op->key + i / 4), ss->base + SS_KEY0 + i); @@ -308,7 +310,7 @@ release_ss: sg_miter_stop(&mi); sg_miter_stop(&mo); writel(0, ss->base + SS_CTL); - spin_unlock_bh(&ss->slock); + spin_unlock_irqrestore(&ss->slock, flags); return err; }