Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp3151613ybn; Fri, 27 Sep 2019 01:49:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqxVJI4nafzrs2fTxJruQl7STOwX6lKXRmD0GumjxHkUtYsdFSKx7jVX74WlIR5uyYknK5n4 X-Received: by 2002:a50:b545:: with SMTP id z5mr3197204edd.203.1569574185890; Fri, 27 Sep 2019 01:49:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569574185; cv=none; d=google.com; s=arc-20160816; b=RKs6/2ig3ZjhAdP4KpRadFKGPGUyB6W5UXAtj0Jca1rdNSBTDN2b5FdIY/65c1oh5l u9LoYfb0MrwjNLVnFlFaCw3tYRFzThqnkroutO3ddoqwqdX0Eluc57uHgJq2m43zREJq qQA0QGrwoP9KkKn0f+PJf8rghZeUplcQYyorwLvOTvq3rONdL9Yllto8aGCq7/bmB9jM pqCGnBrq8VFSsWXgAj4GqOskyQKfOWqKeOnAnH4k/oRUDFDb03cgosnIEpB60WTPayJo 1g1wyJ6WqscQCUvDfPHmcon/T7e3vPmdErrVJiiPOA15bxDRIZsqWEfKJ0RBlpEUz5Yp GBvg== 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 :message-id:date:subject:cc:to:from; bh=Y4WHWFZ15FgeDxKLGcXWD+k0uvAGSmW7mJIWZbYzrJI=; b=HKyFH1VkQOfwQ6mzHf9echZeyPeSg2ydJMQzPotnNXURItRZOaOaEN/hRr5rpFqGlI icUyk1h6kxJzbDB7cbapZa77evgab974NWoOicOSU7rXgCuYwdQiAz+frBITSmvzSlKd qWAcakBCN7bMyniMDZkR0HMPBNB/VTQrD4koRCn51KkAsKm0th5u77+xSdhZoL3fZ9pp bCQUgPpYa1Wad/3Bey/KF4gQ8w6k3U3Cstb2pVHr7n8HVHFr/wEaql3PM4JHv9lmcKIm NeavYeOejRZrPEZLf9oz3WF6G1+3wVf6xJfVJUZpcFNlfUi6y+8nEsWCX2pT4I3ewU1n BcbQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id dv21si2303649ejb.241.2019.09.27.01.49.20; Fri, 27 Sep 2019 01:49:45 -0700 (PDT) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726116AbfI0Iqr (ORCPT + 99 others); Fri, 27 Sep 2019 04:46:47 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:51479 "EHLO relay5-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725882AbfI0Iqr (ORCPT ); Fri, 27 Sep 2019 04:46:47 -0400 X-Originating-IP: 65.39.69.237 Received: from localhost (unknown [65.39.69.237]) (Authenticated sender: repk@triplefau.lt) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 0C35C1C000B; Fri, 27 Sep 2019 08:46:44 +0000 (UTC) From: Remi Pommarel To: Thomas Petazzoni , Lorenzo Pieralisi , Bjorn Helgaas Cc: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Remi Pommarel Subject: [PATCH v3] PCI: aardvark: Don't rely on jiffies while holding spinlock Date: Fri, 27 Sep 2019 10:55:02 +0200 Message-Id: <20190927085502.1758-1-repk@triplefau.lt> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- Changes since v1: - Reduce polling delay - Change size_t into int for loop counter Changes since v2: - Keep timeout to 1ms by increasing retry counter --- drivers/pci/controller/pci-aardvark.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index fc0fe4d4de49..7b5c9d6c8706 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -175,7 +175,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 @@ -383,17 +384,16 @@ static void advk_pcie_check_pio_status(struct advk_pcie *pcie) static int advk_pcie_wait_pio(struct advk_pcie *pcie) { struct device *dev = &pcie->pdev->dev; - unsigned long timeout; + int i; - timeout = jiffies + msecs_to_jiffies(PIO_TIMEOUT_MS); - - 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"); -- 2.20.1