Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp489228imm; Fri, 28 Sep 2018 01:46:30 -0700 (PDT) X-Google-Smtp-Source: ACcGV63Jsj7/+DKLN3cRDRCMFosmokq/62HhNB2cf6lIq2em4ySS3FlFmyRj6s7e+soWJeV0HblX X-Received: by 2002:a63:e04d:: with SMTP id n13-v6mr14257928pgj.426.1538124389977; Fri, 28 Sep 2018 01:46:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538124389; cv=none; d=google.com; s=arc-20160816; b=PDqJUBpDU8cSypA+W+Sek5xyg1RnE8jjFo6T9IDXURSLM5r86sH1hEy7YdPNXzVZLg 3HXhEtvHBUIrFZ7mEnL8gOoS82XDoGw/rQylhjRBlEi03cfszetOzJndUnink3f+JORz qt+UY7amRM/AJL2Gx7ybguQbb7qzsiODvos+MPz6yNxEfUsaWJnqKCNYP/jqdVP6Pn7r K5fxfi/iPyM+gi6K4zxKhCRVyzsYVMQggrWDdZmAOOCLNkHkc7Sm8B8QlRhfgM3fjliJ h0GNHMnHsnvGsIhSe5SyTzTlHdCSGb4iTs0tjF8wYsCczWnGEoDyXgh+fSmzj7/2/kgR Y7DQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:reply-to:references:in-reply-to :message-id:date:subject:cc:to:from; bh=/UiPoCpPmSI+oFkZfGiiyv3umTUCKqIDPmKEHfMC0pg=; b=Vgf8mJUExqly9wph6qwLN4WhzBSbcnlnCuOxQFsJkaek0wjtkLgIsrpn+yrYcwRqne QtvdwCncrrREfPAZ8daRj6eBfX2NnjvKmJpO57VVX4vBPKmj3SHb9OcHj5xyGI89kpJ3 y7x1CdvMHlq92pn3LXdbRXx3FReXgEqqt+EUT3rbrfWa5JerRyrih26kB9cydqkuIboe yZrjHQqYD7NaTjEz2VyrjGTY90Lu92RlbQU9fMTiJdqgrcy1+HMZF9mo1V5itoE7DxVO mqa8c4lZ6ReqxzKBa9ox/wvaY4Q+IDq+E00cpxqgN5AMwwzWI6T89i1DWnXLCNb9wDHN qf2A== 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=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bh12-v6si4181972plb.425.2018.09.28.01.46.14; Fri, 28 Sep 2018 01:46:29 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729364AbeI1PGi (ORCPT + 99 others); Fri, 28 Sep 2018 11:06:38 -0400 Received: from inva021.nxp.com ([92.121.34.21]:50668 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727389AbeI1PGX (ORCPT ); Fri, 28 Sep 2018 11:06:23 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 0844320010E; Fri, 28 Sep 2018 10:43:40 +0200 (CEST) Received: from inva024.eu-rdc02.nxp.com (inva024.eu-rdc02.nxp.com [134.27.226.22]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id EF1D5200007; Fri, 28 Sep 2018 10:43:39 +0200 (CEST) Received: from fsr-fed2164-101.ea.freescale.net (fsr-fed2164-101.ea.freescale.net [10.171.82.91]) by inva024.eu-rdc02.nxp.com (Postfix) with ESMTP id 8AE6B2039E; Fri, 28 Sep 2018 10:43:39 +0200 (CEST) From: Madalin Bucur To: leoyang.li@nxp.com Cc: roy.pledge@nxp.com, claudiu.manoil@nxp.com, catalin.marinas@arm.com, oss@buserror.net, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Madalin Bucur Subject: [PATCH v2 1/5] soc/fsl/qbman: Check if CPU is offline when initializing portals Date: Fri, 28 Sep 2018 11:43:20 +0300 Message-Id: <1538124204-31406-2-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1538124204-31406-1-git-send-email-madalin.bucur@nxp.com> References: <1538124204-31406-1-git-send-email-madalin.bucur@nxp.com> Reply-to: madalin.bucur@nxp.com X-Virus-Scanned: ClamAV using ClamSMTP Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Roy Pledge If the CPU to affine the portal interrupt is offline at boot time affine the portal interrupt to another online CPU. If the CPU is later brought online the hotplug handler will correctly adjust the affinity. Moved common code in a function. Signed-off-by: Roy Pledge Signed-off-by: Madalin Bucur --- drivers/soc/fsl/qbman/bman.c | 6 ++---- drivers/soc/fsl/qbman/dpaa_sys.h | 20 ++++++++++++++++++++ drivers/soc/fsl/qbman/qman.c | 6 ++---- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/drivers/soc/fsl/qbman/bman.c b/drivers/soc/fsl/qbman/bman.c index f9485cedc648..f84ab596bde8 100644 --- a/drivers/soc/fsl/qbman/bman.c +++ b/drivers/soc/fsl/qbman/bman.c @@ -562,11 +562,9 @@ static int bman_create_portal(struct bman_portal *portal, dev_err(c->dev, "request_irq() failed\n"); goto fail_irq; } - if (c->cpu != -1 && irq_can_set_affinity(c->irq) && - irq_set_affinity(c->irq, cpumask_of(c->cpu))) { - dev_err(c->dev, "irq_set_affinity() failed\n"); + + if (dpaa_set_portal_irq_affinity(c->dev, c->irq, c->cpu)) goto fail_affinity; - } /* Need RCR to be empty before continuing */ ret = bm_rcr_get_fill(p); diff --git a/drivers/soc/fsl/qbman/dpaa_sys.h b/drivers/soc/fsl/qbman/dpaa_sys.h index 9f379000da85..ae8afa552b1e 100644 --- a/drivers/soc/fsl/qbman/dpaa_sys.h +++ b/drivers/soc/fsl/qbman/dpaa_sys.h @@ -111,4 +111,24 @@ int qbman_init_private_mem(struct device *dev, int idx, dma_addr_t *addr, #define QBMAN_MEMREMAP_ATTR MEMREMAP_WC #endif +static inline int dpaa_set_portal_irq_affinity(struct device *dev, + int irq, int cpu) +{ + int ret = 0; + + if (!irq_can_set_affinity(irq)) { + dev_err(dev, "unable to set IRQ affinity\n"); + return -EINVAL; + } + + if (cpu == -1 || !cpu_online(cpu)) + cpu = cpumask_any(cpu_online_mask); + + ret = irq_set_affinity(irq, cpumask_of(cpu)); + if (ret) + dev_err(dev, "irq_set_affinity() on CPU %d failed\n", cpu); + + return ret; +} + #endif /* __DPAA_SYS_H */ diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c index ecb22749df0b..0ffe7a1d0eae 100644 --- a/drivers/soc/fsl/qbman/qman.c +++ b/drivers/soc/fsl/qbman/qman.c @@ -1210,11 +1210,9 @@ static int qman_create_portal(struct qman_portal *portal, dev_err(c->dev, "request_irq() failed\n"); goto fail_irq; } - if (c->cpu != -1 && irq_can_set_affinity(c->irq) && - irq_set_affinity(c->irq, cpumask_of(c->cpu))) { - dev_err(c->dev, "irq_set_affinity() failed\n"); + + if (dpaa_set_portal_irq_affinity(c->dev, c->irq, c->cpu)) goto fail_affinity; - } /* Need EQCR to be empty before continuing */ isdr &= ~QM_PIRQ_EQCI; -- 2.1.0