Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3796883pxv; Mon, 19 Jul 2021 08:59:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzP6WIuzEHHDJrSgKK6bkBuC3tLxLDcv60Qvic73ZLdMDpSX7549/Ob95JrR19/xJMLbGQp X-Received: by 2002:a5e:dc0c:: with SMTP id b12mr9857026iok.141.1626710357997; Mon, 19 Jul 2021 08:59:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626710357; cv=none; d=google.com; s=arc-20160816; b=bHMrm2SHStgJ0W5uk67DL7gvNJgrNZjw9y9jkI2OzLaNT9gDJbwYnY9JTFka52TjCo 2tkwFPwc5eGy1bFwgCWvB7/DyjhHsXCazBtCaB4kvbiNJZKZ1o6v+Qs38g9Q03XYkEem NIERvl8mllyDX5ByKSwKbpUFSAyggqYGpTlpN/2Vgf6lVCgs83XHbGyhA/xYxneJVANK 0hnmQSoqdomR4kDWOPpS63RlYGiLC4mDNejKAaIaOcG1sLoTgB7+/je2DN9Lodk6udRH jzGZTi90VLbrQ9tfWOD2d2SwPJISNPZfKA8PGvqa5v4QeGy75+MQ/aYfuqkl3XWA+rTW VxZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Rw3IhipYqaHyHRRsFBY9trNrg5GFQYXqME1ay8dT05k=; b=eXE/AbPvZm0E4HnOMo17oy9xgQDPEiEeuouY3XMcHaJ+S7OA0y0puIdBPGNjlzZw0R 4Ehw0LmQuSMqJ96Wh3gJJwU/SlGyQa2PNCYDHxSoKhuGRsHMFoCNu4hXwIFgT0F0cM9h UNhXN57lzijGhjQxeVc73p97kbks3yx7cQb4mOlXecOSF7wM1wrQ7fyL3J/Yl5tQf2wE fKcU52RB1CxnOV6UVuInMGoLfczuRPk9IgtZim2ErctuqCu8oxxIRJnC0s9/6lEN56zS i0kaPiyCoVfCgJkga7+MduCyKmkE1hez6kylPIq0vGi2wL6gM0COhKfbKdvBTqMeU83m trUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eVNU9yUu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z13si19088230ile.110.2021.07.19.08.59.06; Mon, 19 Jul 2021 08:59:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eVNU9yUu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345623AbhGSPQz (ORCPT + 99 others); Mon, 19 Jul 2021 11:16:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:40462 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245430AbhGSOr1 (ORCPT ); Mon, 19 Jul 2021 10:47:27 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id AA7A96113B; Mon, 19 Jul 2021 15:23:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626708235; bh=pjhl/Ikbkwp9aJzO3QhyFGkx/kiFCiBdzsiwReEX5Vk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eVNU9yUu8pIHK3NDzsbBcvN0ciAP71Vwl2CPH5vyb5n+rAxhma4C4foQeeEBEfB31 Iw6+198GAhAU5m6a1DdQSAjqK1WEOuGytOdzXlAVMHP+MHs3vluKRgZuQya+q3Qgfl ACeKEthDVDDbD0cbwGTkToSRYD1mFXf5BRATfdrU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Remi Pommarel , Lorenzo Pieralisi , Andrew Murray , Thomas Petazzoni Subject: [PATCH 4.14 234/315] PCI: aardvark: Dont rely on jiffies while holding spinlock Date: Mon, 19 Jul 2021 16:52:03 +0200 Message-Id: <20210719144951.115590417@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.861561397@linuxfoundation.org> References: <20210719144942.861561397@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Remi Pommarel commit 7fbcb5da811be7d47468417c7795405058abb3da upstream. advk_pcie_wait_pio() can be called while holding a spinlock (from pci_bus_read_config_dword()), then depends on jiffies in order to timeout while polling on PIO state registers. In the case the PIO transaction failed, the timeout will never happen and will also cause the cpu to stall. This decrements a variable and wait instead of using jiffies. Signed-off-by: Remi Pommarel Signed-off-by: Lorenzo Pieralisi Reviewed-by: Andrew Murray Acked-by: Thomas Petazzoni Signed-off-by: Greg Kroah-Hartman --- drivers/pci/host/pci-aardvark.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/drivers/pci/host/pci-aardvark.c +++ b/drivers/pci/host/pci-aardvark.c @@ -185,7 +185,8 @@ (PCIE_CONF_BUS(bus) | PCIE_CONF_DEV(PCI_SLOT(devfn)) | \ PCIE_CONF_FUNC(PCI_FUNC(devfn)) | PCIE_CONF_REG(where)) -#define PIO_TIMEOUT_MS 1 +#define PIO_RETRY_CNT 500 +#define PIO_RETRY_DELAY 2 /* 2 us*/ #define LINK_WAIT_MAX_RETRIES 10 #define LINK_WAIT_USLEEP_MIN 90000 @@ -413,17 +414,16 @@ static void advk_pcie_check_pio_status(s static int advk_pcie_wait_pio(struct advk_pcie *pcie) { struct device *dev = &pcie->pdev->dev; - unsigned long timeout; - - timeout = jiffies + msecs_to_jiffies(PIO_TIMEOUT_MS); + int i; - while (time_before(jiffies, timeout)) { + for (i = 0; i < PIO_RETRY_CNT; i++) { u32 start, isr; start = advk_readl(pcie, PIO_START); isr = advk_readl(pcie, PIO_ISR); if (!start && isr) return 0; + udelay(PIO_RETRY_DELAY); } dev_err(dev, "config read/write timed out\n");