Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp571582imb; Fri, 1 Mar 2019 08:08:53 -0800 (PST) X-Google-Smtp-Source: AHgI3IZRHUjzaHCEUHejjD1mGuWpYeLuC0Gk2flv46O55ZfKG5/52d6fB6fWxCW4pITVVdAr7rxS X-Received: by 2002:a62:564d:: with SMTP id k74mr6211947pfb.19.1551456533419; Fri, 01 Mar 2019 08:08:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551456533; cv=none; d=google.com; s=arc-20160816; b=Eg6cFS7tofJaNjCTY6dCcoSFbwyJnTmTDSIuAlZy52P8CNEbi0c5lJg00Jf7Fru8X6 90/LVZOpsmD5GVYcvjRKLzmLC+wZpsfPzUDmnr+4DZFfMTGqDc00+s79Lgbcx3TUHJMc jZ1PrrmxK/hhIj6/kLjzqfNppIVNo+D5Y3IQTVpNuBsLFY0Gu02DAvx/xOMnyB/kaxKL 2xh5WhVgG7VFTBK8pbk9Cio/LFvG/gUTCnKuYfhrwaGCR9SIpRZbCHzqpDSPxPWdLDET sBLzqwBB43ytkVfTpHfd5vRa7/Ab8/ckK9tN5CYOKtuuca2S1bxXNOXoM5FS9Ypn5RMf U+hA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=P6dX9tEvnGlxDQ5G1MjgIuYTdge6cX2zt0wg3TqNsv0=; b=igKpWehdAnOcSiNtfysrNK1Sd7EfAmzAYvMm5qh4lA6ipiZK8cZDn3/k1w9Wv8AlwK h+c9K6tjrqiK6DGQPPdgEUAPD4kRwW/Lhwa+i0eBZ2JWU5OJ3bn3sYH+95B+irQC9Ixh N9OX5i2vU+8srLasdg/hRBkDFKZpYp5RhTkMvOtq0oMRo1qA/TzeFt3qgq69Ih6wTd0r mBd00nQ2DvSU1AzSFckM3EDrPRUYBgmpXPjL/IKAbPJMSsmeYKAb7anGrdPLL1lgRcfw nmhESxs7fqQS2lnxGFQLj14j07fb9UKzcNQ+1XBDGylQsJbKe72LWBovMXR10rCb0eO1 T+VA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q77si11192277pfa.102.2019.03.01.08.08.38; Fri, 01 Mar 2019 08:08:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388935AbfCAQHU (ORCPT + 99 others); Fri, 1 Mar 2019 11:07:20 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:60352 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727952AbfCAQHU (ORCPT ); Fri, 1 Mar 2019 11:07:20 -0500 Received: from localhost (unknown [IPv6:2a01:e0a:2c:6930:5cf4:84a1:2763:fe0d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 1397327DC83; Fri, 1 Mar 2019 16:07:18 +0000 (GMT) Date: Fri, 1 Mar 2019 17:07:15 +0100 From: Boris Brezillon To: "Tokunori Ikegami" Cc: "'liujian \(CE\)'" , "'Tokunori Ikegami'" , , , , , , , , , , Subject: Re: [PATCH v3] cfi: fix deadloop in cfi_cmdset_0002.c do_write_buffer Message-ID: <20190301170715.68d89e84@collabora.com> In-Reply-To: <005a01d4d03e$39b0e0f0$ad12a2d0$@yahoo.co.jp> References: <1551189648-58073-1-git-send-email-liujian56@huawei.com> <016001d4cf71$865e7b60$931b7220$@gmail.com> <4F88C5DDA1E80143B232E89585ACE27D0264F137@DGGEMM528-MBX.china.huawei.com> <20190228164228.734ede80@collabora.com> <005a01d4d03e$39b0e0f0$ad12a2d0$@yahoo.co.jp> Organization: Collabora X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ikegami, On Fri, 1 Mar 2019 23:51:16 +0900 "Tokunori Ikegami" wrote: > > Except this version no longer does what Vignesh suggested. See how you > > no longer test if chip_good() is true if time_after() returns true. So, > > imagine the thread entering this function is preempted just after the > > first chip_good() test, and resumed a few ms later. time_after() will > > return true, but chip_good() might also return true, and you ignore it. > > I think that the following 3 versions will be worked for time_after() as a same result and follow the Vignesh-san suggestion. Let me show you how they are different: > > 1. Original Vignesh-san suggestion > > if (chip_good(map, adr, datum)) { > xip_enable(map, chip, adr); > goto op_done; > } --> thread preempted here ==> chip_good() test becomes valid here --> thread resumed here, but timeout has expired > > if (time_after(jiffies, timeo)) { you enter this branch > /* Test chip_good() if TRUE incorrectly again so write failure by time_after() can be avoided. */ > if (chip_good(map, adr, datum)) { chip_good() returns true > xip_enable(map, chip, adr); > goto op_done; > } > break; > } > > 2. Liujian-san v3 patch > > /* Test chip_good() if FALSE correctly so write failure by time_after() can be avoided. */ --> thread preempted here ==> chip_good() test becomes valid here --> thread resumed here, but timeout has expired > if (time_after(jiffies, timeo) && !chip_good(map, adr)) You do not enter this branch because the chip_good() test is done once more in case of timeout. > break; > > if (chip_good(map, adr, datum)) { > xip_enable(map, chip, adr); > goto op_done; > } > > 3. My idea > > /* Save current jiffies value before chip_good() to avoid write failure by time_after() without testing chip_good() again. */ > unsigned long now = jiffies; > > if (chip_good(map, adr, datum)) { > xip_enable(map, chip, adr); > goto op_done; > } > --> thread preempted here ==> chip_good() test becomes valid here --> thread resumed here, but timeout has expired > if (time_after(now, timeo)) You do enter this branch, and erroneously report a failure. > break; > See now why your version is not correct? Regards, Boris