Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3729635pxb; Mon, 24 Jan 2022 16:32:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJxyjlskG5h+BYZkfe6Tw7yuRng/cQEk2B/sDcrz2J6+YfOBnwCgbSHWJLf7aeiIUlfuIZUa X-Received: by 2002:a17:90a:65c7:: with SMTP id i7mr845327pjs.116.1643070743507; Mon, 24 Jan 2022 16:32:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643070743; cv=none; d=google.com; s=arc-20160816; b=fZlH5A03X4TP3LMQpWvH+7fAMjxJOnSyCMAlqT/ZdNw6ohRaD5HPeNvR/bS2XG1/ON vi3eA5FIWVzRzmMEGQHYVfjjEaMKOB9rwjGMKP4Ni2l8Wg6a9PiJWxHTD0bdJv7HKFUj M+WNM+jNL050seaBeuMExxHDDmO0vGFxJjfVRm+VQik6pbmbOs0D7e4ZLD0SAc3ETnf2 bBo5DdKu3p2uOVSNd/C/9KXf5a7Aws+EFc3ulyrt1GhDALCL481cZjKhReWXduR+znO7 TLJJfeX8AR0jaj9VSbfj3fLg6/bl4sHUYW+w0O8JPleJKmUzUnqtPjcBz1mknl0S3Iv1 f2wg== 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=isyWA/Klb6lmt/GyRoOTYVTEe0b764CNKf0sXbw+s9w=; b=QjmwhCQGGeyAB6cd0R5B+muuG6KVMO2eGfoNtla8/yuFsEKM2mE5IV2jZTIr+zFvNH K8Uu+aeJuIpiDbIO/MG4PmpfMHnp76KM9Qi3vdmefCT54J8OJVdDqXug5RUCepojfMUU 0hpIXIAtDLzS9F5ZP6BP7d247XjuPXSfX1Jrx/9d2LmFPN9hQMdlLvn82L7/cjMsrQrY 34H9yegLPzj51fVw5/lVPxkN4f3mt9RN6IywpAl9UPP+FnafHqmYIPMauCaz6ZnIYC42 G2vtKWKWJ4PspKF+uHJVhS8uxKafDrSr2faq6dT450mEkgniww5g5C0umYI2CcXBm6oI Cn2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=V2UAReNX; 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 d1si1114604plh.437.2022.01.24.16.32.11; Mon, 24 Jan 2022 16:32:23 -0800 (PST) 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=V2UAReNX; 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 S3410636AbiAYA3k (ORCPT + 99 others); Mon, 24 Jan 2022 19:29:40 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:45920 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1454930AbiAXVeP (ORCPT ); Mon, 24 Jan 2022 16:34:15 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id CC226B81257; Mon, 24 Jan 2022 21:34:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 02FBDC340E4; Mon, 24 Jan 2022 21:34:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643060044; bh=PuPDInC1r/GLcY+Vi+sQObVdNBoB1cbEQ8SKVAlGUU0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V2UAReNXan+TmlkIrx4VZj6ZYo1NdeshC46cTh6x5ry9jtGg2X5XaRxHcTag4njXk Z6FbmBmsNK/bZbClHDmajnH4F3WZrJQ27h2zLp3WLKEx1xi5afJ3BXd++RQ9akBgKg Yms/TgNhwfs9dQl4DXdgLsDdoLOScyx3zo7LFJf4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wesley Sheng , Kelvin Cao , Jon Mason , Sasha Levin Subject: [PATCH 5.16 0820/1039] ntb_hw_switchtec: Fix bug with more than 32 partitions Date: Mon, 24 Jan 2022 19:43:29 +0100 Message-Id: <20220124184152.866189101@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184125.121143506@linuxfoundation.org> References: <20220124184125.121143506@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: Wesley Sheng [ Upstream commit 7ff351c86b6b258f387502ab2c9b9d04f82c1c3d ] Switchtec could support as mush as 48 partitions, but ffs & fls are for 32 bit argument, in case of partition index larger than 31, the current code could not parse the peer partition index correctly. Change to the 64 bit version __ffs64 & fls64 accordingly to fix this bug. Fixes: 3df54c870f52 ("ntb_hw_switchtec: Allow using Switchtec NTB in multi-partition setups") Signed-off-by: Wesley Sheng Signed-off-by: Kelvin Cao Signed-off-by: Jon Mason Signed-off-by: Sasha Levin --- drivers/ntb/hw/mscc/ntb_hw_switchtec.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/ntb/hw/mscc/ntb_hw_switchtec.c b/drivers/ntb/hw/mscc/ntb_hw_switchtec.c index 6603c77c0a848..ec9cb6c81edae 100644 --- a/drivers/ntb/hw/mscc/ntb_hw_switchtec.c +++ b/drivers/ntb/hw/mscc/ntb_hw_switchtec.c @@ -840,7 +840,6 @@ static int switchtec_ntb_init_sndev(struct switchtec_ntb *sndev) u64 tpart_vec; int self; u64 part_map; - int bit; sndev->ntb.pdev = sndev->stdev->pdev; sndev->ntb.topo = NTB_TOPO_SWITCH; @@ -861,29 +860,28 @@ static int switchtec_ntb_init_sndev(struct switchtec_ntb *sndev) part_map = ioread64(&sndev->mmio_ntb->ep_map); part_map &= ~(1 << sndev->self_partition); - if (!ffs(tpart_vec)) { + if (!tpart_vec) { if (sndev->stdev->partition_count != 2) { dev_err(&sndev->stdev->dev, "ntb target partition not defined\n"); return -ENODEV; } - bit = ffs(part_map); - if (!bit) { + if (!part_map) { dev_err(&sndev->stdev->dev, "peer partition is not NT partition\n"); return -ENODEV; } - sndev->peer_partition = bit - 1; + sndev->peer_partition = __ffs64(part_map); } else { - if (ffs(tpart_vec) != fls(tpart_vec)) { + if (__ffs64(tpart_vec) != (fls64(tpart_vec) - 1)) { dev_err(&sndev->stdev->dev, "ntb driver only supports 1 pair of 1-1 ntb mapping\n"); return -ENODEV; } - sndev->peer_partition = ffs(tpart_vec) - 1; + sndev->peer_partition = __ffs64(tpart_vec); if (!(part_map & (1ULL << sndev->peer_partition))) { dev_err(&sndev->stdev->dev, "ntb target partition is not NT partition\n"); -- 2.34.1