ntb.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: Kelvin Cao <kelvin.cao@microchip.com>
To: Kurt Schwemmer <kurt.schwemmer@microsemi.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Jon Mason <jdmason@kudzu.us>, Dave Jiang <dave.jiang@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	linux-pci@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-kernel@vger.kernel.org
Cc: Kelvin Cao <kelvin.cao@microchip.com>,
	kelvincao@outlook.com, Jeremy Pallotta <jmpallotta@gmail.com>
Subject: [PATCH 2/6] ntb_hw_switchtec: Fix bug with more than 32 partitions
Date: Thu, 23 Dec 2021 17:23:30 -0800	[thread overview]
Message-ID: <20211224012334.89173-3-kelvin.cao@microchip.com> (raw)
In-Reply-To: <20211224012334.89173-1-kelvin.cao@microchip.com>

From: Wesley Sheng <wesley.sheng@microchip.com>

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 <wesley.sheng@microchip.com>
Signed-off-by: Kelvin Cao <kelvin.cao@microchip.com>
---
 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 6603c77c0a84..ec9cb6c81eda 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.25.1


  parent reply	other threads:[~2021-12-24  1:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-24  1:23 [PATCH 0/6] Switchtec NTB Fixes and Improvements Kelvin Cao
2021-12-24  1:23 ` [PATCH 1/6] ntb_hw_switchtec: Fix pff ioread to read into mmio_part_cfg_all Kelvin Cao
2021-12-24  1:23 ` Kelvin Cao [this message]
2021-12-24  1:23 ` [PATCH 3/6] ntb_hw_switchtec: AND with the part_map for a valid tpart_vec Kelvin Cao
2021-12-24  1:23 ` [PATCH 4/6] ntb_hw_switchtec: Update the way of getting VEP instance ID Kelvin Cao
2021-12-24  1:23 ` [PATCH 5/6] ntb_hw_switchtec: Remove code for disabling ID protection Kelvin Cao
2021-12-24  1:23 ` [PATCH 6/6] ntb_hw_switchtec: Fix a minor issue in config_req_id_table() Kelvin Cao
2022-01-04 16:55 ` [PATCH 0/6] Switchtec NTB Fixes and Improvements Logan Gunthorpe
2022-01-04 21:28   ` Kelvin.Cao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211224012334.89173-3-kelvin.cao@microchip.com \
    --to=kelvin.cao@microchip.com \
    --cc=allenbh@gmail.com \
    --cc=dave.jiang@intel.com \
    --cc=jdmason@kudzu.us \
    --cc=jmpallotta@gmail.com \
    --cc=kelvincao@outlook.com \
    --cc=kurt.schwemmer@microsemi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-ntb@googlegroups.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=logang@deltatee.com \
    --subject='Re: [PATCH 2/6] ntb_hw_switchtec: Fix bug with more than 32 partitions' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).