Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3749128ybi; Mon, 27 May 2019 05:26:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqxHIjqD8oDD1njITaoXYO9GZbes4temKdak2RrnT4iBYnCvhy+Acysf/lvw3o6oMSP+T4so X-Received: by 2002:a65:5cca:: with SMTP id b10mr126899470pgt.444.1558960016809; Mon, 27 May 2019 05:26:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558960016; cv=none; d=google.com; s=arc-20160816; b=aj8kBPSvNjbOiJnNsc9Cuoyfh77GwoDc1r+sXJ2qs5oyQk21N/KSzAeWTgRphhL9cL 7CQCT23+bjpVoPJVhNMYS+6oRfFMAg9CRJ3a6uaLBY4Dt5z4+w+BWLhpHzHAkTln8/MQ Qba7Jh9akG06cXdT63XsejBvyy9C38cM9SHltN2XVGnsNBZ3Hl0G1TCIxqweSvaX53Q+ /LB+w8DCXVbd7ewyHcToKv9oFSSQUxqOeLPqcrcqE0MMc90vXmqSfM+7kLkjAy2yI5wk zPvJvwtHTc7KiItoetHZmnv+FZEnXtAG2AdlOxmaz1DxeIRuZheF8qUrQj21NXx/OHjL jF5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:reply-to:message-id:date:subject:cc:to :from; bh=vAHEy9+CRL5tiM+toylVCB1NPDny9ztxSHmdoE1jtlo=; b=ALfBQedGllBTvHo0k4stHl38Keo0LUoP44PiU4zEuuGlI8XT+p1hz/YQXV9Qko7gwx ke1wxbZKphG3HswvgLBfWxLuiMvALi888C5nDJzCXBl5uuHd1xGZKjevLKqfV3DUQHNa CVcRUF5Iq0+g/fCy+vBy5cSpIn2u2BFXI/eWX7T32K7k0L0urQvI42+nmJqE8b+npH9Q eiK9NuLD4wWTVhME8KSZ8N2fLWjVZj4FyE84tg85QPqhGOWjjuY+7dNoONng/Razbvor toGIa8qhPqWHiuB57FDGGlSFkD/Mya8fldcDqe9wG1t2NshMFqhwagA/CL/svuA370g0 6irQ== 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 x1si20262276pfo.66.2019.05.27.05.26.41; Mon, 27 May 2019 05:26:56 -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 S1727129AbfE0MYN (ORCPT + 99 others); Mon, 27 May 2019 08:24:13 -0400 Received: from inva021.nxp.com ([92.121.34.21]:38466 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726600AbfE0MYL (ORCPT ); Mon, 27 May 2019 08:24:11 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id B6895200B7F; Mon, 27 May 2019 14:24:08 +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 A82B2200089; Mon, 27 May 2019 14:24:08 +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 681052060A; Mon, 27 May 2019 14:24:08 +0200 (CEST) From: Madalin Bucur To: davem@davemloft.net Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Madalin Bucur Subject: [PATCH] dpaa_eth: use only online CPU portals Date: Mon, 27 May 2019 15:24:05 +0300 Message-Id: <1558959845-30758-1-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 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 Make sure only the portals for the online CPUs are used. Without this change, there are issues when someone boots with maxcpus=n, with n < actual number of cores available as frames either received or corresponding to the transmit confirmation path would be offered for dequeue to the offline CPU portals, getting lost. Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 9 ++++----- drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index d3f2408dc9e8..f38c3fa7d705 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -780,7 +780,7 @@ static void dpaa_eth_add_channel(u16 channel) struct qman_portal *portal; int cpu; - for_each_cpu(cpu, cpus) { + for_each_cpu_and(cpu, cpus, cpu_online_mask) { portal = qman_get_affine_portal(cpu); qman_p_static_dequeue_add(portal, pool); } @@ -896,7 +896,7 @@ static void dpaa_fq_setup(struct dpaa_priv *priv, u16 channels[NR_CPUS]; struct dpaa_fq *fq; - for_each_cpu(cpu, affine_cpus) + for_each_cpu_and(cpu, affine_cpus, cpu_online_mask) channels[num_portals++] = qman_affine_channel(cpu); if (num_portals == 0) @@ -2174,7 +2174,6 @@ static int dpaa_eth_poll(struct napi_struct *napi, int budget) if (cleaned < budget) { napi_complete_done(napi, cleaned); qman_p_irqsource_add(np->p, QM_PIRQ_DQRI); - } else if (np->down) { qman_p_irqsource_add(np->p, QM_PIRQ_DQRI); } @@ -2448,7 +2447,7 @@ static void dpaa_eth_napi_enable(struct dpaa_priv *priv) struct dpaa_percpu_priv *percpu_priv; int i; - for_each_possible_cpu(i) { + for_each_online_cpu(i) { percpu_priv = per_cpu_ptr(priv->percpu_priv, i); percpu_priv->np.down = 0; @@ -2461,7 +2460,7 @@ static void dpaa_eth_napi_disable(struct dpaa_priv *priv) struct dpaa_percpu_priv *percpu_priv; int i; - for_each_possible_cpu(i) { + for_each_online_cpu(i) { percpu_priv = per_cpu_ptr(priv->percpu_priv, i); percpu_priv->np.down = 1; diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c index bdee441bc3b7..7ce2e99b594d 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c @@ -569,7 +569,7 @@ static int dpaa_set_coalesce(struct net_device *dev, qman_dqrr_get_ithresh(portal, &prev_thresh); /* set new values */ - for_each_cpu(cpu, cpus) { + for_each_cpu_and(cpu, cpus, cpu_online_mask) { portal = qman_get_affine_portal(cpu); res = qman_portal_set_iperiod(portal, period); if (res) @@ -586,7 +586,7 @@ static int dpaa_set_coalesce(struct net_device *dev, revert_values: /* restore previous values */ - for_each_cpu(cpu, cpus) { + for_each_cpu_and(cpu, cpus, cpu_online_mask) { if (!needs_revert[cpu]) continue; portal = qman_get_affine_portal(cpu); -- 2.1.0