Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp2628104ybv; Mon, 24 Feb 2020 08:38:03 -0800 (PST) X-Google-Smtp-Source: APXvYqwH35kCC5qhpLG6vCsufJy9egCmiPj8cbDq82UeRWNVXqum4xwGIvB6Fn5atxG8EeaGnYVu X-Received: by 2002:aca:c243:: with SMTP id s64mr12674727oif.141.1582562283190; Mon, 24 Feb 2020 08:38:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582562283; cv=none; d=google.com; s=arc-20160816; b=DmZ48ocZbLuwyd1oFU4gKwicUnw1VHV+kcLIg6kGliI3kcuIS0IxJmq8WsArXvSFAm cNKgcXSefiNDaGFkx6fB3xtAQyfIFPLCBolfAZpO5YfG7kOQCkB03rYaJ6nDYm7Ifj5S BBcxduf5o/c+tfNFj6tziVs35PFlTHwPJ+3qZEZtcNmPyR5gzvRGcbYuWkDErE9pR7Z+ M9UpI/u03x9OGX157c7t7IFqpcsueyzVUYx3p0u2FV7RUdqxevHpmpU96wPwMeR4bmqo Sq9inVmhxMe517v9bofZj2HD1aI81xf3OOAZUIhPzN4stGY0gh0WM7lpFQJfK9dAhtyU Mm5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=G+aCWrTPtazwLlxUW4Ddtt63F9Ca8NXitPxy5zGxSeo=; b=1JlRN3qgpVeTJzwvQ0x4JiFSp3NJhFzOw5esbgM0VTuNQRjy/dT1OQfJ30pAGTBEAR CiKbtWmoYZdzv/ox8FBiBW5N6eBhDvCw5jvLCBjyb9ZZjVZhGa9H14HiONq0BGto7qBF t/p220vbUvS9DKjwm5Gae6G0h5ZqPEx9NZuA2c+Sk+cvbE0wz0AOYBSF7YIeuRmP1Oh5 XazV9rtcTg89j6oDrFqd3+wFajMMSjnMrCmYf4g1lImZZqD+sWb4/bBdvI07lk2Oc3cX U+9TTyhaXGBmVKy5bPhPRvsw92nKI7rhwJhh8BiYhjAwQ55XSp2CDQ9rTyq6GPXEyafC 9atg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=OyK0PgTu; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si6418399otp.248.2020.02.24.08.37.48; Mon, 24 Feb 2020 08:38:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=OyK0PgTu; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727438AbgBXQhk (ORCPT + 99 others); Mon, 24 Feb 2020 11:37:40 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:51431 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727160AbgBXQhk (ORCPT ); Mon, 24 Feb 2020 11:37:40 -0500 Received: by mail-wm1-f68.google.com with SMTP id t23so9640377wmi.1; Mon, 24 Feb 2020 08:37:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=G+aCWrTPtazwLlxUW4Ddtt63F9Ca8NXitPxy5zGxSeo=; b=OyK0PgTuu8fZ6LWuZ+3xulzUbpo6OkLEHg5JQCENw1b0M3fbmycMihPs93zkd4g5Ip 6zUV3hF0GXG8uun2UldTFXG7dSb3ET1ASbVPw2A7sw38RPRA4C9hrEZzG8/kvgu50uyd iJvZJRooEICcStMF8z8Aezj9eQM5Mw293VUUj/fsbAkJgtKjGHD9mTCpikqyZZIfW4Gn FT5CmFQYYmNGDbXI9RyYjHeUmsqoWo6XjFkgYtSuPDBoMdeIPwN3ytRNq6sEEXWM5IVf uFuZxFka9JOmO2uNGtwA6uPVvgsRuccqNw4AHCGPw8X7NuLGyo1pAOZ6UUPW4pRl0XDt DxbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=G+aCWrTPtazwLlxUW4Ddtt63F9Ca8NXitPxy5zGxSeo=; b=uJIQWfxqDKicuAaRhbS/DUBwxnRj7tpCj45FyapevJ/8YOfHHBJTkeCj2868YLf27L TyOvEWPJR8KQm1DZpWO/JgXOkPbjUO8IexuFtD5oBXltoLO9ouNvpR+ehVM5OOcVyuqq KsXEzlzlsnSUvRfd/npsdSZq35372EPyWmDwagU/0gZZxYIzxtbqmG4/iuVsSEOiXfvz 5V7kRKngy700gGbHHRrLrB71T3E9ivHR2KqOL+trC5Sl1qFMFFuz6dGiRsDWQoWBEFiK iYTr+bhXWqbt9SukaA6thn8oAUSCfqloa5KOxnwzLV8t71jhEIv2N8a3Le/qgqR4BI0D GU+Q== X-Gm-Message-State: APjAAAXoOxLmP2z+GMdA4QZoEl1f9+hiEi7OqCB2PJMrTvttV6nf/AMb j+3qOrkjeUoxJ+3RvWQyqg8ROvh0j4DrCyQPJuQ= X-Received: by 2002:a05:600c:217:: with SMTP id 23mr22797412wmi.124.1582562258838; Mon, 24 Feb 2020 08:37:38 -0800 (PST) MIME-Version: 1.0 References: <20200127165646.19806-1-andrew.smirnov@gmail.com> <20200127165646.19806-7-andrew.smirnov@gmail.com> In-Reply-To: From: Andrey Smirnov Date: Mon, 24 Feb 2020 08:37:27 -0800 Message-ID: Subject: Re: [PATCH v7 6/9] crypto: caam - check if RNG job failed To: Horia Geanta Cc: "linux-crypto@vger.kernel.org" , Chris Healy , Lucas Stach , Herbert Xu , Iuliana Prodan , "linux-kernel@vger.kernel.org" , dl-linux-imx Content-Type: text/plain; charset="UTF-8" Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On Wed, Feb 12, 2020 at 2:41 AM Horia Geanta wrote: > > On 1/27/2020 6:57 PM, Andrey Smirnov wrote: > > @@ -60,12 +65,12 @@ static struct caam_rng_ctx *to_caam_rng_ctx(struct hwrng *r) > > static void caam_rng_done(struct device *jrdev, u32 *desc, u32 err, > > void *context) > > { > > - struct completion *done = context; > > + struct caam_rng_job_ctx *jctx = context; > > > > if (err) > > - caam_jr_strstatus(jrdev, err); > > + *jctx->err = caam_jr_strstatus(jrdev, err); > > > > - complete(done); > > + complete(jctx->done); > > } > > > > static u32 *caam_init_desc(u32 *desc, dma_addr_t dst_dma, int len) > > @@ -89,6 +94,10 @@ static int caam_rng_read_one(struct device *jrdev, > > { > > dma_addr_t dst_dma; > > int err; > > + struct caam_rng_job_ctx jctx = { > > + .done = done, > > + .err = &err, > > + }; > > > > len = min_t(int, len, CAAM_RNG_MAX_FIFO_STORE_SIZE); > > > > @@ -101,7 +110,7 @@ static int caam_rng_read_one(struct device *jrdev, > > init_completion(done); > > err = caam_jr_enqueue(jrdev, > > caam_init_desc(desc, dst_dma, len), > > - caam_rng_done, done); > > + caam_rng_done, &jctx); > AFAICT there's a race condition b/w caam_jr_enqueue() and caam_rng_done(), > both writing to "err": > caam_jr_enqueue() > -> JR interrupt -> caam_jr_interrupt() -> tasklet_schedule()... > -> spin_unlock_bh() > -> caam_jr_dequeue() -> caam_rng_done() -> write err > -> return 0 -> write err > Yes, I thought it didn't really matter for calling wait_for_completion(done), but now that I think on it again, it can return wrong result code from vcaam_rng_read_one(). Will fix in v8. Thanks, Andrey Smirnov